sst은(는) 무엇을 하나요?
개요
SST(Serverless Stack)는 Lambda, API Gateway, DynamoDB, S3 및 프론트엔드 프레임워크를 위한 고급 추상화를 제공하여 AWS에서 풀스택 애플리케이션을 구축하고 배포하기 위한 프레임워크입니다. 실제 AWS 서비스에 연결된 로컬 개발 환경, 타입에 안전한 리소스 연결, 제로 구성 TypeScript 지원이 특징입니다.
사용 방법
- 인프라를 정의할 때는
sst.config.ts를 사용하며,sst.aws.Function,sst.aws.Api,sst.aws.Bucket,sst.aws.Dynamo와 같은 타입 기반 컴포넌트를 사용합니다. - 리소스를 연결할 때는 함수에
link속성을 사용하여 IAM 권한을 자동으로 부여하고 환경 변수를 주입하며, 핸들러에서Resource.Name을 통해 연결된 리소스에 접근합니다. - 로컬 개발 시에는
sst dev를 사용하는데, 이는 Lambda를 로컬에서 핫 리로드로 실행하면서 실제 AWS 서비스(DynamoDB, S3, SQS)에 연결하여 VS Code 중단점 디버깅을 지원합니다. - 배포 시에는 프로덕션 스테이지에
sst deploy --stage prod를, 프리뷰 환경에sst deploy --stage pr-${PR_NUMBER}를, 제거 시에는sst remove --stage dev를 사용합니다. - 프론트엔드 배포 시에는
sst.aws.Nextjs,sst.aws.Remix, 또는sst.aws.Astro컴포넌트를 사용하여 Lambda에서 SSR을 수행하고 정적 자산은 S3 + CloudFront에 배포합니다. - 시크릿 관리 시에는
sst secret set KEY value를 사용하여 암호화되고 스테이지별로 격리된 시크릿을 저장합니다. - 코드 구성 시,
packages/functions/의 핸들러를 얇게 유지하여 오케스트레이터 역할을 하고 비즈니스 로직은packages/core/에 배치합니다.
예시
예시 1: DynamoDB를 사용한 서버리스 API 구축
사용자 요청: "SST를 사용하여 AWS에 DynamoDB를 포함한 REST API를 만들어 주세요"
수행 단계:
sst.config.ts에서 DynamoDB 테이블과 API Gateway를 정의합니다.- 테이블을 API 핸들러 함수에
link하여 자동 권한을 부여합니다. Resource.MyTable.name에 접근하는 CRUD 핸들러를 구현합니다.sst dev를 실행하여 실제 AWS 서비스에 연결된 로컬 개발 환경에서 개발합니다.
결과: 타입 안전한 리소스 접근과 실시간 디버깅이 가능한 서버리스 REST API가 생성됩니다.
예시 2: 프리뷰 환경을 갖춘 Next.js 앱 배포
사용자 요청: "AWS에 PR별 프리뷰 환경을 포함하여 내 Next.js 앱을 배포해 주세요"
수행 단계:
- 사용자 정의 도메인과 연결된 리소스를 가지는
sst.aws.Nextjs컴포넌트를 구성합니다. - 각 풀 리퀘스트마다
sst deploy --stage pr-${PR_NUMBER}를 실행하도록 CI를 설정합니다. - 백엔드 리소스(API, 데이터베이스)를 Next.js 배포에 연결합니다.
- PR이 닫힐 때
sst remove로 정리하는 단계를 추가합니다.
결과: 각 PR에 대해 격리된 프리뷰 환경을 갖춘 프로덕션 Next.js 배포가 AWS에 생성됩니다.
지침
- 수동 IAM 정책 대신
link를 사용하십시오. SST가 자동으로 최소 권한 권한을 생성합니다. - 핸들러에서
Resource.Name을 통해 연결된 리소스에 접근하십시오. 테이블 이름이나 버킷 ARN을 하드코딩하지 마십시오. - 일상적인 개발에는
sst dev를 사용하십시오. AWS에 매번 배포하는 것보다 훨씬 빠릅니다. - 개발자별 스테이지(
sst dev --stage alice)를 생성하여 각 개발자가 격리된 AWS 리소스를 사용할 수 있도록 하십시오. - 핸들러는 얇게 유지하십시오: 비즈니스 로직은
packages/core/, 핸들러는packages/functions/에 배치하십시오. - API 키와 자격 증명에는
sst secret을 사용하십시오. 이들은 암호화되고 스테이지별로 격리됩니다. - CI에서
sst deploy --stage pr-${PR_NUMBER}를 설정하여 모든 풀 리퀘스트에 대해 프리뷰 환경을 구성하십시오.