본문 바로가기
Dart/Dart Server

[고급] Dart 서버 서버 배포 및 운영 / Docker를 활용한 Dart 서버 애플리케이션 컨테이너화

by Maccrey Coding 2024. 9. 17.
반응형

 

서버 애플리케이션을 배포하고 운영하는 과정에서 컨테이너화는 매우 중요한 기술입니다.

컨테이너화를 통해 애플리케이션을 다양한 환경에서 일관되게 실행할 수 있으며, 배포와 관리가 훨씬 용이해집니다.

이번 블로그에서는 Dart 서버 애플리케이션을 Docker를 사용하여 컨테이너화하는 방법을 초보자도 쉽게 이해할 수 있도록 설명하겠습니다.

1. Docker와 컨테이너화 개념 이해하기

Docker는 애플리케이션을 컨테이너라는 독립적인 환경에서 실행할 수 있게 도와주는 플랫폼입니다.

컨테이너화는 애플리케이션과 그 실행 환경을 하나의 패키지로 묶어, 어디서나 동일한 방식으로 실행될 수 있도록 합니다.

Docker의 주요 개념

  • 컨테이너: 애플리케이션과 그에 필요한 모든 의존성을 포함한 독립적인 실행 환경입니다.
  • 이미지: 컨테이너의 실행에 필요한 모든 정보를 담고 있는 읽기 전용 템플릿입니다.
  • Dockerfile: 이미지를 만들기 위한 설정 파일로, 애플리케이션을 컨테이너화하는 과정을 정의합니다.

2. Dart 서버 애플리케이션 준비하기

Dart는 Google에서 개발한 프로그래밍 언어로, 서버 애플리케이션을 만들 때에도 유용하게 사용할 수 있습니다. 간단한 Dart 서버 애플리케이션을 작성해보겠습니다.

간단한 Dart 서버 애플리케이션

먼저, Dart 서버 애플리케이션을 작성합니다. 다음은 bin/server.dart 파일에 저장할 간단한 HTTP 서버 예제입니다.

import 'dart:io';

void main() {
  // HTTP 서버를 8080 포트에서 실행합니다.
  final server = HttpServer.bind(InternetAddress.anyIPv4, 8080);
  server.then((HttpServer httpServer) {
    print('서버가 ${httpServer.address.address}:${httpServer.port}에서 실행 중입니다.');

    // 요청을 처리합니다.
    httpServer.listen((HttpRequest request) {
      // 요청에 대한 응답을 작성합니다.
      request.response
        ..write('안녕하세요! Dart 서버입니다.')
        ..close();
    });
  }).catchError((e) {
    print('서버 실행 오류: $e');
  });
}

 

이 서버는 HTTP 요청을 받고, "안녕하세요! Dart 서버입니다."라는 응답을 반환합니다.

3. Dockerfile 작성하기

Dockerfile은 Docker 이미지의 빌드를 자동화하는 파일입니다. 이 파일에는 애플리케이션을 실행하기 위한 모든 설정이 포함되어 있습니다.

Dockerfile 예제

다음은 Dart 서버 애플리케이션을 위한 Dockerfile입니다.

# 1. Dart SDK 이미지를 기본 이미지로 사용합니다.
FROM dart:stable

# 2. 작업 디렉토리를 설정합니다.
WORKDIR /app

# 3. 애플리케이션의 의존성을 관리할 pubspec.yaml 파일을 복사합니다.
COPY pubspec.* ./

# 4. Dart 의존성을 설치합니다.
RUN pub get

# 5. 애플리케이션 소스 코드를 컨테이너에 복사합니다.
COPY . .

# 6. 서버 애플리케이션을 빌드합니다.
RUN dart compile exe bin/server.dart -o bin/server

# 7. 컨테이너가 시작될 때 실행할 명령을 설정합니다.
CMD ["bin/server"]

설명

  • FROM dart:stable: Dart SDK가 설치된 기본 이미지를 사용합니다.
  • WORKDIR /app: 애플리케이션이 위치할 작업 디렉토리를 설정합니다.
  • COPY pubspec.* ./와 RUN pub get: 의존성 파일을 복사하고, 의존성을 설치합니다.
  • COPY . .: 애플리케이션 소스 코드를 복사합니다.
  • RUN dart compile exe bin/server.dart -o bin/server: Dart 애플리케이션을 실행 파일로 컴파일합니다.
  • CMD ["bin/server"]: 컨테이너가 시작될 때 실행할 명령을 설정합니다.

4. Docker 이미지 빌드 및 실행하기

이제 Dockerfile을 사용해 Docker 이미지를 빌드하고, 컨테이너를 실행할 준비가 되었습니다.

1. Docker 이미지 빌드하기

터미널에서 Dockerfile이 있는 디렉토리로 이동한 후, 다음 명령어를 실행합니다.

docker build -t dart-server-app .

설명

  • docker build -t dart-server-app .: 현재 디렉토리의 Dockerfile을 사용하여 dart-server-app이라는 이름의 이미지를 빌드합니다.

2. Docker 컨테이너 실행하기

이미지가 빌드되면, 다음 명령어를 사용하여 컨테이너를 실행합니다.

docker run -d -p 8080:8080 dart-server-app

설명

  • docker run -d -p 8080:8080 dart-server-app: 컨테이너를 백그라운드에서 실행하고, 호스트의 8080 포트를 컨테이너의 8080 포트에 매핑합니다.

5. Docker 컨테이너에서 Dart 서버 애플리케이션 실행하기

컨테이너가 실행되면, 웹 브라우저에서 http://localhost:8080으로 접속하여 Dart 서버 애플리케이션이 제대로 실행되는지 확인할 수 있습니다.

"안녕하세요! Dart 서버입니다."라는 메시지가 표시되면 성공적으로 컨테이너화된 서버 애플리케이션이 실행되고 있는 것입니다.

 

이번 블로그에서는 Dart 서버 애플리케이션을 Docker를 활용해 컨테이너화하는 방법을 다뤄보았습니다.

Docker는 애플리케이션의 일관된 실행 환경을 제공하고, 배포와 운영을 훨씬 수월하게 만들어줍니다.

  • Dockerfile을 사용해 애플리케이션의 환경을 설정하고, 필요한 의존성을 설치합니다.
  • Docker 이미지를 빌드하여 애플리케이션을 컨테이너화합니다.
  • Docker 컨테이너를 실행하여 애플리케이션을 테스트합니다.

이 과정을 통해 Dart 서버 애플리케이션을 손쉽게 배포하고 관리할 수 있습니다.

Docker를 활용하면 애플리케이션의 일관성 있는 배포와 효율적인 운영이 가능하니, 여러분도 직접 시도해보세요!

구독!! 공감과 댓글은 저에게 큰 힘이 됩니다.

Starting Google Play App Distribution! "Tester Share" for Recruiting 20 Testers for a Closed Test.

 

Tester Share [테스터쉐어] - Google Play 앱

Tester Share로 Google Play 앱 등록을 단순화하세요.

play.google.com

 

 

반응형