Sam Story

소켓(Socket) 통신 본문

개발지식

소켓(Socket) 통신

Sam H 2024. 2. 20. 18:03

 

소켓(Socket) 통신 이란?

소켓 통신에 대해 알아보기전에

먼저 소켓(socket)에 사전적 의미에 대해 알아보면

 

 

사전의 내용처럼 뭔가 꽃는 구멍 같은것을 연상하게 한다.

 

그렇다면 개발에서 쓰이는 socket은 어떤걸 의미하는가 하면

TCP/IP 기반 네트워크 통신에서 데이터 송신과 수신의 마지막 접점을 의미한다.

 

여기서 마지막 접점(Endpoint)는 IP 주소와 Port번호의 조합을 뜻하며 최종 목적지의 역할을 뜻한다.

 

TCP/IP는 인터넷에서 컴퓨터들끼리 서로 정보를 주고받는데 쓰이는 통신규칙(프로토콜)의 모음이다.

현재 수많은 프로그램들이 인터넷으로 통신하는데 있어 가장 기반이 된다.

 

이러한 소켓을 통해

서버 - 클라이언트간 데이터를 주고받는 양방향 연결 지향성 통신을

소켓 통신 이라고 한다.

 

소켓 통신은 언제 사용하고 왜 사용하는가?

소켓 통신의 사용처는 실시간으로 데이터를 주고받아야 하는 경우에 사용한다.

우리가 알고 있는 채팅이 흔한 예시이다.

 

그렇다면 왜 기존의 HTTP 통신이 아닌 소켓통신을 사용해야 하는가?

이에 대한 이유는 HTTP 통신방식의 한계를 보안하기 위해서이다.

 

HTTP 통신방식은

클라이언트의 요청이 있을때 서버가 응답하는 방식으로 서버가 응답 후 연결이 끊기는 단방향 통신이다.

 

반면에 소켓통신의 통신방식은

클라이언트와 서버 양쪽에서 서로에게 데이터 전달을 하는 방식으로 계속 연결을 유지하는 양방향 통신이다.

데이터 전달 후 연결이 끊어지는 것이 아니기 때문에 계속해서 연결을 유지하고 기본적으로 HTTP에 비해 더많은 리소스를 소모한다.

 

이러한 차이점 때문에

 

실시간 연결이 아닌 데이터 전달이 필요한 경우에만 요청을 보내는 경우에는 HTTP 통신을

클라이언트와 서버가 실시간으로 계속하여 데이터를 주고 받아야 하는 경우에는 소켓 통신을 사용한다.

 

소켓 통신의 흐름

 

기본적인 소켓 통신의 흐름은 위에 그림처럼 진행이된다.

 

클라이언트

1. 소켓 생성

2. 소켓 연결

3. 데이터를 주고 받는다.

4. 소켓을 닫아준다.

 

서버

1. 소켓 생성

2. 바인드를 해준다 (ip,port번호 설정)

3. listen 클라이언트 요청에 대기열을 만들어 몇개의 클라이언트를 대기시킬지 결정

4. 데이터를 주고 받는다

5. 소켓을 닫아준다.

 

기본적인 소켓 통신 관련내용을 정리해봤는데 실제 소켓 통신을 구현할 때에는 여러가지 예외처리나

특정 상황들에 대한 처리가 굉장히 어려웠던것 같다.

채팅 프로그램을 만들때에는 정보를 주고받을때에 대해서 HashMap이나 Split을 사용한 방법들도 있는데

추후에 기회가 된다면 간단한 채팅 프로그램을 만들어 포스팅 해봐야겠다.