Bun 언어별 가이드

Bun 언어별 가이드 (Bun language-specific guide)

Bun 런타임으로 JavaScript 애플리케이션을 컨테이너화하는 방법을 설명하는 가이드예요.

출처: 문서

본문

Bun 시작하기 가이드는 Docker를 사용해 컨테이너화된 Bun 애플리케이션을 만드는 방법을 알려줘요.

감사의 말 (Acknowledgment): Docker는 이 가이드에 기여해준 Pradumna Saraf에게 감사드려요.

무엇을 배우게 되나요? (What will you learn?)

  • Docker를 사용해 Bun 애플리케이션을 컨테이너화하고 실행하기
  • 컨테이너를 사용해 Bun 애플리케이션을 개발할 로컬 환경 설정하기

사전 요구사항 (Prerequisites)

  • JavaScript에 대한 기본 이해가 있다고 가정해요.
  • 컨테이너, 이미지, Dockerfile 같은 Docker 개념에 익숙해야 해요. Docker가 처음이라면 Docker basics 가이드로 시작할 수 있어요.

Bun 시작하기 모듈을 완료하면 이 가이드에서 제공하는 예시와 지침을 바탕으로 자신만의 Bun 애플리케이션을 컨테이너화할 수 있을 거예요.

기존 Bun 애플리케이션을 컨테이너화하는 것부터 시작하세요.

Bun 애플리케이션 컨테이너화하기 (Containerize a Bun application)

사전 요구사항 (Prerequisites)

  • Git 클라이언트가 있어요. 이 섹션의 예시는 명령줄 기반 Git 클라이언트를 사용하지만 어떤 클라이언트든 사용할 수 있어요.

개요 (Overview)

오랫동안 Node.js는 서버 측 JavaScript 애플리케이션의 사실상 표준 런타임이었어요. 최근 몇 년 사이 Bun 웹사이트를 포함한 새로운 대안 런타임이 생태계에서 부상했어요. Node.js와 마찬가지로 Bun은 JavaScript 런타임이에요. Bun은 빠르고 효율적으로 설계된 비교적 가벼운 런타임이에요.

왜 Docker로 Bun 애플리케이션을 개발할까요? 선택할 수 있는 런타임이 여러 개 있는 것은 좋아요. 하지만 런타임 수가 늘어날수록 다양한 런타임과 그 의존성을 환경 전반에서 일관되게 관리하는 것이 어려워져요. 여기서 Docker가 등장해요. 요청에 따라 컨테이너를 만들고 파괴하는 것은 다양한 런타임과 그 의존성을 관리하는 좋은 방법이에요. 또한 비교적 새로운 런타임이기 때문에 Bun을 위한 일관된 개발 환경을 만드는 것이 어려울 수 있어요. Docker는 Bun을 위한 일관된 개발 환경을 설정하는 데 도움을 줄 수 있어요.

샘플 애플리케이션 가져오기 (Get the sample application)

이 가이드에 사용할 샘플 애플리케이션을 클론하세요. 터미널을 열고 작업하려는 디렉터리로 변경한 후 다음 명령을 실행해 저장소를 클론하세요:

$ git clone https://github.com/dockersamples/bun-docker.git && cd bun-docker

이제 bun-docker 디렉터리에 다음 내용이 있어야 해요.

├── bun-docker/
│ ├── compose.yml
│ ├── Dockerfile
│ ├── LICENSE
│ ├── server.js
│ └── README.md

Dockerfile 만들기 (Create a Dockerfile)

Dockerfile을 만들기 전에 기본 이미지를 선택해야 해요. Bun Docker Official Image 또는 Hardened Image 카탈로그의 Docker Hardened Image (DHI)를 사용할 수 있어요.

DHI를 선택하면 가볍고 안전한 프로덕션 준비가 된 이미지라는 이점이 있어요. 자세한 내용은 Docker Hardened Images를 참조하세요.

Docker Hardened Images 사용하기

Bun용 Docker Hardened Images (DHIs)는 Docker Hardened Images 카탈로그에서 사용할 수 있어요. dhi.io 레지스트리에서 DHIs를 직접 pull할 수 있어요.

  1. DHI 레지스트리에 로그인하세요:
$ docker login dhi.io
  1. Bun DHI를 dhi.io/bun:1로 pull하세요. 이 예시의 태그(1)는 최신 1.x 버전의 Bun을 뜻해요.
$ docker pull dhi.io/bun:1

다른 사용 가능한 버전은 카탈로그를 참조하세요.

# Use the DHI Bun image as the base image
FROM dhi.io/bun:1

# Set the working directory in the container
WORKDIR /app

