소켓은 운영체제가 가지고 있는 물리적으로 연결되어있는 네트워크상의 다른 기계나 애플리케이션간 데이터 송수신 수단이다. 각 소켓은 IP주소와 포트번호를 가진다. 운영체제 뿐만 아니라 인터넷 네트워크 범위에서도 연결을 구축하는 도구로 사용된다.
소켓의 작동방식(운영체제, Stateful)
첫 연결을 구축할 때 IP주소와 포트번호를 통해 메인스레드 위에서 동작하는 소켓과 연결된다. 서로의 연결을 확인한 후, 호스트는 새로운 포트를 배정하고 새로운 스레드 위에 올려둔다. 클라이언트는 배정된 포트의 소켓과 통신을 주고받으며, 연결을 끊은 메인 스레드의 소켓은 새로운 클라이언트의 연결 요청을 기다린다.
소켓통신을 사용하면 스레드를 통해 연산이나 공간적 자원을 배정받아 동시다발적으로 작업을 수행할 수 있다. 하지만 새로 배정받은 스레드는 작업을 끝마치기 전 연결이 끊기지 않기 때문에 호스트에 과도한 부하가 발생할 수 있다.
소켓의 작동방식(HTTP, Stateless)
상기한 이유로, HTTP는 연결을 수시로 끊는 Stateless방식의 통신을 한다. HTTP는 TCP-IP를 기반으로 만들어진 문서를 전달하는 통신이다. 클라이언트의 특정 문서를 요청하는 요청이 HTTP방식을 통해 서버의 IP주소와 포트를 통해 전달되어 소켓연결이 구축되면, 서버는 문서를 전달하는 순간 연결을 끊는다.
HTTP통신에서 클라이언트가 원하는 데이터를 가진 주체가 언제나 서버이다. 그렇기 떄문에 서버와 클라이언트는 언제나 갑을관계로, 클라이언트가 원하는 데이터를 요청하는것을 시작으로 통신이 시작된다. 요청을 받는 서버는 요청에 담겨있는 클라이언트의 IP주소를 통해 데이터를 넘겨준다. 하지만 Stateless방식의 통신으로는 서버는 클라이언트의 요청이 먼저 오지 않는다면 클라이언트에 요청할 수 없다.
'Today I Learned > 개념 정리' 카테고리의 다른 글
Factory 패턴 (0) | 2022.04.13 |
---|---|
redirect, forward (0) | 2022.04.13 |
서블릿 (0) | 2022.04.12 |
URI, URL, URN (0) | 2022.04.12 |
API란? (0) | 2022.04.10 |