자바개발자가 최대한 빠르게 서비스를 오픈하는 방법 - 최진환 (드라마앤컴퍼니) :: AWS Community Day Online 2021
사이드프로젝트를 진행하면서 겪은 다양한 인프라 구축 노하우를 소개합니다.왜 EKS가 아닌 Elastic Beanstalk를 사용했는지, Codepipeline을 이용한 깃헙에서 배포까지의 플로우, AWS ChatBot을 사용한 모니터링과 CodeBuild로 빌드하기 등을 소개합니다.
Elastic Beanstalk
AWS ElasticBeanstalk는 Java, .NET, PHP,
Node.js, Python, Ruby, Go, Docker를 사용하여
Apache, Nginx, Passenger, IIS와 같은 친숙한
서버에서 개발된 웹 애플리케이션 및 서비스를
간편하게 배포하고 조정할 수 있는 서비스
#9 서버 인프라로 고려한 제품은 3가지가 있었습니다.
EC2, Elastic beanstalk, EKS였습니다.
#10 일단 EC2하나를 띄워두고 손으로 배포해본 다음에 생각했습니다.
이게 스케일아웃을 하면 손으로 할 수 없겠다 생각했습니다.
#11 EKS는 큰 비용이 지속적으로 나간다는점이 큰 단점으로 다가왔습니다.
그러다 문득 직장 동료가 했던 말이 스쳐 지나갔습니다.
엘라스틱빈스톡이라는게 있는데 로그 수집부터 환경 구성까지 편하게 할 수 있다.
#13 자바를 비롯한 여러 플랫폼을 지원했습니다. 처음에는 Docker를 고려헀지만 ECR이라는 추가적인 관리 포인트가 생기는 단점때문에 Java 플랫폼을 선택했습니다.
#18 제가 처음 설정하던 당시의 EB는 환경 삭제시 포함된 RDS도 삭제하는것이 강제되었습니다. 따라서 RDS는 따로 추가했습니다.
최근에는 RDS 삭제를 강제하지 않는 옵션이 생겼다고 합니다! 이제 맘 편하게 한번에 세팅할 수 있게 되었습니다.
#23 그리고 이제 애플리케이션에서 SSL이 필요해지면서 EB를 멀티 인스턴스 타입으로 설정하게됐습니다. 해당 과정에서 Route 53을 통해 DNS에 EB를 등록했습니다.
#25 API 서버의 인프라 먼저 소개해드리겠습니다. API서버는 Spring Boot 애플리케이션이었습니다.
#26 수동으로 테스트를 실행하고 확인 후에 파일을 직접 업로드 하는 방법도 시간이 꽤 오래걸렸습니다. 따라서 Codebuild에 웹훅을 등록해서 깃헙에서 PR이 올라올 때마다 빌드를 실행하게했습니다.
빌드 할 때마다 의존성을 새로 설치하는것도 큰 비용입니다. 따라서 캐시 설정을 통해 빌드 후에 캐시를 업로드하고 다음 빌드 시에 캐시를 다운로드 받아 사용하게 합니다.
#27 배포는 Codepipeline을 통해 자동화했습니다.
1. 깃헙에서 커밋 혹은 머지, push등이 발생하면 파이프라인을 시작합니다.
2. 코드 빌드로 해당 코드가 배포할 수 있는 품질을 가진 코드인지 테스트합니다.
3. 빌드된 다음 개발자의 허가를 받습니다.
4. ElasticBeanstalk 배포 기능을 통해 배포합니다.
#28 각각 단계에 트리거를 걸어 알림을 보낼 수 있었습니다. AWS Chatbot과의 손쉬운 통합도 제공됐습니다.
#29 API 서버의 인프라 먼저 소개해드리겠습니다. API서버는 Spring Boot 애플리케이션이었습니다.