<p align="center" dir="auto">
<a href="https://encore.dev"><img src="https://user-images.githubusercontent.com/78424526/214602214-52e0483a-b5fc-4d4c-b03e-0b7b23e012df.svg" width="160px" alt="encore icon"></img></a>
<br/><br/>
<b>Encore: 로컬 환경부터 클라우드까지 인프라 오케스트레이션</b><br/><br/>
License
Discord
Go SDK
TS SDK
</p>
Encore란 무엇인가?
Encore는 개발자와 AI 코딩 에이전트가 인프라를 수동으로 설정하고 관리할 필요 없이 백엔드 애플리케이션을 구축하고 배포하는 데 도움을 줍니다.
Encore는 오픈 소스 SDK, CLI(Command Line Interface), 그리고 클라우드 플랫폼을 하나의 워크플로우로 결합하여 앱의 구축 및 배포를 지원합니다.
필요한 내용을 SDK에서 애플리케이션으로 직접 가져와 서비스와 인프라를 정의할 수 있습니다. CLI를 사용하여 로컬 환경에서 앱과 인프라를 실행하여 변경 사항을 엔드투엔드로 테스트할 수 있습니다. 그런 다음 레포지토리에 푸시하면, 플랫폼이 클라우드(AWS 또는 Google Cloud)에 해당하는 리소스를 설정하고 애플리케이션을 배포합니다.
또한 SDK만 단독으로 사용하여 로컬 개발을 진행하거나, Terraform 또는 다른 도구를 사용하여 프로덕션 인프라를 직접 관리할 수도 있습니다.
예시: SDK를 사용한 리소스 선언
import { SQLDatabase } from "encore.dev/storage/sqldb";
import { Topic } from "encore.dev/pubsub";
import { Bucket } from "encore.dev/storage/objects";
...
각 선언은 Encore 애플리케이션 그래프의 노드가 됩니다. Encore는 마이그레이션을 실행하고, encore run에서 로컬 환경에 해당하는 요소를 구축하며, 배포 시 클라우드 환경에 해당하는 요소를 프로비저닝합니다:
| 리소스 | 로컬 | AWS | Google Cloud |
|---|
| SQL Database | Postgres | RDS | Cloud SQL |
| ... | | | |
리소스를 추가하거나 수정하는 변경 사항을 푸시하면, Encore는 애플리케이션 그래프를 환경과 비교(diff)하고, 사용자의 AWS 또는 Google Cloud 계정에 누락된 모든 것을 프로비저닝하며, 그 위에 새로운 코드를 배포합니다.
구성 (Configuration)
Encore는 애플리케이션 의미론(semantics)을 환경별 구성에서 분리합니다. 코드에서는 각 환경이 리소스를 어떻게 구성해야 하는지가 아니라, 앱이 어떤 리소스가 필요한지를 정의합니다.
이는 서비스를 클라우드, 리전(region), 계정(account), 스케일 프로파일, 그리고 로컬 개발 환경 전반에 걸쳐 이식성 있게 유지합니다.
Encore는 모든 리소스를 합리적인 프로덕션 기본값(production defaults)으로 프로비저닝한 다음, 애플리케이션 코드와 별개로 구성을 관리할 수 있도록 돕습니다:
- Encore 플랫폼 대시보드: 프로세스 할당(process allocation), 인스턴스 크기(instance sizes), 복제본(replicas) 등 모든 일반적인 설정을 위한 사용하기 쉬운 노브(knobs)를 제공합니다. 자세한 내용은 문서 참조.
- 사용자의 AWS 또는 GCP 콘솔: 클라우드 제공업체 콘솔에서 원하는 모든 것을 직접 조정할 수 있습니다. Encore는 다음 배포 시 변경 사항을 반영합니다.
- IaC (Infrastructure as Code): Terraform 제공업체를 통해 나머지 인프라와 함께 Encore가 프로비저닝한 리소스의 구성을 관리합니다.
언어 SDK (Language SDKs)
개발 워크플로우 (The Development Workflow)
동일한 인프라 모델이 로컬 환경, PR별 미리 보기 환경(per-PR preview environments), 그리고 프로덕션 환경에서 실행됩니다:
- 로컬(Local):
encore run을 사용하면 전체 시스템이 로컬에서 시작됩니다: 실제 Postgres, 실제 Pub/Sub 의미론, 타입 안정성이 보장되는 서비스 간 호출, 그리고 분산 추적 기능이 있는 로컬 대시보드까지 제공합니다. Infrastructure namespaces를 사용하면 여러 브랜치나 에이전트가 격리된 상태로 병렬 작업할 수 있습니다. 이를 통해 코드를 푸시하기 전에 실제 인프라 의미론으로 변경 사항을 검증할 수 있습니다.
- PR별 미리보기 환경(Per-PR preview environments): 풀 리퀘스트(pull request)를 열면 Encore가 임시 환경을 설정하고 (선택적으로) seed 환경에서 데이터베이스를 브랜치합니다. 이를 통해 공유 스테이징 환경으로 병합하기 전에 엔드투엔드 검증을 수행할 수 있습니다.
- 프로덕션(Production): 푸시하여 배포합니다. Encore는 애플리케이션 그래프를 환경과 비교하고, AWS 또는 GCP 계정에 누락된 부분을 프로비저닝하며, 애플리케이션의 코드 경로에 기반한 최소 권한 IAM을 연결하고, 새로운 코드를 롤아웃합니다.
이 워크플로우를 통해, 실패 루프는 "푸시 → 대기 → 수정"에서 "로컬 실행 → 작동 확인 → 푸시"로 바뀝니다. 이러한 빠른 순환 고리는 모든 변경 사항이 코드 변경 직후 실제 인프라로 검증될 수 있기 때문에 Encore가 AI 코딩 에이전트와 특히 효과적인 이유입니다. 더 자세한 내용은 Development Workflow 문서를 참조하십시오.
Encore 도입하기
시스템의 모든 부분에 대해 재작성(rewrite)하거나 Encore를 사용할 필요는 없습니다.
- 일반적인 방식으로 모든 인프라 사용: Encore는 모든 리소스를 소유하려고 하지 않습니다. AWS SDK, GCP 클라이언트 라이브러리 또는 기타 타사 API를 가져와 직접 리소스를 프로비저닝하거나, Terraform provider를 통해 Encore가 관리하는 리소스 옆에 연결할 수 있습니다.
- 서비스별 마이그레이션: 새로운 서비스를 Encore에서 구축하고 기존 시스템 옆에서 실행하며, API를 통해 통합합니다.
- 스택이 이미 존재하는 곳에 배포: Encore는 사용자의 기존 Kubernetes 클러스터 또는 AWS나 GCP의 VPC 내부에 배포할 수 있습니다.
위험도가 낮고 변경 빈도가 높은 서비스부터 시작하세요. 전체 플레이북은 마이그레이션 가이드를 참조하십시오.
마이그레이션 이탈 (Migrating Away)
Encore는 떠나기 쉽도록 설계되었습니다. 코드의 99%가 일반적인 Go 또는 TypeScript이기 때문에 다시 작성할 부분이 많지 않습니다.
더 자세한 내용은 마이그레이션 이탈 가이드를 참조하십시오.
제한 사항 (Limitations)
Encore는 애플리케이션 계층에서 통합되므로, 사전에 명확히 알아야 할 몇 가지 제약사항이 있습니다:
- 언어: 인프라 SDK를 사용하려면 서비스가 지원되는 언어로 작성되어야 합니다. 현재 TypeScript (Node.js)와 Go가 지원되며, Python은 곧 지원될 예정입니다.
- 인프라 범위: Encore는 99%의 일반적인 사용 사례(서비스, 데이터베이스, Pub/Sub, 객체 스토리지, 캐시, 크론 작업 및 비밀 정보 등 반복적으로 사용하는 리소스)를 해결하도록 설계되었습니다. 나머지 1%로 도메인에 특화된 부분은 평소처럼 다른 서비스를 통합할 수 있습니다. Encore는 이를 막거나 어렵게 만들지 않습니다.
- 클라우드 제공업체: 현재 Encore의 완전 자동화된 프로비저닝은 AWS와 GCP를 지원합니다. Azure는 로드맵에 있습니다.
encore build docker를 통한 자체 호스팅은 모든 제공업체에서 작동합니다.
Encore 비교 (How Encore Compares)
| Tool | 기능 | Encore의 차별점 |
|---|
| Pulumi / CDK / Terraform / SST | 클라우드 리소스 프로비저닝을 위한 Infrastructure-as-Code | 인프라는 애플리케이션 코드에서 생성되므로, 동일한 코드가 로컬에서 실행되고 AWS 또는 GCP에 배포됩니다. |
| ... | | |
빠른 시작 (Quick Start)
encore app create
cd myapp
encore run
Encore 설치:
- macOS:
brew install encoredev/tap/encore
- Linux:
curl -L https://encore.dev/install.sh | bash
- Windows:
iwr https://encore.dev/install.ps1 | iex
자세한 내용은 Quickstart 가이드를 참조하세요.
AI 통합 (AI Integration)
Encore는 AI 지원 개발을 위해 구축되었습니다. encore app create를 실행할 때, 사용자는 사용할 AI 도구(Cursor, Claude Code 등)를 선택할 수 있으며, Encore가 해당 도구를 위한 적절한 규칙 파일(rules files)을 생성하고 에이전트가 앱의 서비스(services), API, 데이터베이스(databases), 트레이스(traces) 등을 내부 검사(introspect)할 수 있게 해주는 MCP 서버를 구성합니다. 위에서 설명한 빠르고 로컬-프리뷰 환경 간의 반복 루프와 결합하여, 에이전트는 추측하는 대신 실제 인프라에 대해 자체 변경 사항을 엔드투엔드(end-to-end)로 검증할 수 있습니다.
더 자세한 내용은 AI 통합 문서를 확인하세요.
로컬 개발 대시보드 (Local Dev Dashboard)
The Encore CLI는 서비스, API, 트레이스, 데이터베이스, Pub/Sub 메시지 및 아키텍처 다이어그램을 실시간으로 검사할 수 있는 로컬 대시보드를 제공합니다. encore run을 실행하면 localhost:9400에서 접속할 수 있습니다.
Encore의 선택적 관리형 플랫폼은 사용자의 AWS 또는 GCP 계정에 연결하여 코드가 선언하는 리소스를 자체 VPC 내에 프로비저닝합니다. 기타 기능:
- 각 PR(Pull Request)을 위한 미리보기 환경 (Preview environments)
- 최소 권한 원칙(least-privilege) IAM 및 방화벽 규칙이 실제 코드 경로에서 파생되는 셀프 서비스 인프라 프로비저닝
- 서비스 전반에 걸친 분산 추적(Distributed tracing), 메트릭, 로그
- 비용 분석 및 인프라 승인 워크플로우
- 코드로부터 자동 생성된 서비스 카탈로그 및 아키텍처 다이어그램
자세한 내용은 가격 책정을 참조하세요.
또한 플랫폼 사용을 완전히 건너뛸 수도 있습니다. encore build docker를 실행하여 독립형 이미지를 생성하고, 자체 인프라 구성(Terraform, Pulumi 또는 기타 도구를 통해 프로비저닝)을 제공할 수 있습니다. 셀프 호스팅 가이드를 참조하세요.
Encore 사용 기업
200개 이상의 팀이 이미 Encore를 사용하여 Groupon, Echo.xyz (Coinbase 회사), Bookshop.org, Gradient Labs, Ashby, Later.com, Pallet, Pave Bank, Playwire 등 프로덕션 애플리케이션을 배포하고 있습니다.
사용 사례는 AI, 핀테크(fintech), 물류, 커머스, web3 등 광범위합니다. 더 자세한 내용은 사례 연구를 확인하세요.
리소스
라이선스
Encore는 Mozilla Public License 2.0에 따라 라이선스가 부여됩니다.
프레임워크, 파서, 컴파일러, 런타임, CLI 및 Encore 애플리케이션을 개발, 빌드 및 셀프 호스팅하는 데 필요한 모든 것은 오픈 소스입니다. Encore의 선택적 관리형 배포 플랫폼은 상용 서비스입니다.
추가 세부 정보는 CONTRIBUTING.md를 참조하세요.