카카오 부트캠프/내용 정리

AWS EC2 중지 후 재시작, DB 연결이 갑자기 안 되는 이유

BCSJH 2024. 11. 26. 15:10

AWS EC2를 이용해 프로젝트를 배포하면서 예상치 못한 문제를 마주했습니다. EC2 인스턴스를 중지하고 재시작한 후, 로컬에서는 잘 되던 데이터베이스 연결이 서버에서 갑자기 되지 않는 상황이 발생한 것입니다. 이번 글에서는 문제를 해결하기 위해 거친 과정과 깨달음을 정리해보겠습니다.


문제 상황

  1. EC2 인스턴스를 중지 후 재시작
    • EC2 인스턴스를 밤에 중지하고, 다음 날 재시작했습니다.
    • 기존 설정이 유지될 것이라 생각했지만, 재시작 후 서버에서 MariaDB 연결이 되지 않았습니다.
    • telnet으로 포트를 확인했을 때 연결은 문제없어 보였고, 로컬에서도 DB 연결은 잘 이루어졌습니다.
  2. DB 연결 에러
    • Node.js 애플리케이션에서 다음과 같은 에러가 발생했습니다.
      Error fetching board list: Error: connect ETIMEDOUT
    • 환경 변수(process.env)를 사용해 MariaDB 정보를 가져왔지만, 연결이 이루어지지 않았습니다.

문제 해결 과정

  1. 서버 상태 및 설정 확인
    • MariaDB 서비스 확인
      sudo systemctl status mariadb
    • 방화벽 및 보안 그룹 확인
      • 인바운드와 아웃바운드 규칙 모두 3306 포트에 대해 허용되어 있었습니다.
      • telnet으로 DB 연결 상태를 확인했을 때도 문제가 없었습니다.
        telnet xxx.xxx.xxx.xxx 3306
         
  2. 환경 변수 문제 발견
    • 로컬에서는 .env 파일을 통해 DB 설정을 잘 가져왔지만, EC2 환경에서 다른 호스트 주소를 참조하고 있었습니다.
    • 원인은 환경 변수 캐싱 문제였습니다. EC2 인스턴스를 중지 후 재시작하면, PM2가 이전 환경 변수를 유지하고 있었던 것입니다.
  3. 해결 방법
    • PM2 프로세스를 업데이트하면서 환경 변수를 적용했습니다.
      pm2 restart express-server --update-env
  • ⚠ 만약 위의 방법으로 해결이 되지 않는다면
    시스템에 직접 설정된 환경 변수가 우선순위를 가지기 때문일 수도 있습니다. EC2 인스턴스에서 아래 명령어로 환경 변수를 확인하세요.
    printenv | grep DB_
  • 잘못된 값이 출력될 경우
    • /etc/environment 또는 ~/.bashrc 파일에 이전 환경 변수가 등록되어 있을 수 있습니다.
    • 해당 값을 확인하고 수정 후 적용하세요.
      sudo nano /etc/environment
      # 또는
      nano ~/.bashrc
    • 수정후 적용
      source /etc/environment
      source ~/.bashrc

 


잠을 자기 전에 /etc/environment에 환경변수를 등록해놨던 것을 깜빡하고 있었습니다. 이번 경험은 단순히 기술적인 문제를 해결한 것이 아니라 AWS EC2와 데이터베이스 연결 과정에서의 운영 상식을 배우는 계기가 되었습니다. 앞으로도 이런 상황에서 더 빠르고 정확하게 문제를 파악할 수 있을 것 같습니다.