Docker

[Docker] Docker 배포_Node.js 프로젝트 (코딩온)

효진인데요 2024. 1. 4. 15:57

 

 

 

 

 

 

Docker로 React 프로젝트와 Spring Boot 프로젝트를 배포하는 실습을 해보았다.

 

이번에는 Node.js 프로젝트를 배포하는 실습을 해볼 차례이다.

 

우선 Node.js 프로젝트를 생성할 Visual Studio Code와 Docker Desktop은 설치 및 실행이 완료된 상태여야 한다.

 

 

 

1. Node.js 프로젝트 생성

 

 

프로젝트 생성

 

터미널에서 Node.js 프로젝트를 생성한다.

 

아래 명령어를 따라 프로젝트를 생성하면 된다.

 

프로젝트 명은 현재 코드에서는  node-with-docker 로 되어 있으나, 바꿔도 상관없다.

 

mkdir node-with-docker  // "node-with-docker"라는 이름의 디렉토리 생성
cd node-with-docker    // 새로 생성한 "node-with-docker" 디렉토리로 이동
npm init -y     // Node.js 프로젝트를 초기화하고 모든 설정을 기본값으로 자동 입력

 

 

명령어를 실행하면 package.json 파일이 생성되며, 프로젝트가 기본 설정으로 생성된다.

 

 

 

의존성 추가

 

 npm install express   명령어로 express 프레임워크 의존성을 추가한다.

express 프레임워크를 이용해 서버를 간단히 구축하기 위함이다.

 

package.json

 

npm install 뒤에 특정 버전을 붙이지 않으면 가장 최신 버전으로 자동으로 추가된다.

package.json에서 express가 dependencies에 추가된 것을 확인할 수 있다.

 

 

 

메인 파일 (index.js) 생성

 

프로젝트의 메인 파일인 index.js 파일을 생성하고 아래와 같이 코드를 작성한다.

 

// index.js

const express = require('express');
const app = express();
const PORT = 5000;

app.get('/', (req, res) => {
  res.send(req.query.name);
});

app.listen(PORT, () => {
  console.log(`Server is open, port: ${PORT}`);
});

 

 

간단한 코드이지만 간단하게 정리해 보았다.

const express = require('express'); express 프레임워크를 사용하기 위해 express 모듈 불러오기
const app = express(); express 애플리케이션을 생성
app 객체를 사용해 웹 서버와 라우팅을 구성
const PORT = 5000; 서버가 리스닝할 포트를 지정
app.get('/', (req, res) => {...}); HTTP GET 요청이 ' / ' 경로로 올 때의 핸들러 정의
req는 요청(request) 객체, res는 응답(response) 객체
req.query.name은 URL 쿼리 파라미터 중 'name'에 해당하는 값을 가져옴

app.listen(PORT, () => {...}); 서버를 특정 포트에서 시작하도록 함 (위에서 지정한 포트)
서버가 시작되면 콜백 함수가 실행되어 시작 메시지를 콘솔에 출력

 

 

 

 

프로젝트 전체 구조는 아래와 같다.

 

프로젝트 구조 및 index..js 파일

 

 

 

서버 시작

 

 node index.js  명령어를 실행해 서버를 시작한다.

 

 

서버 실행

 

서버가 정상적으로 시작되면 index.js에서 정의한 것과 같이 콘솔에 서버 시작 메시지가 찍힌다.

 

 

 

 http://localhost:5000/?name={아무값넣고요청보내보기} 

 

http://localhost:5000/?name=hyojin 이런 식으로 URL을 작성하면 

쿼리 스트링의 name에 대한 value 값이 브라우저 화면에 보이게 된다.

 

 

 

 

 

2. Dockerfile 생성

 

index.js를 생성한 경로에 Dockerfile 파일을 생성한다.

 

# 이미지 지정
FROM node:16

# 작업 디렉토리 생성
WORKDIR /app

# 소스 추가
COPY . /app

# 패키지 설치
RUN npm install

# 포트 매핑
EXPOSE 5000

# 실행 명령
CMD [ "node", "index.js" ]

 

 

FROM node:16 베이스 이미지로 Node.js 16 버전을 사용
해당 이미지는 Node.js 개발 환경을 포함하고 있어 Node.js 애플리케이션 실행에 적합
WORKDIR /app 작업 디렉토리를 /app으로 설정
나머지 명령어들이 실행될 기본 디렉토리
COPY . /app 현재 호스트 머신의 모든 파일을 컨테이너의 /app 디렉토리로 복사
현재 작업 디렉토리의 모든 파일을 컨테이너로 가져오는데 사용됨
RUN npm install Node.js 애플리케이션에 필요한 패키지 설치
EXPOSE 5000 컨테이너에서 사용할 포트 지정
호스트와의 포트 매핑 설정 X ➡️ 단순히 이 컨테이너가 사용할 포트를 노출시키는 역할
CMD [ "node", "index.js" ] 컨테이너가 시작될 때 실행되는 기본 명령어 설정

 

 

 

폴더 구조 및 Dockerfile

 

Dockerfile의 생성 위치와 코드 확인용으로 넣어두었다.

 

 

 

 

3. Dockerfile로 Node.js 프로젝트 배포

 

 docker build -t my-node-app . 

명령어로 이미지를 build 해준다.

 

 

이렇게 명령어가 정상적으로 실행이 완료되면,

 

 

 

Docker Desktop의 Images 탭에 이미지가 생성된 것을 확인할 수 있다.

 

 

 

 

 docker run --name node-project -p 5000:5000 -d my-node-app 

명령어로 컨테이너를 실행해 준다.

 

 

 

 

마찬가지로 실행 완료되면 이젠 Docker Desktop의 Comtainer 탭에서 컨테이너가 생성된 것을 확인할 수 있다.

 

 

 

 

브라우저에 접속하여

 http://localhost:5000/?name={아무값넣고요청보내보기} 

요청을 보냈을 때 화면이 잘 보이면 배포가 성공한 것이다.

 

ㅎㅅㅎ

 

 

 

 

728x90