# Copy the current directory contents into the container at /app
COPY . .

# Expose the port on which the API will listen
EXPOSE 3000

# Run the server when the container launches
CMD ["bun", "server.js"]

공식 이미지 사용하기

Docker Official Image을 사용하는 것은 간단해요. 다음 Dockerfile에서 FROM 지시문이 oven/bun을 기본 이미지로 사용하는 것을 알 수 있어요.

이미지는 Docker Hub에서 찾을 수 있어요. 이것은 Bun을 만든 회사 Oven이 만든 Bun용 Docker Official Image이며 Docker Hub에서 사용할 수 있어요.

# Use the official Bun image
FROM oven/bun:latest

# Set the working directory in the container
WORKDIR /app

# Copy the current directory contents into the container at /app
COPY . .

# Expose the port on which the API will listen
EXPOSE 3000

# Run the server when the container launches
CMD ["bun", "server.js"]

기본 이미지를 지정하는 것 외에 Dockerfile은 다음도 해요:

  • 컨테이너의 작업 디렉터리를 /app으로 설정합니다.
  • 현재 디렉터리의 내용을 컨테이너의 /app 디렉터리로 복사합니다.
  • API가 요청을 기다리는 포트 3000을 노출합니다.
  • 마지막으로 컨테이너가 시작될 때 bun server.js 명령으로 서버를 시작합니다.

애플리케이션 실행하기 (Run the application)

bun-docker 디렉터리 안에서 터미널에 다음 명령을 실행하세요.

$ docker compose up --build

브라우저를 열고 http://localhost:3000에서 애플리케이션을 확인하세요. 브라우저에 {"Status" : "OK"} 메시지가 보일 거예요.

터미널에서 ctrl+c를 눌러 애플리케이션을 중지하세요.

백그라운드에서 애플리케이션 실행하기 (Run the application in the background)

-d 옵션을 추가해 터미널에서 분리된 상태로 애플리케이션을 실행할 수 있어요. bun-docker 디렉터리 안에서 터미널에 다음 명령을 실행하세요.

$ docker compose up --build -d

브라우저를 열고 http://localhost:3000에서 애플리케이션을 확인하세요.

터미널에서 다음 명령을 실행해 애플리케이션을 중지하세요.

$ docker compose down

개발을 위해 컨테이너 사용하기 (Use containers for Bun development)

사전 요구사항 (Prerequisites)

Bun 애플리케이션 컨테이너화하기를 완료하세요.

개요 (Overview)

이 섹션에서 컨테이너화된 애플리케이션을 위한 개발 환경을 설정하는 방법을 배우게 됩니다. 여기에는 다음이 포함돼요:

  • 코드를 편집하고 저장할 때 실행 중인 Compose 서비스를 자동으로 업데이트하도록 Compose 구성

샘플 애플리케이션 가져오기 (Get the sample application)

이 가이드에 사용할 샘플 애플리케이션을 클론하세요. 터미널을 열고 작업하려는 디렉터리로 변경한 후 다음 명령을 실행해 저장소를 클론하세요:

$ git clone https://github.com/dockersamples/bun-docker.git && cd bun-docker

서비스 자동 업데이트 (Automatically update services)

코드를 편집하고 저장할 때 실행 중인 Compose 서비스를 자동으로 업데이트하려면 Compose Watch를 사용하세요. Compose Watch에 대한 자세한 내용은 Use Compose Watch를 참조하세요.

IDE나 텍스트 편집기에서 compose.yml 파일을 열고 Compose Watch 지시문을 추가하세요. 다음 예시는 compose.yml 파일에 Compose Watch를 추가하는 방법을 보여줘요.

services:
  server:
    image: bun-server
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "3000:3000"
    develop:
      watch:
        - action: rebuild
          path: .

다음 명령을 실행해 Compose Watch로 애플리케이션을 실행하세요.

$ docker compose watch

이제 server.js를 수정하면 이미지를 다시 빌드하지 않고도 변경 사항을 실시간으로 볼 수 있어요.

테스트해 보려면 좋아하는 텍스트 편집기에서 server.js 파일을 열고 메시지를 {"Status" : "OK"}에서 {"Status" : "Updated"}로 변경하세요. 파일을 저장하고 http://localhost:3000에서 브라우저를 새로고침하세요. 업데이트된 메시지가 보일 거예요.

터미널에서 ctrl+c를 눌러 애플리케이션을 중지하세요.

요약 (Summary)

이 섹션에서 코드를 업데이트할 때 컨테이너를 자동으로 다시 빌드하고 실행하기 위해 Compose Watch를 사용하는 방법도 배웠어요.

관련 정보:

더 알아보기 (Learn more)