디지털 비즈니스는 점점 더 복잡해지고 더 빨라지고 있습니다. 이러한 속도에 적응하기 위해서 인프라가 코드화되면서 코드를 통한 개발과 배포의 통합과 자동화는 CI/CD 라는 이름으로 개발자의 필수 기술 셋이 됐습니다.
- 인프라가 코드화가 되었다 --> Cloud
- 코드를 통한 개발과 배포 --> Cloud
- 통합과 자동화
CI/CD!
그래서 Docker, Linux, Cloud, CI/CD Pipeline, GitLab 을 통한 학습을 했다.
Docker를 이용해서 애플리케이션을 패키징 할 수 있습니다. 애플리케이션을 위한 라이브러리, 빌드 시스템, 런타임, 코드 뿐만 아니라 운영체제에서 제공하는 PID, USER, Volume, IPC, Network 까지 함께 패키징 할 수 있습니다. 이를 통해서 어디에서든 실행 할 수 있는 안전하고 빠르게 배포할 수 있는 Docker Image를 만들 수 있습니다.
리눅스는 소프트웨어 개발 현장에서 특히 클라우드 환경에서 가장 널리 사용하는 운영체제 입니다. 최근의 애플리케이션은 Docker로 배포하는 추세인데, Docker 환경도 리눅스를 기본 환경으로 하고 있습니다. 클라우드 혹은 DevOps 엔지니어 뿐만 아니라 개발자에게도 리눅스는 필수 환경입니다.
클라우드는 인터넷 시대의 기간산업입니다. 이제 개발자는 시스템, 네트워크, 운영체제, 모니터링을 신경쓰지 않고 코드 개발에 집중 할 수 있습니다. 또한 클라우드는 API를 이용해서 서비스를 관리 할 수 있습니다.
이러한 특징을 이용해서 GitLab으로 클라우드로의 배포를 간단하게 자동화 할 수 있습니다.
여기까지 CI/CD 공부를 할 때 작성했던 글들을 다시 읽어보면서 더 확실하게 머릿속에 넣어놓으면 좋겠지만 암기를 하는 것만큼이나 훨씬 중요한 건 이해를 하는거라고 생각한다.
CI/CD 가 무엇인지/ AWS EC2 와 Linux / Docker에 대해서 / GitLab / 파이프라인 /
기본적인 것들을 공부한 거라 아직 실무 수준의 능력은 없겠지만, 기본적인 이해를 바탕으로 발전해나갈 수 있겠다는 자신감은 생겼다. 앞으로 더 공부해봤으면 하는 것들을 아래에 적고 끝을 내겠다.
추가로 해보면 좋을 것들
- Log : Logging Framework, CloudWatch, ElasticSearch
개발자, 관리자, 운영자, QA, 보안 담당자는 무엇을 커뮤니케이션 할까요 ? 운영 환경에서는 결국 로그를 가지고 협업을 합니다. 언어, 프레임워크 별로 제공하는 로깅 시스템이 있을 겁니다. 애플리케이션에 로깅을 접목을 해봅니다. 이렇게 만들어진 로그는 어딘가에 저장되고 문제가 발생했을 때 검색하고 추적할 수 있어야 할 겁니다. CloudWatch와 ElasticSearch를 학습하여 로깅 기반의 협업환경을 만들 수 있습니다.
- Test : Built in Quality (품질의 내재화), Unit Test, Integration Test
애플리케이션의 품질은 “테스트”와 “로그”를 통해서 관리할 수 있습니다. CI/CD 파이프라인에 테스트를 추가해봅니다. 유닛 테스트, 테스트 커버리지, 정적 분석등의 품질관련 작업을 “코드”화 해서 관리 할 수 있습니다.
CI/CD에 내장된 test job은 매 빌드마다 실행이 되므로 안정적으로 품질을 관리 할 수 있으며 “코드를 추가”하는 것으로 지속적으로 품질을 개선할 수 있습니다.
이렇게 CI/CD 파이프라인에 품질을 내장(Built-in Quality)할 수 있습니다.
- 배포 전략 : Rolling 배포, Blue/Green 배포, Canary 배포
실무에서는 Rolling 배포, Blue/Green 배포, Canary 배포를 주로 사용합니다. 이들 배포전략을 이해해서 애플리케이션 특징에 맞는 배포 전략을 적용할 수 있습니다. 이를 통해서 안전하고 빠르게 애플리케이션을 배포하고 문제가 생겼을 때 빠르게 복구할 수 있습니다.
- Git Branch 전략 : Git Flow, Trunk-based
실무를 하게 되면 거의 대부분 Git을 이용해서 협업을 하게 됩니다. 이때 사용하는 주요 Git Branch로 Git Flow와 Trunk-based branch 전략이 있습니다.
Git Flow와 Trunk-based branch 전략을 이해하고 팀에 맞는 branch 전략을 사용합니다. 또한 이 전략을 GitLab과 연동 할 수 있습니다. 우리는 예제에서 main에서 feature branch를 만들고 merge 하는 방식을 사용했는데 이는 trunk-base branch 전략의 일종입니다. 우리는 이미 trunk-base branch를 경험했습니다.
- Cloud Dive Deep :
AWS Cloud의 경우 200개가 넘는 서비스들이 있으며 이들 200개 서비스로 수천가지의 조합을 만들 수 있습니다. 이 모든 것들을 익히는 건 불가능 합니다.
핵심적인 것들만 학습하고, 이 후 필요하면 더 살펴보는걸 권장합니다. 아래 기본적으로 살펴봐야 할 서비스들을 정리했습니다. 이들 요소들은 다른 클라우드 서비스에서도 이름만 바뀔 뿐 그대로 사용 할 수 있으므로 학습해두면 애플리케이션의 개발과 배포 과정을 이해하는데 큰 도움이 될 겁니다.