Notice
Recent Posts
Recent Comments
Link
«   2026/07   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

co-cherry

[Spring Boot] Docker와 Railway로 Spring Boot + MySQL 배포하기 본문

Springboot

[Spring Boot] Docker와 Railway로 Spring Boot + MySQL 배포하기

co-cherry 2026. 6. 12. 18:14

0. 이번 주차 목표 

원래는 AWS EC2를 이용해 배포를 진행하려고 했지만, 프리티어 종료로 인해 비용이 발생할 수 있어 Railway를 대체 플랫폼으로 선택했다.

Railway는 GitHub Repository 연동, Docker 기반 배포, MySQL 서비스 생성, HTTPS 주소 제공을 지원하기 때문에 Spring Boot와 MySQL을 함께 배포하기에 적합했다.

 

최종적으로 아래와 같은 구조이다. 

GitHub Repository
→ Railway 자동 배포
→ Spring Boot Docker Container
→ Railway MySQL Database
→ Railway HTTPS URL

 

1. 왜 AWS 대신 RailWay를 사용하는지?

원래는 AWS EC2를 사용해 Spring Boot 프로젝트를 배포하려고 했지만,
AWS 프리티어 기간이 종료되어 비용 부담이 발생할 수 있었다.

따라서 이번 실습에서는 AWS 대신 Railway를 사용했다.
Railway는 GitHub Repository 연동, Docker 기반 배포, MySQL 서비스 생성, HTTPS URL 제공을 지원하기 

때문에 Spring Boot + MySQL 프로젝트를 배포하기에 적합했다.

 

2. Railway의 배포 방식

기존에 진행하려던 AWS EC2 방식은 서버를 직접 만들고, 서버 안에 Docker, Java, Nginx 등을 직접 설치해야 한다.

EC2 생성
→ Docker 설치
→ Git clone
→ docker compose up
→ Nginx 설정
→ HTTPS 인증서 발급

 

Railway의 경우, 서버 관리, HTTPS 설정, 자동 배포를 대신 처리해주므로 훨씬 단순해진다. 

GitHub Repository 연결
→ Dockerfile 기반 자동 빌드
→ 환경변수 설정
→ Railway MySQL 연결
→ HTTPS 주소로 접속

 

3. Application.yml에 설정 추가하기

Railway는 배포 환경에서 애플리케이션이 사용할 포트를 PORT 환경변수로 전달한다.

Spring Boot가 이 값을 사용해 실행되도록 server.port를 ${PORT:8080}으로 설정했다.
이 설정을 통해 로컬에서는 기본값인 8080 포트로 실행되고, Railway 배포 환경에서는 Railway가 전달한 PORT 값으로 실행된다.

server:
  port: ${PORT:8080}

 

4. Dockerfile 작성하기

Railway에서 프로젝트를 실행하려면 애플리케이션을 어떤 방식으로 빌드하고 실행할지 알려줘야 한다.
이를 위해 프로젝트 루트에 Dockerfile을 작성했다.

 

FROM eclipse-temurin:17-jdk AS builder
WORKDIR /app

COPY gradlew .
COPY gradle gradle
COPY build.gradle .
COPY settings.gradle .
COPY src src

RUN chmod +x gradlew
RUN ./gradlew clean bootJar -x test

FROM eclipse-temurin:17-jre
WORKDIR /app

COPY --from=builder /app/build/libs/*.jar app.jar

ENTRYPOINT ["java", "-jar", "app.jar"]

 

내용을 간략히 설명하면, 

Dockerfile에서는 먼저 Java 17 JDK 환경에서 Gradle을 이용해 Spring Boot 프로젝트를 jar 파일로 빌드한 후, 
Java 17 JRE 환경으로 넘어가 생성된 jar 파일만 복사한 뒤, java -jar app.jar 명령어로 애플리케이션을 실행하는 것이다. 

 

그 후, 해당 변경사항을 GitHub에 push 한다. 

 

5. Railway 프로젝트 생성하기 

Railway에서 New Project를 생성한 뒤 GitHub Repository를 연결했다.

 

GitHub 로그인 후, 배포할 레포지토리를 입력한다. 

 

프로젝트 루트에 Dockerfile이 존재하기 때문에 Railway는 이를 기반으로 빌드하고 Spring Boot 애플리케이션을 실행한다.

 

그러나, 실행하면서 계속 Crashed 오류가 발생하는데 원인을 찾아보니 환경 변수들이 없어서였다. 

 

이를 해결하기 위해 MySQL을 등록해보자. 

기존 로컬 설정에서의 환경 변수가 아닌 반드시 Railway에서 추가한 MySQL 서비스의 값들을 넣어주어야 한다. 

6. MySQL 서비스 추가하기 

DataBase 선택 후 MySQL 선택하기

 

성공적으로 추가되었다면 Variables에 이와 같이 값이 뜰 것이다. 

이 값들을 아까 오류가 났던 환경변수 값들로 추가해주자. 

 

수정 후, 재 배포를 시도해보니 성공적으로 배포가 완료되었다. 

7. 배포 테스트 

Settings에서 Public Networking 으로 도메인을 생성해 접속한 뒤, 인증 없이 실행 가능한 도메인을 실행해보았다. 

다음과 같이 성공적으로 처리되는 것을 볼 수 있다. 

Railway를 사용하면 GitHub push 이후 자동 배포가 이루어지고, HTTPS URL도 기본으로 제공된다.
덕분에 EC2에 직접 접속하거나 Nginx, Certbot을 설정하지 않고도 배포와 HTTPS 적용을 완료할 수 있었다!

+) Redis 관련 설정 

Railway MySQL 처럼 Redis도 따로 추가하지 않으면 연결할 수 없다.

추후 Redis를 추가할 수 있으므로 다음과 같은 형태로 application.yml을 수정했다. 

spring:
  data:
    redis:
      host: ${REDIS_HOST:localhost}
      port: ${REDIS_PORT:6379}

 

https://bbin-guuuu.tistory.com/19

 

[Railway] Railway로 스프링 프로젝트 무료 배포하기 (MySQL 연동까지)

필자는 웹서비스 개발을 공부하다가 Railway.app에 프로젝트를 배포할 수 있는 기회가 주어졌다.혼자서 공식문서와 구글링을 하며 이곳저곳 알아보러 다닌 부분이 많이 힘들었어서 배포 과정을 정

bbin-guuuu.tistory.com

 

Railway를 사용해보니 EC2에 직접 배포하는 방식보다 훨씬 간단하게 배포를 완료할 수 있었다.
GitHub Repository 연동, 자동 배포, HTTPS 제공 등이 기본적으로 지원되기 때문이다.

다만 Railway는 많은 인프라 설정을 플랫폼이 대신 처리해주는 방식이기 때문에,

서버 설정이나 네트워크, HTTPS 구성 과정을 직접 경험하기에는 한계가 있는 것 같다. 
반대로 AWS EC2는 설정할 것이 많지만, 그만큼 서버 환경을 직접 제어하고 배포 구조를 깊게 이해할 수 있다는 장점이 있다.