What is SST
여러분의 인프라에서 풀스택 앱을 구축하세요.
SST란 무엇인가
SST는 여러분의 인프라에서 모던 풀스택 애플리케이션을 쉽게 구축할 수 있게 해주는 프레임워크입니다.
SST의 차별점은 여러분의 전체 앱이 코드로 정의된다는 점입니다. 단일 sst.config.ts 파일 안에 데이터베이스, 버킷, 큐, Stripe 웹훅, 그리고 150개 이상의 프로바이더 중 어떤 것이든 포함됩니다.
SST를 사용하면 모든 것이 자동화됩니다.
컴포넌트
여러분은 앱의 일부를 코드로 정의하는 것부터 시작합니다.
예를 들어, 프론트엔드를 추가하고 사용하려는 도메인을 설정할 수 있습니다.
new sst.aws.Nextjs("MyWeb", { domain: "my-app.com"});new sst.aws.Remix("MyWeb", { domain: "my-app.com"});new sst.aws.Astro("MyWeb", { domain: "my-app.com"});new sst.aws.SvelteKit("MyWeb", { domain: "my-app.com"});new sst.aws.SolidStart("MyWeb", { domain: "my-app.com"});프론트엔드와 마찬가지로, 백엔드 기능도 코드로 설정할 수 있습니다.
컨테이너에 배포된 API나 Lambda 함수, Postgres 데이터베이스, S3 버킷, 크론 작업 등을 설정할 수 있습니다.
const cluster = new sst.aws.Cluster("MyCluster", { vpc });
cluster.addService("MyService", { loadBalancer: { ports: [{ listen: "80/http" }] }});new sst.aws.Function("MyFunction", { handler: "src/lambda.handler"});new sst.aws.Postgres("MyDatabase", { vpc });new sst.aws.Bucket("MyBucket");new sst.aws.Cron("MyCronJob", { job: "src/cron.handler", schedule: "rate(1 minute)"});심지어 Stripe 제품도 코드로 설정할 수 있습니다.
new stripe.Product("MyStripeProduct", { name: "SST Paid Plan", description: "This is how SST makes money",});사이드바에서 전체 컴포넌트 목록을 확인할 수 있습니다.
인프라
위에서 설명한 것들을 컴포넌트라고 부릅니다. 컴포넌트는 애플리케이션의 기능을 코드로 정의하는 방법입니다. 이를 통해 애플리케이션의 모든 기능을 정의할 수 있습니다.
위 예제에서는 AWS 콘솔을 사용하지 않고도 AWS 계정에 필요한 인프라를 생성합니다.
컴포넌트에 대해 더 알아보세요.
설정
SST의 컴포넌트는 여러분이 시작하기에 적합한 기본값을 제공합니다. 하지만 이 설정을 완전히 변경할 수도 있습니다.
예를 들어, sst.aws.Function은 일반적인 Lambda 함수 옵션을 모두 설정할 수 있습니다.
new sst.aws.Function("MyFunction", { handler: "src/lambda.handler", timeout: "3 minutes", memory: "1024 MB"});하지만 SST를 사용하면 한 단계 더 나아가 Function 컴포넌트가 저수준 리소스를 생성하는 방식을 변형할 수 있습니다. 예를 들어, Function 컴포넌트는 IAM Role도 생성합니다. transform 속성을 사용해 IAM Role을 변형할 수 있습니다.
new sst.aws.Function("MyFunction", { handler: "src/lambda.handler", transform: { role: (args) => ({ name: `${args.name}-MyRole` }) }});변형에 대해 더 알아보세요.
프로바이더
SST는 AWS와 Cloudflare를 더 쉽게 사용할 수 있도록 내장된 컴포넌트를 제공합니다.
또한 150개 이상의 Pulumi/Terraform 프로바이더 중 하나의 컴포넌트도 지원합니다. 예를 들어, 프론트엔드에 Vercel을 사용할 수 있습니다.
new vercel.Project("MyFrontend", { name: "my-nextjs-app"});프로바이더에 대해 더 알아보고 디렉토리에서 전체 목록을 확인하세요.
리소스 연결하기
몇 가지 기능을 추가한 후, SST를 사용하면 이들을 서로 연결할 수 있습니다. 이 기능은 앱에서 하드코딩할 필요가 없기 때문에 매우 유용합니다.
예를 들어, Express 앱을 컨테이너에 배포하고 S3 버킷에 파일을 업로드하려는 경우, 버킷을 컨테이너에 link로 연결할 수 있습니다.
const bucket = new sst.aws.Bucket("MyBucket");
const cluster = new sst.aws.Cluster("MyCluster", { vpc });
cluster.addService("MyService", { link: [bucket], loadBalancer: { ports: [{ listen: "80/http" }] }});그런 다음 SST의 SDK를 사용해 Express 앱에서 S3 버킷에 접근할 수 있습니다.
import { Resource } from "sst";
console.log(Resource.MyBucket.name);리소스 연결에 대해 더 알아보세요.
프로젝트 구조
지금까지 여러 가지 파일 타입을 살펴봤다. 이제 한 발 물러나서 SST 앱이 실제로 어떻게 구성되는지 알아보자.
드롭인 모드
SST를 사용하는 가장 간단한 방법은 앱의 일부로 실행하는 것입니다. 이를 _드롭인 모드_라고 합니다. 예를 들어, Next.js 앱을 개발 중이라면 루트에 sst.config.ts 파일을 추가할 수 있습니다.
my-nextjs-app├─ next.config.js├─ sst.config.ts├─ package.json├─ app├─ lib└─ public드롭인 모드에서 SST를 사용하는 Next.js 예제 앱을 확인해 보세요.
모노레포
SST를 모노레포에서 사용할 수도 있습니다. 대부분의 프로젝트는 프론트엔드, 백엔드, 그리고 몇 가지 함수로 구성되어 있기 때문에 이 방법이 유용합니다.
이 경우, sst.config.ts 파일은 여전히 루트에 위치하지만, infra/ 디렉토리에서 여러 부분으로 나눌 수 있습니다.
my-sst-app├─ sst.config.ts├─ package.json├─ packages│ ├─ functions│ ├─ frontend│ ├─ backend│ └─ core└─ infra모노레포 설정에 대해 더 알아보세요.
CLI
이 모든 기능을 사용하려면 SST는 CLI를 제공합니다. 여러분은 이를 Node 프로젝트의 일부로 설치할 수 있습니다.
npm install sstNode를 사용하지 않는다면 전역으로 설치할 수도 있습니다.
curl -fsSL https://sst.dev/install | bashCLI는 현재 macOS, Linux, WSL을 지원합니다. CLI에 대해 더 알아보세요.
개발
CLI에는 로컬 개발 환경을 시작하는 dev 커맨드가 포함되어 있습니다.
sst dev이 커맨드는 다음과 같은 기능을 제공하는 _멀티플렉서_를 실행합니다:
- 인프라 변경 사항을 배포하는 감시자(watcher)를 시작합니다.
- 함수를 Live 모드로 실행하여 재배포 없이 변경 사항을 테스트할 수 있게 합니다.
- VPC 내의 리소스에 로컬 머신을 연결하는 터널을 생성합니다.
- 프론트엔드와 컨테이너 서비스를 개발 모드로 시작하고 인프라와 연결합니다.
sst dev CLI를 사용하면 프론트엔드나 컨테이너 애플리케이션을 별도로 시작할 필요가 없습니다. sst dev에 대해 더 알아보세요.
배포
앱을 배포할 준비가 되면 deploy 명령어를 사용할 수 있습니다.
sst deploy --stage production스테이지
스테이지 이름은 앱의 다양한 환경을 구분하기 위해 사용됩니다. 예를 들어 개발 환경을 위한 스테이지를 만들 수 있습니다.
sst deploy --stage dev또는 풀 리퀘스트를 위한 스테이지를 만들 수도 있습니다.
sst deploy --stage pr-123스테이지에 대해 더 알아보세요.
콘솔
프로덕션 환경으로 전환할 준비가 되면 SST 콘솔을 사용해 앱을 자동 배포하고, 프리뷰 환경을 생성하며, 문제를 모니터링할 수 있습니다.

