Database 5

JPA의 N+1 문제, 왜 생기고 어떻게 해결할까?

오늘은 JPA를 사용한다면 반드시 알아야 하고, 자주 겪을 수 있는 N+1 문제에 대해 정리해보겠습니다. ▶️ N+1 문제란?쉽게 말하면, DB에서 1번만 가져오면 될 데이터를 여러 번에 걸쳐 조회하게 되는 현상입니다. 간단한 예를 들어 게시글 10개를 가져오면서, 각 게시글의 작성자 정보도 함께 조회한다고 해보겠습니다.- 게시글 1번 조회 → 작성자 1번 조회 (10개) → 총 11번 쿼리 실행. 이게 바로 N+1 문제입니다. (N+1은 "1개의 select + N개의 연관 select"의 의미입니다.) ▶️ 왜 발생할까?JPA는 객체지향스럽게 데이터를 가져오고자 지연 로딩(LAZY)을 기본으로 합니다.즉, 연관된 엔티티는 처음에 바로 가져오지 않고, 실제로 접근할 때 추가 쿼리를 날립니다. 게시글과 ..

Database 2025.06.13

Indexing, Partitioning 을 통해 서비스 성능 개선하기

오늘은 간단하게 Indexing, Partitioning 개념을 정리하고, 이를 통해 성능을 어떻게 개선하는지에 대해 정리해보려고 합니다 🧑‍💻 기본적으로 이 둘은 모두 성능 개선이 목적입니다. Indexing은 원하는 데이터를 더 빠르게 조회할 수 있게 도와주고Partitioning은 테이블을 물리적으로 나눠서 특정 조건의 데이터만 효율적으로 다룰 수 있게 해줍니다.하지만 중요한 건, "그냥 쓰면 무조건 빨라지겠지"라는 태도보단, 실제 상황에서 적절히 써야 효과가 있다는 점입니다.■ Indexing 이란 ?인덱스는 쉽게 말하면 책의 목차 같다고 보면 됩니다.특정 컬럼에 대해 검색 속도를 빠르게 하기 위한 자료구조를 만드는 것이죠.예를 들어, user 테이블에 email로 검색하는 경우가 많다면, e..

Database 2025.06.12

[Postgresql] Transaction Isolation Level

트랜잭션 격리 수준 (Transaction Isolation Level) - 여러 트랜잭션이 동시에 처리될 때 하나의 트랜잭션이 다른 트랜잭션과의 격리 수준을 어떻게 할지 결정하는 레벨. PostgreSQL에서는 4가지의 표준 Transaction Isolation Level이 있습니다. 먼저 PostgreSQL에서 트랜잭션을 설정하는 방법은 아래 공식 문서를 참고하시면 됩니다. https://www.postgresql.org/docs/current/sql-set-transaction.html 격리 수준은 READ UNCOMMITTED -> SERIALIZABLE 순서로 높아지며, 기본 값은 READ COMMITTED입니다. 1) READ UNCOMMITTED 설정에는 정의되어 있지만, 사실상 지원하지 ..

Database 2022.05.20

[PostgreSQL] upsert 시 excluded 명령어

upsert 쿼리 시에 excluded 명령어에 대한 개념과 사용법을 정리해보겠습니다. - excluded 정의 기존의 파라미터 값을 그대로 사용할 때 사용. insert 에서 이용한 값을 재이용하고 싶을 때 excluded 키워드를 사용합니다. - 예시 INSERT INTO post (title, contents) values ('POST TITLE', 'POST CONTENTS') ON CONFLICT (title) DO UPDATE SET (contents) = (excluded.contents) 아래 excluded.contents 라는 것은 위에서 사용한 contents 값을 그대로 사용한다는 의미입니다.

Database 2022.03.25

[MyBatis] if와 foreach를 활용하여 동적 쿼리생성 (필터링 기능)

● MyBatis - if와 foreach를 활용하여 동적 쿼리 생성MyBatis에서 if와 foreach를 활용하여 동적 쿼리를 생성하는 방법에 대해 정리하겠습니다. 그리고 이를 이용하면 간단한 검색 필터링 기능을 쉽게 구현할 수 있습니다. 이 내용에 대한 예제를 통해 간단히 정리해보겠습니다. ■ MyBatis에서의 if와 foreach 먼저 MyBatis에서의 if와 foreach에 대해 살펴보겠습니다. 이름 그대로 if는 조건문이며, foreach는 반복문에서 사용됩니다. 사용방법은 다음과 같습니다. 해당 조건에 참일 경우만 내부의 쿼리문이 더해집니다. {QUERY 문} 다음으로 foreach의 사용법은 다음과 같습니다. collection에는 전달받은 파라미터값이 들어가며, item은 실제 쿼..

Database 2019.12.18