Try using it in your preferred language.

English

  • English
  • 汉语
  • Español
  • Bahasa Indonesia
  • Português
  • Русский
  • 日本語
  • 한국어
  • Deutsch
  • Français
  • Italiano
  • Türkçe
  • Tiếng Việt
  • ไทย
  • Polski
  • Nederlands
  • हिन्दी
  • Magyar
translation

AI가 번역한 다른 언어 보기

제이의 블로그

물리적 데이터 모델링

  • 작성 언어: 한국어
  • 기준국가: 모든 국가 country-flag

언어 선택

  • 한국어
  • English
  • 汉语
  • Español
  • Bahasa Indonesia
  • Português
  • Русский
  • 日本語
  • Deutsch
  • Français
  • Italiano
  • Türkçe
  • Tiếng Việt
  • ไทย
  • Polski
  • Nederlands
  • हिन्दी
  • Magyar

durumis AI가 요약한 글

  • 논리적 데이터 모델링을 기반으로 물리적 데이터 모델링을 진행하며, 저장 공간 효율성, 오브젝트 파티셔닝 설계, 인덱스 설계 등을 통해 성능 최적화를 목표로 합니다.
  • 특히 슬로우 쿼리를 분석하고 해결하는 것은 중요하며, 인덱스 사용, 캐싱, 역정규화 등 다양한 방법을 통해 성능 향상을 도모합니다.
  • 역정규화는 정규화된 테이블의 성능 저하 문제를 해결하기 위한 방법이며, 테이블 구조 변경을 통해 읽기 성능을 향상시킬 수 있지만, 신중한 검토와 적용이 필요합니다.

논리적 데이터 모델링이 관계형 데이터베이스에 맞는 이상적인 테이블을 만드는 작업이었다면, 물리적 데이터 모델링에서는 이상적인 테이블을 실제 사용할 테이블로 만드는 작업을 포함하여 저장공간의 효율적 사용 계획, 오브젝트 파티셔닝 설계, 최적의 인덱스 설계등 성능 향상과 최적화를 중점적으로 고려한다.

서비스 운영시 병목 현상을 일으키는 슬로우 쿼리를 찾는 방법은 DBMS의 종류마다 다르며 슬로우 쿼리를 키워드로 검색하여 찾아야한다.

성능을 위해 고려해볼 사항들

슬로우 쿼리(Slow Query) 찾기

  • 슬로우 쿼리는 DBMS가 요청 받은 쿼리를 수행할 때 일정 시간동안 수행되지 못한 쿼리를 말한다.
  • 병목 현상을 일으키는 슬로우 쿼리를 찾아서 문제가 무엇인지 파악하고 해결한다.

인덱스(Index)

  • 인덱스는 행에 대해 읽기 성능을 비약적으로 향상 시킨다.
  • 그러나 쓰기 성능을 저하 시키고 저장 공간을 더 많이 사용한다.


캐시(Cache)

  • 어플리케이션 레벨에서 데이터베이스의 부하를 줄일 수 있는 방법
  • 동일한 입력의 요청 응답을 저장 공간에 저장해두었다가 응답 하는 방식이다.


위의 방법으로도 성능 문제가 해결이 되지 않으면, 역정규화 또는 반정규화라고 불리는 작업을 진행한다.

테이블의 구조를 수술해서 고치는 것이다.

정규화의 트레이드오프

정규화는 쓰기 작업의 편리함을 위해서 읽기의 성능을 포기하는 것과 같다. 정규화를 하게 되면 여러개로 쪼개진 테이블의 데이터들을 조인하는 쿼리를 작성 해야한다.

하지만 정규화가 반드시 성능을 떨어트리진 않으므로 역정규화를 진행하기 전에 꼭 문제를 올바르게 파악하고 검토 해야한다.

아래의 링크는 앞으로 다룰 역정규화에 대해서 다루고 있는 좋은 글이다.

역정규화, 반정규화 (denormalization)

먼저 알아두어야 할 것은, 정규화를 진행하고 난 뒤에 역정규화를 진행 해야 한다는 점이다. 처음부터 비정규화 테이블이 좋은 것은 아니다.

일단 지금 당장 필요한 지식은 아니기 때문에, 알아두고만 넘어가려고 한다.

테이블 역정규화 기법

출처 - DataOnAir - 반정규화와 성능

컬럼의 역정규화

출처 DataOnAir - 반정규화와 성능

관계의 역정규화

출처 - DataOnAir - 반정규화와 성능

