Port binding

2025. 3. 2. 14:28Spring Microservice

📌 Port Binding (포트 바인딩)

(Twelve-Factor App 원칙: 서비스는 자체적으로 포트를 바인딩해야 한다.)

마이크로서비스 아키텍처에서는 각 서비스가 독립적으로 실행되어야 합니다.
이를 위해 별도의 웹 서버(Apache, Nginx, Tomcat 등) 없이 자체적으로 HTTP 요청을 처리할 수 있어야 합니다.
이 원칙을 "Port Binding"이라고 하며, 서비스는 자체적으로 포트를 바인딩하여 실행됩니다.

🔹 1. Port Binding(포트 바인딩)이란?

  • 마이크로서비스는 독립적으로 실행되며, 자체적으로 HTTP 포트를 바인딩해야 함.
  • 별도의 웹 서버(Apache, Nginx, Tomcat) 없이 실행 가능해야 함.
  • 각 서비스는 고유한 포트에서 실행되며, 다른 서비스와 격리됨.

📌 아래는 Port Binding 개념을 설명하는 다이어그램입니다.

┌──────────────────────────┐       ┌──────────────────────────┐
│  Order Service           │       │  User Service            │
│  http://localhost:8081   │       │  http://localhost:8082   │
└──────────────────────────┘       └──────────────────────────┘

Order Service는 8081번 포트에서 실행
User Service는 8082번 포트에서 실행
각 서비스는 자체적으로 실행되며, 웹 서버가 필요하지 않음

🔹 2. Port Binding 적용 방법

✅ (1) Spring Boot에서 포트 바인딩 설정하기

Spring Boot를 사용하면 내장 웹 서버(Tomcat, Jetty, Undertow)를 통해 자동으로 포트를 바인딩합니다.

 

📌 Spring Boot 기본 설정 (application.yml)

server:
  port: 8081

 

📌 Spring Boot 실행 명령어

java -jar my-microservice.jar --server.port=8081

 

📌 Docker 컨테이너 실행 예제

docker run -p 8081:8081 my-microservice:latest

 

📌 Kubernetes에서 서비스 실행 예제

apiVersion: v1
kind: Service
metadata:
  name: order-service
spec:
  selector:
    app: order-service
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8081

🔹 3. Port Binding을 사용하는 이유

마이크로서비스의 독립성 보장

  • 각 서비스는 자체적으로 실행되며, 특정 포트를 통해 접근 가능.
  • 다른 서비스와 충돌 없이 독립적으로 배포 및 실행 가능.

확장성(Scalability) 향상

  • 로드 밸런서를 활용하여 여러 개의 서비스 인스턴스를 실행 가능.
  • 마이크로서비스 간 트래픽 분산이 용이함.

운영 환경과 개발 환경 간 차이를 줄임

  • 개발자가 로컬에서 실행하는 방식과 운영 환경에서 실행하는 방식이 동일함.
  • 운영 환경에서도 별도의 애플리케이션 서버 없이 서비스 실행 가능.

🔹 4. Port Binding을 따르지 않을 경우 발생하는 문제

별도의 웹 서버(Tomcat, Nginx 등)를 필요로 하는 경우

  • 운영 환경에서 애플리케이션 서버가 별도로 필요하여 배포 및 유지보수가 어려워짐.
  • 서비스가 독립적으로 실행되지 않으며, 특정 서버에 의존하게 됨.

서비스가 특정 포트에서만 실행되도록 하드코딩된 경우

// 잘못된 예제 (포트를 하드코딩)
public class Main {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, "--server.port=8080");  // ❌ 포트가 고정됨
    }
}

 

🚨 문제점

  • 서비스 간 포트 충돌이 발생할 수 있음.
  • 환경별로 유연하게 포트를 변경할 수 없음.

해결 방법:

  • 환경 변수 또는 설정 파일(application.yml)에서 포트를 동적으로 설정해야 함.

📌 결론: Port Binding 적용 원칙

1️⃣ 각 마이크로서비스는 자체적으로 포트를 바인딩하여 실행되어야 함.
2️⃣ 별도의 웹 서버(Apache, Nginx, Tomcat 등) 없이 독립적으로 실행될 수 있어야 함.
3️⃣ Spring Boot에서는 내장 Tomcat, Jetty, Undertow를 활용하여 자동으로 포트를 바인딩할 수 있음.
4️⃣ 포트 번호는 설정 파일(application.yml) 또는 환경 변수에서 동적으로 설정해야 함.
5️⃣ Docker 및 Kubernetes 환경에서도 서비스 포트를 쉽게 매핑할 수 있어야 함.

 

🔹 이를 통해 독립적이고 확장 가능한 마이크로서비스를 구축할 수 있습니다! 🚀

'Spring Microservice' 카테고리의 다른 글

Disposability  (0) 2025.03.02
Concurrency  (0) 2025.03.02
Processes  (0) 2025.03.02
Backing Services  (0) 2025.03.02
Dependencies  (0) 2025.03.02