[CSAPP 11장 완전 정복] 11.1 소켓 프로그래밍을 위한 클라이언트-서버 모델 개념 잡기

2025. 5. 1. 20:03·크래프톤 정글/컴퓨터구조(CSAPP)

소켓 프로그래밍을 위한 클라이언트-서버 모델 개념 잡기

이번 포스트에서는 CS:APP 11장의 첫걸음인 클라이언트-서버 모델에 대해 정리합니다. 소켓을 왜 써야 하는지, 서버는 어떤 방식으로 동작하는지, 전체 흐름을 한눈에 이해할 수 있도록 정리해 보았는데요. 본격적으로 소스 코드를 읽기 전에 이 구조를 머릿속에 그릴 수 있다면, line-by-line 분석이 훨씬 수월해질 것입니다.

 

 

클라이언트-서버 모델이란?

  • 서버(Server)
    • 서비스를 제공하는 프로그램
    • 클라이언트 요청을 수신하고 응답을 반환한다
  • 클라이언트(Client)
    • 서비스를 요청하는 프로그램
    • 사용자를 통해 능동적으로 실행된다

이 둘은 네트워크로 연결되며, 클라이언트가 요청을 보내면 이를 기다리고 있던 서버가 응답을 보내주는 비대칭적 관계입니다.

 

 

서버 구현 방식: 반복적 vs 동시적

  • 반복적 서버(Iterative Server)
    • 하나의 클라이언트 요청을 처리하고 나서야 다음 요청을 처리하는 순차적인 방식
    • 구현은 간단하지만 병목이 발생할 수 있다
  • 동시적 서버(Concurrent Server)
    • 여러 클라이언트의 요청들을 병렬로 처리하는 방식
    • 프로세스/스레드/이벤트 기반 등 다양하게 구현되며, 실제 서비스에서 필수적이다

 

서버와 클라이언트의 연결 절차

서버와 클라이언트의 연결 절차는 무전기를 통해 서로 소통을 하는 경우와도 같습니다.

클라이언트 측

  1. socket(): 소켓 생성
    • 무전기를 꺼내 전원을 켜는 작업 (통신 준비)
  2. connect(): 서버로 연결 요청
    • 특정 채널(서버의 IP와 포트 번호)에 연결 요청을 보내는 작업

서버 측

  1. socket(): 소켓 생성
    • 무전기를 꺼내 전원을 켜는 작업 (통신 준비)
  2. bind(): IP와 포트 지정
    • 무전기의 채널(IP와 포트 번호)을 맞추는 작업
  3. listen(): 연결 요청 대기
    • 해당 채널에서 누가 말을 걸어오는지 귀를 기울이기
  4. accept(): 클라이언트 연결 수락 (blocking)
    • 클라이언트가 연결 요청을 보내면, 이를 수락하고 연결 맺기

이후 read() / write() 또는 recv() / send()를 통해 통신하며, close()로 종료합니다.

 

 

왜 이 구조를 알아야 할까?

  • 상태 관리
    • HTTP처럼 매번 연결이 새롭게 생성되는 stateless 통신일지라도, 세션/쿠키 등으로 상태를 관리할 수 있다
  • 동시성 처리
    • 여러 클라이언트를 처리해야 하는 서버라면 반복적 방식으론 버티지 못한다
    • 이후 배우게 될 fork, 스레드, I/O multiplexing이 중요한 이유

 

마치면서

이번 포스트에서는 소켓 프로그래밍에 들어가기 전에 꼭 이해하고 넘어가야 할 클라이언트-서버 모델의 구조와 연결 흐름을 정리해 보았습니다. 이 개념을 잡고 나면, 이후 책에서 등장하는 socket(), connect(), accept() 같은 함수들이 왜 그런 순서로 호출되는지를 자연스럽게 이해할 수 있게 됩니다.

 

다음 편에서는 네트워크 계층 구조와 TCP/UDP의 차이, 그리고 우리가 다루게 될 계층이 어디까지인지 정리해보겠습니다. 감사합니다!

저작자표시 비영리 변경금지 (새창열림)

'크래프톤 정글 > 컴퓨터구조(CSAPP)' 카테고리의 다른 글

[CSAPP 11장 완전 정복] 11.3 IP, 포트, DNS, 바이트 순서까지, 실전 소켓 프로그래밍 개념 정리  (0) 2025.05.01
[CSAPP 11장 완전 정복] 11.2 소켓 프로그래밍을 위한 네트워크 구조 제대로 잡기  (0) 2025.05.01
[CSAPP 6장 완전 정복] 6.6~6.7 캐시가 프로그램 성능에 미치는 영향 및 6장 전체 요약  (0) 2025.04.30
[CSAPP 6장 완전 정복] 6.5 캐시 친화적인 코드 최적화 전략 알아보기  (0) 2025.04.30
[CSAPP 6장 완전 정복] 6.4 캐시 메모리 핵심 정리  (0) 2025.04.29
'크래프톤 정글/컴퓨터구조(CSAPP)' 카테고리의 다른 글
  • [CSAPP 11장 완전 정복] 11.3 IP, 포트, DNS, 바이트 순서까지, 실전 소켓 프로그래밍 개념 정리
  • [CSAPP 11장 완전 정복] 11.2 소켓 프로그래밍을 위한 네트워크 구조 제대로 잡기
  • [CSAPP 6장 완전 정복] 6.6~6.7 캐시가 프로그램 성능에 미치는 영향 및 6장 전체 요약
  • [CSAPP 6장 완전 정복] 6.5 캐시 친화적인 코드 최적화 전략 알아보기
그냥사람_
그냥사람_
IT 관련 포스팅을 합니다. 크래프톤 정글 8기 정경호
  • 그냥사람_
    그냥코딩
    그냥사람_
  • 전체
    오늘
    어제
    • 글 전체보기 N
      • 크래프톤 정글 N
        • 로드 투 정글(입학시험)
        • CS기초(키워드, 개념정리)
        • 컴퓨터구조(CSAPP)
        • Code 정글(C언어)
        • Equipped in 정글(나만무)
        • 마이 정글(WIL, 에세이) N
      • 자료구조&알고리즘
        • 자료구조
        • 알고리즘
      • 일상
  • 블로그 메뉴

    • 홈
  • 링크

    • Github
  • hELLO· Designed By정상우.v4.10.3
그냥사람_
[CSAPP 11장 완전 정복] 11.1 소켓 프로그래밍을 위한 클라이언트-서버 모델 개념 잡기
상단으로

티스토리툴바