본문 바로가기
Programming

CI/CD #1 배포 구성하기 Node.js 빌드

by 개발자 염상진 2022. 12. 29.

 

 

CI/CD

 

서비스를 개발한 후 사용자에게 전달하기 위해서는 배포를 진행해야 합니다. 물리적인 서버를 구성해서 서비스를 배포하는 것 보다 AWS에서 제공하는 IaaS를 이용해 on demand 형식으로 서버를 구성하면 합리적인 가격으로 서비스를 운영할 수 있습니다.

 

 

 

한 걸음 더 나아가 CI/CD는 Continuous Integration / Continuous Deploy의 약자로 github과 같은 형상관리자에서 수정사항을 push 하면 이것을 트리거로 잡아서 원격 서버에 자동으로 배포까지 진행해주는 서비스입니다. 간단하게 수정사항만 신경쓰면 되고, 이후 작업은 알아서 해주니 편리하지 않을 수 없습니다.

CI의 경우 빌드와 테스트처리를 자동으로 할 수 있습니다. 배포하기 전 정상적으로 테스트를 통과하는지, 그리고 프로덕션 버전으로 배포판을 작성할 수 있어야 합니다.

CD의 경우 원격 서버 혹은 S3 버킷과 같은 정적 웹 사이트 배포가 가능하도록 합니다. 

이번 시리즈에서 구성하는 기술 스택은 다음과 같습니다.

CVS : Github
CI/CD : Github Actions
Server : AWS
Program : Node.js(express server)
Image : Docker

 

배포 아키텍처

 

전체적인 배포 구성을 보면 아래 그림과 같습니다. Node.js에서 작성한 서버 프로그램은 Dockerfile로 형상화를 한 후 AWS EC2로 배포를 진행합니다.

기존의 경우 로컬에서 작업한 서버 프로그램(Express)를 테스트 돌리고 도커파일로 이미지화 한 후 github에 push하고, AWS EC2로 원격접속해서 이미지를 다운 받고 컨테이너를 만들어서 돌려야 합니다. 이 과정을 github actions으로 자동화하는 것이 CI/CD입니다.

 

 

 

 

Step1 : Express 서버 프로그램 작성

 

Terminal에서 새로운 Node.js 프로젝트를 실행합니다.

$ npm init -y

 

Express를 설치합니다. 배포를 위한 간단한 서버 프로그램을 작성해 볼 예정이므로, 추가적으로 설치가 없다고 해서 실망할 필요는 없습니다. 추가로 환경변수 설정을 위해 dotenv를 설치합니다.

$ npm install express dotenv

 

엔트리 포인트가 되는 app.js 파일을 생성합니다.

$ touch app.js

 

app.js에서 간단한 서버 프로그램을 작성합니다.

const express = require('express')
const app = express();
const dotenv = require('dotenv')

dotenv.config()


app.get("/", (req, res)=>{
    res.status(200).json("hello server! / This is deployed by Github Actions")
})

app.listen(process.env.PORT, ()=>{
    console.log(`server is on ${process.env.PORT}`)
})

 

환경 변수를 생성해줍니다.

$ touch .env

 

환경 변수에 PORT번호를 입력합니다.

PORT = 9901

 

여기까지 디렉토리 구조는 다음과 같습니다.

.
├── app.js
├── .env
├── node_modules
├── package.json
└── package-lock.json

 

 

서버 실행을 위해 package.json 파일을 수정해줍니다.

"scripts": {
    "start": "node app",
    "test": "echo \"Error: no test specified\" && exit 1"
  },

 

서버를 실행합니다.

$ npm run start

 

이제 localhost:9901로 접속하면 서버가 우리를 반겨주기 시작합니다.

이제 배포를 위한 서버 프로그램이 완성되었습니다. 다음 포스팅에서는 Dockerfile 작성과 AWS EC2 인스턴스 생성을 알아보도록 하겠습니다.

🚀️ 도움이 되셨다면 구독좋아요 부탁드립니다 👍️

 

 

 

 

댓글