🐯
경민민 IT 핸드북
  • Orientation
    • 전달사항
    • 복습방법
    • 수료한 선배의 한마디
    • 간단 자기소개
    • 스터디
  • 백엔드
    • Java
      • 1장 프로그래밍 기초
      • 2장 자바 메모리구조
        • 1. Stack
        • 2. Heap
      • 6장 객체
      • 8장 상속
      • 9장 다형성
      • 10장 추상클래스와 인터페이스
      • 13장 Generic
      • 14장 Thread
      • 15장 Network
      • 16장 Lamda
        • 1. 내부 클래스 (Inner Class)
          • DTO , VO, Builder Pattern
        • 2. 람다 표현식 (Lambda Expression)
        • 3. 스트림 API (Stream API)
          • Optional
      • 17장 Enum
  • 프론트
    • Node.js
    • Java Script
      • ES6+
        • Node.js로 자바스크립트 실행
        • let , const , var
        • Destructuring문법
          • Rest(...) 문법
        • Arrow Function
        • 모듈
        • ETC
    • Type Script
      • 개요
      • TS설치 및 환경설정
      • 타입스크립트 기본
        • 기본 자료형들과 타입추론
        • Object, Array , Tuple
        • Any, Unknown, Union Type
        • Function Type
          • Type Assertion && Narrowing
          • Never type
        • Type Aliases와 Interface
        • 리터럴 타입
        • 함수 추가 문법
        • Class문법
        • 객체 타입 추가 문법
        • 실습문제 1차
        • 실습문제 2차
        • 실습문제 3차
    • React
      • 개요
      • SPA 와 MPA
        • SEO(작성예정)
      • 리액트 프로젝트 생성(18.3.1.ver)
        • HTML + react 샘플
        • CRA 와 Vite 비교
      • 리액트 개념들
        • Component
          • 클래스 컴포넌트(작성예정)
          • 함수형 컴포넌트(작성예정)
        • JSX
        • React Virtual Dom
          • Reconciliation
        • hook
          • useState
        • 리액트 데이터 전달
          • FLUX
      • 백엔드 서버 연동
        • 비동기요청
        • 웹소켓
        • Promise(작성예정)
      • 실습문제 1
      • 실습문제 2
      • 실습문제3
      • 실습문제4
  • 프레임워크
    • Spring
      • Spring 개발환경 구축
        • 프로젝트 환경설정
        • 프로젝트 생성
          • MVC Project 생성이슈
        • Maven 설정
        • web.xml 설정
        • Spring Bean Configuration.xml 설정
      • Spring Legacy Project
        • Spring 요청 및 응답 흐름
        • Spring 주요 Annotation
          • 의존성 주입방식의 차이점
          • @ModelAttribute와 유효성검사
          • 비동기처리
          • 스프링 예외처리
        • Logging
        • Pagination
        • Spring File 업로드 및 다운로드
        • Spring WebSocket
        • Spring AOP
      • Spring 라이브러리들(작성예정)
        • Lombok
        • Maven
        • MyBatis
      • Spring 구성 모듈(작성예정)
      • 스프링 과제
    • Spring Boot
      • Spring Boot 개발환경 구축
      • 스프링 부트 프로젝트 생성방법들
        • 프로젝트에서 사용하는 의존성들
      • 스프링 프로젝트 구조
        • SpringBootApplication
      • application.properties
      • Cross Origin
        • CORS
      • WebSocket
        • Stomp(작성중)
      • 로그인(작성중)
      • Spring Security(작성중)
      • 실습문제 Select
      • 실습문제 Update
      • 실습문제 Delete
  • 형상관리(Git)
    • GitHub설정
    • SourceTree를 활용한 깃허브 연동
      • 소스트리 설치
      • Clone
      • Branch
        • Branch Protection rules
          • Branch Protection Rules 상세규칙
        • Rebase 와 Squash (작성예정)
      • Team Project 설정
        • 팀장 프로젝트 셋팅
          • Collaborator
          • .gitignore 설정
        • 팀원 프로젝트 셋팅
        • 공통 프로젝트 진행
  • 프로젝트
    • 진행순서
      • 요구사항 분석 단계
        • 유용한 사이트
      • 프로그램 설계 단계
        • 유용한 사이트
      • 프로그램 구현단계
        • SourceTree를 활용한 Team Project설정
      • 테스트 단계
  • 배포
    • AWS-EC2 배포 연습
    • DevOps
      • IT시스템의 변화와 DevOps
      • DevOps 라이프사이클
    • 젠킨스
      • 도커
        • 도커 설치 방법
        • 도커 기본 명령어들
      • 젠킨스 설치
      • 젠킨스 프로젝트 생성
      • 젠킨스 소스코드 통합 - Github
      • 젠킨스 빌드 설정 - Maven
      • 배포 서버 구축하기
      • 파이프라인 구축
      • AWS 서버 생성
        • AWS 인스턴스 생성
        • AWS - Zenkins 연동
        • AWS - 배포서버 연동
        • AWS - Jenkins CI/CD파이프라인 구축
  • 유용한 사이트 모음
  • SQL
    • SQLD
      • 데이터 모델링의 이해 - 스키마
      • 데이터 모델링의 이해 - ERD
      • 데이터 모델링의 이해 - 정규화
      • 데이터 모델링의 이해 - NULL
      • SQL 기본 및 활용 - WINDOW FUNCTION
    • Oracle
      • 1장 개요
      • 2장 SQL
  • LLM 서비스
    • 1장 LLM에 대한 이해
    • 2장 프롬프트 엔지니어링
      • 프롬프트와 프롬프트 엔지니어링
      • GPT PlayGround
      • 프롬프트 작문 유형
      • 기본 프롬프트 엔지니어링 태크닉
      • 고급 프롬프트 엔지니어링 태크닉
        • ReAct Prompting
        • Active-Prompt
        • Reflexion
        • Graph Prompt
      • OpenAI API설정
      • OpenAI를 활용한 프롬프트 엔지니어링 실습
        • 실습 프롬프트
    • 3장 Lang Chain 프레임워크
      • LangSmith 프레임워크
        • LangSmith를 활용한 LangChain 모니터링 설정
      • LangChain 실습 1 - Prompt
        • 실습 코드
      • LangChain 실습 2 - LLM 캐시와 메모리
    • 4장 RAG
      • Document Loader - 문서 로더
      • Text Splitter - 텍스트 분할
      • Embedding - 임베딩
      • Vector Store - 벡터 저장소
      • Retriever - 검색기
      • ReRanker - 재평가자
      • RAG
