소켓은 실시간 통신의 기술이다.
우리는 그저 Socket은 실시간 통신을 위해서 사용하는 기술이다! 라고만 알고 있지만, 이번 기회에 더욱 정확하게 공부를 해 보자 !
Socket이라는 개념이 나오기 전 어떠한 통신 기술이 존재했을까?
바로, http를 이용한 실시간 통신 방식 COMET 을 이용했는데 이는 무엇일까?
COMET은 Client로 유의미한 메시지를 전달할 때 까지 HTTP응답을 지연시키는 기술이다.
서버가 클라이언트의 요청에 응답할 때 응답을 “늘어뜨리는" 방법을 이용해긴 시간동안 브라우저가 접속을 끊지 않고 서버의 응답을 대기하도록 만드는것이다.
Long polling과 유사한 기능을 가진다.
Long Polling
서버측에서 단순히 클라이언트 측에 대한 연결을 길게 유지함으로, 지정 기간 내 정보가 있으면 응답을 전달하는 방식이다. 메시지 양이 많으면 Polling과 차이가 많이 나지 않으며 지정한 시간이 끊기면 다시 요청하는 말 그대로 Long한Polling이다.
즉, HTTP의 Stateless를 보안하기위해 만들어진 방법이라고 보면 좀 편할것같다.
통신을 하는동안 서버와 연결을 끊지 않고, 계속해서 데이터를 주고받는것이다.
소켓은 떨어져 있는 호스트를 이어주는 도구로써 인터페이스의 역하을 하는데, 주고받을 수 있는 구조체로 소켓을 통해 통로가 만들어진다. 이러한 소켓은 역할에 따라 서버 소켓, 클라이언트 소켓으로 구분이 된다.
두 개의 시스템 혹은 프로세스가 소켓을 통해 네트워크 연결을 만들기 위해서는 어느 한곳에서 연결을 요청해야 한다. 이 때 IP주소와 포트 번호로 식별할 대상에게 네트워크 연결을 하고싶다는 요청을 하는 것이다.
하지만, 무작적 요청을 한다고 해서 연결이 채결되는것은 아니다. 수신측에서 어떤 연결요청을 받아들일지 미리 시스템에 등록을 하고, 요청이 수신되었을 때 요청을 처리할 수 있도록 해야한다.
메세지를 예시로 들어보자.
우리가 채팅방을 하나 만들려고 한다. 그저 클라이언트가 “서버야 소켓연결해줘"라고 했을때 서버는 “응 그래" 라고 답이 올 수 있을까? 서버에 소켓통신과 관련된 기능이 구현이 되어있다면 가능할것이다. 하지만, 구현이 되어있지 않는다면 안된다고 할 것이다.
소켓의 흐름에 대해 정리가 너무 잘 된 이미지이다.