CLOUD RPG FESTIVAL
자바 개발자가 최대한 빠르게
서비스를 오픈하는 방법
최진환 | 2021.10.23
최진환
드라마앤컴퍼니 플랫폼 크루 - 서버 개발자
대한민국 300만 직장인이 선택한 비즈니스 플랫폼
리멤버
리멤버 커리어
리멤버 커뮤니티
* Github: https://github.com/Choi-JinHwan
T-Post
스트리머와 시청자를 이어주는 사연 관리 플랫폼
- https://tpost.lol
- 합류하고싶으시다면 admin@tpost.lol
목차
- 배경
- API 서버 인프라
- 웹서버 인프라
- Monthly cost
배경
빠르게 오픈하고싶은 개인 프로젝트(저비용)
HTTP API 서버
Static 웹서버
API server
고려한 제품
EC2
Elastic Beanstalk
Elastic Kubernetes Service
EC2
EC2는 AWS에서 제공하는
가상화된 서버 인스턴스
Elastic Kubernetes Service
K8S에 대한 학습비용
유지만 해도 월 약 7만원 + ECR
Elastic Beanstalk
AWS Elastic Beanstalk는 Java, .NET, PHP,
Node.js, Python, Ruby, Go, Docker를 사용하여
Apache, Nginx, Passenger, IIS와 같은 친숙한
서버에서 개발된 웹 애플리케이션 및 서비스를
간편하게 배포하고 조정할 수 있는 서비스
Elastic Beanstalk
Elastic Beanstalk
Elastic Beanstalk
Elastic Beanstalk
Elastic Beanstalk
Elastic Beanstalk
RDS & Elasticache
OpenVPN
Secret Manager
- 버저닝
- 암호화
- 자동 로테이션
* spring-cloud-starter-aws로 손쉽게 적
용
Secret Manager
SSL = Route53 + ACM + ELB
Alert
logback-slack-appender
https://github.com/maricn/logback-slack-
appender
CI/CD
Codebuild
GitHub PR open/update시 트리거
Codepipeline
각 스테이지 설정
스테이지별 액션 설정
Codepipeline + AWS Chatbot
AMI CI/CD
Packer
단일 소스 설정에서 여러 플랫폼에 대한 동일한
머신 이미지를 생성하기 위한 오픈소스 도구
Packer + Codebuild
Packer 가 설치된 도커 이미지 + 코드빌드
+ Packer AMI 빌드 템플릿
+
Static Web server
Amplify & Cloud front
정적 리소스는 Cloudfornt를 통해 캐싱
웹페이지는 Amplify를 사용
- 도메인 연결
- CI CD 구축
- 캐싱
- 각 PR preview
Monthly Cost
T2 -> T3
보다 좋은 성능
보다 낮은 가격
Resource reservation
RDS & EC2
Monthly cost
9월은 ClientVPN 테스트등 추가 코스트 발생
이번달 기준 월 약 77$정도
후기
Thanks for watching

자바개발자가 최대한 빠르게 서비스를 오픈하는 방법 - 최진환 (드라마앤컴퍼니) :: AWS Community Day Online 2021

Editor's Notes

  • #3 안녕하세요! AWS 커뮤니티데이에서 “자바 개발자가 최대한 빠르게 서비스를 오픈하는 방법” 이라는 주제로 발표하게된 최진환입니다. 제가 만든 T-Post라는 서비스를 구축하면서 어떻게 빠르게 인프라를 구축했는지에 대해 공유드리겠습니다.
  • #5 일단 제가 배포해야되는 애플리케이션은 정적 웹페이지와 HTTP 요청을 받고 데이터베이스에 필요한 데이터를 저장하고 조회해서 응답을 반환하는 전형적인 API 서버였습니다.
  • #7 일단 제가 배포해야되는 애플리케이션은 정적 웹페이지와 HTTP 요청을 받고 데이터베이스에 필요한 데이터를 저장하고 조회해서 응답을 반환하는 전형적인 API 서버였습니다.
  • #8 API 서버의 인프라 먼저 소개해드리겠습니다.
  • #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 애플리케이션이었습니다.