Post

4주차 - 네트워크

4주차 - 네트워크

🌐 HTTP 상태 코드(Status Code) 핵심 요약


HTTP 상태 코드는 클라이언트가 보낸 요청에 대해 서버가 어떤 상태인지 알려주는 3자리 숫자이다. 각 앞자리에 따라 대략적인 상태를 파악할 수 있다.

1xx (Informational) : 정보 전달

서버가 요청을 받았으며, 해당 프로세스를 계속 진행 중임을 의미한다.

  • 100 Continue: 요청의 시작 부분이 서버에 수용되었으니, 나머지 요청을 계속 보내도 좋다는 것을 뜻한다.

2xx (Successful) : 성공

서버가 클라이언트의 요청을 성공적으로 수신하고 처리했음을 의미한다.

  • 200 OK: 요청이 성공적으로 완료되었음을 나타낸다.
  • 201 Created: 요청이 성공적이었으며, 그 결과로 새로운 리소스가 서버에 생성되었다.

3xx (Redirection) : 리다이렉션

요청을 완료하기 위해 클라이언트 측에서 추가적인 조치가 필요함을 의미한다.

  • 301 Moved Permanently: 요청한 리소스의 URI가 영구적으로 변경되었음을 의미한다.
    • 예: 서버가 /api에서 제공하던 서비스를 /api2로 변경했을 때, 기존 경로로 들어온 요청에 이 코드를 반환하여 새 주소를 안내한다.

4xx (Client Error) : 클라이언트 오류

클라이언트의 요청에 잘못된 문법이 있거나 요청을 처리할 수 없는 경우 발생한다.

  • 400 Bad Request: 서버가 클라이언트의 요청을 이해할 수 없음을 뜻한다. (잘못된 파라미터 등)
  • 401 Unauthorized: 해당 요청을 위해 클라이언트의 인증(ID/PW 등) 절차가 필요함을 의미한다.
  • 404 Not Found: 요청받은 콘텐츠를 서버에서 찾을 수 없음을 나타낸다. (잘못된 URL 경로 등)

5xx (Server Error) : 서버 오류

클라이언트의 요청은 유효했으나, 서버가 요청을 처리하는 과정에서 오류가 발생했음을 의미한다.

  • 500 Internal Server Error: 서버 내부의 문제로 인해 요청을 처리할 수 없는 범용적인 에러 상황이다.
  • 502 Bad Gateway: 게이트웨이 또는 프록시서버가 정해진 Timeout 시간동안 클라이언트의 요청을 처리하지 못함
  • 503 Service Unavailable: 서버가 현재 점검 중이거나 과부하로 인해 일시적으로 응답을 할 수 없는 상태이다.

HTTP 메서드


GET : 데이터 조회 (Retrieve)

주로 서버로부터 정보를 조회하기 위해 사용하며, 모든 요청 데이터가 URL에 노출되는 특징을 가진다.

  • 데이터 전달 방식: URL의 쿼리 스트링(Query String)을 통해 데이터를 전달한다.
    • 길이 제한: URL을 기반으로 하기 때문에 약 2,000자의 길이 제한이 존재한다.
  • 상태 코드: 요청 성공 시 일반적으로 200 OK를 반환한다.
  • 캐싱 가능: 동일한 요청에 대해 브라우저가 결과를 캐싱할 수 있어 응답 속도가 빠르다.
  • 보안성: URL에 파라미터가 그대로 노출되어 브라우저 기록(History)에 남으므로, 비밀번호 등 민감한 정보 전달에는 적합하지 않다.
  • 데이터 타입: ASCII 문자열 형식의 데이터만 보낼 수 있다.

POST : 데이터 처리 및 생성 (Create)

새로운 리소스를 생성하거나 업데이트할 때 사용하며, 대량의 데이터를 안전하게 보낼 수 있다.

  • 데이터 전달 방식: URL이 아닌 HTTP 메시지의 Body에 데이터를 담아 전달한다.
  • 길이 제한: 데이터 크기에 대한 별도의 제한이 없어 대용량 파일 전송도 가능하다.
  • 보안성: 요청 파라미터가 URL에 노출되지 않아 브라우저 기록에 남지 않는다. (단, 암호화를 하지 않으면 패킷 분석을 통해 내용을 볼 수 있으므로 HTTPS 사용이 권장된다.)
  • 데이터 타입: 문자열뿐만 아니라 바이너리 데이터, JSON, 이미지 등 모든 유형의 데이터를 보낼 수 있다.
  • 캐싱 불가: 서버의 상태를 변경하는 작업이 많으므로 기본적으로 캐싱을 하지 않는다.
  • 사용 사례: 사용자 가입, 로그인, 게시글 작성 등 민감한 정보나 큰 데이터를 보낼 때 사용한다.

