[Fly.io] Fly.io를 이용한 프로그램 배포 가이드 🚀

김찬미·2024년 7월 24일
0

Toy Project

목록 보기
4/9

✈️ Fly.io를 이용한 배포 가이드

이 글은 Fly.io를 이용해 Java Spring Boot 애플리케이션을 배포하는 방법과 실제로 겪었던 문제점 및 주의점을 포함하고 있습니다.

Fly.io란?

Fly.io는 애플리케이션을 쉽게 배포하고 확장할 수 있는 클라우드 플랫폼이다. 컨테이너 기반 배포를 지원하며, 간단한 명령어로 애플리케이션을 전 세계에 배포할 수 있다.


Fly.io 배포 과정

1. Fly.io 계정 생성 및 로그인

Fly.io에 접속하여 계정을 생성한다. 생성 후 CLI 도구를 사용하여 로그인한다.

flyctl auth login

2. 새로운 Fly 앱 생성

애플리케이션을 배포할 새로운 Fly 앱을 생성한다.

flyctl apps create safe-account

3. Dockerfile 작성

프로젝트 루트 디렉토리에 Dockerfile을 작성한다.

# Use the official OpenJDK 17 image as a parent image
FROM openjdk:17-jdk-slim

# Set the working directory
WORKDIR /app

# Copy the jar file into the container
COPY target/safe_account-0.0.1-SNAPSHOT.jar app.jar

# Run the jar file
ENTRYPOINT ["java", "-jar", "app.jar"]

4. fly.toml 파일 생성

Fly 앱 설정을 위한 fly.toml 파일을 생성하고 다음과 같이 작성한다.

# fly.toml app configuration file generated for safe-account on 2024-07-24T15:46:34+09:00
#
# See https://fly.io/docs/reference/configuration/ for information about how to use this file.
#

app = 'safe-account'
primary_region = 'nrt'

[http_service]
  internal_port = 8080
  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

5. 애플리케이션 배포

마지막으로 Fly에 애플리케이션을 배포한다.

flyctl deploy

모든 과정을 마치고 https://safe-account.fly.dev 에 접속하면 정상적으로 실행이 되는 모습을 볼 수 있다!


실제로 겪었던 문제점 및 주의점

1. Java Runtime 버전 문제

애플리케이션이 Java 17로 컴파일되었지만, 컨테이너에서 Java 11 Runtime을 사용하여 java.lang.UnsupportedClassVersionError 오류가 발생했다. 이를 해결하기 위해 Dockerfile에서 OpenJDK 17 이미지를 사용하도록 수정했다.

2. 포트 설정 문제

애플리케이션이 기본적으로 8080 포트에서 실행되도록 설정되어 있었으나, 실제 실행 포트는 9091로 설정되어 있었다. Fly의 기본 포트는 8080이므로 application.yml 파일을 수정해 두 설정을 일치시켰다.

server:
  port: 8080
  address: 0.0.0.0

3. auto_stop 설정 문제

무료 플랜에서는 auto_stop_machines 설정을 none으로 두어도 경고가 발생했다. stop으로 설정하여 문제를 해결했다.

auto_stop_machines = "stop"

4. 기타 주의사항

  • Docker 이미지 빌드 시, 필요한 파일이 모두 포함되었는지 확인한다. 특히, JAR 파일 경로를 정확히 설정한다.
  • 애플리케이션의 실행 포트가 Fly와 일치하는지 확인한다.
  • Fly에서 제공하는 로그를 통해 실시간으로 문제를 파악하고 해결한다.

마치며

이번 프로젝트를 통해 Fly.io를 처음 사용해보았는데, 간단한 명령어로 애플리케이션을 배포할 수 있어 매우 편리했다. 하지만 처음 사용하는 도구인 만큼 다양한 문제점들이 발생했지만, 이를 해결해 나가면서 배포 과정을 익힐 수 있었다.

나같은 문제를 겪는 사람들에게 조금이라도 도움이 될 수 있었으면 좋겠다!

profile
백엔드 개발자

0개의 댓글

관련 채용 정보