research

DCD에서 DB까지 — 실전 예시와 템플릿

DCD에서 DB까지 — 실전 예시와 템플릿

이론: 10-dcd-to-database-bridge

예시: Academic Life System 전체 브릿지 워크스루

Step 1: DCD 확인 (Larman에서 온 것)

Step 2: 매핑 결정

| DCD 클래스 | DB 테이블 | 1:1? | 매핑 패턴 | 비고 | |-----------|----------|------|----------|------| | Student | students | ✅ | Active Record | 도메인 로직 포함 | | Course | courses | ✅ | Active Record | | | Enrollment | enrollments | ✅ | Active Record | FK: student_id, course_id | | Curriculum | curricula | ✅ | Active Record | | | Requirement | requirements | ✅ | Active Record | FK: curriculum_id, course_id | | Course↔Course (prerequisites) | course_prerequisites | 연결 테이블 필요 | Association Table Mapping | 다대다 |

Step 3: ER Diagram

Step 4: DCD 확장 (Active Record 적용)

Step 5: 시퀀스 다이어그램 확장

"과목 추천 받기" 전체 흐름:

Step 6: DDL

CREATE TABLE students (
    student_id VARCHAR(20) PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    department VARCHAR(50) NOT NULL,
    enrollment_year INTEGER NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE courses (
    course_id VARCHAR(20) PRIMARY KEY,
    name VARCHAR(200) NOT NULL,
    credits INTEGER NOT NULL,
    category VARCHAR(50)
);

CREATE TABLE enrollments (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    student_id VARCHAR(20) NOT NULL,
    course_id VARCHAR(20) NOT NULL,
    semester VARCHAR(10) NOT NULL,
    grade VARCHAR(5),
    grade_point REAL,
    FOREIGN KEY (student_id) REFERENCES students(student_id),
    FOREIGN KEY (course_id) REFERENCES courses(course_id),
    UNIQUE(student_id, course_id, semester)
);

CREATE TABLE curricula (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    department VARCHAR(50) NOT NULL,
    year INTEGER NOT NULL,
    UNIQUE(department, year)
);

CREATE TABLE requirements (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    curriculum_id INTEGER NOT NULL,
    course_id VARCHAR(20) NOT NULL,
    semester_recommended INTEGER,
    is_required BOOLEAN DEFAULT TRUE,
    FOREIGN KEY (curriculum_id) REFERENCES curricula(id),
    FOREIGN KEY (course_id) REFERENCES courses(course_id)
);

CREATE TABLE course_prerequisites (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    course_id VARCHAR(20) NOT NULL,
    prerequisite_id VARCHAR(20) NOT NULL,
    FOREIGN KEY (course_id) REFERENCES courses(course_id),
    FOREIGN KEY (prerequisite_id) REFERENCES courses(course_id),
    UNIQUE(course_id, prerequisite_id)
);

마스터 템플릿: DCD → DB 브릿지 전체 과정

# [프로젝트명] DCD → DB 브릿지 워크시트

## 1. DCD 클래스 목록
(Larman에서 만든 DCD의 클래스들을 나열)

| 클래스명 | 주요 속성 | 주요 메서드 | 비고 |
|---------|----------|-----------|------|
| _______ | _______ | _______ | |

## 2. 매핑 결정
| DCD 클래스 | DB 테이블명 | 1:1? | 매핑 패턴 | 특이사항 |
|-----------|-----------|------|----------|---------|
| _______ | _______ | Y/N | AR/DM/TDG | |

## 3. 관계 매핑
| DCD 관계 | 타입 | DB 매핑 | 패턴 |
|---------|------|--------|------|
| A → B (1:N) | 객체 참조 | B에 FK | Foreign Key Mapping |
| A ↔ B (M:N) | 양쪽 컬렉션 | 연결 테이블 | Association Table |
| A → B (상속) | is-a | ? | Single/Class/Concrete Table |
| A.value (값객체) | embedded | A 테이블 컬럼 | Embedded Value |

## 4. ER Diagram
(Mermaid erDiagram 작성)

## 5. DDL
(CREATE TABLE 문 작성)

## 6. DCD 확장
(Active Record면 DB 메서드 추가, Data Mapper면 Mapper 클래스 추가)

## 7. 핵심 시퀀스 다이어그램
(가장 중요한 유스케이스 1~2개의 전체 흐름)

## 8. 로딩 전략
| 연관 관계 | Lazy/Eager | 근거 |
|----------|-----------|------|
| _______ → _______ | | |

## 9. 검증
- [ ] 모든 DCD 클래스에 대응하는 테이블이 있는가?
- [ ] 모든 DCD 연관 관계가 FK 또는 연결 테이블로 매핑되었는가?
- [ ] 다대다 관계에 연결 테이블이 있는가?
- [ ] 시퀀스 다이어그램이 Controller → Domain → DB까지 이어지는가?