📚 cs

개발자 기초 cs - 컴퓨터 네트워크 기초

dev.daisy 2025. 8. 25. 21:26
이번 학습을 통해 클라이언트–서버 구조, OSI 7계층, TCP/UDP, HTTPS, 캐시 등 핵심 네트워크 개념을 정리하면서 단순히 정의만 외우는 것이 아니라, 실제 서비스 상황에서 어떤 문제가 생기고 이를 어떻게 해결할 수 있는지를 이해할 수 있었습니다. 
특히 TCP/UDP 차이, HTTPS의 대칭·비대칭키 활용, HTTP 캐시 동작 원리 등을 정리하면서 실무와 바로 연결되는 부분이 많다는 걸 깨달았고, 앞으로는 작은 용어 하나도 원리와 맥락을 함께 고민하는 습관이 중요하다는 점을 다시 느꼈습니다.

 

클라이언트 - 서버

클라이언트–서버 구조는 네트워크에서 요청을 보내는 주체(클라이언트)요청을 처리하는 주체(서버)가 역할을 나누어 통신하는 모델입니다.

 

클라이언트는 브라우저, 앱처럼 사용자가 직접 사용하는 프로그램이고, 서버는 데이터 저장 · 처리 · 응답을 담당하는 시스템입니다. 이 구조 덕분에 클라이언트는 UI와 사용자 입력에 집중하고, 서버는 데이터와 비즈니스 로직에 집중할 수 있습니다. 

 

클라이언트 - 서버 구조의 장점은?
클라이언트 - 서버 구조로 나누게 되면 역할을 분리할 수 있다는 장점이 있습니다. 클라이언트는 UI나 사용자 경험에 집중할 수 있고, 서버는 데이터 처리나 비즈니스 로직에 집중할 수 있어 개발과 유지보수 측면에서 좋습니다. 또한 중요한 데이터와 로직은 서버에서만 존재하면 보안 측면에서도 안전한 개발이 가능합니다.

 

서버가 단일 장애 지점(Single Point of Failure, SPOF)이 된다면 어떻게 해결할 수 있나요?
단일 장애 지점이란 시스템이나 네트워크의 한 부분이 고장하면 전체 시스템이 멈추는 취약점을 의미합니다. 주로 의존성이 큰 경우에 발생하므로 다음과 같은 방법을 사용해 해결할 수 있습니다.

1) 로드 밸런싱
서버를 여러 대 두고, 로드 밸런서가 클라이언트 요청을 적절히 분산 처리해서 한 서버가 다운되어도 다른 서버가 요청을 이어받아 서비스 중단을 방지할 수 있습니다. ex) Nginx, GCP Load Balancer
2) 수평 확장
서버를 여러 대 두고 트래픽 증가나 장애에 대응합니다.
3) CDN 활용
정적 리소스는 CDN에 분산 배치해 서버가 일시적으로 다운되더라도 기본 콘텐츠는 사용자에게 계속 제공할 수 있습니다.

 


OSI 7계층

OSI 7계층은 네트워크 통신 과정을 7단계로 나눈 모델입니다.

이렇게 나누면 문제 발생 시 특정 계층만 점검 후 수정할 수 있어 유지보수가 용이합니다.

  1. 물리 계층 (Physical Layer)
    전기적 신호를 주고받는 물리 장비로 데이터의 내용은 관여하지 않고, 단순히 신호 전송만 담당합니다.
    • 전송 단위: 비트(Bit)
    • 장비: 케이블, 허브
  2. 데이터 링크 계층 (Data Link Layer)
    오류 제어 · 흐름 제어를 통해 안정적 전송을 보장하고 MAC 주소 기반 통신을 수행합니다.
    • 전송 단위: 프레임(Frame)
    • 장비: 스위치, 브릿지
  3. 네트워크 계층 (Network Layer)
    IP 주소와 라우팅을 통해 목적지까지 최적 경로를 설정하고 패킷을 전달합니다.
    • 전송 단위: 패킷(Packet)
  4. 전송 계층 (Transport Layer)
    송수신 간 신뢰성 있는 전송을 보장합니다. 대표적인 프로토콜로는 TCP, UDP가 있으며 오류 검출 · 복구, 포트 번호를 사용해 어플리케이션을 구분합니다.
    • 전송 단위: 세그먼트(Segment)
    • 대표 프로토콜: TCP, UDP
  5. 세션 계층 (Session Layer)
    응용 간의 연결(세션)을 만들고 유지하며 끊는 역할을 합니다. 통신 동기화를 관리하는 계층입니다.

  6. 표현 계층 (Presentation Layer)
    데이터의 인코딩, 압축, 암호화를 담당하고 GIF, JPEG, ASCII 등 포맷 처리를 수행합니다.

  7. 응용 계층 (Application Layer)
    사용자와 가장 가까운 계층으로, 웹, 이메일, 파일 전송 등 직접 사용하는 서비스가 이 계층에서 동작합니다.
    • 대표 프로토콜: HTTP, FTP, SMTP