콘솔에 대해 더 알아보세요.
FAQ
자주 받는 질문들을 정리했습니다.
SST는 Pulumi와 Terraform을 기반으로 하면 오픈소스인가요?
SST는 내부적으로 Pulumi를 사용하여 프로바이더와 배포 엔진을 처리합니다. 또한 Terraform의 프로바이더는 Pulumi를 통해 _브릿지_됩니다.
SST는 Pulumi와 Terraform의 오픈소스 부분만 사용합니다. Pulumi 계정이 필요하지 않으며, 앱과 리소스에 대한 모든 데이터는 여러분의 측에 남아 있습니다.
SST는 CDK for Terraform(CDKTF)나 Pulumi와 어떻게 비교되나요?
CDKTF와 Pulumi 모두 TypeScript와 같은 프로그래밍 언어를 사용해 인프라를 정의할 수 있습니다. SST도 Pulumi 위에 구축되어 있습니다. 그래서 SST가 이들과 어떻게 비교되고, 왜 SST를 사용해야 하는지 궁금할 수 있습니다.
간단히 말해, SST는 개발자를 위한 도구이고, CDKTF와 Pulumi는 주로 DevOps 엔지니어를 위한 도구입니다. SST는 개발자를 위해 세 가지 주요 기능을 제공합니다:
-
고수준 컴포넌트
SST의 내장 컴포넌트인
Nextjs나Email은 개발자가 앱에 기능을 쉽게 추가할 수 있게 해줍니다. 이 컴포넌트를 사용하면 기본 Terraform 리소스를 다루는 방법을 알 필요가 없습니다. -
리소스 연결
SST는 인프라를 앱에 쉽게 연결하고, 런타임에 코드에서 접근할 수 있게 해줍니다.
-
개발 모드
마지막으로, SST는 통합된 로컬 개발 환경을 제공합니다. 이 환경은 앱을 배포하고, 함수를 Live로 실행하며, VPC로의 터널을 생성하고, 프론트엔드와 백엔드를 함께 시작합니다.
SST는 어떻게 수익을 창출하나요?
SST는 오픈소스이며 무료로 사용할 수 있지만, Console이라는 SaaS 서비스도 제공합니다. 이 서비스는 앱을 자동으로 배포하고 문제를 모니터링할 수 있습니다. 선택 사항이며 무료 티어가 포함되어 있지만, 유료 서비스입니다. 우리 커뮤니티의 많은 팀, 심지어 우리 팀도 이 서비스를 사용하고 있습니다.