Introduce
한 어플에서 채팅을 구현하면서 공부한 Socket과 WebSocket에 대해 소개하려고 합니다.
우선 Socket과 WebSocket 이 둘은 비슷해 보이지만 엄연히 다른 개념입니다.
이 시간을 통해 그 차이를 명확하게 인지하고, 각각에 대해 이해하는 시간이 되었으면 합니다.
Socket이 무엇인가요?
Socket을 개념적으로 살펴보면,
Socket은 동일한 장치에서 실행되는 두 프로세스 또는 동일한 네트워크에 연결된 다른 Device 간에 통신을 제공하는 데 사용되는 프로세스입니다.
그러면 Socket이 어떻게 다른 Device 간의 통신을 가능하게 하나요?
Socket의 기능 중에 하나는 Device 식별입니다.
그리고 Device를 식별하기 위해서 IP Address와 Port Number를 갖고 있습니다.
IP Address는 Device를 고유하게 식별하고, Port Number는 Socket에 연결된 응용 프로그램의 Port를 식별합니다.
Socket은 Device를 구분하여 특정 위치로 연결할 수 있는 통로를 만듭니다.
Socket의 구분
Socket은 연결을 수동적으로 기다리느냐, 능동적으로 연결하느냐에 따라 Server Socket과 Client Socket으로 구분할 수 있습니다.
결국 기능상에 둘로 나눈 것일 뿐, 둘 다 Socket입니다.
Socket Programming
Socket을 이용해 만든 통신 프로그래밍을 Socket Programming이라고 합니다.
다음은 Socket Programming의 Flow Chart입니다.
Server
Client Socket 측에서의 연결 요청을 대기하고 연결요청이 오면 Socket을 생성하여 통신을 가능하게 합니다.
- socket() 로 Socket을 생성합니다. 이 Socket에서는 연결 대상에 대한 정보가 들어있지 않습니다.
- bind() 로 Socket과 Port Number를 Bind 합니다.
컴퓨터는 여러 프로세스가 돌아가고 있고, 특정 프로세스로 보내기 위해서는 Socket과 Port Number를 Bind 해야합니다. - listen() 로 Client가 연결 요청이 올 때 까지 대기하고 있고, 연결 요청이 오면 대기 상태를 종료합니다.
- accept() 는 Socket간의 연결을 하는 곳입니다.
Client에서 연결 요청이 오면 새로운 Socket을 생성하고, 이 Socket을 Client Socket과 연결시킵니다.
이후에는 다른 연결 요청을 대기하거나 Server Socket을 Close() 합니다. - send() / recv() 에서는 send()로 요청을 보내고, recv()로 요청을 받아야 끝이 납니다.
송신할 떄는 데이터를 언제, 얼마나 보낼 것인가에 대한 정보가 들어있습니다.
수신할 때는 데이터를 언제, 얼마나 올지 모르기 때문에 별도의 Thread에서 실행합니다. - close() 데이터 송수신이 끝나면 소켓을 닫습니다.
Client
Server Socket에 연결요청을 하고, 데이터의 송수신이 일어납니다.
- socket() 로 Socket을 생성합니다. 이 Socket에서는 연결 대상에 대한 정보가 들어있지 않습니다.
- connect() 로 Server Socket에 연결 요청을 하고 결과가 들어오면 connect에 대한 실행이 종료합니다.
연결요청을 할 때 IP Address와 Port Number를 실어서 보냅니다. - send() / recv() 에서는 send()로 요청을 보내고, recv()로 요청을 받아야 끝이 납니다.
송신할 떄는 데이터를 언제, 얼마나 보낼 것인가에 대한 정보가 들어있습니다.
수신할 때는 데이터를 언제, 얼마나 올지 모르기 때문에 별도의 Thread에서 실행합니다. - close() 데이터 송수신이 끝나면 소켓을 닫습니다.
소켓의 종류
소켓의 종류에는 TCP와 UDP가 있습니다. TCP와 UDP에 대한 특징과 설명은 추후에 다루겠습니다.
Next
다음시간에는 WebSocket에 대해 알아보겠습니다.
[Reference]
- Wan-Ki Koh, Seok-Yong Koh, Je-seok Kim. (2013). SOCKET-based mobile SNS interlocking System Design and Implementation. Journal of Digital Convergence, 11(8), 367-373.
- D. S. Kolluru and P. Bhaskara Reddy, "IP to IP Calling Through Socket Programming," 2021 Asian Conference on Innovation in Technology (ASIANCON), 2021, pp. 1-7, doi: 10.1109/ASIANCON51346.2021.9544997.