# 공통설계원칙 모든 설계 단계에서 공통으로 적용되는 핵심 원칙과 전략 ## 🎯 핵심 원칙 ### 1. 🚀 실행 우선 원칙 - **프롬프트 우선**: 바로 실행할 수 있는 프롬프트로 작업 시작 - **가이드 학습**: 원리와 방법론은 가이드로 깊이 있게 학습 - **점진적 이해**: 실행 → 결과 확인 → 원리 학습 순서 ### 2. 🔄 병렬 처리 전략 - **서브 에이전트 활용**: Task 도구로 서비스별 동시 작업 - **의존성 기반 그룹화**: 의존 관계에 따른 순차/병렬 처리 결정 - **통합 검증**: 병렬 작업 완료 후 전체적 일관성 검증 ### 3. 🏗️ 마이크로서비스 설계 원칙 - **서비스 독립성**: 캐시를 통한 직접 의존성 최소화 - **선택적 비동기**: 장시간 작업(AI 일정 생성)만 비동기 처리 - **캐시 우선**: Redis를 통한 성능 최적화 - **독립 배포**: 서비스별 독립적 배포 가능한 구조 ### 4. 📝 표준화 원칙 - **PlantUML**: 모든 다이어그램 표준 (`!theme mono`) - **OpenAPI 3.0**: API 명세 표준 - **자동 검증**: PlantUML, OpenAPI 문법 검사 필수 - **일관된 네이밍**: kebab-case 파일명, 표준화된 스키마명 ### 5. ✅ 검증 우선 원칙 - **각 단계마다 자동 검증**: 품질 보장 - **실시간 피드백**: 오류 조기 발견 및 수정 - **CI/CD 통합**: 자동화된 검증 프로세스 - **PlantUML 스크립트 파일 생성 즉시 검사 실행**: 'PlantUML 문법 검사 가이드' 준용 ### 6. 🚀 점진적 구현 원칙 - **MVP → 확장 → 고도화**: 단계별 접근 - **YAGNI 적용**: 꼭 필요한 기능만 구현(YAGNI원칙:You aren't gonna need it) - **지속적 개선**: 피드백 기반 점진적 발전 ## 🔧 의존성 분석 및 병렬 처리 ### 의존성 분석 방법 1. **서비스 간 의존성 파악** ``` 일정 서비스 → 프로파일 서비스 (멤버/여행 정보 조회) 일정 서비스 → 장소 서비스 (장소 정보 조회) 장소 서비스: 독립적 (외부 API만 사용) ``` 2. **의존성 기반 그룹화** ``` Group A (순차 처리): 프로파일 → 일정 서비스 Group B (독립 처리): 장소 서비스 ``` 3. **에이전트 할당 및 병렬 처리** ``` Agent 1: Group A 담당 - 프로파일 서비스 설계 - 일정 서비스 설계 (프로파일 참조) Agent 2: Group B 담당 - 장소 서비스 설계 (독립적) ``` ### 병렬 처리 적용 가이드 #### API 설계 단계 - **독립 서비스**: 각각 별도 에이전트 - **의존 서비스**: 동일 에이전트 내 순차 처리 - **공통 검증**: 모든 에이전트 완료 후 swagger-cli 검증 #### 시퀀스 설계 단계 - **외부 시퀀스**: 플로우별 병렬 처리 (각 플로우는 독립적) - **내부 시퀀스**: 서비스별 병렬 처리 (서비스 내부는 독립적) #### 클래스/데이터 설계 단계 - **의존성 그룹별**: 참조 관계가 있는 서비스들은 순차 처리 - **독립 서비스**: 병렬 처리 - **공통 클래스**: 모든 서비스 설계 완료 후 마지막 처리 ## 🎨 PlantUML 작성 표준 ### 기본 템플릿 ```plantuml @startuml !theme mono title [다이어그램 제목] ' 다이어그램 내용 @enduml ``` ### 필수 검증 - **각 파일 생성 직후 PlantUML 문법 검사 수행** - **파이프 방식 권장**: `cat "파일" | docker exec -i plantuml ...` - **화살표 문법 주의**: sequence diagram에서 `..>` 사용 금지 ### 스타일 가이드 - **폰트 크기**: 적절한 가독성 확보 - **색상 구분**: 서비스별, 레이어별 색상 구분 - **설명 추가**: note를 활용한 상세 설명 ## 🔌 API 설계 표준 ### 파일 구조 ``` design/backend/api/{service-name}-api.yaml ``` ### 필수 필드 ```yaml paths: /endpoint: get: summary: API 목적 설명 operationId: 고유 식별자 x-user-story: 유저스토리 ID x-controller: 담당 컨트롤러 tags: [API 그룹] ``` ### 스키마 원칙 - **서비스별 독립**: 각 서비스 파일에 모든 스키마 포함 - **중복 허용**: 초기에는 중복을 허용하고 점진적으로 공통화 - **명확한 네이밍**: Request/Response DTO 네이밍 표준 ## 🔄 시퀀스 설계 표준 ### 외부 시퀀스 (서비스 간) - **참여 서비스만**: 해당 플로우에 참여하는 서비스만 표시 - **API 호출 중심**: 서비스 간 API 호출 순서 표현 - **한글 설명**: 각 호출의 목적을 한글로 명시 ### 내부 시퀀스 (서비스 내부) - **모든 API 표시**: 해당 서비스의 모든 API 포함 - **내부 처리 흐름**: 컨트롤러 → 서비스 → 레포지토리 플로우 - **기술적 세부사항**: 캐시, DB 접근 등 포함 ### 동기/비동기 구분 - **실선 (→)**: 동기 호출 - **점선 (->>)**: 비동기 호출 - **양방향**: 필요시에만 사용 ## 📊 클래스 설계 표준 ### 아키텍처 적용 - **Clean Architecture**: Port/Adapter 용어 대신 표준 Clean 용어 사용 - **멀티프로젝트**: 서비스별 독립 모듈 - **패키지 구조 표준**: 일관된 패키지 구조 적용 ### 관계 표현 - **Generalization**: 상속 관계 - **Realization**: 인터페이스 구현 - **Dependency**: 의존 관계 - **Association**: 연관 관계 - **Aggregation/Composition**: 집약/합성 관계 ### 상세 정보 - **프로퍼티와 메소드**: 모두 명시 - **접근 제한자**: 적절한 가시성 설정 - **타입 정보**: 정확한 데이터 타입 명시 ## 🗄️ 데이터 설계 표준 ### 서비스별 DB 분리 - **각 서비스마다 독립적인 데이터베이스** - **서비스 간 데이터 공유 최소화** - **캐시를 통한 성능 최적화** ### 클래스 설계와 일치 - **Entity 클래스와 테이블 매핑** - **일관된 네이밍 컨벤션** - **적절한 정규화 수준** ## 🚨 주의사항 ### PlantUML 문법 - **sequence diagram에서 `..>` 사용 금지** - **비동기는 `->>` 또는 `-->>` 사용** - **테마는 반드시 `mono` 사용** ### 병렬 처리 - **의존성 분석 선행**: 병렬 처리 전 반드시 의존성 파악 - **순차 처리 필요시**: 무리한 병렬화보다는 안전한 순차 처리 - **검증 단계 필수**: 병렬 처리 후 통합 검증 ### API 설계 - **유저스토리 ID 필수**: x-user-story 필드 누락 금지 - **Controller 명시**: x-controller 필드로 담당 컨트롤러 명시 - **스키마 완전성**: 모든 Request/Response 스키마 정의 --- 💡 **이 원칙들은 모든 설계 단계에서 일관되게 적용되어야 하며, 각 단계별 세부 가이드에서 구체적으로 구현됩니다.**