본문 바로가기
소켓프로그래밍

[C/C++] 소켓 프로그래밍 - 서버와 클라이언트 (1)

by 여름코딩 2024. 6. 25.
반응형

소켓 활용 예시

요즘엔 카카오톡, 라인 등의 메신저가 대두되고 있지만, 예전에는 인터넷 채팅 프로그램으로 1:1 채팅을 했었다. 그 중에서 8~90년대 생이 들어보았을 법한 프로그램 중 유명한 것은 '버디버디'이다. (예전에는 이것도 파란색 화면으로 되어있는 구버전이 있었다고 들었다.) 이것을 통틀어 채팅 프로그램이라고 할 수 있는데, 클라이언트와 서버 구조로 되어있다.

 

클라이언트와 서버는 각자 '소켓'을 열고 닫을 수 있으며 이것을 통로로써 데이터를 주고 받는다. 채팅 프로그램 외에도 인터넷 서버에서 강의를 다운로드 받거나 웹 서핑을 하는 것에 소켓 프로그래밍이 적용되었다. 오늘은 소켓이 무엇인지 알아보고, 소켓을 활용한 통신에서 서버와 클라이언트가 어떤 역할을 하는지 알아보자.


 


소켓이란?

소켓은 통신 과정의 정점(End-Point)에 위치한다. 데이터를 전달하고 받을 때 가장 먼저 통로로써 활용되기 때문이다. 서버와 클라이언트는 통신에 앞서 각자 자신의 소켓을 생성하고, 통신이 종료되면 다시 소켓을 닫아준다.

 

소켓 통신을 하기 위해서는 IP주소와 Port 정가 필요하다. 컴퓨터에서는 여러 가지 프로세스가 실행되기 때문에 구분되지 않고 서버에 접속을 시도하면, 네트워크는 혼선을 빚을 것이다. 그래서 소켓을 생성한 뒤 서버는 bind()를 통해 port 번호를 할당하고, 해당 port 번호로 접속을 시도한 클라이언트에 한해서 접속을 허용한다. 

 

처음 소켓을 생성했을 때 소켓 그 자체로는 통신에 대한 정보를 내포하지 않는다. bind()를 통해 port를 할당하고 listen(), accpet() 과정을 거쳐 클라이언트의 connect() 요청을 수락해야만 통신을 시작하게 된다. 그러므로 소켓은 통신을 위해 가장 먼저 열고 가장 마지막에 닫는 '출입' 이다.

서버와 클라이언트

위에서 이야기했듯, 서버와 클라이언트는 데이터를 주고 받기 위해 소켓을 생성하고 통신을 한 뒤 다시 소켓을 닫는다. 그럼 어떤 차이가 있는걸까?


서버 (Server)

  • 서비스를 제공하는 컴퓨터
  • 서비스 종류에 따라서 웹 서버, 파일 서버, 프록시 서버, 데이터베이스 서버 등이 있다

클라이언트 (Client)

  • 서비스를 요청하는 컴퓨터

단어 그대로의 의미이다. 피자 전문점에 갔다고 가정을 해보자. 피자를 제공하는 서버(Server)는 고객(Client)의 주문을 받아 알맞은 상품을 제공한다. 이처럼 소켓 프로그래밍에서 활용하는 클라이언트와 서버의 개념도 서비스를 요청하고 제공하는 관계이다. 다만, 서버와 클라이언트를 '컴퓨터'라고 표현했다고해서 모니터, 본체, 마우스, 키보드 등이 있는 컴퓨터에 한정하는게 아니라, 서버는 요청받은 데이터를 제공할 수 있는 서비스 제공하는 역할, 클라이언트는 서비스 요청하는 역할 정도로 이해하는게 좋겠다.

서버와 클라이언트 역할 예시

어플 사용을 예시로 서버와 클라이언트의 역할을 알아보자. 대학생 여름이가 학식 어플에 들어가서 오늘의 점심 메뉴를 검색했다. 그럼 여름이의 스마트폰 어플이 클라이언트로써 서버에 오늘의 점심 메뉴를 요청한 것이고, 서버는 점심 메뉴 데이터를 검색해서 여름이의 학식 어플에 제공한다. 정리하자면, 클라이언트와 서버는 정보를 요청하고 제공하는 관계이다.

 

다음으로 서버와 클라이언트가 소켓을 생성하고 데이터 송수신 후 다시 소켓을 닫기까지의 과정을 알아보자.

 

https://fantasycodingworld.tistory.com/121

 

[C/C++] 소켓 프로그래밍 - 서버와 클라이언트 (2)

서버와 클라이언트의 의미저번 시간에는 서버와 클라이언트의 의미에 대해서 알아보았다. 서버는 서비스를 제공하는 컴퓨터로 어떤 서비스를 제공하느냐에 따라서 메일 서버, 데이터베이스 서

fantasycodingworld.tistory.com

 

반응형