2025-08-10 10:59

Tags:

데이터베이스 설계의 핵심, ERD 완벽 정복 핸드북 (개념부터 실전까지)

데이터베이스를 설계하는 것은 건물을 짓기 전 설계도를 그리는 것과 같음. 체계적인 설계도 없이는 부실한 건물이 지어지듯, 명확한 데이터 모델링 없이는 비효율적이고 관리하기 어려운 데이터베이스가 탄생함. **ERD(Entity-Relationship Diagram, 개체-관계 다이어그램)**는 바로 이 데이터베이스 설계도의 핵심 역할을 수행함.

1. 만들어진 이유: 왜 ERD가 필요한가?

1976년 피터 첸(Peter Chen)에 의해 처음 제안됨. 당시에는 통일된 데이터 모델링 방법이 없어 개발자마다 각기 다른 방식으로 데이터를 표현했음. 이로 인해 소통의 어려움과 시스템 개발의 비효율성이 발생함. ERD는 이러한 문제를 해결하기 위해 탄생한 표준화된 소통 도구.

  • 데이터베이스의 청사진: 실제 데이터베이스를 구축하기 전, 데이터의 구조와 관계를 한눈에 파악할 수 있는 시각적 설계도 역할.

  • 원활한 커뮤니케이션: 개발자, 기획자, 현업 담당자 등 프로젝트 관련자들이 동일한 그림을 보고 소통하게 하여 오해를 줄이고 요구사항을 명확히 함.

  • 복잡성의 단순화: 눈에 보이지 않는 복잡한 데이터 구조를 직관적인 도형과 선으로 표현하여 누구나 쉽게 이해할 수 있도록 돕는 것이 핵심 목적.

2. ERD의 3가지 핵심 구성 요소

ERD는 마치 레고 블록처럼 몇 가지 기본 요소의 조합으로 이루어짐. 이 세 가지만 알면 ERD의 절반을 이해한 것과 같음.

  • ① 엔터티 (Entity): 저장하려는 데이터의 ‘대상’

    • 정의: 사람, 사물, 장소, 개념 등 독립적으로 존재하며 식별 가능한 데이터의 집합. 쉽게 말해 ‘명사’에 해당함.

    • 표기: 사각형(Rectangle)으로 표현.

    • 예시: 학생, 강의, 교수, 주문, 상품

  • ② 속성 (Attribute): 엔터티의 ‘특징’ 또는 ‘정보’

    • 정의: 엔터티가 가지는 구체적인 정보 항목. 엔터티를 설명하는 ‘형용사’나 ‘내용’에 해당함.

    • 표기: 전통적인 첸 표기법에서는 타원(Oval)으로 표현하나, 최근에는 엔터티 사각형 내부에 텍스트로 기입하는 방식(까마귀발 표기법)이 더 널리 쓰임.

    • 예시: 학생 엔터티는 학번, 이름, 전공 등의 속성을 가짐.

  • ③ 관계 (Relationship): 엔터티 간의 ‘연결고리’

    • 정의: 엔터티와 엔터티가 맺고 있는 상호작용이나 연관성. ‘동사’에 해당함.

    • 표기: 마름모(Diamond)로 표현.

    • 예시: 학생강의수강한다. 고객상품주문한다.

3. 관계의 종류와 표현: 카디널리티(Cardinality)

