← posts/b.log()

blog92@web:~$ cat posts/db-design-02-requirements.md

DATABASE5 min read

DB 설계 A to Z 2강 — 요구사항 분석

데이터·업무 규칙·처리·비기능 네 가지 수집 항목, 명사와 동사로 엔티티 후보를 뽑는 분석, 업무 규칙 분류표, 모호성을 없애는 질문 목록, CRUD 매트릭스와 볼륨·쿼리 프로파일, 용어 사전까지 설계의 첫 단계를 다룬다.

1강에서 설계가 요구사항 분석부터 시작하는 다섯 단계라는 것을 봤습니다. 이번 편은 그 첫 단계를 다룹니다.

1. 왜 요구사항 분석이 가장 중요한가

설계 오류의 대부분은 SQL이 아니라 업무를 잘못 이해한 데서 시작합니다. "상품은 하나의 셀러가 공급한다"를 당연하게 받아들였는데, 실제로는 같은 상품을 여러 셀러가 번갈아 공급하는 위탁 판매 업무라면 모델 전체가 달라집니다.

2. 수집해야 할 정보 4가지

구분내용예시
데이터 요구사항무엇을 저장하는가항목번호, 무게, 처리단계의 계획일/실적일
업무 규칙데이터가 지켜야 할 규칙실적일은 착수일보다 빠를 수 없다
처리 요구사항어떤 조회·변경이 일어나는가매일 아침 주문 단위 처리율 조회
비기능 요구사항양, 속도, 보존, 보안주문당 주문항목 3건, 처리 실적 3년 보관, 셀러는 자기 데이터만 조회

초보 설계는 첫 번째만 수집합니다. 하지만 물리 설계는 세 번째와 네 번째로 결정됩니다.

3. 명사·동사 분석

업무 설명 문장에서 후보를 기계적으로 뽑는 기법입니다.

"입점 셀러는 출고 담당자를 보유한다. 출고 담당자는 주문항목의 처리단계를 수행하고, 수행 시 투입 시수를 기록한다. 검수자는 완료된 처리단계를 검수하고 합격 여부를 판정한다."

품사후보판단
명사입점 셀러, 출고 담당자, 주문항목, 처리단계, 검수자엔티티 후보
명사투입 시수, 합격 여부속성 후보
동사보유한다, 수행한다, 검수를 한다관계 후보
동사기록한다, 판정한다관계의 속성 발생 신호

주의할 점

  • 동의어: "주문항목", "OI", "주문 상세"가 같은 것인지 확인
  • 동음이의어: "처리단계"가 처리단계 마스터(픽킹)인지 주문항목의 처리 인스턴스인지 구분
  • 명사라도 식별되어야 하고 여러 건이 존재해야 엔티티입니다. "시스템"은 명사지만 엔티티가 아닙니다.

4. 업무 규칙의 분류

유형설명예시DB 구현 수단
구조 규칙관계와 카디널리티주문항목은 반드시 하나의 주문에 속한다FK + NOT NULL
값 규칙속성값의 범위처리율은 0~100CHECK
유일성 규칙중복 금지한 주문에 같은 상품은 한 줄로만 기록한다UNIQUE (order_no, product_id)
행 간 규칙여러 행에 걸친 조건같은 담당자의 처리 시간은 겹칠 수 없다배타 제약(PG), 트리거, 앱
흐름 규칙상태 전이검수 완료 후에만 출고 착수 가능트리거, 앱 로직

이 표는 13강(제약조건 설계)의 입력이 됩니다. 업무 규칙을 문서화하지 않으면 제약조건을 설계할 근거가 없습니다.

5. 모호성 제거 질문 목록

1강의 문장 "한 처리단계는 여러 주문항목에 적용된다"를 확정하려면 다음 질문이 필요합니다.

  1. 최소·최대: 처리단계가 적용되지 않는 주문항목이 있는가? (참여도)
  2. 반복: 같은 주문항목에 같은 처리단계가 두 번 적용될 수 있는가? (재처리 → PK 설계 변경)
  3. 시간: 처리단계 정의가 바뀌면 과거 실적은 옛 정의를 따르는가? (이력 필요 여부)
  4. 소유: 주문항목이 삭제되면 처리 실적도 삭제되는가? (종속성, ON DELETE)
  5. 예외: "대부분"이라고 답했다면, 나머지 경우는 무엇인가?

2번 질문이 특히 중요합니다. 재처리가 있다면 (항목번호, 단계코드)는 더 이상 유일하지 않으므로 차수(seq)를 PK에 추가하거나 대리키를 도입해야 합니다.

6. CRUD 매트릭스

업무와 엔티티의 관계를 표로 정리해 누락된 엔티티와 불필요한 엔티티를 찾습니다.

업무 \ 엔티티주문주문항목처리단계항목처리담당자
주문 등록C
주문항목 생성RC
처리단계 계획 수립RRC
실적 입력RUR
처리율 조회RRRR

점검 규칙:

  • C가 없는 엔티티 → 데이터가 어디서 들어오는지 모름 (외부 연동인지 확인)
  • R만 있고 C/U가 없는 엔티티 → 마스터 관리 업무 누락
  • 아무 업무도 사용하지 않는 엔티티 → 불필요한 엔티티일 가능성

7. 볼륨·쿼리 프로파일

물리 설계를 위해 최소한 아래 표를 채워둡니다.

엔티티초기 건수증가량보관 기간주요 접근 패턴
주문200만일 2만영구주문번호, 고객+기간
주문항목600만일 6만 (주문당 3건)영구주문번호로 조회
항목처리1,800만일 18만5년항목번호, 단계코드+기간
처리 실적500만일 5만3년처리일 범위, 담당자별

처리 실적은 일 5만 건, 3년 보관이면 약 5,500만 건입니다. 이 숫자가 16강에서 월 단위 파티셔닝을 결정하는 근거가 됩니다.

8. 용어 사전

표준 용어영문 컬럼명동의어정의
주문order_no오더, Order No고객의 거래 단위를 식별하는 번호
주문항목order_itemOI주문의 상품 단위 구성 요소
실적일actual_date완료일처리단계가 실제로 완료된 날짜

용어 사전은 컬럼 명명 규칙의 기준이 되며, 여러 팀이 같은 DB를 쓸 때 가장 큰 효과를 냅니다.

2강 정리

  1. 요구사항은 데이터·업무 규칙·처리·비기능 네 가지를 모두 수집한다.
  2. 명사·동사 분석으로 후보를 뽑고, 동의어·동음이의어를 정리한다.
  3. 업무 규칙은 유형별로 분류해 제약조건 설계의 근거로 삼는다.
  4. "같은 것이 두 번 일어날 수 있는가?" 질문이 키 설계를 바꾼다.
  5. CRUD 매트릭스와 볼륨 프로파일은 누락 검증과 물리 설계의 입력이다.
COMMENTS (…)

댓글을 불러오는 중이에요.

NEW COMMENT0 / 1000
⌘↵ 전송

blog92@web:~$ cd ..