정규화(Normalization)란?
·
Database
정규화(Normalization)정규화: 데이터의 중복과 삽입, 갱신, 삭제 시 발생할 수 있는 이상 현상(insert, update, deletion anomaly)을 최소화하기 위해 일련의 정규화(Normal Forms, NF)에 따라 관계형 데이터베이스를 구성하는 과정이다.NF: 정규화되기 위해 준수해야 하는 몇 가지 rule 정규화 과정 : 1NF -> 2NF -> 3NF -> BCNF보통 실무에서는 3NF 혹은 BCNF 까지 만족하면 정규화되었다고 말한다. (최소 정규화 단계) 왜 정규화를 해야 할까?정규화를 하는 궁극적인 목표는 데이터의 중복을 줄이고 데이터의 무결성과 일관성을 유지하기 위해서이다. 비정규화된 데이터베이스 테이블 (고객 정보와 주문 정보를 하나의 테이블에 저장)    ID   ..
MVCC(Multi-Version Concurrency Control) 개념
·
Database
MVCC(Multi Version Concurrency Cotnrol)란?개념MVCC(Multi-Version Concurrency Control)은 데이터베이스에서 동시성을 제어하는 방법 중 하나로, 다수의 사용자가 동시에 데이터베이스를 사용할 때 트랜잭션 간의 격리 수준을 유지하여 동시성을 제어한다. MVCC의 가장 큰 목적은 Lock을 사용하지 않고 일관된 읽기를 제공하는 것이다. 동작 원리MVCC는 데이터의 버전(snapshot)을 관리함으로써 동시성을 관리한다.-> MVCC에서 Multi version인 이유가 하나의 데이터에 대해 여러 개의 버전이 동시에 관리된다는 의미이다.예를 들어, 두  트랜잭션의 read-write 간 데이터를 읽는(read) 시점에 해당 데이터의 스냅샷을 유지하고 다른..
Connection을 미리 생성하는 이유
·
Database
Spring Boot을 사용하면 Connection pool에 미리 Connection을 생성하는데, 미리 생성하는 이유로 DB와 connection을 맺는 비용이 크기 때문에 애플리케이션 시작 시 미리  pool에 생성해 두어 필요할 때마다 꺼내 사용한다고 알고 있다. DB와 애플리케이션이 Connection을 맺는데 비용이 큰 이유가 뭘까?우리는 애플리케이션과 DB가 통신하는 방법을 알아야 한다.기본적으로 애플리케이션과 DB 서버와 통신을 하는 방법은 TCP/IP를 통해 통신을 하게 된다.TCP/IP는 신뢰성이 높은 통신 방법으로 신뢰성을 보장하기 위해 3-way handshake 과정을 통해 연결을 하고 연결을 종료할 때는 4-way handshake 과정을 통해 연결을 종료하게 된다. https:..
[E-commerce] 캐시를 통한 애플리케이션 성능 개선
·
Database
Redis 캐시 읽기 전략Look Aside (Cache Aside)데이터를 조회할 때, 캐시에 저장된 데이터가 읽는지 확인하고 없으면 DB에서 조회하는 전략캐시에 장애가 생겨도 DB에서 조회하면 되기 때문에 캐시 장애가 애플리케이션에 영향을 미치지 않는다.동일 조회 쿼리가 반복적으로 발생하는 상황에서 적합한 전략Read ThroughLook Aside 전략과 다르게 데이터를 캐시에서만 조회하는 전략조회하려는 데이터가 캐시에 없으면 캐시에서 DB에 접근하여 조회 후 캐시에 저장DB에 접근하는 횟수를 줄여 성능을 높일 수 있지만 캐시에 장애가 발생할 경우 애플리케이션에 영향을 미친다.Redis 캐시 쓰기 전략Write Back비동기로 캐시와 DB를 동기화 한다.DB에 저장할 데이터를 캐시에 저장해두었다가..
[E-commerce] 쿼리 분석 및 인덱스 설계를 통한 성능 개선
·
Database
인덱스(Index)인덱스는 책의 목차와 비슷하다고 생각하면 편하다.책의 목차를 보고 어디에 무엇이 있는지 바로 확인할 수 있는 것 처럼 인덱스도 바로 찾고자 하는 데이터를 찾을 수 있다. 목차도 "ㄱ", "ㄴ" 순으로 정렬되어 있는 것 처럼 인덱스도 정렬되어 보관이 된다.그래서 미리 정렬된 상태에서 새로운 인덱스를 추가,삭제, 변경하는 작업은 느리지만 조회(SELECT)하는 작업은 빠르게 처리 가능하다. 즉, 인덱스는 데이터 저장 성능을 희생하고 데이터의 읽기 속도를 높이는 기능이다.B-TreeB-Tree는 칼럼의 원래 값을 변형시키지 않고 인덱스 구조체 내에서는 항상 정렬된 상태로 유지한다.B-Tree는 트리 구조이며, 최상상위에 "루트 노드(Root node)"하나가 존재하며, 하위에 자식 노드가 붙..
함수적 종속성 (FD, Functional Dependency)
·
Database
함수적 종속성(FD, Functional Dependency)함수적 종속성이란?함수적 종속성이란, 테이블 내에서 한 속성 X 값에 따라 다른 속성 Y의 값이 유일하게 결정이 될 때 “X가 Y를 함수적으로 결정한다.”라고 표현한다.반대로 "Y가 X에 함수적으로 종속된다."라고 표현할 수 있고 이는 테이블 내의 어떤 두 행에서 X의 값이 같다면 Y의 값도 반드시 같아야 한다는 것을 의미한다.  이러한 두 값 사이의 제약 관계를 functional dependency(FD)라고 부른다. 사용자 테이블을 예시                            ID                          이름                         주소                             1..