앞서

이전 글(simju9397.tistory.com/4) 과 이어지는 내용입니다.

개발 환경의 종류

  • 개발자가 개발을 하는 Local
  • 개발자들끼리 개발 내용에 대한 통합 테스트를 하는 Development 환경
  • 개발이 끝나고 QA 엔지니어 및 내부 사용자들이 사용해보기 위한 QA 환경
  • 실제 유저가 사용하는 Production 환경
  • 앞으로는 DEV, QA, PROD 환경으로 부른다.

개발 프로세스

  1. 개발자가 Local에서 개발을 진행한다.
  2. 다른 개발자가 작성한 코드와 차이가 발생하지 않는지 내부 테스트를 진행한다.
  3. 진행한 내용을 다른 개발자들과 공유하기 위해 git 에 올린다. -> 흔히 dev 브랜치
  4. Dev 브랜치의 내용을 개발 환경에 배포하기 전에 테스트와 lint 등 코드 포맷팅을 한다.
  5. 빌드 -> 배포 -> 테스트 ->각각의 환경에 위 과정을 다하고 환경에 배포

여러 배포 환경의 관리

  • 인프라를 모듈화 하여 어떤 것이 변수인지 잘 설정하고 이를 잘 설계하는 것!!
  • 가령 APP_ENV 처럼 현재 배포하고자 하는 것이 무슨 환경인지 설정하고, 앱 내에서 사용하는 다양한 변수들을 APP_ENV 에 맞게 잘 가져다 쓰는 것
  • AWS System Manager 의 parameter store 와 같은 키 관리 서비스를 쓰자.

예시 배포 환경

  1. 웹사이트 코드 작성
  2. 웹사이트 코드를 린트, 웹팩 빌드해서 AWS S3 bucket 에 html 파일 업로드
  3. Node.js 백엔드 코드를 typescript 로 작성
  4. 위 코드를 javascript compile 하고, 테스트 코드를 돌려서 도커 이미지를 만들어 ECR 에 올린다.
  5. 업로드한 ECR 이미지로 ECS 서비스를 재시작한다.(rolling deploy => continuous deploy)

개발에 필요한 리소스 리뷰

  1. ECR : 도커 이미지를 저장하는 private repository

  2. ECS : 도커 컨테이너 기반으로 서비스 운용을 가능하게 해주는 간단한 서비스

    1. 무중단 배포를 제공. scale up 가능
    2. 수많은 도커 컨테이너 서버를 띄우고 LB가 이들 사이에 밸런싱을 해줌
    3. fargate(ec2 안띄우고 전적으로 맡겨놓는 것), ec2 모드가 있어서 docker container 리소스만 띄우거나 물리적인 ec2 클러스터로 구성 가능.

    ECS 혹은 k8s 등을 통해 rolling deploy 가 처리 되기 때문에, jenkins 의 역할은 배포 명령만 내려주면 된다! (aws ecs update-service {serviceName} )

동작 방식 다이어그램

  • 위의 예는 작은 규모의 서비스이며, 현업에서는 dev 와 prod 를 git 부터 aws 계정까지 물리적으로 분리해놓는다고 한다.

마치며

  • 다음 수업에서 드디어 시작을 할텐데, 잘 배울 수 있을지 조금 걱정되지만 재밌을 것 같다.
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기