Spring Boot · 2026-04-16

Spring Boot 앱을 AWS ECS에 배포하는 방법

Spring Boot 애플리케이션을 Docker로 컨테이너화하고 AWS ECR과 ECS(Fargate)를 사용해 배포하는 전체 배포 과정

작성일 : 2026-04-16 ㆍ 작성자 : 관리자
post
목차

개요

이 글은 Spring Boot 애플리케이션을 AWS ECS에 배포하는 현실적인 절차를 다룬다. 처음 접하는 사람도 따라오기 쉬운 단계로 구성되어 있다. 핵심 흐름은 애플리케이션 빌드 → Docker 이미지 생성 → ECR 푸시 → ECS 태스크와 서비스 구성으로 이어진다. 검색 최적화를 위해 spring boot ecs 배포, aws ecs spring boot 데모, docker spring boot ecs 배포 같은 키워드를 자연스럽게 포함한다.

사전 준비

  • AWS 계정과 CLI(access key) 설정
  • AWS CLI, Docker, Maven 또는 Gradle 설치
  • 간단한 Spring Boot 애플리케이션 준비 (예: 포트 8080, 실행 가능한 JAR)
  • ECR 저장소와 ECS 권한(IAM) 생성 권한

1. 애플리케이션 빌드

먼저 애플리케이션을 패키징한다. Maven 사용 시 보통 다음 명령으로 실행 가능한 JAR을 생성한다.

mvn clean package -DskipTests

2. Dockerfile 작성

간단한 Dockerfile 예시. 경량 JRE 기반 이미지를 사용하면 이미지 크기를 줄일 수 있다.

FROM openjdk:11-jre-slim
ARG JAR_FILE=target/app.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

위 Dockerfile로 로컬에서 이미지 빌드 및 실행 확인이 가능하다.

docker build -t my-spring-boot-app:latest .
docker run -p 8080:8080 my-spring-boot-app:latest

3. AWS ECR에 이미지 푸시

ECR 리포지토리 생성 후 인증 토큰을 받아 푸시한다. 일반적인 흐름은 다음과 같다.

# AWS 로그인
aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin .dkr.ecr.ap-northeast-2.amazonaws.com
# 태그 및 푸시
docker tag my-spring-boot-app:latest .dkr.ecr.ap-northeast-2.amazonaws.com/my-spring-boot-app:latest
docker push .dkr.ecr.ap-northeast-2.amazonaws.com/my-spring-boot-app:latest

이 단계에서 이미지 레지스트리와 태그 규칙을 확인하면 이후 ECS에서 이미지를 참조하기 쉽다.

4. ECS(또는 Fargate) 태스크 정의와 서비스 구성

ECS에서는 태스크 정의로 컨테이너 설정을 지정한다. 예시는 Fargate 런타입을 기준으로 한 최소 구성이다.

{
  "family": "spring-boot-task",
  "networkMode": "awsvpc",
  "requiresCompatibilities": ["FARGATE"],
  "cpu": "512",
  "memory": "1024",
  "containerDefinitions": [
    {
      "name": "spring-boot-container",
      "image": ".dkr.ecr.ap-northeast-2.amazonaws.com/my-spring-boot-app:latest",
      "essential": true,
      "portMappings": [
        { "containerPort": 8080, "protocol": "tcp" }
      ],
      "environment": [
        { "name": "SPRING_PROFILES_ACTIVE", "value": "prod" }
      ]
    }
  ]
}

태스크 등록 후 서비스 생성 단계에서 로드밸런서 연결, desired count, 오토스케일 정책을 설정한다. AWS 콘솔 또는 CloudFormation, CDK를 사용한 인프라 자동화가 권장된다.

5. 네트워크와 로드밸런서 설정

Fargate 사용 시 VPC, 서브넷, 보안 그룹 구성이 필요하다. ALB를 앞단에 두어 트래픽을 분산한다. 보안 그룹은 외부에서 ALB의 80/443 포트를 허용하고, ALB에서 ECS 태스크의 포트(예:8080)로만 접근을 허용하는 것이 일반적이다.

  • VPC: 퍼블릭/프라이빗 서브넷 구성
  • ALB: 리스너와 대상 그룹(Target Group) 연결
  • 보안 그룹: 최소 권한 원칙 적용

6. 배포 확인과 로깅

서비스가 정상적으로 시작되면 ALB DNS 또는 도메인으로 접속해 애플리케이션 응답을 확인한다. 로그는 CloudWatch로 전송하는 설정을 권장한다. 태스크 정의에서 awslogs 드라이버를 설정하면 중앙화된 로그 관리가 가능하다.

7. 문제 해결 포인트

  • 이미지 풀 실패: ECR 권한(IAM)과 리포지토리 이름 확인
  • 컨테이너 기동 실패: 환경 변수, 포트 매핑, JAR 실행 옵션 점검
  • 네트워크 문제: 서브넷과 보안 그룹 규칙 확인
  • 로그 미수집: 로그 드라이버 설정과 CloudWatch 권한 확인

정리

요약하면 spring boot ecs 배포는 애플리케이션 빌드, Docker 이미지 생성, ECR 업로드, ECS 태스크·서비스 구성, ALB와 네트워크 설정 순서로 진행된다. 각 단계에서 권한과 네트워크 구성이 중요하다. 작은 데모 환경부터 시작해 점진적으로 운영 환경을 확장하면 안정적인 aws ecs spring boot 데모 환경 구축이 가능하다. docker spring boot ecs 배포 과정은 반복을 통해 숙련도가 빠르게 향상된다.

spring boot ecs 배포 aws ecs spring boot 데모 docker spring boot ecs 배포 AWS ECR ECS Fargate Dockerfile 클라우드 배포 ALB 설정