Infra/git | devOps

AWS CI/CD 삼형제 (Code PipeLine, CodeBuild, CodeDeploy) 도입 리뷰

devMarco 2021. 6. 14. 22:52

안녕하세요,
이번 포스팅에서는 AWS EC2 프리티어 환경에서의 서버 배포를 위해 AWS CodePipeLine, CodeBuild, CodeDeploy를 도입한 것에 대한 사용 배경 및 팁을 공유하고자 합니다.

개발 내용에 대한 리뷰를 목표로 작성하였으며, 실습을 통해 AWS CodeBuild, CodeDeploy를 적용하고자 하시는 분들은 다음 포스팅을 참고해보시길 추천드립니다.


사용 배경 - 프리티어에선 서버 빌드가 너무 무거워요..

최근에 간단한 웹 프로젝트를 개발하게 되었습니다. node.js로 백엔드를 설계하였고, 서버 개발 후 배포를 하려는데 문제가 생겼습니다. 서버 빌드 과정에서 프리티어의 AWS EC2 서버가 멈춰버리는 것이었습니다. 주요 증상은 다음과 같습니다.

- EC2 콘솔에서 장시간(수 분 이상)CPU 점유율 100% 유지 
- 서버 SSH 접속 불가
- 기존 접속 SSH 세션에서 터미널 조작 불가. 시간 경과 후 접속이 종료됨

해당 케이스는 보통 서버 메모리 부족으로 발생합니다. 속된 말로 똥컴이라는 것이지요.. -_-;; 무료로 사용하는 메모리 1기가 짜리 프리티어라 어쩔 수 없습니다. 구글링해보니 이미 겪어보신 분들이 많이 계시더군요.

 

서버 빌드 과정에서 발생하는 메모리 부족 문제에 대해서 제가 검토했던 방법은 다음과 같습니다.

1. 스왑 공간을 생성한다. (프리티어는 메모리 1기가이며, 2기가 스왑 생성이 권장됨)
2. 서버 외부에서 빌드 및 배포가 수행될 수 있도록 CI/CD를 구축한다. (젠킨스, AWS CodeDeploy 등)

첫 번째 방법은 리눅스 메모리 스왑 공간을 생성하는 것인데요, 스왑이란 RAM으로만 사용하던 메모리 공간이 부족할 때 HDD에 할당하여 사용하는 메모리 공간을 말합니다. 심플하고 빠르게 적용할 수 있는 방법이지만, 서버의 퍼포먼스가 저하된다는 단점이 있습니다. RAM에 비해 속도가 느린 HDD로 인해 서버의 I/O 속도가 느려지게 되는 것이죠.

퍼포먼스 이슈는 너무 큰 단점이라고 판단하여, 결국 두번째 방법인 CI/CD를 통해 서버를 배포하게 되었습니다. CI/CD 설정을 위한 개발 비용이 발생하지만 서버의 퍼포먼스를 떨어뜨리지 않으며, 일단 구축해두면 서비스 배포 과정이 정말 간단해지기 때문입니다. 깃헙 푸시하는 것만으로 테스트 및 배포가 완료되니까요.


AWS CI/CD 도입에 대한 팁

  • CI, CD 각 단계 별로 확실하게 성공 여부를 확인해야 합니다.
  • CI인 CodeBuild에서는 의도한대로 빌드 파일이 생성이 됐는지, (테스트 코드를 작성했다면) 테스트코드가 의도대로 됐는지, 실제로 서버에서 실행이 되는 빌드 파일인지 확인하여야 합니다.
  • CD인 CodeDeploy에서는 빌드 후 만들어진 artifact 파일에 누락된 파일이 없는지 확인합니다.
  • 배포할 서버와 CodeDeploy에 적절한 권한, IAM Role이 설정되어있는지 확인합니다. IAM Role이 안 맞으면 빌드 후 S3로 저장할 때, S3에서 EC2로 배포할 때 등의 과정에서 권한, 역할 관련 에러가 발생할 수 있습니다.

지금까지 AWS CodeDeploy, CodeBuild를 적용하게 된 배경과 팁에 대한 포스팅이었습니다. 보통 CI/CD는 자동화와 편리성 측면에서 검토하게 되는데, 퍼포먼스 관련해서도 해결책으로 검토할 수 있음을 배울 수 있었네요. 감사합니다. 피드백은 언제나 환영입니다 :)

'Infra > git | devOps' 카테고리의 다른 글

리눅스 환경에서 git 사용법  (0) 2018.10.09