현재 선택한 데이터 아키텍처 과정

DAP 이론 학습

이론 목록으로 돌아가기

속성 정의와 원자성

속성은 엔터티의 업무 의미를 값으로 표현하는 최소 관리 단위입니다. 원자성은 문자열 길이가 아니라 업무에서 독립적으로 식별·검색·검증·변경할 필요가 있는지를 기준으로 판단하며, 도메인·NULL·기본값·파생 규칙까지 함께 정의해야 합니다.

예상 읽기 8

핵심 요약

속성은 엔터티 인스턴스의 특성을 나타내며, 한 속성의 값은 정의된 도메인 안에서 해석되어야 한다. 원자성은 물리적으로 더 쪼갤 수 없다는 뜻이 아니라 현재 업무 범위에서 하나의 의미와 하나의 값으로 다루는가를 뜻한다. 반복값·다중값·서로 다른 업무 의미가 한 칸에 섞이면 별도 속성이나 하위 엔터티로 재구성한다.

학습 목표

  • 속성의 성립 조건과 기본·설계·파생 속성의 차이를 설명한다.
  • 원자성 여부를 업무 질의·검증·변경 단위로 판정한다.
  • 도메인, NULL 허용, 기본값, 식별자 참여 여부, 산출 규칙을 속성 정의서에 반영한다.
  • 다중값·반복 속성·복합 문자열을 논리 모델에서 올바르게 분리한다.

1. 개념 설명

1.1 속성의 성립 조건

후보 데이터 항목이 속성이 되려면 다음 질문에 답할 수 있어야 한다.

  1. 어느 엔터티의 인스턴스를 설명하는가?
  2. 그 엔터티의 식별자에 직접 종속되는가?
  3. 동일한 업무 의미를 가진 값의 집합, 즉 도메인을 정의할 수 있는가?
  4. 값이 없을 수 있다면 그 이유를 업무적으로 설명할 수 있는가?
  5. 다른 속성에서 계산되는 값이라면 산출식과 저장 필요성을 설명할 수 있는가?

예를 들어 주문고객명이 주문 시점의 고객명을 보존하기 위한 스냅샷이라면 주문에 저장할 수 있다. 반대로 현재 고객명을 단순히 편하게 조회하려고 중복 저장한다면 고객 엔터티에 종속되는 속성을 주문에 둔 것이므로 정합성 위험을 검토해야 한다.

1.2 속성의 주요 분류

분류의미예시설계 시 확인할 점
기본 속성업무에서 원래 수집되거나 발생하는 값주문일시, 수량, 고객명원천, 입력 시점, 필수 여부
설계 속성모델 구현·식별·관리를 위해 추가한 값주문번호, 행버전번호, 현재여부생성 규칙과 업무 노출 여부
파생 속성다른 값으로 계산되는 값주문금액=수량×단가계산 시점, 반올림, 저장 여부, 재계산 책임
식별 속성인스턴스를 유일하게 식별하는 데 참여고객번호, 주문번호+상품번호안정성, 유일성, 최소성
일반 속성식별에 참여하지 않고 특성을 설명상품명, 배송메모도메인, NULL, 변경 이력

분류는 상호 배타적인 단일 라벨이 아니다. 예를 들어 주문번호는 업무에서 부여되는 기본 속성이면서 주식별자일 수 있고, 시스템에서 생성한 대리키라면 설계 속성이면서 식별 속성일 수 있다.

1.3 원자성의 업무적 판단

원자성은 데이터 타입이나 화면 한 칸을 기준으로 판단하지 않는다. 다음 중 하나라도 해당하면 분리를 검토한다.

  • 부분값으로 검색·정렬·집계한다.
  • 부분값마다 서로 다른 유효성 규칙이나 도메인이 있다.
  • 부분값의 변경 주기·책임자가 다르다.
  • 값의 개수가 0개 이상 반복될 수 있다.
  • 한 속성 안에 여러 사실을 구분자(,, /, |)로 연결한다.

예를 들어 전화번호목록="010-1111-2222,02-333-4444"는 연락처 수가 반복되고 각 번호에 유형·우선순위·사용기간이 붙을 수 있으므로 고객연락처 하위 엔터티가 적합하다. 반면 우편 발송만 수행하고 주소 구성요소를 별도로 검색·검증하지 않는 제한된 업무에서는 기본주소를 하나의 속성으로 둘 수 있다. 즉 원자성은 모델의 업무 목적에 상대적이다.

1.4 도메인, NULL, 기본값

도메인은 단순 데이터 타입보다 넓은 개념이다. 값의 형식·길이·단위·허용 범위·코드 집합·비교 규칙을 포함한다.

  • 할인율: 숫자형, 0 이상 1 이하, 소수점 자리수, 단위는 비율
  • 주문상태코드: 정의된 상태 코드만 허용
  • 이메일주소: 최대 길이, 정규화 규칙, 중복 허용 여부

