본문 바로가기

네트워크6

WebSocket 채팅 클라이언트 구현기 💬 채팅 구현 내용 ■ 일단 stomp의 기본 메소드 몇 가지만 알아보도록 하자. 참고로 stomp.js의 최신 버전은 version 5인데, 이번에 우리 팀이 사용한 버전은 version 4. - client or over: 해당하는 URL에 존재하는 STOMP 서버에 연결된 WebSocket 클라이언트를 생성한다. SockJS같은 별도의 솔루션을 이용하고자 하면 over 메소드를, 그렇지 않다면 client 메소드를 사용해주면 되는 듯. - connect: STOMP 브로커와의 연결을 열어줄 때 사용하는 메소드이다. 웹소켓이 연결되었을 때 처리해주고자 하는 동작들을 콜백 함수로 넣어줄 수 있다. - subscribe: 특정 STOMP 브로커의 location을 구독한다. 구독한 location에서 메.. 2021. 8. 20.
채팅을 위한 프론트의 WebSocket 사전 공부 HTTP(HyperText Transfer Protocol) - HTTP는 단방향 통신 - 서버 프로세스는 클라이언트보다 먼저 실행되어 대기하고, 클라이언트의 요청에 항상 응답할 준비를 하고 있다. - 클라이언트의 요청이 선행되어야만 서버의 응답이 뒤따라올 수 있는 방식 📌 HTTP로 채팅을 구현하려면? 구름EDU - 모두를 위한 맞춤형 IT교육 구름EDU는 모두를 위한 맞춤형 IT교육 플랫폼입니다. 개인/학교/기업 및 기관 별 최적화된 IT교육 솔루션을 경험해보세요. 기초부터 실무 프로그래밍 교육, 전국 초중고/대학교 온라인 강의, 기업/ edu.goorm.io 1. Polling 방식 - 클라이언트가 서버에 일정한 주기로 요청을 보내고 응답을 받는 방식 - 가장 기본적인 기법. 클라이언트와 서버 모두.. 2021. 8. 19.
웹 소켓 연결 끊김 감지하기 Summary 클라이언트A가 서버와 소켓 연결을 끊을 경우(Disconnect) 서버에 해당 소식을 전달하고, 소식을 접한 서버가 나머지 클라이언트들에게 클라이언트A의 연결이 끊겼음을(퇴장했음을) 알리는 형태를 구성하고 싶었다. 사용자가 Disconnect 버튼을 직접 눌러서 서버와 소켓 연결을 끊을 경우엔 연결이 끊기기 직전 서버 쪽으로 알림 요청을 먼저 보내는 방법이 채택 가능하겠으나, 사용자들은 브라우저의 탭을 닫는 등 (개발자 기준)비정상적인 방법을 많이 이용한다. 그래서 우리는 Disconnect 버튼과 관계없이, 클라이언트와 연결이 끊기면 서버에서 이를 감지해내는 방법을 찾아야 했다. @EventListener + SessionDisconnectEvent @Configuration public.. 2021. 7. 25.
private IP 만으론 인터넷 연결이 불가능한가? AWS EC2 인스턴스 4개를 이용해 서비스 인프라를 구축하려 할 때, 루트가 "WAS랑 DB한테 public IP를 할당할 필요가 있어?" 라는 이야기를 꺼냈다. 어차피 클라이언트와 통신을 주고 받아야하는 Web Server(Reverse Proxy)와 우리가 직접 접속해야 할 Bastion은 public IP가 필수로 필요하지만, 그 외에 같은 IP 대역을 사용하고 있어서 private IP로 통신이 가능한 WAS와 DB한테는 public IP를 할당할 필요가 없다는 말이었다. 좋은 의견인 것 같아 결국 WAS, DataBase 인스턴스의 public IP를 할당하지 않았고(private IP만 남긴 상황), Bastion을 통해 ssh 연결을 성공했다. 그런데 몇 가지 설정을 진행하던 중에 sudo.. 2021. 7. 24.
소켓 기본 개념 정리 babble 프로젝트의 가장 핵심이 되는 채팅방을 구현하기 앞서, 소켓에 대한 기본 개념을 되짚어 보고자 했다. Network IPC: Socket pipe, FIFO, message queue, semaphore, shared memory 등은 하나의 컴퓨터, 단말 내부의 프로세스 간 통신(Inter Process Communication) 방법이다. socket는 서로 다른 컴퓨터, 단말의 프로세스 간 통신을 지원하는 방법 중 하나다. 통신의 종점을 추상화해둔 것이다. 즉, 소켓은 서로 다른 단말 간의 통신이라기보다 서로 다른 단말의 애플리케이션 간 통신을 돕는 API라고 생각하면 된다. 운영체제에서 Socket 프로세스가 파일 디스크립터를 이용해 파일에 접근하는 방법과 동일하게, 소켓 디스크립터를 .. 2021. 7. 24.
WebSocket 시작하기 클라이언트가 서버에 갱신된 정보를 어떻게 빠르게 가져올 수 있을까? 이런 고민을 한 이유: HTTP의 한계 무상태성: 클라이언트의 상태를 기억하지 않기 때문에 클라이언트에게 갱신된 정보를 알려줄 수 없다. 비연결성: 1개의 리퀘스트로 부터 응답을 하면 연결이 끊어진다. Polling 주기적으로 클라이언트가 request를 보내 새로운 정보를 갱신하는 방법 장점 구현이 단순하다. 단점 주기적으로 HTTP 연결을 맺고 끊는게 상당한 클라이언트와 서버 측에서 모두 큰 부담이 된다. 이를 어느 정도 해결하기 위해 전송하는 데이터 양을 줄이기 위해 ajax를 사용한다. Long Polling(HTTP/1.1) 클라이언트와 서버가 계속 연결을 맺고 끊는 것을 줄이기 위해서 만든 방법. 일단 클라이언트가 서버로 HT.. 2021. 7. 20.