Powered by GitBook
On this page
  • 데이터 모델링
  • 데이터 모델링시 유의점
  • 데이터 베이스 스키마 구조
  • 1. 외부 스키마(External Schema) == 사용자 뷰(External View)
  • 2. 개념 스키마(Conceptual Schema) == 논리 스키마(Logical Schema)
  • 3. 내부 스키마(Internal Schema) == 물리 스키마(Physical Schema)
  • 데이터 독립성
  • 1. 물리적 독립성
  • 2. 논리적 독립성
  1. SQL
  2. SQLD

데이터 모델링의 이해 - 스키마

데이터 모델링의 개념에 대해 요약한 페이지

PreviousSQLDNext데이터 모델링의 이해 - ERD

Last updated 6 months ago

데이터 모델링

데이터 모델링에 대해 이해하기 위해서는 현실세계의 건축물 모델링에 대해 떠올리면 이해하기 편합니다. 건축 현장에서는 실제 건축에 들어가기 전 건축물에 대한 모델링 작업을 먼저 수행하여 최적화된 설계구성과 디자인을 구축하고 나서 실제 건축에 들어가죠. 데이터 모델링도 똑같습니다. OOP와 같은 객체지향 프로그래밍을 통해 현실세계의 각종 사물,데이터를 가상세계로 구현시 발생하는 각종 객체를 효율적으로 저장하기위한 저장공간(데이터)을 설계하는 과정을 데이터 모델링이라고 부릅니다.

간략하게 설명하자면 데이터모델링이란 아래와 같습니다.

  • 정보시스템을 구축하기 위한 데이터 관점의 업무분석 기법이다.

  • 현실세계의 데이터를 약속된 표기법으로 표현하는 과정이다.

  • 데이터베이스를 구축하기 위한 분석 및 설계의 과정이다

  • 데이터 모델링을 통해 구축된 시스템의 업무의 흐름을 분석할 수 있다.

데이터 모델링시 유의점

데이터 모델링을 비효율적으로 설계하면, 불필요한 데이터의 중복으로 메모리를 쓸데없이 많이 잡아먹는 다던가, 잘못된 설계로 데이터의 확장이 힘들어진다던가, 일관성 없는 데이터가 들어갈 수 있습니다. 정리하자면 아래와 같습니다.

