순서
<aside>
구축
<aside>
1.1 Node.js 애플리케이션 코드 작성
index.js 파일에 간단한 웹 서버 코드를 작성하였음. 이 서버는 Express를 사용하였으며, 기본 경로 /로 HTTP 요청이 들어오면 HTML 메시지를 반환하도록 설정하였음.
코드는 아래와 같음:
javascript
복사편집
const express = require('express');
const app = express();
const PORT = 3000;
app.get('/', (req, res) => {
res.send('<h1>Welcome to My Node.js Server!</h1><p>This is served from a Node.js container.</p>');
});
app.listen(PORT, () => {
console.log(`Server is running on <http://localhost>:${PORT}`);
});
1.2 의존성 관리 설정
Node.js 프로젝트의 의존성을 관리하기 위해 package.json 파일을 작성하였음. 이 파일에는 express 라이브러리를 포함하였음.
package.json 파일의 내용은 아래와 같음:
json
복사편집
{
"name": "my-nodejs-app",
"version": "1.0.0",
"description": "A simple Node.js web server",
"main": "index.js",
"scripts": {
"start": "node index.js"
},
"dependencies": {
"express": "^4.18.2"
}
}
1.3 Dockerfile 작성
Node.js 애플리케이션을 Docker 컨테이너에서 실행하기 위해 Dockerfile을 작성하였음.
작성된 Dockerfile은 아래와 같음:
dockerfile
복사편집
FROM node:16
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
1.4 Docker 이미지 빌드 및 테스트
Dockerfile을 사용하여 Docker 이미지를 빌드하였음. 명령어는 다음과 같음:
bash
복사편집
docker build -t my-nodejs-app:latest .
로컬에서 Docker 컨테이너를 실행하고, 정상 작동 여부를 확인하였음:
bash
복사편집
docker run -p 3000:3000 my-nodejs-app:latest
브라우저에서 http://localhost:3000에 접속하여 정상적으로 메시지가 출력됨을 확인하였음.
2.1 ECR 리포지토리 생성
AWS CLI를 사용하여 ECR 리포지토리를 생성하였음:
bash
복사편집
aws ecr create-repository --repository-name my-nodejs-app --region ap-northeast-2
2.2 ECR 로그인
AWS CLI를 통해 ECR 레지스트리에 인증을 수행하였음:
bash
복사편집
aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin <your-account-id>.dkr.ecr.ap-northeast-2.amazonaws.com
2.3 Docker 이미지 태그 설정 및 업로드
ECR 레지스트리에 이미지를 업로드하기 위해 태그를 설정하고 이미지를 푸시하였음:
bash
복사편집
docker tag my-nodejs-app:latest <your-account-id>.dkr.ecr.ap-northeast-2.amazonaws.com/my-nodejs-app:latest
docker push <your-account-id>.dkr.ecr.ap-northeast-2.amazonaws.com/my-nodejs-app:latest
3.1 Deployment 및 Service 파일 작성
Node.js 애플리케이션을 Kubernetes 클러스터에 배포하기 위해 deployment.yaml과 service.yaml 파일을 작성하였음.
Deployment 파일:
yaml
복사편집
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nodejs-app
labels:
app: my-nodejs-app
spec:
replicas: 2
selector:
matchLabels:
app: my-nodejs-app
template:
metadata:
labels:
app: my-nodejs-app
spec:
containers:
- name: my-nodejs-app
image: <your-account-id>.dkr.ecr.ap-northeast-2.amazonaws.com/my-nodejs-app:latest
ports:
- containerPort: 3000
Service 파일:
yaml
복사편집
apiVersion: v1
kind: Service
metadata:
name: my-nodejs-app-service
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 3000
selector:
app: my-nodejs-app
3.2 Kubernetes 클러스터에 배포
작성한 YAML 파일을 Kubernetes 클러스터에 적용하였음:
bash
복사편집
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
3.3 LoadBalancer 확인
kubectl get services 명령을 통해 생성된 LoadBalancer의 EXTERNAL-IP를 확인하였음.
브라우저를 통해 확인한 결과, Node.js 서버가 정상적으로 작동함을 확인하였음.
4.1 Route 53 설정
AWS Route 53에서 Hosted Zone을 생성하거나 기존 도메인을 사용하였음.
4.2 A 레코드 추가
LoadBalancer의 EXTERNAL-IP를 Route 53 도메인의 A 레코드로 추가하였음:
AYes4.3 도메인 테스트
Route 53 도메인을 브라우저에서 확인하였으며, 정상적으로 Node.js 애플리케이션이 작동하는 것을 확인하였음.
</aside>