DB(10)
-
[DB] 파티셔닝(partitioning)
Intro 아래 영상을 보고, 글로 정리해서 포스팅합니다. https://youtu.be/P7LqaEO-nGU 파티셔닝이란? 데이터베이스의 테이블을 목적에 따라 작은 테이블들로 나누는 방식을 말합니다. 크게 수직 파티셔닝과 수평 파티셔닝으로 나뉩니다. 둘을 차례대로 살펴보도록 하겠습니다. 수직 파티셔닝 Column을 기준으로 테이블을 나누는 방식입니다. 아래는 게시글 정보를 저장하고 있는 일반적인 테이블입니다. Table name: Board id 제목 작성자id 생성 일자 조회 수 댓글 수 content 1 호식이 치킨 leehosik 2023-06-04 67 12 ... 2 날씨가 좋네요 niceWeather 2023-06-04 1 0 ... 만약 아래와 같은 게시글 목록을 구성하려면 필요한 데이터는..
2023.06.04 -
[DB] 반정규화(Denormalization)
Intro 지난 포스팅에서 정규화에 대해 알아보았습니다. 정규화는 요약하자면 데이터의 일관성을 지키고 중복을 막기 위해 데이터를 분해하는 과정입니다. 정규화를 거치면 불필요한 데이터를 입력하지 않아도 되므로, 중복 데이터가 제거된다는 장점이 있었습니다. 하지만 테이블을 분해할수록 조회 시 join 연산 수행이 많아지므로 CPU와 메모리를 많이 사용하게 된다는 단점도 존재합니다. 이때, join으로 인한 성능 저하가 예상될 때 반정규화를 적용해볼 수 있습니다. 반정규화란? 정규화된 엔티티, 속성, 관계에 대해 시스템의 성능향상과 개발과 운영의 단순화를 위해 중복, 통합, 분리 등을 수행하는 데이터 모델링의 기법으로, 의도적으로 정규화 원칙을 위배하는 행위입니다. 반정규화를 수행하는 이유 정규화에 충실하여 ..
2023.06.04 -
[DB] 정규화(Normalization)란?
정규화란? 정규화는 '이상현상'이 있는 릴레이션을 분해하여 이상현상을 없애는 과정입니다. 릴레이션을 분해하여 중복된 데이터를 줄이고 무결성(Integrity)를 유지하는 것이 정규화의 목표입니다. 정규화를 살펴보기 전에 반드시 짚고 넘어가야 하는 이상현상과 함수 종속성의 개념에 대해 알아보겠습니다. ** 해당 포스팅은 제4,5 정규형은 다루지 않습니다. 이상현상(Anomaly) 이란? 삽입 이상(Insertion Anomaly) : 튜플 삽입 시 특정 속성에 해당하는 값이 없어 NULL을 입력해야 하는 현상 삭제 이상(Deletion Anomaly) : 튜플 삭제 시 같이 저장된 다른 정보까지 연쇄적으로 삭제되는 현상 => 아래의 테이블에서 장미란이라는 학생의 정보를 지울 경우, 강의실 103도 같이 사..
2023.05.28 -
[DB 접근 기술] 스프링과 문제 해결 - 예외 처리, 반복
체크 예외와 인터페이스 서비스 계층은 가급적이면 순수한 비즈니스 코드만 남겨놓는 것이 바람직하다. 하지만 DB 접근 기술이(예를 들면 JDBC의 SQLException) 리포지토리, 서비스, 컨트롤러에서 처리할 수 없는 체크예외를 던지는 경우라면 서비스, 컨트롤러는 해당 DB 접근 기술에 종속된다. 체크 예외는 메소드 선언에 throw가 필수로 선언되어야 하기 때문이다. 따라서 DB 접근 기술이 JPA로 변경되는 경우 throws SQLException을 다른 exception으로 변경해야 하는 수고가 있다. 우선 인터페이스를 도입해서 DB 접근 기술의 변경이 용이하도록 해보자. MemberRepository를 인터페이스로 지정하면, 서비스 계층은 MemberRepository 인터페이스에만 의존하면 된..
2022.07.05 -
[DB 접근 기술] 트랜잭션 (1)
애플리케이션 구조 여러가지 애플리케이션 구조가 있지만, 가장 단순하면서 많이 사용하는 방법은 역할에 따라 3가지 계층으로 나누는 것이다. 이 3개의 계층 중 핵심 비즈니스 로직이 들어있는 서비스 계층이 가장 중요하다고 가히 말 할 수 있다. 시간이 흘러서 UI(웹)와 관련된 부분이 변하고, 데이터 저장 기술을 다른 기술로 변경될 순 있어도, 비즈니스 로직은 최대한 변경없이 유지되어야 한다. 이렇게 하려면 서비스 계층을 특정 기술에 종속적이지 않게 개발해야 한다. --> 사실 계층을 나눈 이유도 서비스 계층을 순수하게 유지하기 위한 목적이 크다. 기술에 종속적인 부분은 프레젠테이션 계층, 데이터 접근 계층에서 가지고 간다. --> 예를 들어서 HTTP API 를 사용하다가 GRPC 같은 기술로 변경해도 프..
2022.05.28 -
[DB 접근 기술] DB 락
DB 락 - 개념 이해 세션1이 트랜잭션을 시작하고 데이터를 수정하는 동안 아직 커밋을 수행하지 않았는데, 세션2에서 동시에 같은 데이터를 수정하게 되면 여러가지 문제가 발생한다. 바로 트랜잭션의 원자성이 깨지는 것이다. 여기에 더해서 세션1이 중간에 롤백을 하게 되면 세션2는 잘못된 데이터를 수정하는 문제가 발생한다. 이런 문제를 방지하려면, 세션이 트랜잭션을 시작하고 데이터를 수정하는 동안에는 커밋이나 롤백 전까지 다른 세션에서 해당 데이터를 수정할 수 없게 막아야 한다. 데이터베이스는 이런 문제를 해결하기 위해 락(Lock)이라는 개념을 제공한다. 세션1은 트랜잭션을 시작한다. 세션1은 memberA 의 money 를 500으로 변경을 시도한다. 이때 해당 로우의 락을 먼저 획득해야 한다. 락이 남..
2022.05.27