1) 데이터 중복(Duplication)피하기

  • 잘못된 데이터모델 설계로 동일한 데이터가 여러 엔티티(테이블)에 추가될 수 있는데 이를 조심하여 설계하여야 합니다.

2) 데이터 모델을 유연(Flexiblity)하게 설계하기

  • 데이터 모델이 특정 업무 프로세스를 그대로 모방하는 경우 프로세스가 변경될 때마다 데이터도 함께 수정해야 하므로 유지보수의 어려움이 가중될 수 있습니다. 이를 방지하기 위해 애초에 프로세스와 관리하는 데이터를 분리하여 모델링하는게 효율적입니다.

3) 일관된(Consistency)데이터를 가지게 설계

  • 복잡한 데이터 모델링을 설계할때는 각 데이터가 상호간에 연관 관계를 맺게 될 수 있는데, 이 관계를 제대로 정의하지 못한다면 일관되지 않는 데이터가 저장 될수 있습니다. 이를 방지하기 위해 각 데이터의 상호 연관관계를 명확하게 정의하여 일관된 데이터를 가지도록 설계하여야 합니다.

데이터 베이스 스키마 구조

1. 외부 스키마(External Schema) == 사용자 뷰(External View)

외부 스키마란 데이터베이스를 사용하는 사용자의 유형에 따라 여러개의 스키마자 존재할 수 있습니다. 하나의 데이터베이스를 사용자의 유형별로 맞추어 접근할 수 있는 데이터를 다르게 정의한 것을 외부스키마라고 부릅니다.

EX) 학원정보가 저장된 데이터베이스에서 관리자가 봐야할 화면(VIEW)과 일반 직원이 봐야할 화면(VIEW)등 여러개의 VIEW가 존재할 수 있는데 이 VIEW를 외부 스키마라고 부름. 쉽게 생각하면 하나의 데이터베이스에 여러개 의 권한을 가진 계정이 존재하는 것.

2. 개념 스키마(Conceptual Schema) == 논리 스키마(Logical Schema)

개념스키마는 데이터베이스의 전체 구조를 정의하는 스키마입니다. 예를들어 학원 데이터베이스가 존재하는 경우 학원데이터베이스에 존재해야할 개체들에 대해 정의하고, 그 개체들간의 관계를 정의한 스키마입니다.

EX) 학원 데이터베이스에는 학생, 교수, 커리큘럼, 시험, 점수 ... 등의 개체가 필요하며 이 1명의 교수는 N개의 커리큘럼을 가질수 있고, 1명의 학생은 N개의 점수를 가질수 있다.

3. 내부 스키마(Internal Schema) == 물리 스키마(Physical Schema)

내부 스키마는 데이터베이스의 물리적 저장구조를 표현한 스키마입니다. 데이터 베이스에 어떤 데이터가 관리되는지, 어떤 자료구조와 어떤 자료형으로 관리되는지를 표현합니다. 내부스키마의 정보를 통해 데이터가 어떤 방식으로 관리되는지 파악하여 저장된 데이터의 성능을 최적화 할 수 있습니다.

EX) 학원 데이터베이스의 학생 데이터는 id, name, age, grade정보를 가지고 있으며 id는 정수값에 기본키로 사용되며, name 문자열에 가변길이타입, age는 정수값, grade는 정수값으로 저장한다.

데이터 독립성

데이터 독립성이란 데이터베이스에서의 변화가 이를 사용하는 다른 어플리케이션에 영향을 주지 않는 특성으로 데이터베이스를 효율적으로 사용하기 위해 알아야 하는 중요한 개념입니다. 데이터 독립성은 크게 2가지 개념이 존재합니다.

1. 물리적 독립성

  • 물리적 독립성은 데이터가 물리적으로 저장되는 방식이 바뀌더라도 논리적 구조에 영향을 미치지 않는 것을 의미합니다.

  • 만약 데이터베이스에서 회원의 이름을 저장하는 방식을 변경하더라도 이 이름을 사용하는 응용프로그램에서는 영향을 끼치지 않음을 의미합니다.

2. 논리적 독립성

  • 논리적 독립성은 데이터베이스의 논리적 구조가 변경되더라도 응용프로그램에 영향을 끼치지 않음을 의미합니다.

  • 만약 회원 엔티티에 새로운 속성이 추가, 삭제 되어 엔티티의 논리적구조가 바뀌더라도 이 데이터를 사용하는 응용프로그램의 입장에서는 영향을 끼치지 않을 것입니다.

출처 :
https://velog.io/@hari6180/%EC%8A%A4%ED%82%A4%EB%A7%88