AWS EC2를 이용해 프로젝트를 배포하면서 예상치 못한 문제를 마주했습니다. EC2 인스턴스를 중지하고 재시작한 후, 로컬에서는 잘 되던 데이터베이스 연결이 서버에서 갑자기 되지 않는 상황이 발생한 것입니다. 이번 글에서는 문제를 해결하기 위해 거친 과정과 깨달음을 정리해보겠습니다.
문제 상황
- EC2 인스턴스를 중지 후 재시작
- EC2 인스턴스를 밤에 중지하고, 다음 날 재시작했습니다.
- 기존 설정이 유지될 것이라 생각했지만, 재시작 후 서버에서 MariaDB 연결이 되지 않았습니다.
- telnet으로 포트를 확인했을 때 연결은 문제없어 보였고, 로컬에서도 DB 연결은 잘 이루어졌습니다.
- DB 연결 에러
- Node.js 애플리케이션에서 다음과 같은 에러가 발생했습니다.
Error fetching board list: Error: connect ETIMEDOUT
- 환경 변수(process.env)를 사용해 MariaDB 정보를 가져왔지만, 연결이 이루어지지 않았습니다.
- Node.js 애플리케이션에서 다음과 같은 에러가 발생했습니다.
문제 해결 과정
- 서버 상태 및 설정 확인
- MariaDB 서비스 확인
sudo systemctl status mariadb
- 방화벽 및 보안 그룹 확인
- 인바운드와 아웃바운드 규칙 모두 3306 포트에 대해 허용되어 있었습니다.
- telnet으로 DB 연결 상태를 확인했을 때도 문제가 없었습니다.
telnet xxx.xxx.xxx.xxx 3306
- MariaDB 서비스 확인
- 환경 변수 문제 발견
- 로컬에서는 .env 파일을 통해 DB 설정을 잘 가져왔지만, EC2 환경에서 다른 호스트 주소를 참조하고 있었습니다.
- 원인은 환경 변수 캐싱 문제였습니다. EC2 인스턴스를 중지 후 재시작하면, PM2가 이전 환경 변수를 유지하고 있었던 것입니다.
- 해결 방법
- PM2 프로세스를 업데이트하면서 환경 변수를 적용했습니다.
pm2 restart express-server --update-env
- PM2 프로세스를 업데이트하면서 환경 변수를 적용했습니다.
- ⚠ 만약 위의 방법으로 해결이 되지 않는다면
시스템에 직접 설정된 환경 변수가 우선순위를 가지기 때문일 수도 있습니다. EC2 인스턴스에서 아래 명령어로 환경 변수를 확인하세요.printenv | grep DB_
- 잘못된 값이 출력될 경우
- /etc/environment 또는 ~/.bashrc 파일에 이전 환경 변수가 등록되어 있을 수 있습니다.
- 해당 값을 확인하고 수정 후 적용하세요.
sudo nano /etc/environment # 또는 nano ~/.bashrc
- 수정후 적용
source /etc/environment source ~/.bashrc
잠을 자기 전에 /etc/environment에 환경변수를 등록해놨던 것을 깜빡하고 있었습니다. 이번 경험은 단순히 기술적인 문제를 해결한 것이 아니라 AWS EC2와 데이터베이스 연결 과정에서의 운영 상식을 배우는 계기가 되었습니다. 앞으로도 이런 상황에서 더 빠르고 정확하게 문제를 파악할 수 있을 것 같습니다.
'카카오 부트캠프 > 내용 정리' 카테고리의 다른 글
커뮤니티 비밀번호 암호화 적용 및 bcrypt 학습 (0) | 2024.11.28 |
---|---|
모듈 환경에서 전역 스크립트 사용 문제 해결하기: bcrypt.js를 활용한 비밀번호 암호화 (1) | 2024.11.28 |
AWS EC2 외부 접속 문제 해결기: 결국 문제는 와이파이였다 (0) | 2024.11.25 |
node.js express에서 MySQL 트랜잭션 적용 (0) | 2024.11.21 |
GIT README.md 작성법: 기본 구조 (1) | 2024.11.21 |