2025. 3. 2. 14:28ㆍSpring 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 |