본문 바로가기

분류 전체보기28

[DB] 조인 종류 살펴보기 (중첩 루프 조인 & 정렬 병합 조인 & 해시 조인) 들어가며실행 계획에 담긴 정보 중에 하나는 조인에 사용된 방식이 있습니다. 이를 통해 이전에 작성하였던 글인 '쿼리 속도 개선하기'에서 조인이 효율적으로 잘 동작하는지 확인할 수 있었습니다. 하지만, 내부적으로 어떤 방식으로 동작하는지에 대해서는 이해가 부족한 것 같아 글을 작성하게 되었습니다.중첩 루프 조인 (Nested Loop Join)for 문과 같은 원리로 조건에 맞는 조인을 하는 방법입니다.그림과 같이 조인의 기준이 되는 테이블(Driving Table)의 각 행이 조인 대상이 되는 테이블(Drived Table)의 각각의 행에 대해서 모두 비교를 시도합니다. 따라서 시간 복잡도는 Drived Table 의 행의 개수 ** Driving Table 의 행의 개수 가 됩니다.따라서, DBMS가 .. 2025. 4. 28.
[팀 프로젝트] Enum 활용하기. 들어가며기존 프로젝트의 멤버 엔티티는 `Region` 이라는 Enum 하나만으로 지역을 관리하고 있었습니다. 해당 Region 은 '서울특별시', '대전광역시' . . . 처럼 상위 지역만을 나타내고 있었습니다. 하지만 기획의 변경으로 인해 '서울특별시 강남구' 처럼 구 단위까지 포함해야 했습니다.변경 방법변경을 위해서 Enum 으로 관리하던 지역을 따로 테이블을 통해 관리하는 것이 효과적이라는 생각이 먼저 들었습니다. 하지만 이렇게 되면 기존에 사용하던 코드를 모두 변경했어야 하기 때문에 수정의 범위가 너무 커질 것 같다는 생각이 들었습니다. 또한, 지역이라는 값은 데이터의 수정,추과그리고 삭제가 일어나지 않는 고정된 값이기 때문에 DB를 통해 관리하는 방식은 큰 장점이 없을 것 같았습니다.따라서 En.. 2025. 4. 22.
[팀 프로젝트 & DB] 쿼리 속도 개선하기. 들어가며특정 게시글 목록을 보여줄 때, 총 3개의 테이블이 조인이 되는 쿼리가 존재하였습니다. 페이지네이션 작업을 진행하면서, 혹시 데이터가 늘어나거나 조회 조건이 추가되면 성능 저하가 있지 않을까? 하는 생각에 더미 데이터를 통한 성능 측정과 이 과정에서 쿼리를 수정하거나 인덱스를 튜닝하여 속도를 개선하는 과정을 기록하고자 글을 작성하게 되었습니다.더미데이터더미데이터를 추가할 때, 이전에 글을 작성한 것과 같이 데이터의 다양성이 떨어지면 의도한 인덱스를 타지 않고 풀스캔을 해버리는 경우. 즉, 인덱스의 효용이 떨어져 DBMS가 풀스캔을 선택하게 되는 상황을 배제하고자 데이터의 분포를 고르게 하고자 하였습니다.INSERT INTO jobs(id, name, created_at) -- 직업 더미 데이터WI.. 2025. 4. 16.
[JPA] 영속성 컨텍스트 EntityManager 란?JPA (Java Persistence API)에서 엔티티(Entity)를 관리하는 객체입니다.즉, 데이터베이스와 애플리케이션 사이에서 엔티티의 생명주기를 관리하는 역할을 수행합니다.영속성 컨텍스트란?영속성 컨텍스트란 엔티티를 영구 저장하는 환경입니다. 애플리케이션과 데이터베이스 사이에서 객체를 보관하는 가상의 데이터베이스 같은 역할을 합니다. 엔티티 매니저를 통해 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리합니다.영속성 컨텍스트의 구성 요소1차 캐시 : 식별자 기준 엔티티 저장, 중복 쿼리 방지.쓰기 지연 SQL 저장소 : 트랜잭션 커밋 시 DB 반영용 INSERT/UPDATE 모음변경 감지 : Flush 시점에 변경된 필드 자동 감.. 2025. 4. 11.
[DB] 인덱스 B-Tree 살펴보기! 들어가며인덱스는 어떤 자료구조로 이루어져 있나요? 라는 질문을 들으면, B-Tree 자료 구조로 이루어져 있습니다! 라고 대답할 수는 있지만, B-Tree 가 무엇이냐는 대답할 수 없을 것 같습니다... 하지만 Real MySQL 8.0 책을 읽으면서 B-Tree 가 어떤 형태로 정렬이 되어 있고, 어떤 특징이 있는지 조금은 알게 되었습니다. 따라서 이번 기회에 글을 정리하며 제대로 이해하고자 글을 작성하게 되었습니다. B-Tree 란?다수의 자식을 가질 수 있는 정렬된 균형 탐색 트리로, 데이터 삽입/삭제 시에도 트리의 균형을 유지하며 높이를 최소화하여 검색 성능을 유지하는 자료구조.  GPT가 정리해준 B-Tree의 정의입니다. 여기서 B는 Binary가 아닌 Balance를 의미합니다. 그렇다면 왜.. 2025. 4. 7.
[Java] GC에 대해서 살펴보기. 들어가며Java 와 C++/C 를 비교했을 때, 편한 장점 중 하나가 메모리 관리 측면이 있다고 생각합니다. 할당된 메모리 영역을 직접 해제시켜야 하는 C/C++과 다르게 Java는 가비지 컬렉터를 통해 자동으로 회수가 되기 때문입니다! 하지만 이렇게 객체가 회수되는 과정에 대해서 이해를 하지 못하고, 면접에서 또한 잘못된 언급을 했기 때문에 이번 기회에 제대로 정리하고 가고자 글을 작성하게 되었습니다.JVM의 메모리 구조JVM 메모리 구조(Runtime Data Area)는 다음과 같습니다.각 영역에 대한 간단한 설명을 적어두겠습니다!1. Method (Static)클래스 메타데이터 저장 : 클래스가 로딩되면, 클래스에 대한 정보가 Method Area에 저장됩니다. 이 정보에는 클래스 이름, 부모 클.. 2025. 3. 29.