기존에 프로젝트를 클라우드에 배포하고, Github actions를 통해 배포하는 작업을 시도했다. (스포하자면 성공함)
다른거 공부할게 많은데 배포때문에 4일정도 쓴 것 같다.
참고로 이번에 배포 준비하면서 도커, AWS , Github actions 모두 처음 공부하고 처음 써봤다.
참고로 이번 배포에서 가장 힘들었던 부분은 Github actions 로 CI/CD 파이프라인 배포 자동화 환경을 만드는 것이었는데, 다음 사진처럼 고난 길을 걸어왔다.


참고로 8 ~ 17회차가 성공한 것으로 나오는데, EC2에 막상 접속해보면 도커 컨테이너가 뜨지 않고 있었다.
참고로 내가 구성한 배포 인프라 환경은 다음과 같다.
0. 테라폼으로 필요한 AWS 서비스 실행 (EC2, ECR, RDS, CloudWatch 등)
1. github actions 로 커밋(푸시) 발생시 자동으로 EC2 환경에서 애플리케이션 재실행
2. 해당 애플리케이션을 이미징하여 AWS ECR에 저장
3. EC2 에서 ECR의 이미지를 통해 해당 이미지를 컨테이너로 띄움
4. RDS 엔드포인트를 가지고 DB 연결
첫번째 고난 : Github actions 실패
깃헙 액션을 이용하기 위해선 deploy 파일에 어떤 작업을 할지 순서를 정해줘야 한다.

나는 deploy 파일을 잘 작성했다고 생각했는데, 자꾸 저 부분에서 통과하지 못하고 오류가 발생했다.

오류 메시지를 통해 내가 ECR 에서 작성해둔 레포 이름과 deploy에 작성한 이름이 달라서 오류가 발생했던 것이었다.
AWS 설정을 바꾸긴 좀 그래서 deploy 파일을 수정하여 문제를 해결했다.
두번째 고난 : Github actions 성공...???
두번째는 Github actions는 성공했지만, 막상 EC2를 SSL 로 접속해보면 막상 떠있는 컨테이너가 아무 것도 없는걸 볼 수 있었다.
처음에는 애플리케이션 자체가 안뜬줄 알고 1252195810295890번 정도 고민했다.
약 이틀간 Dockerfile, deploy, 테라폼 파일등 한줄씩 다 읽어 봤지만 도저히 내가 봤을 때 틀린 부분이 없었다.
사실 이런 인프라쪽 부분은 AI한테 물어봐도 크게 도움이 되지 않아 최대한 검색을 위주로 해결해 보고자 했다.
그러다 내가 생각한 것이, 애플리케이션이 떴다가 죽었을 수도 있지 않을까? 라는 생각이 들어서 도커의 죽은 컨테이너를 포함한 컨테이너 목록을 보는 명령어(docker ps -a)를 통해 확인했더니.....
젠장 컨테이너가 뜨다가 죽어서 안뜬 것 거처럼 보인거였다..
도커에선 다음과 같은 명령어로 죽은 애플리케이션의 로그를 확인할 수 있다.
docker logs --tail 200 spring-app
로그를 보면..
***************************
APPLICATION FAILED TO START
***************************
Description:
Failed to configure a bean of type 'com.example.security.JwtTokenProvider'.
Reason: Failed to process configuration properties
...
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jwtTokenProvider' defined in file [.../JwtTokenProvider.class]:
...
Caused by: java.lang.IllegalArgumentException: secret key byte array cannot be null or empty.
at io.jsonwebtoken.security.Keys.hmacShaKeyFor(Keys.java:123)
at com.example.security.JwtTokenProvider.<init>(JwtTokenProvider.java:45)
... 56 more
JWT 토큰을 생성해주는 빈을 생성하는데 오류가 있다고 한다..
여기까지 하는데 너무 눈아프고 열받아서 좀 쉬면서 생각해봤는데, 생각해보면 해당 클래스는 다음과 같이 작성 되어 있다.

즉 저 @Value 값은 내가 yml 을 통해 관리하고 있었던 값이기 때문에 gitignore 처리 해놨고, 그에 따라 EC2는 내가 등록해주지 않으면 해당 값을 알 수 있는 방법이 1도 없다.......!

생각해보면 이전에 테라폼을 위해 필요했던 환경변수들을 Github actions secrets에 등록했었다.
같은 원리로 저 @Value 값들도 내 프로젝트에서 환경변수로 관리되고 있기 때문에, secrets 에 등록을 해줘야 올바른 이미지가 생성되어 컨테이너가 뜰 수 있었던 것 이다.
즉시 secrets에 해당 환경변수 값들을 추가하고 정상적으로 컨테이너가 뜨는 것을 확인할 수 있었다.
하지만 컨테이너가 뜨고 또 다시 죽는 사건이 발생하는데...... (2편에서 계속)
'Error' 카테고리의 다른 글
| (배포 후기 2) 우리 잘못이 아니야 (1) | 2025.11.10 |
|---|---|
| [Docker] 도린이의 첫번째 고난 : Access denied for user ‘root’@’localhost’ (using password:YES) (0) | 2025.10.30 |
| [Spring] 애플리케이션 실행시 data.sql / schema.sql 이 실행되지 않을 때 (0) | 2025.10.16 |
| Mac에서 Notion 한글 씹힐 때 (0) | 2025.10.07 |
| [MyBatis] 의존성 - 에러가 발생하면 공식문서를 봅시다 (0) | 2025.08.06 |