[Just Site] 3. node.js 서버 만들기 (feat. Docker)

2022. 2. 6. 17:15프로젝트/Just Site

728x90

맨날 서버 만들고 운용하기 싫어서
크롬 익스텐션으로 만들고 뭐시기 했는데
이젠 해야할 때가 아닐까


폴더 생성

다음의 커맨드를 순서대로 실행한다.

# 폴더 생성. 폴더가 이미 있다면 패스
mkdir just_site_backend
# 위치를 폴더 내부로 이동
cd just_site_backend
# node 초기화
npm init
# git 초기화
git init

다음과 같이 폴더가 생긴다.


Entry (진입점) 만들어주기

현재 package.json은 다음과 같다.

{
  "name": "just_site_backend",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node index.js"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
  }
}

main이 이 프로젝트의 진입점이라는 얘기다.
그리고 yarn start, npm start와 같은 스크립트를 실행하면,
"node index.js"가 실행된다는 것도 알 수 있다.

그러니까 index.js를 만들어주자.

const express = require('express');
const app = express();
const port = 3001;

app.get('/', (req, res) => {
  res.send('Hello World!');
});

app.listen(port, () => {
  console.log(`Example app listening at http://localhost:${port}`);
});

 

디렉토리는 다음과 같아진다.

코드 설명을 하자면,

- 포트는 3001번을 쓴다. (3000번은 프론트엔드 쓸거라서)
- '/'에 대해 GET 요청을 처리를 한다. "Hello World!"을 응답함


잊지 말아야 할 것 (패키지 추가)

호로록 넘어가긴 했지만 index.js의 첫 줄을 보자.

const express = require('express');

그렇다. 우리는 'express' 패키지가 없다.

없으면 뭐다? 추가해준다.

커맨드에 다음을 실행한다.

# npm으로 설치
npm install express

# yarn으로 설치
yarn add express

위와 같이 dependencies에 express가 추가되었다.


서버 실행하기

자, 서버 드 가자!

# 1. node로 스크립트 실행
node index.js
# 2. npm으로 실행.
npm start
# 3. yarn으로 실행
yarn start

셋 중에 하나를 선택하면 된다. 나는 yarn으로 패키지 관리를 하기 때문에 
세번째 방법을 쓰겠다.

다음과 같이 3001번에서 서버가 돌아가고 있다.
여기서

- 서버를 끄고 싶다면 ctrl + c를 누르자.
- 이 상태로 커맨드 창을 쓰고 싶다면 커맨드 창을 하나 새로 열어야 한다.


서버 확인

자, 그러면 서버가 정상적으로 돌아가는지 확인해보자.

http://localhost:3001로 접속한다.

보다시피 서버가 메시지를 전송해주었다.


Docker 빌드하기

도커가 설치되었다는 가정하에, 폴더에 'Dockerfile' 파일을 생성한다. (대소문자 주의, 확장자 없음)

파일 안에 다음과 같이 작성한다.

FROM node:16-alpine
RUN apk add --no-cache python2 g++ make
WORKDIR /backend
COPY . .
RUN yarn install --production
CMD ["yarn", "start"]

컨테이너 내에서 /backend 디렉토리에 생성을 한다는 얘기다.
마지막 줄을 보면, 'yarn start'를 실행한다는 걸 알 수 있다.

이제 빌드를 해보자.
커맨드창에서 다음을 입력한다.

docker build -t just_site_backend .

현재 위치 (마지막 '.')의 내용을 빌드하고,
just_site_backend라는 태그를 붙인다는 얘기다.

Docker desktop의 'Images' 탭에 가보면 just_site_backend라는 이미지가 생긴 것을 확인할 수 있다.


Docker 컨테이너 실행

이제 이 이미지를 기반으로 컨테이너를 구동할 것이다.

다음의 커맨드를 실행한다.

docker run -dp 3001:3001 just_site_backend

이전 게시물에서도 설명했지만,
-d는 백그라운드에서 구동하기,
-p는 컨테이너의 포트를 호스트의 포트에 연결하는 것이다.
(단축 옵션들끼리는 합치는게 가능하다. -d + -p = -dp)

다음과 같이 실행이 되었다.
파란 글씨를 보면 'just_site_backend' 이미지를 기반으로 구동되었음을 알 수 있다.


Docker 서버 확인하기

위 오른쪽 아이콘중에 첫번째인 'OPEN IN BROWSER'를 클릭하거나,
인터넷 브라우저를 열어서 localhost:3001로 접속한다.

다음과 같이 잘 구동이 되고 있음을 확인하였다.