MSA 구조
Monolithc 구조는 프로젝트의 각 서비스들이 하나의 서버에 배포되는 구조입니다.
만약 하나의 서비스에 문제가 생기면 전체 서버에 문제가 생기는 단일 장애 지점이 발생할 수 있습니다.
프로젝트가 상용화되면 각 서비스들은 모두 같은 트래픽을 감당하지 않을 것입니다.
하지만 monolithic은 하나의 서비스만 확장할 수 없는 구조입니다.
그러므로 MSA 구조를 채택하여 확장성을 높일 수 있었습니다.
AWS Cloud
서버 배포는 AWS Cloud를 이용하여 사용하였습니다.
AWS Cloud를 사용한 이유는 여러 회사에서 사용하는 만큼 안정성을 보장한다고 생각하였습니다.
그리고 네트워크 구성을 위한 많은 서비스를 제공하고 대규모 트래픽을 견디기엔 최적이라고 생각했습니다.
ECS Fargate
선택 이유 :
ECS는 Application을 Docker로 배포하고 Container를 관리해주는 AWS 서비스입니다.
Fargate는 Serverless Architecture입니다. Docker를 이용하여 Application을 Fargate에 쉽게 배포할 수 있습니다.
EC2와 Fargate중 Fargate를 선택한 이유는, EC2는 개발자가 서버 배포를 위한 환경 설정을 직접해야 합니다. 쉽게 이야기해서 하나의 VM입니다.
하지만 Fargate는 서버 관리는 AWS가 담당하고 Docker를 쉽게 Application을 배포할 수 있습니다. 그리고 DockerEngine 기반으로 동작하므로 리소스 활용면에 있어서 EC2보다 효율적으로 사용할 수 있다고 생각했습니다.
그리고 대규모 트래픽이 발생하면 AutoScaling 기능이 있어 효과적으로 서버를 확장할 수 있습니다.
Application Load Balancer
LoadBalancer를 통해 대규모 트래픽 발생 시 트래픽을 분산시킬 수 있게 하였습니다.
그리고 추후 CI/CD시 무중단 배포를 위해 ALB가 필요합니다.
LoadBalancer의 종류에는 NLB와 ALB가 존재하는데, ALB는 HTTP/HTTPS 통신을 지원하고 NLB는 UDP/TCP 통신을 지원합니다.
저는 Restful API를 사용하는 프로젝트를 만들 예정이니 ALB를 사용하였습니다.
CI/CD
저는 형상 관리를 Git으로 진행할 예정이기 때문에, 접근성이 좋은 Github Action을 사용하였습니다.
Github Action을 사용하여 AWS fargate에 각 branch가 update될 때 자동으로 생성하도록 변경하였습니다.
지금까지 대규모 트래픽이 오가는 프로젝트임을 가정하고 System Architecture를 설계하였습니다.
프로젝트 진행하며 Update시 현재 페이지에 업데이트 할 예정입니다!
'프로젝트 > E-Commerce' 카테고리의 다른 글
[5] AccountService (3) 구현 (0) | 2023.04.07 |
---|---|
[4] AccountService (2) SpringSecurity (0) | 2023.04.07 |
[3] AccountService (1) 설계 (0) | 2023.04.02 |
(1) LastOrder Proejct 개요 (0) | 2023.03.31 |