Jay
제이의 블로그
1인분이 목표인 초보 개발자
Jay
논리적 데이터 모델링 논리적 데이터 모델링은 개념적 데이터 모델링의 ERD를 관계형 데이터베이스 패러다임에 맞춰 변환하는 기계적인 과정입니다. 맵핑 룰을 기준으로 사각형 엔티티는 테이블로, 원형 속성은 컬럼으로, 관계는 PK 또는 FK로 변환됩니다. 1:1, 1:N, N:M 관계를 처리하는 방법과 제 1, 2, 3 정규화를 통해 테이블을 정제하는 과정을 설명합니다.

2024년 4월 9일

칸반보드 프로젝트 2 논리적 데이터 모델링 논리적 데이터 모델링을 진행하기 위해 개념적 데이터 모델링 ERD를 표 형태로 변환하고 정규화를 수행하는 과정을 설명합니다. 특히, Ticket 테이블의 Tag를 별도 테이블로 생성하여 제 2 정규형을 만족시키는 방법을 다룹니다.

2024년 4월 9일

관계형 데이터 모델링 관계형 데이터 모델링은 현실 세계의 정보를 테이블과 데이터로 나누는 과정이며, 요구 사항 분석, 개념적 데이터 모델링, 논리적 데이터 모델링, 물리적 데이터 모델링의 네 단계로 구성됩니다.

2024년 4월 8일

[비전공, 개발자로 살아남기] 14. 신입 개발자 자주 묻는 기술면접 내용 요약 신입 개발자 면접에서 자주 나오는 기술 질문과 답변을 정리했습니다. 메모리 영역, 자료구조, 데이터베이스, 프로그래밍 패러다임, 페이지 교체 알고리즘, 프로세스와 스레드, OSI 7 계층, TCP와 UDP 등 다양한 주제를 다룹니다.
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

2024년 4월 3일

[이펙티브 자바] 아이템 6. 불필요한 객체 생성을 피하라 자바에서 불필요한 객체 생성을 최소화하여 성능을 향상시키는 방법에 대해 설명합니다. 문자열, 부울, 정규 표현식, 뷰 객체, 오토 박싱 등 다양한 예시와 함께 객체 재사용의 중요성을 강조합니다. 특히 방어적 복사가 필요한 경우 객체 재사용으로 인한 문제점을 주의해야 합니다.
제이온
제이온
제이온
제이온

2024년 4월 28일

[Java] Synchronized Collection vs Concurrent Collection 자바에서 동기화된 컬렉션(Vector, Hashtable, Collections.synchronizedXXX)은 멀티 스레드 환경에서 동시성을 보장하지만, 성능 저하와 여러 연산을 묶어 사용할 때 문제 발생 가능성이 있습니다. 대안으로 java.util.concurrent 패키지의 병렬 컬렉션(CopyOnWriteArrayList, ConcurrentHashMap 등)을 사용하면 읽기 성능 향상과 효율적인 동시성 처리가 가능합니다.
제이온
제이온
제이온
제이온

2024년 4월 25일

[DB] 캐시를 설정하는 기준 자주 읽지만, 쓰기 빈도가 낮은 데이터를 캐싱하는 방법과 로컬 캐싱, 글로벌 캐싱의 장단점을 비교 분석했습니다. 특히, 캐싱할 데이터의 종류, TTL 설정 방법, 실무 적용 사례와 함께 앞으로 성능 테스트 계획을 소개합니다.
제이온
제이온
제이온
제이온
제이온

2024년 4월 25일

[이펙티브 자바] 아이템 5. 자원을 명시하지 말고 의존 객체 주입을 사용하라 클래스가 내부적으로 하나 이상의 자원에 의존하는 경우, 싱글턴과 정적 유틸리티 클래스 대신 의존 객체 주입을 사용하는 것이 좋습니다. 의존 객체 주입을 통해 클래스의 유연성, 재사용성, 테스트 용이성을 향상시킬 수 있습니다.
제이온
제이온
제이온
제이온

2024년 4월 28일

[이펙티브 자바] 아이템 1. 생성자 대신 정적 팩터리 메서드를 고려하라 정적 팩터리 메서드는 생성자 대신 인스턴스를 생성하는 데 사용할 수 있는 유용한 방법입니다. 이름을 가질 수 있고, 생성자보다 더 많은 유연성을 제공하며, 플라이웨이트 패턴, 싱글톤 패턴, 서비스 제공자 프레임워크와 같은 디자인 패턴을 구현하는 데 사용할 수 있습니다.
제이온
제이온
제이온
제이온

2024년 4월 27일