개발 환경의 종류에는 크게 4가지가 있습니다.
여러 배포 환경 관리에서의 핵심은
인프라를 모듈화 하여 어떤 것이 변수인지 잘 설정하고 이를 잘 설계하는 것 이라고 할 수 있습니다.
예를들어, APP_ENV
처럼 현재 배포하고자 하는 것이 무슨 환경인지 설정하고 앱 내에서 사용하는 다양한 변수들을 APP_ENV
에 맞게 잘 가져다 쓰는 것이 핵심이라고 할 수 있죠.
서비스 내부의 변수 (backend url, aws key 등) 뿐만 아니라 클라우드 리소스를 많이 활용해 개발하는 요즘은 클라우드 리소스 내에서 인프라별 키관리가 매우 중요해 aws system manager의 paramter store 와 같은 키 관리 서비스를 쓰는것이 좋습니다.
AWS ECR
AWS ECR 은 'Elastic Container Registry'의 약자로 Docker image를 저장하는 private repository 입니다.
AWS ECS
AWS ECS는 'Elastic Container Service'의 약자로 Docker Container 기반으로 서비스 운용을 가능하게 해주는 간단한 서비스입니다.
무중단 배포 (rolling update)를 가능하게 해주며 scale up이 가능
백엔드 서비스를 스케일업 가능한 형태로 배포하는데 최적화
수많은 Docker Container 서버를 띄우고 LB (Load Balancer)가 이들 사이에 밸런싱을 해줌
Fargate, EC2 모드가 있어서 Docker container 리소스만 띄우거나 물리적인 EC2 Instance 클러스터로 구성 가능
정리를 하자면, ECS 혹은 K8s 를 통해 rolling deploy가 처리되기 때문에 Jenkins의 역할은 배포 명령만 내려주면 되는 것입니다.