본문 바로가기
Dev/DB

데이터베이스 모델링

by 컴포넌트설계자 2026. 3. 6.

- 데이터베이스란?
 : 데이터를 저장하는 공간 (어떻게> -> 관계형데이터베이스이론에 맞춰 저장 - RDBMS)
 : 관계형테이터베이란 테이블과 테이블을 연관관계(pk와 fk)를 설정해서 테이블들을 수평관계로 데이터를 저장하는것.

- 데이터베이스를 구축하는 목적은?
 : 데이터의 양이 급증하면서 데이터중복과 정합성문제(삽입,삭제,수정), 성능저하이슈가 있다.
  그래서 ,  데이터베이스 이론에 맞춰 데이터베이스를 구축해서 중복된 데이터를 최소화 하고
              일관성을 유지, 정확성을 보1장하는 것, 무결성유지.


 - 데이터베이스 모델링
    1) 개념적설계 - 비즈니스측면서에서 유형이나 성격이 비슷한 데이터를 그룹핑 하는과정(전체의 큰그림)
         : 업무를 일반화 한다. - 고객과의 인터뷰를 통해 니즈를 파악하여 작성된 시나리오를 바탕으로 업무를 일반화한다.
         : 시나라오을 바탕으로 
              - Entitiy를 추출
              - Attribute 추출
              - Relation 추출(Entity와 Entity 사이의 관계)
              - identifier 추출(6가지)
                     1.후보 식별자 (Candidate)
                     2.주 식별자 (Primary)
                     3.대체 식별자 (Alternate)
                     4.복합 식별자 (Composite)
                     5.대리 식별자 (Surrogate)
                     6.외래 식별자 (Foreign)

               - 관계차수 (Cardinality) - ( 1: 1 , 1 : 다 , 다 : 다)   :
               - 선택성(Mandatory, Optionality ) - (반드시 - must, 있을지도 - may)  

* 위 의 6단계를 진행하면 최종 산출물 ERD 만든다.
            * 개념적 설계단계에서 나온 ERD를 바탕으로 논리, 물리를 진행한다. 
            * 개념적 설계단에서는 관계형데이터베이스 이론 적용하지 않는다. 

    2) 논리적설계 - 개념적설계단계의 데이터를 바탕으로 좀더 세밀하게 구체화시키는 과정으로 
관리되어야 할 데이터를 모두 찾는과정
         : 관계형데이터베이스 이론을 적용하여 설계한다. 
         : 어떤 데이터이터베이스를 사용할지는 고려하지 않는다.

          - 매핑룰 적용한다.
              Entity --> table(schema) -  schema란 : 스키마는 DB의 구조와 제약조건에 관한 전반적인 명세를 정의한 메타데이터의 집합
              Attribute -->  컬럼명
              identifier  ---> pk와 fk

              Relation(관계)를 해소한다.
                 - 식별관계 : 한쪽의 pk를 다른쪽의 pk로 전이(pk이면서 fk)  1 : 1
                 - 비식별관계 : 한쪽의 pk가 다른쪽의 일반속성으로 전이 1 : 다 

              * 1 : 1 인경우  : 어느쪽의 테이블이든 한쪽의 pk를 다른쪽으로 전이한다. - pk+fk ==> 식별관계

              * 1 : 다 인경우 :  1쪽의 pk를 다쪽의 일반속성으로 전이  - 비식별관계

              * 다 : 다 인경우 : 새로운 Entity(table)를 만들고 양쪽의 pk를 새로운 Entity로 전이 

          -정규화 과정 진행
               : 데이터 중복 최소화
               : 정규화를 많이 하면 테이블이 더 작은 단위로 분리된다.

              * 1차정규화 - 반복되는 속성이나 null을 많이 허용하는 속성은 별도의 Entity로 만들고 
                               1 : 다 인 관계로 해결한다. 
 
              * 2차정규화 - 복합키가 있을때 일반속성들이 모두 복합키에 의존적이어야한다.
                               만약, 일반속성이 복합키의 일부분에만 의존적이라만 속성을 제거한다.
                          

              * 3차정규화 - 일반속성들이 모두 기본키(pk) 의존적이어야한다.
                                만약, 일반속성이 일반속성에 의존적이라면 속성을 제거한다.



            
    3) 물리적설계 
        : 관계형데이터베이스 이론을 적용하고 어떤 DBMS를 사용할지를 선택한 상태에서 설계한다.
        : 논리적설계 단계에서 나온 내용(schema정보)을 바탕으로 create  table, index, sequence, view 등등을
          실제 물리적인 공간에 생성한다. - 이때 DBMS에 해당하는 데이터타입을 결정한다-자료형과 사이즈 

        : 샘플데이터를 추가하여 기능을 test하면서 성능저하의 이슈가 있는지를 체크한다.
            - 만약, 성능이슈가 생긴다면 필요에 의해서 역정규화=반정규화를 할수도 있다.
               * 역정규화 유형
                   -데이터 중복 컬럼의 역정규화
                   -파생 컬럼의 생성
                   -테이블 분리
                   -요약테이블 생성
                   -테이블 통합