NULL은 “0”이나 빈 문자열과 같지 않다. 업무적으로 미입력, 미정, 해당 없음을 구분해야 한다면 단일 NULL만으로 의미를 표현하기 어려울 수 있으므로 상태 코드나 별도 사유 속성이 필요하다. 기본값은 입력 누락을 숨기는 수단이 아니라 명확한 업무 규칙에 따라 자동으로 정해지는 값이어야 한다. 종료일자=9999-12-31, 상태='정상' 같은 값은 경계 비교와 의미가 문서화되지 않으면 오류를 만든다.

1.5 파생 속성의 저장 판단

파생값은 원천값과 산출 규칙으로 다시 계산할 수 있다. 논리 모델에는 업무 의미상 필요한 파생 속성을 표현할 수 있지만, 물리 저장 여부는 다음을 비교해 결정한다.

  • 계산 비용과 조회 빈도
  • 원천값 변경 시 동기화 가능성
  • 시점별 계산 규칙 보존 필요성
  • 반올림·환율·세율처럼 규칙 자체가 변경되는지

주문 당시의 세액처럼 과거 거래 사실을 재현해야 하는 값은 단순 파생값이라도 저장 근거가 있다. 반면 언제든 현재 수량과 단가로 재계산할 수 있고 갱신이 빈번한 합계는 저장할수록 정합성 통제가 필요하다.

2. 속성 정의서의 구성요소

정의 항목작성 내용나쁜 예개선 예
속성명표준 용어와 명명 규칙을 적용상태주문상태코드
정의어느 대상의 어떤 사실인지 서술주문 상태주문의 현재 처리 단계를 나타내는 코드
도메인타입·길이·단위·허용값VARCHAR(10)주문상태코드 도메인: 접수/결제/출고/취소
필수성NULL 가능 조건과 시점선택취소 전에는 NULL, 취소 시 필수
기본값자동 설정 근거0신규 주문 생성 시 접수로 설정
산출 규칙식·원천·반올림·시점수량×단가주문라인수량×거래단가, 원 단위 반올림
식별자 참여주·대체 식별자 구성 여부해당주문번호+라인순번의 일부
예시·경계값정상·최소·최대·오류 값10, 1, 최대주문수량, 음수 금지
출처·책임생성 시스템과 관리 주체화면주문접수 서비스, 영업운영팀

3. 판단 흐름

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
후보 데이터 항목 수집
  ↓
엔터티 식별자에 직접 종속되는가?
  ├─ 아니오 → 관계 또는 다른 엔터티의 속성인지 재검토
  └─ 예
      ↓
하나의 업무 의미·값인가?
  ├─ 반복/다중값 → 하위 엔터티 또는 관계로 분리
  ├─ 복합 의미 → 독립 검색·검증·변경 단위로 분해
  └─ 예
      ↓
도메인·NULL·기본값·산출식·식별자 참여 정의
      ↓
정상값·경계값·누락값·변경 시나리오로 검증

4. 사례와 텍스트 모델

사례: 고객의 배송지와 연락처

요구사항은 “고객은 여러 배송지를 등록할 수 있고, 배송지마다 수령인과 연락처를 가진다. 기본 배송지는 한 개만 지정한다.”이다.

다음처럼 고객 테이블에 배송지1, 배송지2, 배송지3을 두면 반복 속성이 생기고 최대 개수가 구조에 고정된다.

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
고객(고객번호, 고객명, 배송지1, 배송지2, 배송지3)

권장 논리 구조는 다음과 같다.

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
고객 1 ─── N 고객배송지

고객(고객번호, 고객명, ...)
고객배송지(고객번호, 배송지순번, 우편번호, 기본주소, 상세주소,
           수령인명, 연락처번호, 기본배송지여부)
  • 배송지는 반복되므로 별도 엔터티로 분리한다.
  • 우편번호·기본주소·상세주소는 검색·검증·변경 단위가 달라 속성으로 분해한다.
  • 기본배송지여부는 고객별 한 건만 참이 되도록 업무 무결성 규칙을 별도로 정의한다.
  • 연락처가 배송지마다 여러 개라면 고객배송지연락처를 다시 분리한다.

5. 비교와 구분

구분판단 기준대표 함정
원자 속성 vs 복합 속성업무에서 부분값을 독립 처리하는가문자열 한 칸이면 원자라고 판단
단일값 vs 다중값한 인스턴스에 값이 최대 한 개인가전화1~전화3으로 반복 수를 고정
NULL vs 기본값값 부재와 자동 결정이 같은 의미인가미입력을 0·공백으로 치환
기본 속성 vs 파생 속성원천에서 발생하는가, 계산되는가계산 규칙 없이 합계만 저장
식별 속성 vs 일반 속성유일 식별에 참여하는가변경이 잦은 설명값을 식별자로 채택