엔터티 간의 관계는 단순히 연결된 것에서 그치지 않고, ‘몇 개와 관계를 맺는가’를 정의해야 함. 이를 카디널리티(Cardinality, 대응 관계) 또는 **다중성(Multiplicity)**이라고 부름. 주로 **까마귀발 표기법(Crow’s Foot Notation)**을 사용하여 시각적으로 표현함.

  • 1:1 (일대일 관계): 엔터티 A의 개체 하나가 엔터티 B의 개체 하나와만 관계를 맺음.

    • 예시: 사용자사용자_프로필. 한 명의 사용자는 하나의 프로필만 가짐.

    • 표기: |--|

  • 1:N (일대다 관계): 엔터티 A의 개체 하나가 엔터티 B의 여러 개체와 관계를 맺음. 가장 흔한 관계.

    • 예시: 교수학생. 한 명의 교수는 여러 학생을 가르칠 수 있음.

    • 표기: |---< (까마귀발 모양이 ‘多’를 의미)

  • N:M (다대다 관계): 엔터티 A의 여러 개체가 엔터티 B의 여러 개체와 관계를 맺음.

    • 예시: 학생강의. 한 학생은 여러 강의를 수강하고, 한 강의에는 여러 학생이 참여함.

    • 중요: 물리적 데이터베이스에서는 N:M 관계를 직접 표현할 수 없음. 따라서 이 관계를 해소하기 위해 연결 엔터티(Associative Entity) 또는 매핑 테이블이라는 새로운 엔터티를 중간에 만들어 두 개의 1:N 관계로 변환해야 함. (예: 학생 —(1:N)— 수강신청 —(N:1)— 강의)

    • 표기: >---<

4. ERD 설계의 3단계: 추상화 수준에 따른 분류

ERD는 설계 목적과 상세 수준에 따라 세 단계로 나뉨.

  1. 개념적(Conceptual) ERD:

    • 목적: 시스템의 전체적인 데이터 구조와 핵심 개념을 파악하는 초기 단계.

    • 특징: 가장 중요한 엔터티와 그 사이의 관계만을 간략하게 표시. 속성, 키, 데이터 타입 등 세부 사항은 생략. 비즈니스 요구사항을 이해하고 공유하는 데 중점을 둠.

  2. 논리적(Logical) ERD:

    • 목적: 개념적 ERD를 구체화하여 데이터베이스의 논리적 구조를 설계.

    • 특징: 모든 엔터티와 속성을 정의하고, 각 엔터티를 고유하게 식별하는 **기본 키(Primary Key, PK)**와 엔터티 간의 관계를 연결하는 **외래 키(Foreign Key, FK)**를 지정함. 아직 특정 데이터베이스 기술(MySQL, Oracle 등)에는 종속되지 않은 상태.

  3. 물리적(Physical) ERD:

    • 목적: 논리적 ERD를 바탕으로 실제 데이터베이스를 생성할 수 있는 최종 설계도를 작성.

    • 특징: 테이블명, 컬럼명, 데이터 타입(VARCHAR, INT 등), 길이, 제약 조건(Not Null 등) 등 모든 기술적 세부 사항을 명시. 특정 데이터베이스 시스템에 맞춰 설계됨.

5. 실전 ERD 작성법 요약

  1. 요구사항 분석: 설계하려는 시스템의 요구사항을 분석하여 핵심 데이터 ‘대상’(엔터티)을 모두 찾아냄.

  2. 관계 및 카디널리티 정의: 도출된 엔터티들 간에 어떤 ‘행위’(관계)가 있는지 파악하고, 1:1, 1:N, N:M 중 어떤 관계인지 정의. N:M 관계는 연결 엔터티로 분해.

  3. 속성 및 키 정의: 각 엔터티가 가져야 할 ‘정보’(속성)를 나열하고, 각 엔터티를 대표할 고유 식별자(기본 키)를 선택. 관계를 맺는 엔터티에는 외래 키를 추가.

  4. 정규화(Normalization): 데이터의 중복을 최소화하고 무결성을 높이기 위해 테이블 구조를 체계적으로 분해하고 다듬는 과정을 거침. (이 과정은 데이터 구조를 더 효율적으로 만듦)

  5. 검토 및 수정: 완성된 ERD가 비즈니스 로직과 요구사항을 정확하게 반영하는지 관련자들과 함께 검토하고 수정.

이처럼 ERD는 단순히 그림을 그리는 행위를 넘어, 데이터 구조의 논리를 세우고 모두가 이해할 수 있는 언어로 소통하는 매우 중요한 과정임.

이제 여러분이 설계하고 싶은 시스템의 핵심 데이터는 무엇이며, 그것들은 서로 어떤 관계를 맺고 있는지 한번 그려보는 것은 어떨까요?

References

ERD