----------------------------------------------------------------------------------------------------
 모델링 설계 tool 
  1) cloud erd   : 협업할때 좋다 
  2) er_win
  3) ex_erd
  4) mysql workbench
  5) draw.io  - UML관련 설계 
  6) mermaid  - https://mermaid.ai/
                   Mermaid.ai는 개발자나 기획자가 텍스트(코드 또는 자연어)만 입력하면 자동으로 다이어그램을
                  만들어주는 AI 기반 다이어그램 도구
                   쉽게 말하면 “글로 설명 → 자동으로 UML/Flowchart 같은 그림 생성” 하는 서비스이다.

Mermaid.ai에서는 다음과 같은 다이어그램을 만들 수 있다.

대표적인 것들:
Flowchart (프로세스 흐름도)
Sequence Diagram (API 호출 흐름)
ER Diagram (DB 설계)
Class Diagram (UML)
Gantt Chart (일정 관리)
State Diagram
Mind Map
Org Chart

즉 개발 문서 + 아키텍처 + 기획 다이어그램 대부분을 만들 수 있다
======================================================

- 프로젝트 진행순서!!!
  1) 분석
        : 주제선정하고 고객으로부터 원하는니즈를 파악해서 시나리오를 작성
        : 벤치마킹!! (장단점) - 린캔버스

  2) 설계
        : 시나리오를 바탕으로 요구사항명세서 및 정의서 작성
        : usecaseDiagram 작성 - 사용자입장에서 작성한 프로세스 흐름
        : 레이아웃정의서 - GUI구성  ---> 카카오 오븐 tool, Figma
        : 데이터베이스 모델링 -  ERD cloud 
 
        : classDiagram --> tool
        : sequenceDiagram - 개발자입자에서 작성한 프로세스 흐름

         * draw.io  UML tool 지원 


  3) 구현및 개발  - SI - System Integration(시스템 구축)
        : 개발자들이 투입되어 프로젝트 환경을 세팅하고 설계단계에서 나온 문서를 참조해서 개발한다.
          --> 모든 조원들이 동일한 환경에서 작성할수 있도록 하나의 프로젝트를 구성한후
               그 프로젝트를 공유해서 사용한다. ( JDKversion, 한글인코딩설정)
         --> package구조, interface설계, lib,명명규칙에 대한 문서화
         --> 단위테스트 진행하면서 개발
 
  4) 테스트 - QA
       개발프로그램에 대한 통합테스트시나리오 문서를 바탕으로 전체적인 버그를 체크한다. 

  5) 배포
      운영서버에 서비스를 배포한다.

  6) 유지보수 - SM(System Management(시스템 운영, 또는 유지보수) )
       : 지속적으로 관리를 하면서 버그나 고객의 니즈를 파악해서 개선, 수정 한다.

---------------------------------------------------------------------------------------------------------


'Dev > DB' 카테고리의 다른 글

[JDBC] SELECT 전체조회 | 번호로 조회 / DELETE로 삭제해보기  (0) 2026.03.09
SQLInjection Test 실습  (0) 2026.03.09
JDBC(Java Database Connectivity) API실습  (0) 2026.03.09
MySQL) SUBQUERY 예제  (0) 2026.03.06
MySQL) JOIN 예제  (0) 2026.03.06