티스토리 뷰

728x90

오늘 다룰 주제는 ec2를 구축하고 나서 일주일 뒤 서버 다운되는 현상에 관련된 글이다..

 

 

🚨 간헐적으로 ec2 서버 다운 되는 현상

ec2 서버를 구축하고 열심히 개발하고 있던 어느 날 API서버에 접속이 되질 않았다.

정확하게는 서버를 구동하고 백엔드와 프론트엔드를 배포했을 때 약 1시간 주기로 서버가 다운되었다.

무슨 일인가 싶어 AWS와 SSH를 확인해보니 인스턴스 상태 검사 에서 에러가 발생했다.

나의 기존 ec2 인스턴스에는 프런트엔드(리액트)와 백엔드(스프링부트)가 돌아가고 있었는데

프런트엔드와 백엔드를 실행하면서 오류가 발생했는지 오류 검증을 위한 시나리오를 세우기 시작했다.

 

# 시나리오 

T. 프론트엔드 실행 및 가각의 로그인 백엔드 API 호출 

R. 특정 API 호출 시 서버 다운

 

T. 백엔드 실행 및 Swagger를 통한 API 호출

R. 서버 다운

 

T. 백엔드 실행 및 Swagger를 통한 API 호출 x 그저 띄어놓기만

R. 서버 다운

 

T. 프론트엔드만 실행

R. 서버 다운

 

T. 백엔드만 실행

R. 서버 다운

 

위 시나리오에서는 모두 서버가 다운되었다. 

그러나 하나 발견한 것이라면 

프론트에서 Signup 관련 API를 호출할 때 바로 다운되는 것을 확인할 수 있었다.

 

# 오류 로그를 찾아서...

- AWS 웹에서 살펴본 ec2 인스턴스의 log

여기서는 정확한 단서를 알 수 없었지만

구글링 해본 결과 CodeDeploy의 Agent 권한 설정 관련된 문제일 수 있다고 했다.

그래서 CodeDeploy의 log를 살펴보았다.

 

- SSH의 CodeDeploy log

InstanceAgent::Plugins::CodeDeployPlugin::CommandPoller: Network error: #<Seahorse::Client::NetworkingError: unable to connect to `codedeploy-commands.ap-northeast-2.amazonaws.com`; SocketError: getaddrinfo: Name or service not known>
InstanceAgent::Plugins::CodeDeployPlugin::CommandPoller: Error polling for host commands: Seahorse::Client::NetworkingError - unable to connect to `codedeploy-commands.ap-northeast-2.amazonaws.com`; SocketError: getaddrinfo: Name or service not known - /usr/share/ruby/net/http.rb:878:in `initialize'

SSH에서 CodeDeploy의 에러를 찾아 일부 단서를 긁어왔다.

(Log의 위치는 아래와 같다.)

vim /var/log/aws/codedeploy-agent/codedeploy-agent.log

 

 

 

# 결론

결론부터 말하면 정확하게 왜 오류가 나는지 알 수 없었다. 다만 유추할 뿐...

시나리오에서 특정 API만 호출할 경우 다운된다면 그 API가 문제이지만...

나의 경우는 아무런 행동을 하지 않아도 다운이 되었다.

그리고 CodeDeploy에서 Agent 오류가 나 걸 보아 CI/CD를 구축하던 과정에서 뭔가가 잘못되지 않았을까... 란 

생각을 해보았다. 그래서 그냥 과감히 뺏다.

그러고 ssh에서 git pull한다음 진행하니 별문제 없이 해결되었다.

 

이번일로 내가 배운 것은 죽도록 안될 때면 계속해서 힘을 쓰지 말고, 잠시 힘을 빼보는 것이다.

그동안은 안되면 될 때까지. 의자에 오래 앉아있으면 다 된다고 생각했지만 

그만큼 정신에 손상을 입힌다. 이는 장기적으로 절대 이득이 아니므로 가성비를 생각해서 

쉬운 길로 해결해보자 비록 그게 완벽하지 않더라도 말이다.

728x90
댓글
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday