ariadne/docs/development.md
2026-07-24 05:45:04 +09:00

67 lines
3.1 KiB
Markdown

# 개발
## 요구 도구
- Go 1.24 이상
- Flutter 3.41.5 (`.fvmrc`)
- Docker Compose
## 서버
환경 변수는 `.env.example`을 기준으로 한다.
| 변수 | 기본값 | 의미 |
|---|---|---|
| `ARIADNE_ENVIRONMENT` | `development` | 실행 환경 이름 |
| `ARIADNE_HTTP_ADDRESS` | `:8080` | HTTP 수신 주소 |
| `ARIADNE_DATABASE_URL` | 없음 | PostgreSQL 접속 주소 |
| `ARIADNE_DATABASE_IDENTITY_URL` | 없음 | 신원·조직 목록 조회 전용 PostgreSQL 접속 주소 |
| `ARIADNE_DATABASE_MIGRATION_URL` | 없음 | 마이그레이션 전용 PostgreSQL 접속 주소 |
| `ARIADNE_DATABASE_RUNTIME_ROLE` | 없음 | 테이블 접근 권한을 받을 실행 역할 |
| `ARIADNE_DATABASE_IDENTITY_ROLE` | 없음 | 신원 조회만 허용할 데이터베이스 역할 |
| `ARIADNE_MIGRATION_LOCK_TIMEOUT` | `30s` | 동시 마이그레이션 잠금 대기 한도 |
| `ARIADNE_IOP_ENDPOINT` | 없음 | IOP 연결 주소 |
| `ARIADNE_SHUTDOWN_TIMEOUT` | `10s` | 정상 종료 대기 시간 |
데이터베이스 주소가 없으면 서버의 생존 상태 확인은 가능하지만 준비 상태 확인은 실패한다.
```sh
go run ./apps/migrate/cmd/ariadne-migrate
go run ./apps/server/cmd/ariadne
```
## 검사
```sh
make check
```
서버와 화면을 따로 검사할 수도 있다.
```sh
go test ./...
go vet ./...
cd apps/client && flutter test && flutter analyze
```
기본 `make check`는 Flutter 웹 배포 산출물 빌드까지 포함한다.
## 데이터베이스 변경
마이그레이션은 `internal/platform/database/migrations`에 순서가 보장되는 이름으로 추가한다. 마이그레이션 명령은 아직 적용되지 않은 상향 마이그레이션만 실행하고, 이미 적용된 파일의 체크섬이 바뀌면 실패한다.
마이그레이션·서버 실행·신원 조회 역할은 반드시 분리한다. 마이그레이션 역할은 `NOSUPERUSER BYPASSRLS`, 나머지 두 역할은 `NOSUPERUSER NOBYPASSRLS`여야 한다. 서버 역할은 테이블 소유자가 아니어야 하며 개발용 Compose도 같은 경계를 사용한다.
현재 스캐폴드는 최초 사용자·조직 생성 API를 제공하지 않는다. 개발 데이터가 필요하더라도 실행 또는 신원 역할의 권한을 넓히지 말고, 관리 경계가 구현되기 전에는 별도 개발용 초기 데이터 절차로만 넣는다.
모든 조직 소유 테이블은 다음 조건을 만족해야 한다.
- `organization_id``NOT NULL`
- 조직 범위를 포함한 외래 키 사용
- 조직 범위를 선두로 둔 조회 색인 제공
- 조직 행 수준 보안 정책 적용
- `internal/platform/database/access.go`에 최소 권한 명시
조직 소유 테이블이 권한 목록에 없거나 행 수준 보안과 정책이 빠져 있으면 마이그레이션과 서버 시작이 실패한다.
실제 PostgreSQL을 사용하는 통합 검사는 Docker 사용이 가능한 환경에서 별도로 실행해야 한다. 조직 A/B 교차 접근 차단, 불변 이력 권한, 세 역할의 권한과 동시 마이그레이션 잠금을 필수 항목으로 둔다.