Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 0 additions & 10 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,19 +1,9 @@
name: CI

# terraform-only 변경은 이 파이프라인을 태우지 않는다 — `terraform.yml`이 대신 돈다.
# `pull_request`와 `push`는 별개 이벤트라 양쪽에 모두 필요하다.
#
# ⚠ main에 branch protection이나 ruleset을 걸 때 이 job을 required check로
# 지정하면, skip된 실행이 Pending으로 남아 terraform-only PR이 영구히 막힌다.
# 그때는 required check를 두지 말고 별도 gate job을 쓴다.
on:
pull_request:
paths-ignore:
- 'infra/terraform/**'
push:
branches: [main]
paths-ignore:
- 'infra/terraform/**'

permissions:
contents: read
Expand Down
46 changes: 0 additions & 46 deletions .github/workflows/terraform.yml

This file was deleted.

5 changes: 0 additions & 5 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,6 @@ coverage
.env.local
.DS_Store
pnpm-debug.log
*.tfstate
*.tfstate.*
.terraform/
infra/terraform/backend.hcl
infra/terraform/terraform.tfvars

# Agent runtime state는 제외하고, 프로젝트 스킬은 Claude/Codex 각각 추적한다.
/.claude/*
Expand Down
2 changes: 1 addition & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ adapters/in
## Infrastructure

- 로컬 의존성은 Docker Compose에서 실행한다. sql.js 같은 인메모리 RDB 대체물을 사용하지 않는다.
- AWS Terraform은 기본 배포 시작점이며 state backend와 secret 값은 환경별로 분리한다.
- 배포 인프라는 이 저장소에 없다. 컨테이너 경계(`Dockerfile`, Compose)까지가 이 저장소의 범위다.
- app 시작 순서에는 Docker healthcheck를 사용한다.
- 선택된 필수 의존성이 실행 중 실패하면 readiness는 `503`이다.

Expand Down
28 changes: 8 additions & 20 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -107,28 +107,16 @@ Matt Pocock의 안정 `engineering`/`productivity` 스킬을 두 에이전트에
두 디렉터리는 symlink로 공유하지 않습니다. 각 에이전트가 해당 디렉터리만 읽습니다. 스킬은
사용자가 이름을 명시했을 때만 실행합니다.

## AWS Terraform
## 배포

`infra/terraform`은 ECS Fargate, ALB, RDS(PostgreSQL/MySQL/MariaDB), 선택형 ElastiCache Valkey의
시작 구성입니다. MongoDB는 DocumentDB로 가정하지 않고 외부 관리형 Mongo URI를 Secrets Manager로
주입할 수 있게 둡니다. SQS/DLQ는 `enable_sqs`로 끌 수 있으며 기본은 꺼짐입니다 — 이 앱의 messaging
composition root는 BullMQ/Redis입니다.
이 저장소의 범위는 **컨테이너 경계까지**입니다 — `Dockerfile`과 Compose가 "이 서비스를
어떻게 돌리나"를 정의하고, `.env.example`과 `src/config/env.validation.ts`가 "앱이 무슨
설정을 요구하나"를 정의합니다. 둘 다 클라우드에 무관합니다.

```bash
cd infra/terraform
cp terraform.tfvars.example terraform.tfvars # cors_origins는 필수입니다
terraform init -backend-config=backend.hcl
terraform plan
```

실제 backend와 secret 값은 커밋하지 않습니다. 처음에는 `backend.hcl.example`을 환경별 파일로
복사하고, state bucket/versioning/lock 설정을 먼저 준비합니다.

이 구성은 [별도 저장소로 분리해 버전 모듈로 참조](./docs/terraform-repo-boundary.md)하는 방향으로
갑니다. 그래서 파생 프로젝트가 고쳤을 값은 사본을 편집하는 대신 input으로 노출합니다.

terraform-only 변경은 앱 CI를 태우지 않고 `.github/workflows/terraform.yml`이 fmt/init/validate를
돌립니다. `plan`/`apply`는 아직 CI에 없습니다.
AWS 인프라는 [iflov/barebones-infra](https://github.com/iflov/barebones-infra)에 있습니다.
2026-09-01에 분리했습니다 — VPC·ALB·ECS 클러스터는 환경당 정확히 하나뿐인 **인스턴스**라
스캐폴드가 실을 수 없고, 그 소비자에는 이 스캐폴드에서 나오지 않은 저장소도 포함됩니다.
근거와 검증 과정은 [결정 문서](./docs/terraform-repo-boundary.md)에 있습니다.

## 검증

Expand Down
17 changes: 17 additions & 0 deletions docs/terraform-repo-boundary.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,23 @@
> `infra/terraform`을 앱 저장소 밖으로 뺄 것인가. 3라운드 교차검증 결과와 내린 결정.
> 조사 2026-08-31 · 결정 2026-09-01
>
> **✅ 종결 (2026-09-01): `infra/terraform`은 [iflov/barebones-infra](https://github.com/iflov/barebones-infra)로
> 나갔다.** 이 문서는 그 결정의 기록으로 barebones에 남는다.
>
> 최종 근거는 저장소 경계도 CI 비용도 아니었다 — **barebones는 스캐폴드이고 스캐폴드는
> 템플릿만 실을 수 있는데, foundation은 환경당 하나뿐인 인스턴스다.** VPC·ALB·ECS
> 클러스터는 복제하면 사고이지 기능이 아니고, 그 소비자에는 이 스캐폴드에서 나오지
> 않은 저장소(frontend 등)도 포함된다. 아래 "2026-09-01 재검토"에서 변경 빈도와
> blast radius로 그은 foundation/service 선이, 재사용 가능성으로 그으면 나오는
> "인스턴스 / 템플릿" 선과 같았다.
>
> 남은 배포 경계는 컨테이너까지다 — `Dockerfile`, Compose, `.env.example`,
> `src/config/env.validation.ts`. 전부 클라우드에 무관하다.
>
> 이전은 `git subtree split`으로 했고 이 구성을 만든 커밋 3개가 함께 갔다.
>
> ---
>
> **⚠ 아래 "추천과 그 근거"는 2026-09-01에 폐기됐다.** 그 추천은 "terraform 사본 하나당
> 소비자 하나"를 전제했는데, 사용자가 그 전제가 틀렸다고 정정했다 — frontend와 다른
> 서비스가 **같은 인프라를 나눠 쓴다.** 갱신된 판단은 아래 "2026-09-01 재검토"에 있다.
Expand Down
22 changes: 0 additions & 22 deletions infra/terraform/.gitignore

This file was deleted.

26 changes: 0 additions & 26 deletions infra/terraform/.terraform.lock.hcl

This file was deleted.

89 changes: 0 additions & 89 deletions infra/terraform/README.md

This file was deleted.

23 changes: 0 additions & 23 deletions infra/terraform/backend.hcl.example

This file was deleted.

10 changes: 0 additions & 10 deletions infra/terraform/backend.tf

This file was deleted.

Loading
Loading