TCP (Transmission Control Protocol)

  • TCP는 연결 지향적이며 신뢰성을 보장하는 전송 계층 프로토콜입니다. 웹 서비스(HTTP/HTTPS), 이메일, 은행 거래와 같이 반드시 정확성이 필요한 통신일 때 사용됩니다.
  • 패킷이 순서대로 도착했는지, 손실은 없는지를 확인하고 필요하면 재전송하여 데이터를 안전하게 전달합니다.

 3-Way Handshake

TCP 연결을 맺는 과정입니다. 서로 준비가 되었음을 확인하고 나서야 데이터 전송을 시작합니다.

  1. 클라이언트 → 서버 : SYN (연결 요청)
  2. 서버 → 클라이언트 : SYN + ACK (요청 수락 + 나도 연결 요청)
  3. 클라이언트 → 서버 : ACK (수락 응답)

이 과정을 거치면 연결이 ESTABLISHED 상태가 되어 데이터 통신이 가능합니다.


TCP의 전송 제어 기법

1) 흐름제어 (Flow Control)

 

수신자의 처리 속도보다 빠르게 보내지 않도록, 송신자가 전송량을 조절하는 기능입니다.

대표적으로 슬라이딩 윈도우(Sliding Window) 방식을 사용합니다.

슬라이딩 윈도우:
여러 패킷을 연속 전송하고, ACK가 도착할 때마다 전송 가능한 범위를 앞으로 “슬라이딩”시켜 효율을 높이는 방식입니다.

 

2) 혼잡제어 (Congestion Control)

 

네트워크 혼잡으로 패킷이 손실되면 오히려 재전송이 늘어나 혼잡이 심해질 수 있습니다.

이를 막기 위해 송신자는 네트워크 상태를 감지하여 전송 속도를 줄였다가, 다시 늘려갑니다.

Slow Start:
처음에는 소량의 패킷만 보내고, ACK가 정상적으로 오면 전송량을 지수적으로 증가시킵니다. 네트워크 상태가 나쁘면 전송량을 줄입니다.

 

흐름 제어와 혼잡 제어의 차이점은? 대표적인 방법도 같이 설명해주세요.

흐름 제어는 송신자와 수신자 간 속도를 조절해주는 방식입니다. 송신자가 데이터를 너무 빨리 보낼 때 수신자가 처리를 못 하는 경우에 데이터 손실이 발생합니다. 따라서 이 때 수신자의 처리 능력에 맞춰서 전송량을 조절하는 방법으로 대표적인 방식으로는 Sliding Window가 있습니다.

혼잡 제어는 네트워크 혼잡 방지를 위한 방법으로 네트워크각 트래픽으로 혼잡한 경우에 패킷이 손실되고 재전송되는 과정에서 더 큰 혼란을 야기할 수 있기 때문에 네트워크 상태에 맞춰 전송 속도를 조절하기 위해 사용합니다.

UDP (User Datagram Protocol)

UDP는 비연결성, 비신뢰성 프로토콜로, 별도의 연결 설정이나 순서 확인 없이 데이터를 전송합니다.

TCP보다 훨씬 가볍고 빠르지만, 신뢰성을 보장하지 않습니다.

그 대신 실시간성이 중요한 서비스(스트리밍, 온라인 게임, 화상통화 등)에 활용됩니다.

 

TCP와 UDP의 차이점은 뭔가요? 온라인 게임 및 동영상 스트리밍, 은행 거래에 각각 어떤 프로토콜이 적합한지 설명해주세요.

먼저 TCP는 3-way-handshake를 사용하는 연결 지향형 프로토콜이기 때문에 데이터가 순차적으로 도착하는지 확인하는 신뢰성을 보장합니다. 속도는 느리지만 안정적이기 때문에 은행 거래나 이메일 전송 등에 사용합니다.
다음으로 UDP비연결형 프로토콜이기 때문에 패킷이 유실되거나 순서가 바뀌어도 그대로 전달하는 등 신뢰성을 보장하지 않습니다. 속도가 빠르다는 장점이 있어 온라인 게임이나 스트리밍 등 실시간성이 중요한 서비스에서 활용합니다.

 


CDN (Content Delivery Network)

CDN은 전 세계에 분산된 서버 네트워크를 통해, 사용자와 가까운 위치에서 콘텐츠를 제공하는 시스템입니다.

 

장점

  • 지연 시간(Latency) 감소 → 빠른 응답 속도
  • 서버 부하 분산 → 트래픽 폭주 방지
  • 안정성 향상 → 특정 서버 장애에도 서비스 유지

대표적으로 넷플릭스, 유튜브, 클라우드플레어 등이 CDN을 적극 활용합니다.


HTTP / HTTPS

1) HTTP(HyperText Transfer Protocol)

