서버리스 앱 구축을 위한 모범 사례

이번 섹션에서는 대규모 서버리스 애플리케이션을 개발하고 유지보수하기 위한 모범 사례를 다룹니다. 지금까지 배운 내용을 바탕으로, 첫 번째 섹션에서 만든 데모 노트 앱을 확장합니다. 이 가이드는 개인 개발자가 아닌 팀을 대상으로 합니다. 여러분의 앱(및 팀)이 성장함에 따라 확장 가능한 기반을 제공하는 것이 목적입니다.

배경

SST는 2017년 3월에 처음 출시되었습니다. 그 이후로 수천 명의 사람들이 이 가이드를 사용해 첫 번째 풀스택 서버리스 앱을 구축했습니다. 많은 분들이 이를 시작점으로 삼아 정말로 큰 규모의 애플리케이션을 만들었습니다. 수십 개의 서비스로 구성되고 여러 개발자 팀이 함께 작업하는 애플리케이션들 말이죠.

하지만 대규모 서버리스 애플리케이션을 개발할 때 팀이 직면하는 문제는 개인이 첫 번째 앱을 만들 때 겪는 문제와는 매우 다릅니다. 대규모 서버리스 앱을 구축하고 관리해 본 적이 없다면, 아키텍처 설계 결정과 관련된 질문에 답하기 어려울 수 있습니다. 예를 들어:

  • 수십 개의 상호 의존적인 서비스가 있을 때 프로젝트를 어떻게 구조화해야 할까?
  • 환경을 어떻게 관리해야 할까?
  • 비밀 정보를 저장하는 가장 좋은 방법은 무엇일까?
  • 프로덕션 환경을 완전히 안전하게 유지하려면 어떻게 해야 할까?
  • 팀 내 개발자들의 워크플로우는 어떻게 구성되어야 할까?
  • 대규모 서버리스 애플리케이션을 디버깅하려면 어떻게 해야 할까?

이 중 일부는 대규모 앱을 작업하는 사람들만의 문제는 아니지만, 앱이 일정 규모로 커지면 매우 흔히 발생합니다. 우리는 이러한 질문들을 독자, 사용자, 그리고 Serverless Toronto Meetup 멤버들을 통해 자주 듣습니다.

이러한 질문들 중 일부에 답하는 블로그 포스트는 많지만, 이를 조합해 최선의 방법을 알아내려면 상당한 노력이 필요합니다.

새로운 관점

SST에서 일하고 대규모 서버리스 애플리케이션을 구축한 지 거의 3년이 지난 지금, 독자들과 공유할 수 있는 몇 가지 일반적인 디자인 패턴이 있습니다. 또한 서버리스 기술과 커뮤니티도 위의 질문들에 대한 합리적인 답변을 제공할 수 있을 만큼 성숙해졌습니다.

이 가이드의 새로운 부분은 몇 가지 모범 사례를 제시하고 여러분의 회사에서 서버리스를 사용할 수 있는 견고한 기반을 제공하기 위해 설계되었습니다. 애플리케이션과 팀이 성장함에 따라 확장 가능한 무언가를 구축하는 데 있어 올바른 길을 걷고 있다는 확신을 가질 수 있을 것입니다.

누구를 위한 내용인가요?

이 섹션에서 다루는 주제는 여러분이 작업 중인 어떤 프로젝트에도 적용할 수 있지만, 대규모 프로젝트에 더 적합합니다. 예를 들어, 여러 AWS 계정을 사용하여 환경을 구성하는 방법에 대해 이야기합니다. 이 방법은 팀에 여러 개발자가 있을 때 효과적이지만, 프로젝트를 혼자 진행하는 경우에는 오버헤드가 발생할 수 있습니다.

이 섹션에서 다루는 내용

이 섹션에서는 주로 백엔드 서버리스 부분을 다룹니다. 프론트엔드 흐름은 첫 번째 섹션에서 다룬 내용과 거의 동일하게 작동합니다. 또한, React 앱과 달리 서버리스 백엔드를 구축하는 데 대한 모범 사례가 부족하다는 점을 발견했습니다.

이 개념들은 여러분의 프로젝트를 시작하는 데 좋은 출발점이 될 것이며, 여러분의 사용 사례에 맞게 적용할 수 있을 것입니다!

새로운 섹션의 구조

이 섹션은 첫 번째 섹션에 비해 상당히 많은 _이론_을 다룹니다. 하지만 우리는 비슷한 접근 방식을 취하려고 합니다. 각 장을 진행하면서 이러한 개념을 천천히 소개할 것입니다.

다음 저장소들이 이 섹션의 중심이 될 것입니다:

  1. 서버리스 인프라

    확장된 노트 애플리케이션의 주요 인프라 리소스를 포함한 저장소입니다. 노트 관련 정보를 저장할 DynamoDB 테이블, 첨부 파일 업로드를 위한 S3 버킷, 사용자 인증을 위한 Cognito 사용자 풀 및 Identity 풀을 생성합니다. AWS CDKSST를 사용할 것입니다.

  2. 서버리스 서비스

    확장된 노트 애플리케이션의 모든 서비스를 포함한 모노레포입니다. 여기에는 세 가지 서비스가 있습니다. 노트 CRUD API 엔드포인트를 제공하는 notes-api 서비스, Stripe를 통해 결제 정보를 처리하고 SNS 토픽에 메시지를 발행하는 billing-api 서비스, 그리고 누군가가 구매를 할 때 SNS 토픽을 수신하여 문자 메시지를 보내는 notify-job 서비스가 있습니다. 우리는 서비스에 Serverless Framework를 사용할 것입니다.

이 저장소들을 포크하여 시작하겠지만, 첫 번째 섹션과 달리 코드를 직접 수정하지는 않을 것입니다. 대신 섹션을 진행하면서 코드베이스의 주요 부분을 설명할 것입니다.

그런 다음 AWS를 통해 환경을 설정하는 방법을 단계별로 살펴볼 것입니다. Seed를 사용하여 애플리케이션을 환경에 배포하는 방법을 설명할 것입니다. 여러분이 Seed를 사용할 필요는 없습니다. 단지 예시로 사용할 뿐입니다. 가이드를 완료하면 여러분이 선호하는 CI/CD 서비스를 사용하여 모범 사례를 따르는 파이프라인을 구축할 수 있을 것입니다. 마지막으로 여러분과 팀을 위한 개발 워크플로우를 살펴볼 것입니다.

이 과정의 결과로 여러분은 완전히 작동하는 서버리스 백엔드를 갖게 될 것입니다. 이 백엔드는 여러분의 GitHub 저장소에 호스팅되고 여러분의 AWS 환경에 배포될 것입니다. 여러분이 필요할 때 언제든지 참조할 수 있도록 작동하는 설정을 갖추도록 하겠습니다.

시작해 봅시다.