바닐라 자바스크립트로 투두리스트를 만들어보고 있다.
http 통신은 json-sever를 사용하는 선에서 마무리하려고 했지만 욕심이 생겨서 검색해보며 express를 사용해 Node.js 백엔드 서버를 만들어보았다.
코드는 완성이 되었으니 백엔드 서버를 배포를 해야 할텐데, 간단하게 배포할 수 있는 호스팅 서비스를 검색해보다가 Heroku를 알게 되었는데 유료로 전환되었다고 해서 heroku를 대체할만한 서비스 중 Fly.io를 사용해 배포하기로 결정했다.
Fly.io
Fly.io는 쉽고 빠르게 컨테이너를 배포할 수 있는 서비스인데 hobby plan을 이용하면 무료로 서비스 배포가 가능해서 가벼운 개인 프로젝트를 배포하기에 적합하다.
Fly.io에 로그인해서 크게 문서를 읽을 것도 없이 작업한 깃헙 계정과 레포에 연결을 하니 Fly.io가 알아서 필요한 파일들을 뚝딱 생성해주고 깃헙 레포에 Fly.io Launch config files라는 제목의 PR까지 만들어 올려주었다.
Fly.io가 만들어준 파일들
Dockerfile
# syntax = docker/dockerfile:1
# Adjust NODE_VERSION as desired
ARG NODE_VERSION=20.18.0
FROM node:${NODE_VERSION}-slim as base
LABEL fly_launch_runtime="Node.js"
# Node.js app lives here
WORKDIR /app
# Set production environment
ENV NODE_ENV="production"
# Throw-away build stage to reduce size of final image
FROM base as build
# Install packages needed to build node modules
RUN apt-get update -qq && \
apt-get install --no-install-recommends -y build-essential node-gyp pkg-config python-is-python3
# Install node modules
COPY package-lock.json package.json ./
RUN npm ci
# Copy application code
COPY . .
# Final stage for app image
FROM base
# Copy built application
COPY --from=build /app /app
# Start the server by default, this can be overwritten at runtime
EXPOSE 3000
CMD [ "node", "server.js" ]
Dockerfile은 애플리케이션을 컨테이너화하기 위해 사용하는 설정 파일이다. 이 파일을 통해 애플리케이션 환경을 정의하고, 이미지를 빌드할 수 있다. Fly.io에서 배포한 Express.js 애플리케이션의 환경을 설정하고 실행 준비를 마친다고 보면 된다.
fly.toml
# fly.toml app configuration file generated for toodoo-be on 2024-12-05T12:25:16Z
#
# See https://fly.io/docs/reference/configuration/ for information about how to use this file.
#
app = 'toodoo-be'
primary_region = 'nrt'
[build]
[http_service]
internal_port = 2999
force_https = true
auto_stop_machines = 'stop'
auto_start_machines = true
min_machines_running = 0
processes = ['app']
[[vm]]
memory = '1gb'
cpu_kind = 'shared'
cpus = 1
memory_mb = 1024
fly.tomldms Fly.io에서 애플리케이션 배포 및 설정을 관리하는 파일로, 애플리케이션을 실행하는 방식을 정의한다. 내가 만든 Express.js 서버가 Fly.io에서 원활하게 작동하도록 도와주는 구성 파일이라 보면 된다.
배포!
아무튼 이렇게 만들어진 PR도 main 브랜치로 merge한 후 fly.io를 통해 deploy 버튼을 누르니 배포가 완료 되었다. (CLI 설치를 했다면 fly deploy 명령어로도 배포 가능)
배포 후 fly.io가 준 호스트네임을 크롬 주소창에 입력해서 GET 요청을 날리니 보여져야 할 것들이 잘 보이고,
콘솔 창을 열어 fetch API를 사용해 get 요청을 날려보았을 때도 돌아와야 할 응답이 잘 출력되는 걸 볼 수가 있다!
아주 뿌듯하고 만족스럽다! 물론 작고 귀여운 코드를 호스팅 서비스를 활용해 배포한 거긴 했지만 그래도 나의 첫 백엔드 서버 배포다😜
참고
'Backend > Express.js' 카테고리의 다른 글
[Express.js] Express를 사용해 간단한 백엔드 서버 API 구축하기 (0) | 2024.12.05 |
---|