NestJS 마이크로서비스와 Kubernetes Pod 실습 리뷰
1️⃣ Kubernetes Pod란 무엇인가?
Pod는 Kubernetes에서 배포 가능한 가장 작은 단위입니다. 하나 이상의 컨테이너가 들어 있고, 이 컨테이너들은 같은 네트워크 네임스페이스를 공유합니다. 즉, 같은 Pod 안에서는 localhost로 서로 통신할 수 있습니다.
비유: Pod는 아파트의 한 세대라고 생각해 보세요. 한 세대 안에 여러 가족(컨테이너)이 살지만, 부엌(네트워크)과 거실(스토리지)은 함께 씁니다.
NestJS 마이크로서비스 프로젝트에서 각 서비스(API Gateway, User, Product 등)는 독립적인 Pod로 배포될 수 있고, Kubernetes의 자동 재시작, 스케일링, 서비스 디스커버리 기능을 활용할 수 있습니다.
2️⃣ 실습: Pod 생성부터 삭제까지 단계별 실행
강의에서 제공된 예제를 기반으로 pod.yml을 작성했습니다.
apiVersion: v1 kind: Pod metadata: name: nginx-app labels: app: nginx-app type: back-end spec: containers: - name: nginx-container image: nginx ports: - containerPort: 80
Pod 생성
kubectl apply -f ./1_pod/pod.yml
pod/nginx-app created
Pod 상태 확인
kubectl get pods
NAME READY STATUS RESTARTS AGE nginx-app 1/1 Running 0 46s
Pod 삭제
kubectl delete -f ./1_pod/pod.yml
pod "nginx-app" deleted
디렉토리 단위 적용 (실무에서 자주 사용)
kubectl apply -f ./1_pod
pod/nginx-app created
kubectl delete -f ./1_pod
pod "nginx-app" deleted
이 과정을 반복해보니 Pod의 생성 → 실행 → 삭제 라이프사이클
3️⃣ 코드와 실행 결과 해석
apiVersion: v1 → Kubernetes 기본 리소스 API 버전
kind: Pod → 정의하려는 리소스가 Pod임을 명시
metadata.name → Pod 이름(nginx-app)
metadata.labels → 라벨 지정 (서비스 디스커버리/선택자에 활용)
spec.containers → Pod 안에서 실행할 컨테이너 목록
name → 컨테이너 이름
image → 사용할 도커 이미지 (여기선 nginx)
ports.containerPort → 컨테이너 내부 포트 80 노출
이 구성은 가장 기본적인 단일 컨테이너 Pod입니다.
4️⃣ NestJS 마이크로서비스와의 연관성
NestJS 마이크로서비스에서 각 서비스는 컨테이너로 패키징되고, Pod 안에서 실행됩니다. 예를 들어:
user-service → user-pod
product-service → product-pod
auth-service → auth-pod
이렇게 구성하면 서비스별로 독립성을 유지하면서 Kubernetes의 스케일링, 롤링 업데이트, 장애 복구 기능을 활용할 수 있습니다.
???? 실무 팁: Pod는 일회성 객체라 직접 관리하기보다는 Deployment로 감싸 관리하는 것이 일반적입니다. Deployment를 사용하면 자동 재시작과 롤링 업데이트가 가능해집니다.
5️⃣ 요약
Pod는 컨테이너를 담는 작은 집이다.
생성과 삭제를 반복해보니 Kubernetes의 상태 관리 방식이 이해
NestJS 마이크로서비스를 운영할 때 Pod 단위로 배포하고, 이후 Deployment, Service, Ingress로 확장
댓글 ( 0)
댓글 남기기