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 재실행