티스토리 뷰
이상하게 DDD 동아리 프로젝트 서버가 종종 죽는 상황이 발견되었다.
꽤 오래전부터 식별되었던 문제였는데, 초반에는 그냥 죽을 때마다 재부팅하는 식으로 해결하다가 원천 해결을 해야겠다고 생각해서 조사를 하기 시작했다.
# 문제 최초 식별 (22년 11월 후순)
CI/CD 배포 실패 및 EC2 상태검사 실패
원인 : CI/CD 배포 과정에서 기존 프로세스를 죽이지 않고 새로운 프로세스를 실행해서 서버 자원 부족으로 인한 다운
해결 : 기존 프로세스를 확실하게 죽이도록 설정
일단 중복 프로세스로 인한 다운은 해결 됐으나, 다른 문제로 계속 다운 발생
# 지속적 문제 발생, 모니터링 강화 (22년 12월 중순)
다른 문제로 다운이 계속 발생하자 원인을 찾기 위해 로깅 강화
(application.log 파일로 한 서버의 라이프사이클을 보기 좋게 로깅하여 파일로 저장. 나중에 눈으로 보기 쉽게 불필요한 로그를 최소화하는 작업 진행)
로그 파일 모니터링으로 인한 새로운 원인 규명
CPU와 RAM 부족으로 인한 EC2 다운 -> 하지만 무엇 때문인지는 찾지 못 함.
당시 개발에 시간을 투자해야 해서 면밀히 조사해보지 않고 넘어감 (역시 발생할 때마다 그냥 재부팅했음)
# 문제 원인 파악 (23년 1월 중순)
주기적인 서버 다운으로 인한 프론트 개발팀의 개발이 더뎌지는 문제 발생 -> 원인을 확실히 파악하고 해결하고자 하는 계기가 됨
일단 트래픽의 출처를 찾기 위해 프론트에서 방문 로그와 서버 측에서 요청마다 IP 로그를 남기도록 설정했다.
새로운 원인 식별
서버가 다운 됐고, 로그를 보니 해외 IP 트래픽이 찍혀 있었다. 왜 인지는 모르겠으나 해외 IP의 무분별한 요청으로 인해
쓰레드 풀 초과, 서버 다운으로 이어졌었다.
# 해결 방안 모색
우선 해외 IP를 차단하여 국내 트래픽만 허용하는 식으로 해결방안을 모색했고 선택지는 다음과 같았다.
(추가로 어느 스타트업 CTO분께 자문을 요청했는데 친절하게 해결방안을 같이 찾아주셨다. 정말 감사드립니다!)
일단 리눅스 해외 IP 차단을 EC2에 적용하고 (iptables) DB 커넥션 풀을 늘리고 실행 메모리를 늘려서 최대한 서버가 죽지 않게끔 설정하였다.
이제 앞으로 상황을 계속 모니터링하면서 또 발생하는지, 대처가 잘 되었는지 경과를 살펴봐야겠다.