AWS CDK는 은탄환이 아니다
발행일 2023년 8월 12일 • 3 분 소요 • 552 단어 • 다른 언어 선택: English
Table of contents
TL;DR (Notion AI가 작성해준 글)
AWS CDK(클라우드 개발 키트)는 코드형 인프라(IaC) 개발을 위해 널리 사용되고 있지만, 모든 사용 사례에 적합한 솔루션은 아니라는 점에 유의해야 합니다.
첫째, 많은 사용자 정의가 필요하지 않은 소규모 프로젝트나 간단한 인프라 설정에는 AWS CDK가 최선의 선택이 아닐 수 있습니다. 이러한 경우에는 더 간단한 IaC 도구를 사용하거나 AWS 콘솔에서 직접 코드를 작성하는 것이 더 효율적일 수 있습니다.
둘째, AWS CDK는 인프라 정의를 위한 높은 수준의 객체 지향 추상화를 제공하지만, 특정 상황에서는 복잡성을 증가시킬 수도 있습니다. 개발자는 AWS CDK가 제공하는 유연성과 이로 인해 발생할 수 있는 추가 복잡성 사이의 장단점을 신중하게 고려해야 합니다.
마지막으로, AWS CDK는 아직 비교적 새로운 도구이며 빠르게 발전하고 있습니다. 크고 활발한 커뮤니티가 있지만 아직 일부 특정 사용 사례에 필요한 모든 기능이나 지원이 제공되지 않을 수 있습니다.
전반적으로 AWS CDK는 인프라 개발을 위한 강력한 도구이지만 모든 것을 충족하는 솔루션은 아닙니다. 개발자는 특정 사용 사례와 프로젝트 요구 사항을 신중하게 고려한 후 AWS CDK 또는 기타 IaC 도구를 사용하기로 결정해야 합니다.
왜 애꿎은 CDK에게 염증을 느끼게 되었는가?
나는 요즘에 Go 언어로 CLI 크롤러 애플리케이션을 만들어 보고 있다.
처음에는 가벼운 마음으로, No Server & No DB 환경의 애플리케이션을 만들고자 했다.
하지만 chromedriver를 내 CLI 애플리케이션 내에서 작동시키기에는 몇 가지 에로사항이 좀 있었다.
(여기
에 조금 정리해두긴 했지만, CLI가 완성되면 그때 따로 또 자세하게 포스팅하도록 하겠다)
사용자의 로컬 PC에서 chromedriver를 실행시키는 대신, AWS Lambda에서 chromedriver를 실행시키는 방법을 찾아보게 되었다.
그러던 중 docker-selenium-lambda
에서 내가 원하는 대로 Lambda에서 chromedriver를 실행시킬 수 있도록 구현해두었다는 사실을 알게 되었다.
그런데 나는 정말로 어째서인지, Serverless 기반의 이 레포지토리를 참조해서 CDK 기반의 코드를 작성하고자 했다.
각 도구들의 장단점은 고려하지도 않았다.
그냥 내가 실제로 회사에서 CDK를 많이 사용하고 있었고, IaC를 작성하려면 CDK가 항상 정답이라는 말도 안되는 생각이 밑바탕으로 깔려 있었던 것이다.
3일 동안 내 프로젝트에 CDK를 적용하려고 시도했을 때 맞닥뜨렸던 가장 큰 문제는 ECR에 관련된 것이었다.
CDK에서는 ECR 레포지토리를 생성할 수 없다. - 관련 링크
그리고 생각지도 못한 Serverless가 이 기능을 잘 지원해주고 있던 것이다.
나는 여기서 CDK가 모든 것을 해결해주는 만능 도구가 아님을 깨달았다.
그리고 내가 너무나도 무지성으로 익숙한 도구들을 사용하고자 했음을 깨달았다.
Serverless vs SAM vs CDK
Serverless
- 오랫동안 사용되어 왔으므로 커뮤티가 큼
- CloudFormation의 복잡한 부분들을 추상화
- 간단하게 앱을 테스트하고 배포할 수 있는 단순함
- 다양한 플러그인들
- Serverless 구성 파일과 CloudFormation 구성 파일의 차이를 분간하는 것이 어려울 수 있음
SAM
- Serverless와 마찬가지로 CloudFormation의 복잡한 계층들을 단순화
- 로컬 테스트 기능
- AWS build pipeline과의 통합
- CDK와의 조합 가능
- 복잡한 인프라 구성을 하기에는 까다로울 수 있음
CDK
- 컴포넌트를 구성하고 재사용하기에 용이
- 익숙한 프로그래밍 언어로 인프라 정의
- 복잡한 인프라 구성을 하기에 용이
- 서버리스에 국한되지 않고 AWS의 모든 서비스를 지원
- 로컬 테스트 등 몇몇 세부 기능들은 다른 서비스와의 통합이 필요
요약
중요한 차이점이라면, Serverless와 SAM은 말 그대로 Serverless를 위한 도구이고, CDK는 AWS의 모든 서비스를 지원하는 IaC 도구라는 점이다.
따라서 내가 만드려는 애플리케이션이 복잡해지면 복잡해질수록, CDK를 사용하는 것이 더욱 유리하다.
반면에 내 애플리케이션의 구조가 복잡하지 않을 때는 Serverless와 SAM 중에서 어떤 도구를 사용할지 고민이 되는데, 사실 나는 이런 선택의 분기에 놓인다면 Serverless 쪽의 가볍고 단순한 구조를 많이 사용하게 될 것 같다.
또 추가적으로 front-end 위주의 애플리케이션을 만들려고 한다면 Amplify를 배워보는 것도 좋겠다.
결론
이번 기회에 내가 얼마나 생각 없이 개발 도구들을 선택하고 사용해왔는지를 깨달았다.
그저 내가 많이 사용해왔기에 익숙한 것, 그리고 거의 정답이라고 여겨지는 솔루션들을 채택했던 것이다.
더 나은 개발자가 되기 위해서는 프로젝트에 어떤 도구들이 적합하며, 이들을 어떻게 조합했을 때 좋은 시너지를 낼 수 있는지 고민해봐야 한다.
앞으로는 사이드 프로젝트를 만들 때에도 내가 구현하고자 하는 로직에 더욱 알맞는 방법들을 찾아보고 활용하는 습관을 들여야겠다.