본문 바로가기
Backend/Infra

[AWS] ECS 배포 트러블슈팅 기록

by boolynn 2026. 5. 8.

1. JVM_OPTS 따옴표 문제

발생 원인 .env 파일에서 JVM_OPTS 값을 따옴표로 감싸면 ECS가 따옴표 자체를 JVM 옵션으로 전달함

 

에러 메시지

Could not find or load main class "-Xmx384m"
Caused by: java.lang.ClassNotFoundException: "-Xmx384m"

 

해결 방법

# 수정 전
JVM_OPTS="-Xmx384m -Xms256m -XX:MaxMetaspaceSize=64m -XX:+UseSerialGC"

# 수정 후
JVM_OPTS=-Xmx384m -Xms256m -XX:MaxMetaspaceSize=64m -XX:+UseSerialGC

2. S3 환경변수 파일의 플레이스홀더 미지원

발생 원인 ECS의 S3 환경변수 파일은 ${} 플레이스홀더를 지원하지 않아서 변수 참조가 그대로 문자열로 전달됨

 

에러 메시지

Unable to determine Dialect without JDBC metadata
(please set 'jakarta.persistence.jdbc.url')

 

해결 방법

# 수정 전
SPRING_DATASOURCE_URL=jdbc:postgresql://${RDS_ENDPOINT}/discodeit

# 수정 후
SPRING_DATASOURCE_URL=jdbc:postgresql://실제엔드포인트:5432/discodeit

3. application.yaml 들여쓰기 오류

발생 원인 s3 설정이 local 하위에 잘못 들여쓰기 되어 discodeit.storage.s3.* 프로퍼티가 바인딩되지 않아 @ConditionalOnProperty 조건이 충족되지 않음

 

에러 메시지

No qualifying bean of type 'BinaryContentStorage' available

 

해결 방법

# 수정 전
discodeit:
  storage:
    local:
      root-path: ...
      s3:          # local 안에 잘못 들여쓰기됨
        access-key: ...

# 수정 후
discodeit:
  storage:
    local:
      root-path: ...
    s3:            # local과 같은 레벨로 수정
      access-key: ...

4. S3BinaryContentStorage가 test 폴더에 위치

발생 원인 S3BinaryContentStorage.java를 src/test/java에 작성해서 빌드 시 포함되지 않아 Bean으로 등록되지 않음

 

에러 메시지

Parameter 2 of constructor in BasicBinaryContentService 
required a bean of type 'BinaryContentStorage' that could not be found.

 

해결 방법

src/test/java/.../storage/s3/S3BinaryContentStorage.java
→ src/main/java/.../storage/s3/S3BinaryContentStorage.java

로 이동 후 재빌드


5. OutOfMemoryError: Metaspace

발생 원인 t3.micro(1GB RAM) 환경에서 JVM 메타스페이스 메모리 부족

 

에러 메시지

java.lang.OutOfMemoryError: Metaspace
Exception in thread "main"
Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler

 

해결 방법

# 수정 전
JVM_OPTS=-Xmx384m -Xms256m -XX:MaxMetaspaceSize=64m -XX:+UseSerialGC

# 수정 후
JVM_OPTS=-Xmx256m -Xms128m -XX:MaxMetaspaceSize=128m -XX:+UseSerialGC

Heap을 줄이고 Metaspace를 늘려서 균형 조정


6. t2.micro 프리티어 미지원

발생 원인 ap-northeast-2 리전에서 ECS EC2 인스턴스로 t2.micro 사용 시 프리티어 대상이 아님

 

에러 메시지

The specified instance type is not eligible for Free Tier.
Launching EC2 instance failed.

 

해결 방법 Launch Template 인스턴스 유형을 t2.micro → t3.micro로 변경


7. RDS 보안 그룹 설정 누락

발생 원인 ECS 컨테이너에서 RDS로 5432 포트 연결이 보안 그룹에서 차단됨

 

에러 메시지

HikariPool-1 - Connection is not available, 
request timed out after 30000ms

 

해결 방법 RDS 보안 그룹 인바운드 규칙에 ECS 보안 그룹 소스로 5432 포트 허용 추가

# bash
aws ec2 authorize-security-group-ingress \
  --group-id {RDS_보안그룹_ID} \
  --protocol tcp \
  --port 5432 \
  --source-group {ECS_보안그룹_ID}

8. schema.sql 미실행으로 테이블 없음

발생 원인 RDS 스냅샷 복원 후 테이블이 없는 상태에서 Hibernate가 ddl-auto: validate로 설정되어 테이블 검증 실패

 

에러 메시지

Could not instantiate persister 
org.hibernate.persister.entity.SingleTableEntityPersister

 

해결 방법 SSH 터널용 EC2를 통해 DataGrip으로 RDS 접속 후 schema.sql 재실행