인프라의 전체를 구성하면서 github Action을 사용하여 CI/CD를 구축하고 Docker 형태로 EB로 배포하는 시스템을 구축하였습니다.
현재는 백엔드 파트에서 혼자 코드를 짜고있지만 훗날 동료분이 늘어날 것을 항상 염두해두고 코드를 작성하고 어떻게하면 다른 팀원분이 들어오셨을 때 빠르게 적응하고 편하게 개발할 수 있을지에 대해 늘 고민하고 있습니다.
이러한 생각을 바탕에 깔고 인프라를 구축하면서 가장 필수적이었던 것이 CI/CD였고 가장 간편했고 빠르게 개발할 수 있었던 깃헙액션과 Docker를 사용했습니다.
우선 저는 Spring Boot와 Kotlin (JDK 11)을 사용하여 백엔드 코드를 작성하고 있습니다.
아주 간단하게 도식화를 해보자면
위 그림과 같습니다.
인프라를 구축하는 과정에서 가장 시간을 쏟았던 부분은 사실 CI/CD를 넘어서 EB 배포과정이었습니다.
VPC안에서 Private Subnet에 존재하는 EC2 Instance에 EB를 사용하여 배포하고, LB는 Public Subnet에서 이루어져야하기 때문에 신경써야하는 부분이 달랐습니다.
어디서 신경을 써야하는데?
앞서 말한 바와 같이 Private Subnet에 서버를 배포하고, Public Subnet에서 LB가 이루어져야한다는 것만 염두해 두고 있으면 사실 어려운 문제는 아니었습니다.
첫번째로 중요한 부분
Private Subnet에 위치한 RDS가 있기 때문에 RDS로 들어가는 보안그룹에 생성해둔 EB env를 넣어줘야 합니다.
이를테면 MySQL을 사용했고 3306 port로 뚫어뒀다면
위 그림과 같이 설정해주어야합니다.
두번째로 중요한 부분
로드밸런싱 부분입니다.
다시 한 번 말하자면, LB는 Public Subnet 이루어져야하고, 배포되는 EC2 Instance는 Private Subnet 에서 이루어져야합니다.
[Elastic Beanstalk] -> [구성] -> [네트워크] 탭에서 설정해야합니다.
위 그림과 같이 설정해준다면 EB가 배포되는 데에는 이상이 없습니다.
위와 같은 설정을 여러번 시도하느라 아래의 화이트라벨 에러 페이지를 보는데 꼬박 하루를 사용했습니다 ㅠ_ㅠ
생각보다 간략하게 작성한 부분이 있지만, 스스로 정리하는 개념으로 작성하는 글이기에, 방법보다는 어떤 방법론을 작성한다고 생각해주시면 감사하겠습니다.
혹시 틀린 부분이나 혹은 궁금하신 점이 있다면 댓글로 달아주시면 감사하겠습니다.
긴 글 읽어주셔서 감사합니다 :)