미니프로젝트를 마치고, 오늘부터는 새롭게 클론 코딩에 들어갔다.
새로운 조원들과 전체적인 프레임과 api명세서를 짜고 기능을 나눴다.
저번주에 스프링 시큐리티에 이어서.... JWT로그인/회원가입 기능을 맡게되었다ㅠㅠ.. 주특기 심화주차때부터 JWT는 뭔가 너무 어렵고 복잡했던 존재라 건들기도 싫었는데 결국에는 하게되다니.. 이번주도 구글링 오지게 할 것 같다.
우리 조는 페이스북 클론코딩을 하기로 했는데, 로그인/회원가입 + CRUD + 채팅 기능을 구현하기로 했다. 과연 채팅기능을 잘 완성 할 수 있을지 조금 걱정이 되지만 그래도 해봐야지..(시간 관계상 안되면 과감히 뺄거다)
채팅 기능은 너무 생소해서 그를 구현하는 웹소켓 개념에 대해 알아야 할 것 같다.
웹소켓은 HTML5 표준 기술로, 사용자의 브라우저와 서버사이의 동적인 양방향 연결 채널을 구성. 웹소켓은 클라이언트가 접속 요청을 하고 웹 서버가 응답한 후 연결을 끊는 것이 아닌 Connection을 그대로 유지하고 클라이언트의 요청 없이도 데이터를 전송할 수 있는 프로토콜이다.
일반 Socket통신과 달리 HTTP 80 Port를 사용하므로 방화벽에 제약이 없으며 통상 Webcocket으로 불린다. 접속까지는 HTTP 포로토콜을 이용하고, 그 이후 통신은 자체적인 WebSocket 프로토콜로 통신하게 된다. Websocket API를 통해 서버로 메세지를 보내고, 요청없이 응답을 받아오는 것이 가능. 웹소켓을 이용하면 하나의 HTTP접속으로 양방향 메시지를 자유롭게 주고 받을 수 있다.
채팅 입력을 한 문자마다 서버에 송신하고 싶은 경우처럼, 실시간을 추구하는 애플리케이션에서는 이 점이 성능 차이로 이어질 가능성이 크다.
장시간 접속을 전제로 하기때문에, 접속한 상태라면 클라이언트나 서버로부터 데이터 송신이 가능. 더불어 데이터의 송신과 수신에 각각 커넥션을 맺을 필요가 없어, 하나의 커넥션으로 데이터를 송수신 할 수 있다.
그리고 통신시에 지정되는 URL은 http://www.random.com/이 아니라, ws://www.random.com/과 같은 형식으로 지정됨.
웹소켓은 HTTP환경에서 전이중 통신(Full Duplex, 2-way communication)을 지원하기 위한 프로토콜이며 RFC6455에 정의되어 있다. HTTP 프로토콜에서 HandShaking을 완료한 후, HTTP로 동작하지만, HTTP와는 다른 방식으로 통신을 한다.
참고링크: 링크텍스트