EC2 인스턴스에서 프로젝트를 직접 빌드하고
jar 파일을 실행시켜서 얻은 nohup.out파일을 직접 확인 해봤다.
문제 원인
로그를 분석해보니 데이터베이스 환경 변수를 전혀 읽어오지 못하고 있었다.
위 사진에서 처럼 MySQL 연결을 위한 환경 변수를 EC2 인스턴스는 전혀 모르고 있었다.
.bashrc 파일에 환경변수 설정
.bashrc 파일에 환경변수를 설정했지만
main 브랜치에서 push하고 서버가 배포되었을때 서버는 여전히 응답하지 않았고,
ec2 터미널에 접속해 직접 프로젝트를 빌드해야 서버가 제대로 동작했다.
🚨 환경 변수를 설정했는데도 서버는 왜 제대로 동작하지 않을까?
CodeDeploy는 시스템 서비스로서 동작하기 때문에,
사용자 로그인 세션에서만 로드되는 .bashrc 파일에 정의된 환경 변수를 읽을 수 없다.
따라서, CodeDeploy를 통해 배포된 애플리케이션이 .bashrc에 설정된 환경 변수를 인식하지 못해 서버가 정상적으로 구동되지 않는 문제가 발생할 수 있다.
.bashrc 파일의 역할
.bashrc 파일은 사용자가 쉘 세션(터미널)을 시작할 때 로드되는 스크립트이다. 이 파일은 사용자별 설정과 환경 변수를 포함하며, 로그인할 때나 새로운 터미널 창을 열 때 실행된다. 하지만 이는 사용자 세션에 국한된 것으로, 시스템 전체에서 실행되는 프로세스에는 적용되지 않는다.
CodeDeploy와 시스템 서비스의 차이점
- 사용자 세션: 사용자가 직접 로그인하여 터미널을 열거나 명령어를 실행하는 환경.
- 시스템 서비스: 사용자 세션과 무관하게 시스템에서 백그라운드로 실행되는 서비스. CodeDeploy는 이러한 시스템 서비스로 애플리케이션을 배포하고 관리한다.
💡 해결 과정
즉, .bashrc 파일은 사용자 로그인 쉘 세션에서만 로드되기에
CodeDeploy는 시스템 단에서 동작하기 때문에 .bashrc 파일을 읽지 못한다.
/etc/environment 파일에 환경변수 설정
환경 변수를 시스템 전체에서 사용할 수 있도록 /etc/environment 파일에 설정해야 한다.
sudo cat /etc/environment
배포 후 서버가 정상적으로 구동되기 위해서는 환경 변수를 /etc/environment 파일에 설정해야 한다.
참고 사이트
'프로젝트 > 짠모아' 카테고리의 다른 글
[AWS 오류 해결] EC2에서 애플리케이션 로그 확인하기 (0) | 2024.10.08 |
---|---|
[AWS 오류 해결] 테스트 코드 contextLoads() FAILED 오류 해결하기 (0) | 2024.10.08 |
[AWS 오류 해결] swap 파일로 메모리 할당하기 (1) | 2024.10.08 |
[AWS 오류 해결] CodeDeploy 로그 확인하기 (0) | 2024.10.08 |
[서울시 공공데이터 경진대회] 최우수상 수상 프로젝트 - 짠모아 (4) | 2024.10.03 |