DCD에서 DB까지 — 실전 예시와 템플릿
예시: 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까지 이어지는가?