반응형

Nginx에서 백엔드 서버에 부하 분산(load balancing)을 설정하려면 upstream 모듈을 사용하여 여러 백엔드 서버를 정의하고, proxy_pass를 통해 요청을 분배하도록 설정할 수 있습니다. 기본적인 설정 예시는 아래와 같습니다:

1. upstream 블록 정의

upstream 블록을 사용하여 백엔드 서버들을 정의합니다. 여러 서버를 등록할 수 있으며, Nginx가 요청을 분배합니다.

upstream backend {
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com;
    # 로드 밸런싱 알고리즘을 변경할 수 있습니다 (예: round-robin, least_conn, ip_hash 등)
}

server {
    listen 80;

    location / {
        proxy_pass http://backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

2. 로드 밸런싱 알고리즘

Nginx는 기본적으로 round-robin 방식으로 부하 분산을 처리합니다. 그러나 다른 알고리즘을 사용하려면 upstream 블록 내에 추가적인 옵션을 설정할 수 있습니다.

  • least_conn: 연결 수가 가장 적은 서버로 요청을 분배
  • ip_hash: 클라이언트 IP 주소에 따라 서버를 지정하여 동일한 클라이언트가 항상 같은 서버로 연결되도록 함

예시:

upstream backend {
    least_conn;  # 연결 수가 적은 서버로 분배
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com;
}

--------------------------------------

upstream backend {
    ip_hash;  # 클라이언트 IP를 기반으로 동일 서버로 요청을 보냄
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com;
}
 

3. 헬스 체크 및 서버 다운 시 처리

서버가 다운되었을 때 다른 서버로 요청을 전달하도록 설정하려면 down 옵션을 사용할 수 있습니다. 또한, 서버의 상태를 체크하여 문제가 발생한 서버를 자동으로 제외하는 설정도 가능합니다.

upstream backend {
    server backend1.example.com check;
    server backend2.example.com check;
    server backend3.example.com;
}

이렇게 설정하면 Nginx가 주기적으로 서버 상태를 점검하고 문제가 있을 경우 자동으로 제외합니다.

4. 기타 설정

추가로 필요한 설정들을 location 블록에 추가할 수 있습니다. 예를 들어, proxy_set_header를 사용하여 클라이언트의 실제 IP를

백엔드 서버에 전달하는 등의 설정을 할 수 있습니다.

 
location / {
    proxy_pass http://backend;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header Connection '';
    proxy_http_version 1.1;
    proxy_cache_bypass $http_upgrade;
}

이 설정은 백엔드 서버로 요청을 전달할 때 추가적인 헤더 정보를 제공하여 클라이언트의 IP와 요청 정보를 정확히 전달하도록 돕습니다.

5. 설정 적용 후 테스트

설정을 완료한 후에는 Nginx를 재시작하거나 리로드하여 변경 사항을 적용합니다:

 
sudo systemctl restart nginx  # 또는
sudo nginx -s reload

이렇게 하면 Nginx에서 백엔드 서버에 대한 부하 분산을 설정할 수 있습니다.

 

6. 활용 예시

vi /etc/nginx/sites-enabled/default

-------------------------------------------

upstream tomcat_backend {
    server backend_server_IP1:8080;
    server backend_server_IP1:8080;
    server backend_server_IP1:8080;
} 
server { 
    listen 80 default_server;
    listen [::]:80 default_server; 
    root /var/www/html; index index.html index.htm index.nginx-debian.html;
    servername ; 
    location / { 
	    try_files $uri $uri/ =404; 
    } 
    location /api { 
        #해당 부분 추가 
        rewrite ^/api(/.*)$ $1 break; 
        proxy_pass http://tomcat_backend/; # 업스트림 그룹으로 프록시 
        proxy_set_header Host $host; 
        proxy_set_header X-Real-IP $remote_addr; 
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
        proxy_set_header X-Forwarded-Proto $scheme; 
    } 
}

 

반응형

'개발 부트캠프 > 네트워크' 카테고리의 다른 글

[HTTP] Stateful vs Stateless  (1) 2024.12.04
[IP] 고정 IP  (0) 2024.12.03
[프로토콜] TCP(Transmission Control Protocol)  (0) 2024.12.03
[IP] 바인드 주소(Bind Addresss)  (0) 2024.11.27
반응형

HTTP, 스테이트풀(Stateful), **스테이트리스(Stateless)**는 웹 애플리케이션의 동작 방식과 상태 관리를 설명하는 중요한 개념입니다. 아래에서 각각을 설명드리겠습니다.


1. HTTP (HyperText Transfer Protocol)

  • 정의:
    HTTP는 웹 브라우저와 서버 간에 데이터를 주고받기 위한 통신 프로토콜입니다.
  • 특징:
    • Stateless(무상태): HTTP는 기본적으로 상태를 저장하지 않기 때문에 클라이언트와 서버 간의 요청은 독립적으로 처리됩니다. 각 요청은 이전 요청의 정보를 알지 못합니다.
    • Request-Response 구조: 클라이언트가 요청(Request)을 보내면 서버가 응답(Response)을 보냅니다.
    • 확장성: HTTP는 다양한 데이터 형식을 지원하며, 버전(HTTP/1.1, HTTP/2, HTTP/3 등)에 따라 성능과 보안이 개선됩니다.
  • 예시:
    사용자가 브라우저를 통해 example.com에 접속하면, 브라우저가 서버에 요청을 보내고 서버는 HTML, CSS, 이미지 등의 데이터를 응답으로 제공합니다.

2. 스테이트풀 (Stateful)

  • 정의:
    스테이트풀 시스템은 클라이언트와의 상호작용에서 상태 정보를 유지합니다. 즉, 이전 요청의 데이터를 기억하고 현재 요청에 반영합니다.
  • 특징:
    • 서버는 클라이언트와의 연결 상태를 지속적으로 추적합니다.
    • 상태 저장을 위해 메모리나 데이터베이스를 사용하며, 세션(Session)이나 쿠키(Cookie) 같은 방식으로 상태를 관리합니다.
    • 복잡한 작업이 가능하지만, 리소스 소모가 큽니다.
  • 장점:
    • 사용자의 연속적인 작업 흐름을 지원합니다.
    • 쇼핑몰의 장바구니와 같이 상태를 기반으로 동작하는 기능 구현에 적합합니다.
  • 단점:
    • 서버에 부하가 많아질 수 있습니다.
    • 상태를 유지하기 위해 서버의 복잡도가 증가합니다.
  • 예시:
    사용자가 쇼핑몰에서 상품을 장바구니에 추가하면, 서버가 그 상태를 기억해 최종 결제 단계에서 보여줍니다.

3. 스테이트리스 (Stateless)

  • 정의:
    스테이트리스 시스템은 클라이언트와의 각 요청을 독립적으로 처리하며, 상태 정보를 저장하지 않습니다.
  • 특징:
    • 각 요청에 필요한 모든 정보를 포함시켜야 합니다.
    • 서버는 이전 요청과 관계없이 처리하므로 단순성과 확장성이 높습니다.
    • 상태 저장이 필요하다면 클라이언트가 정보를 저장하고 요청에 포함합니다.
  • 장점:
    • 서버의 부하가 적어 확장성이 뛰어납니다.
    • 설계와 구현이 상대적으로 간단합니다.
  • 단점:
    • 클라이언트가 요청마다 필요한 데이터를 전달해야 하므로 데이터 오버헤드가 발생할 수 있습니다.
    • 연속성이 필요한 작업에는 적합하지 않습니다.
  • 예시:
    REST API는 스테이트리스 방식의 대표적인 예입니다. 클라이언트가 API를 호출할 때마다 필요한 데이터를 요청에 포함시켜야 합니다.

스테이트풀과 스테이트리스 비교

특징 Stateful(스테이트풀) Stateless(스테이트리스)
상태 유지 여부 유지함 유지하지 않음
서버 리소스 소모 높음 낮음
확장성 제한적 우수
적용 사례 온라인 게임, 채팅, 쇼핑몰 REST API, HTTP 기본 요청 처리

이 세 가지 개념은 상황에 따라 조합해서 사용하기도 합니다. 예를 들어, HTTP는 본질적으로 스테이트리스지만, 애플리케이션 설계에 따라 세션 관리로 스테이트풀의 성격을 추가하기도 합니다.

반응형

'개발 부트캠프 > 네트워크' 카테고리의 다른 글

[Nginx] Load Balancing 설정  (0) 2025.02.17
[IP] 고정 IP  (0) 2024.12.03
[프로토콜] TCP(Transmission Control Protocol)  (0) 2024.12.03
[IP] 바인드 주소(Bind Addresss)  (0) 2024.11.27
반응형

서버에서 IP를 고정하는 이유와 설정 방법

서버 운영에서 **고정 IP(Static IP)**는 안정적인 네트워크 환경을 구축하는 데 중요한 요소입니다. 서버는 인터넷이나 내부 네트워크에서 데이터를 주고받기 위해 항상 일정한 주소(IP)를 가지고 있어야 하는 경우가 많습니다. 이 글에서는 서버에서 IP를 고정하는 이유와 방법을 다양한 예시와 함께 설명합니다.


1. IP 주소란 무엇인가?

IP 주소는 네트워크에서 장치를 식별하는 고유한 주소입니다.

  • 동적 IP (Dynamic IP): 네트워크에 연결될 때마다 변경되는 IP.
  • 고정 IP (Static IP): 항상 동일한 IP를 사용하는 방식.

💡 비유로 이해하기

  • 동적 IP: 호텔의 임시 객실 번호. 매번 방문 시 다른 방에 배정됩니다.
  • 고정 IP: 사무실의 고정된 주소. 사람들이 언제나 같은 장소에서 당신을 찾을 수 있습니다.

2. 서버에서 IP를 고정하는 이유

서버는 클라이언트(사용자)가 데이터를 요청할 때 항상 동일한 위치에서 응답을 제공해야 합니다.
고정 IP를 사용하는 주요 이유는 다음과 같습니다:

2.1. 안정적인 네트워크 연결

  • 고정 IP는 서버가 네트워크에서 항상 동일한 주소를 유지하도록 보장합니다.
  • 예시: 웹 서버에서 도메인 이름(example.com)은 고정 IP와 연결됩니다. IP가 변경되면 사용자들이 웹사이트에 접속할 수 없게 됩니다.

2.2. 외부 접근성 제공

  • 클라이언트가 언제나 동일한 IP를 통해 서버에 접근할 수 있습니다.
  • 예시: FTP 서버나 원격 데스크톱 연결을 설정할 때 고정 IP가 필수적입니다.

2.3. 내부 네트워크 통신

  • 내부 서버(예: 파일 서버, 프린터 서버)는 고정 IP를 통해 안정적인 네트워크 환경을 유지합니다.
  • 예시: 사내 네트워크에서 NAS(Network Attached Storage)를 사용하면 고정 IP를 설정해 직원들이 항상 접근 가능하도록 설정합니다.

2.4. 네트워크 관리와 보안

  • 방화벽이나 접근 제어 정책(ACL)을 설정할 때 고정 IP를 사용해 특정 서버만 접근을 허용할 수 있습니다.
  • 예시: 데이터베이스 서버는 관리자 IP에서만 접근 가능하도록 설정할 때 고정 IP가 필요합니다.

3. 서버에서 IP 고정하는 방법

3.1. 고정 IP 설정: 운영 체제별 방법

Linux 서버에서 고정 IP 설정

1. 네트워크 설정 파일 편집
예: Ubuntu의 경우 /etc/netplan/00-installer-config.yaml 디렉토리에 있는 YAML 파일을 수정합니다.

vi /etc/netplan/00-installer-config.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    <NETWORK_INTERFACE_NAME>:     # 네트워크 인터페이스 이름 (예: eth0, ens33)
      dhcp4: no                  # DHCP 비활성화
      addresses:
        - <STATIC_IP_ADDRESS>/<SUBNET_PREFIX>  # 고정 IP 주소 및 서브넷 프리픽스 (예: 192.168.1.100/24
      nameservers:
        addresses: <DNS_SERVER_1>       # DNS 서버 (예: 8.8.8.8)
      routes:
      	- to: default
        - via: <GATEWAY_IP>     # 기본 게이트웨이 (예: 192.168.1.1)

 

2. 적용 명령어 실행

sudo netplan apply
 

Windows 서버에서 고정 IP 설정

  1. 제어판 > 네트워크 및 인터넷 > 네트워크 연결로 이동.
  2. 사용 중인 네트워크 어댑터를 마우스 오른쪽 버튼 클릭 후 속성 선택.
  3. IPv4를 더블 클릭하고, 다음과 같이 설정:
    • IP 주소: 192.168.1.100
    • 서브넷 마스크: 255.255.255.0
    • 기본 게이트웨이: 192.168.1.1
    • DNS 서버: 8.8.8.8, 8.8.4.4

클라우드 환경에서 고정 IP 설정

  • AWS, Google Cloud, Azure 등의 클라우드 서비스는 Elastic IP와 같은 기능을 제공하여 고정 IP를 할당합니다.
    • AWS에서 Elastic IP 할당:
      1. AWS Management Console에서 EC2로 이동.
      2. Elastic IP 메뉴에서 새 IP 주소를 요청.
      3. 생성된 Elastic IP를 특정 인스턴스에 연결.

3.2. DHCP 서버에서 고정 IP 예약

DHCP 예약은 네트워크 관리자가 특정 장치의 MAC 주소를 기반으로 항상 동일한 IP를 할당하도록 설정하는 방법입니다.

예제: 공유기에서 IP 예약

  1. 공유기 관리 페이지에 로그인.
  2. DHCP 설정 메뉴에서 고정 IP 예약 항목으로 이동.
  3. 대상 서버의 MAC 주소를 입력하고, 원하는 IP 주소를 설정.

4. 고정 IP를 사용하는 상황별 예시

4.1. 웹 서버

  • 상황: 웹사이트 example.com을 운영하려면 DNS가 항상 동일한 서버 IP를 참조해야 함.
  • 해결: 웹 서버에 고정 IP를 설정해 사용자들이 언제든지 접근 가능하도록 보장.

4.2. 원격 데스크톱 연결

  • 상황: 원격으로 서버에 접속하기 위해 IP 주소를 입력해야 함.
  • 해결: 서버에 고정 IP를 설정하면 IP 변경 없이 언제든지 접속 가능.

4.3. 내부 파일 서버

  • 상황: 회사 네트워크에서 파일 서버를 공유하려면 모든 직원이 동일한 IP로 접근해야 함.
  • 해결: 고정 IP로 파일 서버를 설정해 네트워크 안정성을 확보.

4.4. VPN 서버

  • 상황: 직원들이 원격 근무 중 VPN으로 사내 네트워크에 접속.
  • 해결: VPN 서버에 고정 IP를 설정해 안정적인 연결 제공.

5. 고정 IP 설정 시 주의사항

  1. IP 충돌 방지:
    • 동일한 IP 주소를 다른 장치에 할당하면 충돌 문제가 발생할 수 있습니다.
    • DHCP 서버 범위와 고정 IP 설정 범위를 분리하세요.
  2. 서브넷 구성 확인:
    • 고정 IP 설정 시 올바른 서브넷 마스크와 게이트웨이를 설정해야 네트워크 통신이 가능합니다.
  3. DNS 설정 필요:
    • 외부 접속이 필요한 경우 DNS 서버를 올바르게 설정해야 합니다.

6. 마무리

고정 IP는 안정적이고 신뢰성 있는 서버 환경을 구성하는 데 필수적입니다. 특히 웹 서버, 원격 데스크톱, 파일 서버 등 다양한 상황에서 서버가 항상 동일한 주소로 동작하도록 보장합니다. 설정은 복잡하지 않지만, 네트워크 환경과 목적에 따라 세심한 구성이 필요합니다.

반응형
반응형

TCP 통신 이해하기

인터넷을 통해 데이터를 주고받는 네트워크의 핵심 프로토콜 중 하나가 바로 **TCP(Transmission Control Protocol)**입니다. 안정적이고 신뢰성 있는 데이터 전송을 제공하는 TCP는 다양한 상태와 복잡한 동작 방식을 갖고 있습니다. 특히, 연결을 설정하는 과정인 3-Way Handshake와 연결 상태의 변화를 보여주는 TCP 상태 전이도는 TCP를 이해하는 데 필수적입니다. 이 글에서는 개념부터 예시까지 차근차근 알아보겠습니다.


1. TCP 통신이란?

TCP는 네트워크에서 데이터를 신뢰성 있게 전송하기 위해 사용하는 프로토콜입니다.
주요 특징은 다음과 같습니다:

1.1. 특징

  • 연결 지향적: 데이터를 주고받기 전에 연결을 설정합니다.
  • 데이터 전송 보장: 패킷이 손실되면 재전송하고, 순서대로 데이터를 재조립합니다.
  • 흐름 제어: 송신자가 수신자의 처리 속도에 맞춰 데이터를 전송합니다.

💡 비유로 이해하기

TCP 통신은 택배 서비스와 비슷합니다:

  • 송신자(발신지)와 수신자(목적지)는 주소를 통해 연결됩니다.
  • 데이터(소포)는 순서대로 잘 포장되어 전송됩니다.
  • 소포가 도착하지 않으면 발신지에서 다시 보냅니다.

1.2. TCP 플래그

TCP 플래그는 TCP 헤더의 특정 비트 필드로, 송신자가 수신자에게 현재 상태 또는 의도를 알리기 위해 사용됩니다.
TCP 플래그는 연결 설정, 데이터 전송, 연결 종료 등의 다양한 역할을 수행합니다.

💡 주요 TCP 플래그 종류와 역할

플래그 이름역할설명

플래그 이름 역할 설명
SYN 연결 요청 연결을 시작할 때 사용합니다.
ACK 응답 확인 이전에 받은 데이터나 요청을 확인합니다.
FIN 연결 종료 요청 연결을 종료하려는 의도를 나타냅니다.
RST 연결 강제 종료 비정상 상황에서 연결을 즉시 종료합니다.
PSH 데이터 밀어넣기 데이터를 즉시 처리하도록 수신자에게 알립니다.
URG 긴급 데이터 표시 특정 데이터를 긴급히 처리하도록 우선순위를 부여합니다.

 


2. 3-Way Handshake란?

TCP에서 송신자와 수신자가 데이터를 전송하기 전에 연결을 설정하는 과정입니다.
3-Way Handshake는 다음 3단계로 이루어집니다:

2.1. 과정 설명

  1. SYN(Synchronize):
    송신자가 연결을 요청합니다. (SYN 플래그 설정)
  2. SYN-ACK(Synchronize + Acknowledge):
    수신자가 요청을 받고 응답하며 연결을 준비합니다. (SYN 플래그 + ACK 플래그 설정)
  3. ACK(Acknowledge):
    송신자가 수신자의 응답을 확인하고 데이터 전송을 시작합니다. (ACK 플래그 설정)

💡 비유로 이해하기

  • 송신자: "나 연결해도 될까?" (SYN)
  • 수신자: "그래, 연결 준비 됐어. 너도 준비됐니?" (SYN-ACK)
  • 송신자: "좋아, 연결 시작하자!" (ACK)

2.2. 시퀀스 다이어그램

송신자                수신자
   SYN   -------->     
             <--------  SYN + ACK
   ACK    -------->
 

3. TCP 상태 전이도란?

TCP 상태 전이도(TCP State Transition Diagram)는 TCP 연결의 상태 변화를 나타내는 다이어그램입니다. TCP 연결은 데이터 전송의 신뢰성과 안정성을 보장하기 위해 여러 상태를 거칩니다.

3.1. 주요 상태

  1. CLOSED: 연결이 닫혀 있는 상태입니다. 기본 상태입니다.
  2. LISTEN: 서버가 클라이언트의 연결 요청(SYN)을 기다리는 상태입니다.
  3. SYN_SENT: 클라이언트가 연결 요청(SYN)을 보내고 응답을 기다리는 상태입니다.
  4. SYN_RECEIVED: 서버가 클라이언트의 연결 요청을 받고 응답(SYN-ACK)을 보낸 상태입니다.
  5. ESTABLISHED: 연결이 완료되어 데이터를 주고받을 수 있는 상태입니다.
  6. FIN_WAIT_1 / FIN_WAIT_2: 연결 종료를 요청하거나 종료 대기 중인 상태입니다.
  7. CLOSE_WAIT: 수신자가 연결 종료 요청을 받은 상태입니다.
  8. LAST_ACK: 종료 요청에 대한 마지막 확인(ACK)을 보낸 상태입니다.
  9. TIME_WAIT: 모든 종료 절차가 끝난 후 잠시 대기하는 상태입니다.

4. TCP 데이터 송수신 과정 및 예시

TCP 데이터 송수신 과정은 3-Way Handshake를 통해 연결을 설정하고, 데이터를 교환한 뒤 4-Way Handshake로 연결을 종료하는 단계로 이루어집니다.

4.1 연결 설정: 3-Way Handshake

  1. SYN (Synchronize):
    클라이언트가 서버에 연결 요청을 보냅니다.
    • 플래그: SYN
  2. SYN + ACK (Acknowledge):
    서버가 연결 요청을 받고 확인 응답을 보냅니다.
    • 플래그: SYN, ACK
  3. ACK:
    클라이언트가 서버의 확인 메시지를 수신하고 연결을 확립합니다.
    • 플래그: ACK

예제 시나리오: "전화 연결" 비유

  • 클라이언트: "연결해도 될까요?" (SYN)
  • 서버: "좋아요, 준비됐어요. 당신도 괜찮나요?" (SYN + ACK)
  • 클라이언트: "네, 시작해요!" (ACK)

4.2 데이터 전송

  1. 데이터 송신:
    송신자는 데이터와 함께 ACK 또는 PSH 플래그를 설정합니다.
    • 플래그: PSH, ACK
  2. 데이터 수신 확인:
    수신자는 데이터를 받았음을 송신자에게 알립니다.
    • 플래그: ACK

예제 시나리오: "택배 전송" 비유

  • 송신자: 데이터를 담은 소포를 택배로 보냅니다. (PSH)
  • 수신자: 소포를 잘 받았다고 알립니다. (ACK)

4.3 연결 종료: 4-Way Handshake

  1. FIN:
    송신자가 연결 종료 요청을 보냅니다.
    • 플래그: FIN
  2. ACK:
    수신자가 연결 종료 요청을 수락했다는 응답을 보냅니다.
    • 플래그: ACK
  3. FIN:
    수신자가 자체적으로 연결을 종료하려는 요청을 보냅니다.
    • 플래그: FIN
  4. ACK:
    송신자가 수신자의 종료 요청을 확인하고 모든 연결을 닫습니다.
    • 플래그: ACK

예제 시나리오: "전화 끊기" 비유

  • 송신자: "통화 끝내도 될까요?" (FIN)
  • 수신자: "알겠어요." (ACK)
  • 수신자: "이제 저도 끊을게요." (FIN)
  • 송신자: "확인했어요, 안녕히 계세요!" (ACK)

6. TCP의 중요성

TCP는 다음과 같은 환경에서 필수적입니다:

  • 웹 브라우징: 신뢰성 있는 데이터 전송을 보장해야 합니다.
  • 파일 다운로드: 손실 없이 파일을 완벽히 받아야 합니다.
  • 이메일: 데이터가 누락되거나 중복되면 안 됩니다.

6.1 TCP 실무 예시

SYN 플러딩 공격 (SYN 플래그 남용)

  • 상황: 악의적인 사용자가 대량의 SYN 요청을 보내 서버를 과부하 상태로 만듭니다.
  • 대응 방법: 방화벽이나 SYN Cookies 같은 보안 메커니즘 활용.

대용량 파일 업로드

  • 송신자: 파일 데이터를 여러 패킷으로 나누어 PSH 플래그를 사용해 빠르게 전송.
  • 수신자: 각 패킷마다 ACK 플래그로 수신 확인.

6.2 TCP 활용 시 주의점

  1. 연결 안정성:
    • TCP는 연결 지향적이므로 데이터가 신뢰성 있게 전송되지만, 상태 유지 비용이 큽니다.
  2. 비정상 연결 종료 (RST 플래그):
    • 연결 중 오류가 발생하면 RST 플래그로 즉시 종료할 수 있으나, 비정상적인 종료는 데이터 손실을 초래할 수 있습니다.
  3. TIME_WAIT 상태 처리:
    • 연결 종료 후 TIME_WAIT 상태에서 일정 시간 대기하며 재전송 요청을 방지합니다.

 


마무리

TCP는 신뢰성 있는 데이터 전송을 위해 설계된 중요한 프로토콜입니다. 3-Way Handshake를 통해 연결을 설정하고, 상태 전이도를 통해 다양한 상태를 관리하며 안정적인 통신을 보장합니다. 이를 이해하면 네트워크 동작 원리를 더 깊이 이해할 수 있습니다.

반응형

'개발 부트캠프 > 네트워크' 카테고리의 다른 글

[Nginx] Load Balancing 설정  (0) 2025.02.17
[HTTP] Stateful vs Stateless  (1) 2024.12.04
[IP] 고정 IP  (0) 2024.12.03
[IP] 바인드 주소(Bind Addresss)  (0) 2024.11.27
반응형

 

 

바인드 주소란?

바인드 주소(bind address)는 네트워크 프로그램이 특정 IP 주소에서 들어오는 연결을 수신하기 위해 사용하는 주소입니다. 서버와 클라이언트가 통신할 때, 서버가 어떤 IP에서 요청을 받을지 지정하는 중요한 설정입니다.

 

기본적으로, 네트워크 프로그램은 로컬(local) 환경에서만 실행되거나 특정 IP 주소로 제한된 연결을 받을 수 있습니다.

바인드 주소를 설정하면, 프로그램이 특정 IP 주소(또는 모든 IP 주소)에서 요청을 받을지 정의할 수 있습니다.

 

바인드 주소의 주요 사용 사례

  • 로컬 접속 제한: 서버가 외부 네트워크가 아닌, 로컬에서만 실행되도록 설정.
    • 예: 127.0.0.1은 로컬 머신에서만 접속을 허용.
  • 외부 접속 허용: 특정 IP 또는 모든 IP 주소(0.0.0.0)에서 접속 가능하도록 설정.
    • 예: 여러 클라이언트가 서버에 접근해야 하는 경우.

 

바인드 주소 확인 방법

프로그램의 바인드 주소를 확인하려면 네트워크 상태 확인 도구를 사용합니다.

1. netstat 사용하기

Linux 환경에서 netstat을 사용하여 바인드 주소를 확인할 수 있습니다.

netstat -anlp | grep <포트 번호>

주요 출력 항목:

  • Local Address: 바인드된 IP와 포트를 보여줍니다.
  • LISTEN: 프로그램이 해당 주소와 포트에서 요청을 수신 중임을 나타냅니다.

예제 출력:

tcp        0      0 0.0.0.0:3306           0.0.0.0:*               LISTEN      1234/mysqld

여기서 0.0.0.0:3306은 프로그램이 모든 IP 주소에서 포트 3306으로 요청을 받고 있음을 의미합니다.

2. ss 명령어 사용

ssnetstat보다 더 현대적인 도구입니다.

ss -tuln | grep <포트 번호>

주요 출력 항목:

  • Local Address:Port: 바인드된 주소와 포트를 확인할 수 있습니다.

3. 특정 프로그램 로그 확인

일부 프로그램은 시작 시 바인드 주소를 로그 파일에 기록합니다.

tail -f /var/log/mysql/error.log

바인드 주소 변경 방법

1. 설정 파일 수정

대부분의 서버 프로그램은 설정 파일에서 바인드 주소를 정의합니다. 예를 들어, MariaDB/MySQL의 경우:

vi /etc/mysql/mariadb.conf.d/50-server.cnf

bind-address 항목을 수정:

  • 로컬 접속만 허용:
    bind-address = 127.0.0.1
  • 모든 IP 접속 허용:
    bind-address = 0.0.0.0
  • 특정 IP 접속 허용:
    bind-address = <특정 IP 주소>

2. 프로그램 재시작

설정을 변경한 후에는 프로그램을 재시작해야 반영됩니다.

systemctl restart <프로그램 이름>

예:

systemctl restart mariadb

 

주의사항 및 권장사항

  • 보안 강화:모든 IP(0.0.0.0)에서 요청을 받는 설정은 보안 위험을 높일 수 있습니다. 반드시 방화벽 설정과 함께 사용해야 합니다.
  • ufw allow from <클라이언트 IP> to any port <포트 번호>
  • 특정 IP 사용 권장:필요한 경우에만 특정 IP를 바인드하여 보안을 강화할 수 있습니다.

 

결론

바인드 주소는 서버의 네트워크 접근성을 정의하는 중요한 설정입니다. 적절한 바인드 주소를 설정함으로써 보안을 강화하고, 프로그램의 외부 접근을 효과적으로 제어할 수 있습니다.

이를 위해 바인드 주소를 확인하고 필요 시 변경하는 과정을 정확히 이해하고 적용하는 것이 중요합니다.

반응형

'개발 부트캠프 > 네트워크' 카테고리의 다른 글

[Nginx] Load Balancing 설정  (0) 2025.02.17
[HTTP] Stateful vs Stateless  (1) 2024.12.04
[IP] 고정 IP  (0) 2024.12.03
[프로토콜] TCP(Transmission Control Protocol)  (0) 2024.12.03

+ Recent posts