앞서
이전 글(simju9397.tistory.com/4) 과 이어지는 내용입니다.
개발 환경의 종류
- 개발자가 개발을 하는 Local
- 개발자들끼리 개발 내용에 대한 통합 테스트를 하는 Development 환경
- 개발이 끝나고 QA 엔지니어 및 내부 사용자들이 사용해보기 위한 QA 환경
- 실제 유저가 사용하는 Production 환경
- 앞으로는 DEV, QA, PROD 환경으로 부른다.
개발 프로세스
- 개발자가 Local에서 개발을 진행한다.
- 다른 개발자가 작성한 코드와 차이가 발생하지 않는지 내부 테스트를 진행한다.
- 진행한 내용을 다른 개발자들과 공유하기 위해 git 에 올린다. -> 흔히 dev 브랜치
- Dev 브랜치의 내용을 개발 환경에 배포하기 전에 테스트와 lint 등 코드 포맷팅을 한다.
- 빌드 -> 배포 -> 테스트 ->각각의 환경에 위 과정을 다하고 환경에 배포
여러 배포 환경의 관리
- 인프라를 모듈화 하여 어떤 것이 변수인지 잘 설정하고 이를 잘 설계하는 것!!
- 가령 APP_ENV 처럼 현재 배포하고자 하는 것이 무슨 환경인지 설정하고, 앱 내에서 사용하는 다양한 변수들을 APP_ENV 에 맞게 잘 가져다 쓰는 것
- AWS System Manager 의 parameter store 와 같은 키 관리 서비스를 쓰자.
예시 배포 환경
- 웹사이트 코드 작성
- 웹사이트 코드를 린트, 웹팩 빌드해서 AWS S3 bucket 에 html 파일 업로드
- Node.js 백엔드 코드를 typescript 로 작성
- 위 코드를 javascript compile 하고, 테스트 코드를 돌려서 도커 이미지를 만들어 ECR 에 올린다.
- 업로드한 ECR 이미지로 ECS 서비스를 재시작한다.(rolling deploy => continuous deploy)
개발에 필요한 리소스 리뷰
ECR : 도커 이미지를 저장하는 private repository
ECS : 도커 컨테이너 기반으로 서비스 운용을 가능하게 해주는 간단한 서비스
- 무중단 배포를 제공. scale up 가능
- 수많은 도커 컨테이너 서버를 띄우고 LB가 이들 사이에 밸런싱을 해줌
- fargate(ec2 안띄우고 전적으로 맡겨놓는 것), ec2 모드가 있어서 docker container 리소스만 띄우거나 물리적인 ec2 클러스터로 구성 가능.
ECS 혹은 k8s 등을 통해 rolling deploy 가 처리 되기 때문에, jenkins 의 역할은 배포 명령만 내려주면 된다! (aws ecs update-service {serviceName} )
동작 방식 다이어그램
- 위의 예는 작은 규모의 서비스이며, 현업에서는 dev 와 prod 를 git 부터 aws 계정까지 물리적으로 분리해놓는다고 한다.
마치며
- 다음 수업에서 드디어 시작을 할텐데, 잘 배울 수 있을지 조금 걱정되지만 재밌을 것 같다.
'DevOps > Jenkins' 카테고리의 다른 글
Jenkins를 활용한 CI/CD 강의 노트 (1) : 젠킨스(Jenkins) 이해하기 (0) | 2021.03.01 |
---|
최근댓글