서버를 배포할 때 여러 가지 도구를 사용할 수 있습니다. 그 중에서 가장 많이 활용되는 것이 AWS EC2입니다.
프로젝트 시 EC2를 활용하여 서버를 배포하면서 겪었던 문제와 해결 방법들을 정리해보았습니다.
배포 시 인바운드, 아웃바운드 규칙을 설정하여 서버의 트래픽을 설정해야합니다.
이때 서버를 실행하는 PC의 IP주소를 맞게 설정해야 해당 PC에서 서버를 테스트할 수 있는데, 개인 PC의 IP 주소는 고정 값이 아니라 주기적으로 변하기 때문에 자주 확인 후 수정해줘야 합니다.
전 이 점을 몰라서 기존엔 잘 실행되던 서버가 실행되지 않고, 서버와 연결된 mysql에 접속이 되지 않는 문제를 겪었습니다. 해당 문제를 해결하기 위해 이것 저것 알아보던 중 인바운드 규칙 내부의 mysql/aurora 포트와, 사용자 지정 TCP의 8080 포트에 할당된 IP 주소가 변경될 때마다 수정해줘야 함을 알게 되어 수정 후 문제를 해결할 수 있었습니다.
EC2 서버를 실행한 후, 해당 서버에 접속하여 본인이 배포한 프로젝트를 직접 실행시킬 수 있습니다.
하지만 프로젝트를 실행 후 문제가 생길 수 있기 때문에, 이를 확인하기 위해 EC2 > 대상 그룹에서 상태 확인을 할 수 있습니다. 프로젝트 실행 시 문제가 생긴다면 unhealthy, 정상적으로 실행된다면 healthy로 체크됩니다.
이 과정은 자동적으로 실행되는 것이 아니기 때문에, 본인의 프로젝트에서 따로 healthy check API를 간단히 구현하여 상태 정보를 확인할 수 있습니다.
배포 초기에 해당 과정을 몰라서 상태 여부를 확인하지 못해 직접 배포 url에 접근하여 문제가 있는지 확인해야해서 번거로움을 겪어야 했습니다. 이후 healthy check 과정을 프로젝트에 반영한 이후에는 EC2 내부에서 간편하게 상태 값을 확인할 수 있었습니다.
지난 프로젝트에서 spring boot 프로젝트와 mysql db를 함께 docker image로 빌드한 후, 해당 이미지를 도커 허브에 push & pull 하여 프로젝트와 서버를 한 번에 배포하는 방법을 사용했었습니다. 이때 프로젝트 폴더와 EC2 서버 내부에서 배포된 이미지를 어떻게 실행하고 종료해야하는지를 몰라서 직접 인스턴스를 끄고 키는 과정을 반복했었습니다.
이를 해결하기 위해 프로젝트와 mysql을 한 번에 배포할 수 있게 프로젝트에 docker-compose 파일을 선언하고, ec2 서버에서 docker-compose up -d 명령어를 통해 최신 이미지 파일 빌드와 docker-compose down 명령어를 통해 기존 서버 종료를 실행할 수 있었습니다.
배포와 서버 관리를 하면서 자주 사용했던 명령어들을 정리해보았습니다.
ssh -i "C:\Users\SAMSUNG\Downloads\minu.pem" ec2-user@43.202.106.17
해당 명령어는 본인 PC에 저장된 pem키 파일과, 배포된 서버의 고정 IP 주소 값을 할당하여 명령어 창에서 배포 서버에 접근할 수 있는 명령어입니다.
docker logs spring-app
해당 명령어는 배포된 서버에서 실행중인 프로젝트의 에러 로그를 확인할 수 있는 명령어입니다.