PUT : 리소스의 전체 교체

대상 리소스를 새로운 데이터로 완전히 대체하는 방식

  • 전체 데이터 전송: 업데이트하려는 리소스의 모든 필드값을 보내야함.
  • 덮어쓰기: 만약 요청 시에 특정 필드를 생략하고 보낼 경우,
    • 서버에 따라 해당 필드가 삭제되거나 null로 업데이트 될 수 있음.
  • 리소스 생성: 요청한 URI에 리소스가 존재하지 않을 경우, 서버 설정에 따라 새로운 리소스를 생성하기도 함.
  • 멱등성(Idempotent): 동일한 요청을 여러 번 보내도 결과가 항상 같음

PATCH: 리소스의 부분수정

리소스를 전체 교체하지 않고, 변경이 필요한 특정 필드만을 수정하는 방식

  • 일부 데이터 전송 : 수정하고 싶은 데이터만 담아서 보냄
  • 효율성: 전체 데이터를 보낼 필요가 없으므로 네트워크 대역폭을 절약할 수 있음
  • 비멱등성 가능성: 구현 방식에 따라 여러 번 요청했을 때 결과가 달라질 수 있어 주의가 필요

비교 예시

만약 사용자 데이터가 "id": 1, "name": "woojin", "age": 25"} 일 때,

메서드 요청 데이터 (Body) 결과
PUT { "name": "Flash" } { "id": 1, "name": "Flash" } (나머지 정보 삭제/초기화 위험)
PATCH { "name": "Flash" } { "id": 1, "name": "Flash", "age": 20 } (이름만 변경됨)

따라서,

리소스의 전체를 갈아치우고 싶다면 PUT, 특정 일부만을 고치고 싶다면 PATCH를 사용해야 한다.

네트워크를 이루는 장치의 이해


레이어별 네트워크 장치

  • 어플리케이션 계층 : L7 스위치
  • 전송 계층: L4 스위치
  • 인터넷 계층(네트워크 계층) : 라우터, L3 스위치
  • 데이터 링크 계층 : L2 스위치, 브리지
  • 물리 계층 : NIC, 리피터, AP

# 1 어플리케이션 계층 - L7 스위치

L7 스위치란? 로드밸런서라고도 하며, 서버의 부하를 분산하는 기기다.

alt text

  • 서버 이중화, 보안에 강점이 있다.
  • IP, Port, url, 헤더, 쿠키 등을 기반으로 트래픽을 분산한다.
  • 헬스 체크를 통해 장애가 발생한 서버를 확인하고 해당 서버로 트래픽을 보내지 못하게 하는 역할을 한다.
    • 헬스 체크란?

      TCP를 일정 시간 마다 전송하여, 응답을 확인함.

      참고) AWS에서 L7 스위치를 이용한 로드 밸런싱은 ALB라는 컴포넌트를 통해서 하며 L4 스위치를 이용한 로드밸런싱은 NLB 컴포넌트를 통해 구축한다.

# 2 전송 계층 - L4 스위치

L4 스위치란?

앞서 설명한 로드밸런서의 특징인 트래픽 분산 등을 할 수 있다.

  • 패킷의 IP 주소와 Port 번호를 참고하여 적절히 트래픽 분산을 할 수 있다.
  • 전송계층의 TCP, UDP 등의 헤더를 기반으로 우선순위를 판단해서 분산이 가능하다.
  • L7와 같이 헬스체크가 가능함.

# 3 인터넷 계층 - 라우터, L3 스위치

라우팅이란?

하나 이상의 네트워크 경로를 선택하는 프로세스를 말함.

  • 이 라우팅을 하는 장비를 라우터(Router)라고 함.
  • 다른 네트워크에 존재하는 장치끼리 서로 데이터를 주고 받을 때 “패킷소모 최적화”, “경로 최적화”하는 장비

L3 스위치란?

L2 스위치의 기능과 라우팅을 하는 장비이다.

  • 라우팅 테이블을 참조해서 IP 패킷에 IP주소를 담아 보낸다.

# 2 전송 계층 - L4 스위치

L4 스위치란?

앞서 설명한 로드밸런서의 특징인 트래픽 분산 등을 할 수 있다.

  • 패킷의 IP 주소와 Port 번호를 참고하여 적절히 트래픽 분산을 할 수 있다.
  • 전송계층의 TCP, UDP 등의 헤더를 기반으로 우선순위를 판단해서 분산이 가능하다.
  • L7와 같이 헬스체크가 가능함.

# 3 인터넷 계층 - 라우터, L3 스위치

라우팅이란?

하나 이상의 네트워크 경로를 선택하는 프로세스를 말함.

  • 이 라우팅을 하는 장비를 라우터(Router)라고 함.
  • 다른 네트워크에 존재하는 장치끼리 서로 데이터를 주고 받을 때 “패킷소모 최적화”, “경로 최적화”하는 장비

L3 스위치란?

L2 스위치의 기능과 라우팅을 하는 장비이다.

  • 라우팅 테이블을 참조해서 IP 패킷에 IP주소를 담아 보낸다.
    • 라우팅 테이블
    • IP 주소
    • IP 패킷

# 4 데이터 링크 계층

데이터 링크 계층은 이더넷 프레임을 통해 에러 확인, 흐름 제어, 접근 제어를 담당하는 계층을 말한다.

L2 스위치

L2 스위치는 장치들의 MAC 주소를 MAC 주소 테이블을 통해 관리함.

  • 해당 테이블을 기반으로 인터넷 계층에서 받은 패킷을 기반으로 이더넷 프레임을 만들어 목적지 MAC 주소로 패킷을 보내주는 역하을 한다.
    • MAC 주소 테이블
    • MAC 주소
    • 이더넷 프레임

브리지

브리지(bridge)는 두 개의 근거리 통신망(LAN)을 상호 접속할 수 있도록 하는 통신망 연결 장치를 말한다.

  • 통신망의 범위를 확장하고 LAN을 기반으로 하나의 통신망을 구축할 때 쓰임.

유선 LAN #1. 전이중화 통신, CSMA/CD

전이중화(full duplex)란?

양쪽 장치가 동시에 송수신할 수 있는 방식을 말한다. 동축케이블, 광케이블 등을 기반으로 만들어진 유선 LAN을 이루는 이더넷은 IEEE802.3 프로토콜을 기반으로 전이중화 통신을 쓴다.

IEEE802.3

이더넷프레임은 어떤 구조를 기반으로 할 것인지, 케이블의 최대 전송량, 어떤 케이블만이 가능하도록 할 것인지 등을 정한 규칙을 말함.

전이중화 통신

양쪽 장치가 동시에 송수신할 수 있는 방식, 송신로와 수신로를 나눠서 데이터를 주고 받을 수 있다.

CSMA/CD

이전에는 유선 LAN에 ‘반이중화 통신’ 중 하나인 CSMA/CD(Carrier Sense Multiple Access with Collision Detection) 방식을 썼다. 이 방식은 회선을 사용하는 지를 파악한 후 사용하지 않는 다면 데이터를 보내고 충돌이 발생한다면 일정 시간 이후 재전송 하는 방식을 말한다.

유선 LAN #2 케이블

트위스트페어 케이블

트위스트 페어 케이블은 2가지로 나뉜다.

  1. STP: 실드처리 한 케이블
  2. UTP: 실드처리를 안한 케이블

광섬유 케이블

레이저를 이용해 통신하며 보통 100Gbps의 데이터를 전송하는 케이블

  • 코어 : 빛의 굴절률이 높은 부분
  • 클래딩 : 빛의 굴절률이 낮은 부분
    • 다른 밀도를 가지는 유리나 플라스틱 섬유 기반으로 제작
    • 한번 들어간 빛이 내부에서 계속 반사하며 전진하여 반대편 끝까지 가는 원리를 이용함

무선 LAN #1 반이중화통신, CSMA/CA, 와이파이

무선랜은 IEEE802.11 표준 규격을 따르며 반이중화 통신을 사용한다.

반이중화 통신

반이중화 통신은 양쪽 장치는 서로 통신할 수 있지만, 동시에는 통신할 수 없으며 한 번에 한 방향만 통신할 수 있는 방식을 말함.

CSMA/CA

반이중화 통신 중 하나로 장치에서 데이터를 보내기 전에 일련의 과정을 기반으로 사전에 최대한 충돌을 방지하는 방식을 말함.

반이중화 통신 과정

  1. 사용중인 채널이 있다면, 다른 채널을 감지하다 유후 상태인 채널 발견
  2. 프레임 간 공간 시간인 IFS(InterFrame Space)시간만큼 기다림
  3. 프레임을 보내기 전 $0$ ~ $2^{K-1}$ 사이에서 결정된 랜덤 상수를 기반으로 결정된 시간만큼 기다린 뒤 프레임을 보냄
    • 프레임을 보낸 뒤 제대로 송신되었고 ACK 세그먼트를 받았다면 마무리
    • 받지 못하였을 경우,

      $k=k+1$을 하며 이 과정을 반복함

    • 반복하다가 k가 정해진 Kmax보다 더 커지면, 해당 프레임 전송은 abort
This post is licensed under CC BY 4.0 by the author.