Amazon EC2(프리티어)를 사용하여 서버를 배포 하였습니다. EC2 내에 스프링 빌드 파일(jar)을 실행하도록 구성했습니다.
Database로는 RDBMS인 MySQL을 사용하였고, Amazon RDS로 구축했습니다. 정적파일(이미지)은 S3에 저장하여 불러오도록 하였습니다.
Nginx을 이용하여 서버가 무중단 배포가 되도록 하였습니다. Certbot(Let's Encrypt)을 통해 SSL(Https) 설정을 해주었습니다.
Nginx 내에서 리버스 프록시를 통해 클라이언트가 80 port로 들어오면 443 port로 리다이렉트 하였고, 443 port로 들어오는 요청이 경로가 /인 경우 프론트엔드, /api인 경우 백엔드로 들어오도록 하였습니다.
Ec2 내에서 Redis를 사용하여 백엔드 내부 파일(Refresh_Token)을 저장하도록 하였습니다. CRUD의 경우 RDBMS인 MySQL을, redis는 read-only 경우로 설정하였습니다.
Github Action와 CodeDeploy, AWS S3를 통해 배포 자동화(CI/CD)가 가능하도록 하였습니다. Route53을 통해 (moamoadev.shop) 도메인을 구매하여 사용하였습니다. 또한 Let's Encrypt를 통해 SSL 인증서를 발급 했습니다.
Backend의 경우 develop 브랜치로 push 할 경우, Github Actions가 감지하여 빌드(jar)하고, 빌드한 파일을 압축하여 S3로 옮기고 CodeDeploy를 통해 EC2로 전달 하였습니다.
Frontend의 경우 develop 브랜치로 push 할 경우, Github Actions가 감지하여, 정적 파일을 압축하여, S3로 옮기고, CodeDeploy를 통해 EC2로 전달하였습니다.
프론트엔드 쪽에는 moamoadev.shop/api를 요청하고, 클라이언트는 moamoadev.shop에 접속하여 서비스를 요청합니다.
현재 CI/CD를 위한 과정이 복잡합니다. (CI/CD를 위해 S3로 파일을 옮기고, S3에서 CodeDeploy -> EC2)
그래서 S3로 빌드파일 및 정적파일을 압축해서 옮기는 대신, 도커를 이용하여 빌드 파일과 정적파일을 이미지화 시켜서 바로 EC2에서 도커 이미지를 통해 컨테이너를 실행할 예정입니다.
또한 nginx와 redis 와 같이 의존성이 필요한 파일을 EC2내에서 설치해서 배포하는 것보단, 도커 이미지에서 nginx, redis를 불러와 서버 내에서 컨테이너화 시킬 예정입니다.