Next.js와 쿠버네티스 클러스터 구성하기

쿠버네티스는 대규모의 애플리케이션을 효율적으로 관리하고 배포하기 위해 사용되는 컨테이너 오케스트레이션 도구입니다. Next.js는 React 기반의 프론트엔드 프레임워크로, 쿠버네티스와 함께 사용할 경우 애플리케이션을 확장하고 이중화시키는 등의 이점을 얻을 수 있습니다. 이번 블로그에서는 Next.js 애플리케이션을 쿠버네티스 클러스터에 배포하는 방법에 대해 알아보겠습니다.

1. 쿠버네티스 클러스터 설정하기

먼저, 쿠버네티스 클러스터를 구성해야 합니다. 쿠버네티스 클러스터를 설정하는 방법은 다양하지만, 여기에서는 가장 간단한 로컬 환경에서 쿠버네티스를 실행하는 Minikube를 사용하겠습니다. Minikube는 로컬 머신에서 가상의 쿠버네티스 클러스터를 실행하는 도구입니다.

# Minikube를 설치합니다.
$ brew install minikube

# Minikube 클러스터를 시작합니다.
$ minikube start

2. Next.js 애플리케이션 Docker 이미지 생성하기

다음으로, Next.js 애플리케이션을 Docker 이미지로 빌드해야 합니다. Docker 이미지를 사용하면 쿠버네티스 클러스터에서 애플리케이션을 실행할 수 있습니다.

# Dockerfile

# Node.js 환경을 생성합니다.
FROM node:14-alpine

# 앱 디렉토리를 만들고 작업 디렉토리로 설정합니다.
WORKDIR /app

# 앱 종속성을 설치합니다.
COPY package*.json ./
RUN npm install

# 소스 코드를 복사합니다.
COPY . .

# 앱을 빌드합니다.
RUN npm run build

# 앱을 실행합니다.
CMD [ "npm", "run", "start" ]
# Docker 이미지를 빌드합니다.
$ docker build -t my-next-app .

3. 쿠버네티스 파드 설정하기

다음으로, 쿠버네티스 파드를 설정해야 합니다. 쿠버네티스 파드는 클러스터 내에서 실행되는 단일 컨테이너를 의미합니다. 파드를 통해 우리의 Next.js 애플리케이션을 실행할 수 있습니다.

# next-app.yaml

apiVersion: v1
kind: Pod
metadata:
  name: next-app
spec:
  containers:
  - name: next-app
    image: my-next-app
    ports:
    - containerPort: 3000
# 쿠버네티스에 파드를 생성합니다.
$ kubectl apply -f next-app.yaml

4. 쿠버네티스 서비스 생성하기

마지막으로, 쿠버네티스 서비스를 생성하여 Next.js 애플리케이션에 접근할 수 있도록 설정해야 합니다. 쿠버네티스 서비스는 클러스터 내부에서 파드를 위한 정책을 정의하며, 외부에서 접근하기 위한 로드 밸런싱 기능도 제공합니다.

# next-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: next-service
spec:
  selector:
    app: next-app
  type: LoadBalancer
  ports:
  - protocol: TCP
    port: 80
    targetPort: 3000
# 쿠버네티스에 서비스를 생성합니다.
$ kubectl apply -f next-service.yaml

이제 Next.js 애플리케이션은 쿠버네티스 클러스터 내에서 실행되고 외부에서 접근할 수 있게 되었습니다. 이렇게 구성된 클러스터를 통해 애플리케이션을 효율적으로 관리하고 확장할 수 있습니다.

더 자세한 내용은 Next.js 공식 문서쿠버네티스 공식 문서를 참고해주세요.

#nextjs #kubernetes