아키텍처 설계 원칙
1. 기본 원칙
1.1 도메인 주도 설계 (DDD)
- 도메인 모델 중심의 설계
- 바운디드 컨텍스트를 통한 경계 설정
- 유비쿼터스 언어 사용
- 도메인 이벤트 기반 통신
1.2 클린 아키텍처
- 계층 간 명확한 경계
- 의존성 규칙 준수
- 외부 프레임워크로부터 도메인 보호
- 테스트 용이성 확보
2. 기술 아키텍처
2.1 서버리스 우선
- Cloud Run 기반 컨테이너 배포
- 자동 스케일링 활용
- 서버리스 서비스 우선 사용
- 운영 복잡도 최소화
2.2 데이터 저장소
- PostgreSQL: 메인 데이터베이스
- 트랜잭션이 필요한 데이터
- 관계형 데이터
- 정합성이 중요한 데이터
- Redis: 캐시 및 세션
- 임시 데이터
- 세션 정보
- 실시간 집계 데이터
- 분산 락
- FireStore: NoSQL 데이터베이스
- 대용량 비정형 데이터
- 실시간 데이터 동기화
- 이벤트 로그 및 히스토리
- 확장성이 중요한 데이터
- 문서 기반 데이터
2.3 데이터 저장소 선택 기준
- 데이터 특성에 따른 저장소 선택
- 관계형 데이터: PostgreSQL
- 임시/캐시 데이터: Redis
- 비정형/대용량 데이터: FireStore
- 다중 저장소 패턴 적용
- 데이터 일관성 유지 전략
- 이벤트 기반 동기화
- 폴리글랏 퍼시스턴스
2.4 이벤트 기반 통신
- GCP Pub/Sub 사용
- 비동기 이벤트 처리
- 이벤트 소싱 패턴 적용
- 멱등성 보장
3. 보안 원칙
3.1 인증 및 인가
- JWT 기반 인증
- RBAC 기반 권한 관리
3.2 데이터 보안
- 전송 구간 암호화 (TLS)
- 중요 데이터 암호화 저장
- 접근 로그 기록
- 보안 감사 지원
3.3 규제 준수 (GDPR)
- 개인정보 처리 아키텍처 설계
- 데이터 최소화 원칙 적용
- 개인정보 처리 흐름 명확화
- 데이터 주체 권리 행사 지원 구조
- 동의 관리 메커니즘
- 동의 획득 및 철회 프로세스
- 동의 이력 관리 구조
- 목적별 동의 분리
- 개인정보 보호 기술 적용
- 저장 및 전송 시 암호화
- 데이터 익명화/가명화 메커니즘
- 접근 제어 및 감사 추적
- 데이터 생명주기 관리
- 보관 기간 설정 및 관리
- 자동 삭제/익명화 메커니즘
- 데이터 이동성 지원
3.4 데이터 호스팅 위치
- DiGA 및 GDPR 규제 준수를 위한 데이터 리전 제한
- 모든 프로덕션 데이터는 독일 리전(europe-west3)에서만 호스팅
- 백업 및 복제본 또한 EU 내 리전으로 제한
- 독일 외부 리전으로의 데이터 이전 금지
- 클라우드 서비스 선택 시 리전 제약 고려
- Google Cloud 서비스 사용 시 europe-west3(프랑크푸르트) 리전 필수
- 리전 제한이 있는 서비스의 경우 대안 검토
- 데이터 저장소별 리전 설정
- Cloud SQL (PostgreSQL): europe-west3 리전 인스턴스 사용, 백업도 동일 리전에 저장
- BigQuery: 데이터셋 위치를 europe-west3로 설정, 쿼리 처리도 동일 리전에서 수행
- Firestore: europe-west3 단일 리전 설정 사용 (멀티 리전 옵션 사용 금지)
- Memorystore (Redis): europe-west3 리전 인스턴스 배포
- Cloud Storage: europe-west3 리전 버킷만 사용, 데이터 클래스 선택 시 리전 제약 고려
- 데이터 지역성 검증
- 배포 파이프라인에서 리전 설정 검증
- 정기적인 규정 준수 감사 수행
- 서비스 제공업체의 데이터 위치 보증 문서 관리
- 개발 및 테스트 환경 고려사항
- 개발 및 테스트 환경도 가능한 europe-west3 리전 사용 권장
3.5 데이터베이스 스키마 구분 원칙
- 데이터 특성에 따른 스키마 구분
- 개인정보 관련 데이터는
private스키마에 저장 - 비개인정보 데이터는
access_code스키마에 저장 - 도메인별 기능 데이터는 해당 도메인명 스키마에 저장 (예:
time_machine) - 개인정보 포함 여부에 따라 스키마 저장 규칙이 우선 적용됨
- 개인정보 관련 데이터는
- 스키마 간 접근 정책
private스키마는 엄격한 접근 제어 적용- 스키마 간 조인 시 개인정보 익명화/가명화 처리 필수
- 데이터 계층 간 이동 시 개인정보 필터링 자동화
- 스키마별 감사 및 로깅
private스키마 접근은 모든 작업 감사 로깅- 개인정보 접근 및 변경에 대한 이력 추적
- 비개인정보 스키마는 변경 작업만 로깅
- 기술적 구현 가이드
- ORM 설정에서 스키마 명시적 지정
- 마이그레이션 파일에서 스키마 분리 관리
- 도메인 모델 정의 시 스키마 속성 명시
3.5.1 공유 스키마 사용 정책
- 기본 원칙은 각 바운디드 컨텍스트가 자체 스키마를 소유하는 것이다.
- 복수 컨텍스트가 동일 레코드를 직접 갱신해야 하고 다른 통합 패턴으로 해결이 불가능할 때에만 공유 스키마를 검토한다.
- 공유 스키마에 테이블을 제안할 경우 반드시 아키텍처 리뷰에서 다음을 제시한다.
- 공유 데이터의 정의, 사용 컨텍스트, 소유권 및 규제 요구사항
- 도메인 이벤트/리드 모델/API 등 대안 검토 결과와 선택 근거
- 접근 제어, 감사, 마이그레이션 계획
- 위 조건을 만족하지 못하면 다음 우선순위로 대안을 검토한다.
- 도메인 이벤트 발행 + 개별 리드 모델(선호)
- 컨텍스트 간 서비스 API 호출
- 뷰 또는 머티리얼라이즈드 뷰를 통한 읽기 전용 공유
external_identity*테이블은 Auth 바운디드 컨텍스트가 소유하므로auth스키마에서 관리하며, 필요 시 지역 확장 모듈이 같은 스키마를 사용한다.
4. 확장성 원칙
4.1 수평적 확장
- 상태를 갖지 않는 서비스 설계
- 분산 캐시 활용
- 로드 밸런싱 적용
- 데이터베이스 샤딩 고려
4.2 성능 최적화
- 캐시 전략 수립
- 비동기 처리 활용
- 데이터베이스 인덱싱
- N+1 문제 방지
5. 운영 원칙
5.1 모니터링
- Cloud Monitoring 활용
- 핵심 메트릭 정의
- 알림 임계치 설정
- 로그 중앙화
5.2 장애 대응
- 서킷 브레이커 패턴
- 폴백 메커니즘
- 재시도 전략
- 장애 격리
6. 개발 프로세스
6.1 버전 관리
- Git 기반 버전 관리
- 브랜치 전략 준수
- 코드 리뷰 필수
- CI/CD 자동화
6.2 테스트
- 단위 테스트 필수
- 통합 테스트 구현
- E2E 테스트 자동화
- 성능 테스트 정기 실행
7. API 설계
7.1 RESTful API
- 리소스 중심 설계
- HTTP 메서드 적절히 사용
- 상태 코드 표준화
- 버저닝 전략 수립
7.2 API 보안
- 인증/인가 적용
- 입력값 검증
- Rate Limiting
- CORS 정책 설정
8. 시간 관리
8.1 TimeMachine 원칙
- 시스템 시간 직접 사용 금지
- TimeMachine 서비스 활용
- 시간대 처리 표준화
- 테스트 용이성 확보
변경 이력
| 버전 | 날짜 | 작성자 | 변경 내용 |
|---|---|---|---|
| 0.1.0 | 2025-03-17 | bok@weltcorp.com | 최초 작성 |
| 0.2.0 | 2025-03-19 | bok@weltcorp.com | DiGA 및 GDPR 준수를 위한 데이터 호스팅 위치 원칙 추가 |
| 0.3.0 | 2025-04-10 | bok@weltcorp.com | 데이터베이스 스키마 구분 원칙 추가 |