시험 판단 포인트

  • 속성은 엔터티의 주식별자에 종속되어야 하며 다른 엔터티의 사실을 편의상 가져오면 중복과 갱신 이상이 생길 수 있다.
  • 원자성은 “더 이상 문자열 분할 불가”가 아니라 업무에서 단일 의미·단일 값으로 취급하는지로 판단한다.
  • 복합 식별자 일부에만 종속되는 속성은 속성 배치뿐 아니라 정규화 문제로 이어진다.
  • NULL 허용은 선택 관계나 업무 단계와 일치해야 하며, 기본값이 NULL의 의미를 대신하지 않는다.
  • 파생값을 저장할 때는 원천·산출식·적용 시점·동기화 책임을 함께 정의한다.

자주 틀리는 부분

  • 주소·성명·전화번호를 무조건 같은 수준으로 분해한다. 분해 수준은 업무 사용 목적과 도메인 규칙에 따라 달라진다.
  • 한 엔터티에 값이 여러 개라는 이유만으로 속성1, 속성2를 추가한다. 반복 가능하면 하위 엔터티가 우선 검토 대상이다.
  • NULL을 “값 없음” 하나로만 해석해 미정·해당 없음·미입력의 차이를 잃는다.
  • 화면 기본 선택값을 곧바로 데이터 기본값으로 정의한다. 화면 편의와 업무 기본 규칙은 다를 수 있다.
스스로 확인하기

개념 확인 문제

문제를 누르면 바로 아래에서 정답과 해설을 확인할 수 있습니다.

01객관식 다음 중 속성의 원자성 판단으로 가장 적절한 것은? A. 문자열 컬럼에 저장할 수 있으면 원자 속성이다. B. 더 작은 문자 단위로 분해할 수 없을 때만 원자 속성이다. C. 업무에서 하나의 의미와 값으로 검색·검증·변경되는지를 기준으로 판단한다. D. 데이터 타입이 숫자형이면 항상 원자 속성이다.
정답 및 해설

산출식: 각 주문라인의 수량×거래단가에 세금·할인을 어떤 순서로 반영하는지

02객관식 고객(고객번호, 고객명, 전화번호1, 전화번호2, 전화번호3) 구조에 대한 가장 적절한 개선은? A. 전화번호 컬럼의 길이만 늘린다. B. 세 전화번호를 쉼표로 연결해 하나의 컬럼에 저장한다. C. 고객과 고객연락처를 1:N으로 분리하고 연락처 유형·우선순위를 관리한다. D. 전화번호2와 전화번호3을 NULL 허용으로 두면 문제가 없다.
정답 및 해설

적용 시점: 주문 생성 시점인지 확정 시점인지, 정정 시 재계산하는지

03참·거짓 “기본값이 정의된 속성은 NULL을 허용해도 입력 누락과 업무상 미정 상태를 자동으로 구분할 수 있다.”
정답 및 해설

규칙 버전: 세율과 반올림 규칙의 효력일자 및 적용 버전

04사례 판단 주문총액은 주문라인의 수량×단가 합계로 계산된다. 주문라인은 주문 확정 후에도 정정될 수 있고, 세율·반올림 규칙은 적용일자별로 바뀐다. 주문총액을 저장하려면 정의서에 어떤 내용을 추가해야 하는가?
정답 및 해설

원천 속성: 수량, 거래단가, 할인금액, 세액

05정의서 작성 다음 요구를 바탕으로 계약종료일자의 정의 항목을 작성하시오. - 기간형 계약이며 종료일이 정해지지 않은 계약도 있다. - 종료일 당일까지 계약이 유효하다. - 해지 시 실제 종료일을 기록한다.
정답 및 해설

모범 답안

  • 속성명: 계약종료일자
  • 정의: 계약의 효력이 종료되는 마지막 달력 일자
  • 도메인: 일자형, 시작일자 이상
  • NULL 규칙: 종료일이 정해지지 않은 무기한 계약은 NULL 허용
  • 경계 규칙: 종료일 당일 23:59:59까지 유효하다는 식으로 시각을 암묵적으로 저장하지 말고, 일자 기준 포함 경계임을 명시
  • 설정 규칙: 해지 확정 시 실제 효력 종료일을 기록
  • 관련 무결성: 계약종료일자 >= 계약시작일자; 종료일 미정 여부와 계약상태의 조합 규칙 정의

9999-12-31을 사용하려면 그것이 “무기한”을 뜻한다는 표준과 비교 경계 규칙을 별도로 명시해야 한다.