웹에서 클라이언트와 서버가 요청·응답을 주고받는 프로토콜, 암호화가 없어 보안에 취약합니다.

 

2) HTTPS(HyperText Transfer Protocol Secure)

HTTP에 TLS / SSL 암호화를 추가하여 기밀성 · 무결성 · 인증을 보장합니다.

→ HTTPS는 안전한 HTTP입니다.

 

HTTP와 HTTPS의 차이점에 대해 설명해주세요.

먼저 HTTP는 암호화되지 않는 평문으로 데이터를 주고받습니다. 따라서 기밀성, 무결성, 인증이 부족한 방법이지만 HTTPS는 HTTP에 TLS, SSL 계층을 추가해 암호화와 무결성, 인증 보장 측면에서 장점이 있습니다.

HTTP Method 요청의 종류

  • GET: 데이터 조회
  • POST: 데이터 생성
  • PUT: 전체 수정
  • PATCH: 부분 수정
  • DELETE: 데이터 삭제
  • HEAD: 헤더 정보만 요청
  • OPTIONS: 지원하는 메서드 확인

HTTP Header / Body 구조

  • Header: 요청/응답에 대한 메타데이터
    ex) Content-Type, Authorization, Cache-Control
  • Body: 실제 데이터(payload)
    ex) JSON, HTML, 이미지 파일

→ 헤더는 “데이터에 대한 설명서”, 바디는 “실제 데이터”라고 이해할 수 있습니다.


HTTP 상태 코드

HTTP 응답 결과를 알려주는 코드입니다.

  • 2xx (성공): 200 OK, 201 Created
  • 3xx (리다이렉션): 301 Moved Permanently, 302 Found, 304 Not Modified
  • 4xx (클라이언트 오류): 400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found
  • 5xx (서버 오류): 500 Internal Server Error, 502 Bad Gateway, 503 Service Unavailable

TLS / SSL

TLS(Transport Layer Security)와 SSL(Secure Socket Layer)은 데이터를 암호화하여 안전하게 전송하는 보안 프로토콜입니다.

 

역할

  • 기밀성(암호화)
  • 무결성(위·변조 방지)
  • 인증(서버/클라이언트 신원 확인)

대칭키 & 비대칭키 암호화 방식

  • 대칭키 암호화
    • 하나의 키로 암호화·복호화
    • 빠르지만 키 공유가 어려움
  • 비대칭키 암호화
    • 공개키–개인키 쌍 사용
    • 키 배포는 안전하지만 연산 속도가 느림

→ HTTPS는 비대칭키로 세션키 교환 후, 대칭키로 실제 데이터 암호화를 수행합니다. (속도와 보안성 둘 다 확보)

HTTPS는 왜 비대칭키와 대칭키를 모두 사용해야하나요?

1. 연결 초기 (handshake 단계) → 비대칭키 암호화 사용
서버는 공개키, 개인키를 가지고 있는데 클라이언트가 서버 공개키로 세션키를 암호화해 전달하면 서버는 개인키로 이를 복호화해서 둘만 공유하는 세션키를 확보합니다. 이 단계에서 안전한 키 교환 목적으로 비대칭키를 사용합니다.

2. 데이터 전송 단계 → 대칭키 암호화 사용
handshake로 공유한 세션키를 사용합니다. 모든 요청이나 응답 데이터는 이 세션키로 암호화와 복호화를 진행하고, 대칭키 암호화는 빠르고 효율적이어서 실시간 통신에 적합합니다.

 


HTTP Cache

자주 사용되는 데이터를 브라우저, 프록시, CDN 등에 저장해, 불필요한 네트워크 요청을 줄이고 속도를 높이는 기술입니다.

  • 주요 헤더
    • Cache-Control: 캐시 정책 (max-age, no-cache 등)
    • ETag: 리소스 버전 식별
    • Last-Modified: 최종 수정 시각

→ 캐시를 잘 활용하면 트래픽 절감 + 응답 속도 향상 두 마리 토끼를 잡을 수 있습니다.

HTTP Cache에서 Cache-Control, ETag, Last-Modified에 대해 각각 어떤 역할을 하는지 설명해주세요.

1. Cache-Control은 캐시 정책을 정의하는 헤더입니다. max-age=60으로 정의하면 60초동안만 캐시를 사용할 수 있는 것처럼 캐시를 어떻게, 얼마나 사용할지에 대한 규칙을 정의합니다.
2. ETag는 Entity Tag의 약자로 ID와 같은 리소스 버전 식별자입니다. 서버가 응답 시 ETag를 담아서 보내면 클라이언트는 다음 요청 시 ETag로 같은 데이터가 오면 304 Not Modefied, 다른 데이터가 오면 새 데이터를 내려주는 등 리소스 내용이 변경되었는지 여부를 판단합니다.
3. Last-Modified는 말 그대로 리소스가 언제 마지막으로 수정되었는지를 의미합니다.