DB5 [DB] 인덱스와 잠금 들어가며인덱스를 통해 효율적인 탐색을 하도록 하여 DB의 성능을 높이는데 기여하는 것은 매우 중요한 사실이지만, 그 외에도 인덱스를 통해 탐색을 하며 잠금을 건다는 사실 역시 생성(Insert)/수정(Delete)에도 큰 영향을 미친다는 사실을 확인하고자 글을 작성하게 되었습니다.사전 테이블과 데이터다음과 같이 약 1만개의 데이터를 삽입하였습니다. 이제 인덱스가 걸리지 않은 데이터를 잠그는 경우, 어떤 현상이 발생하는지 직접 확인해보겠습니다.실험현재 name 컬럼에는 인덱스가 존재하지 않기 때문에select * from test_table where name = 'User_7000' for update;쿼리를 실행하고, 어떤 행들에 잠금이 걸리는지 확인해보겠습니다.이와 함께 실제 PK를 확인해보니 1만개.. 2025. 6. 2. [DB & JPA] 무한 스크롤 계층형 댓글 구현하기 들어가며일반적으로 많은 어플리케이션에서 페이지네이션보다는 스크롤 형식의 댓글을 구현하며, 이와 함께 대댓글 기능을 포함하고 있습니다.저 역시 좋은 기회로 작은 사전 과제에서 이러한 기능을 고민하고 구현하는 경험을 할 수 있게 되어서 해당 과정을 공유하고자 글을 작성하게 되었습니다. 요구사항댓글은 하나의 요청(스크롤)에 5개의 댓글을 불러와야합니다. 또한, 대댓글 기능을 지원해야합니다.기존 요구사항은 위와 같이 어떻게 보면 단순하게 무한 스크롤을 통해 댓글을 5개씩만 불러오면 되는 것이 아닌가? 라고 생각할 수 있을 것입니다. 하지만 아래와 같은 부분을 함께 고민하면 좋을 것 같습니다. 1. 앞서 있던 댓글에 대댓글을 작성하면, 해당 대댓글은 어느 시점에 보여야 하는가?2. 만약, 해당 대댓글이 앞선 댓글.. 2025. 5. 24. [DB] 클러스터링 인덱스 들어가며면접관님께서 최근에 어떤 것을 공부하고 있느냐고 해서, 자신있게 Real MySQL을 읽으며 데이터베이스에 대해서 공부하고 있다고 말씀드렸습니다. 그러자 클러스터링 인덱스와 비 클러스터링 인덱스에 대해서 아는지, 비교를 해달라고 하셨습니다. 해당 말씀을 듣고 저는 단일 컬럼 인덱스와 복합 컬럼 인덱스로 착각하여 말씀드리게 되었습니다. 면접관님께서는 그냥 넘어가셨지만, 면접 직후 바로 찾아보니 답변을 잘못했다는 것을 알게되고 글을 기록하며 다시 한번 기억에 남기고자 글을 작성합니다!클러스터링 인덱스란?클러스터링이란 테이블의 레코드를 비슷한 것으로 묶어서 저장하는 것을 의미합니다. 이는 MySQL에서는 InnoDB 스토리지 엔진에서만 지원합니다.클러스터링 인덱스는 프라이머리 키에 대해서만 적용되는 내.. 2025. 3. 25. [DB & 팀 프로젝트] 실행 계획을 통해 인덱스 걸어보기! 들어가며Real MySQL 8.0 1권 책을 읽으며 조회 시, 인덱스의 중요성에 대해서 새삼 느끼게 되었습니다. 따라서 현재 프로젝트에서 작성한 쿼리의 실행 계획을 확인 후, 인덱스를 설정하여 조회 성능을 개선할 수 있는 부분이 있는지 확인해보고자 글을 작성하게 되었습니다!어플리케이션 코드.OtherMemberProfileView otherMemberProfileView = queryFactory .from(member) .leftJoin(hobby).on(hobby.id.in(member.profile.hobbyIds)) .leftJoin(job).on(job.id.eq(member.profile.jobId)) .. 2025. 3. 4. [팀 프로젝트] 유니크 제약 조건과 동시성 문제 들어가며이전에 작성한 글(https://kongdevlog.tistory.com/16)에서 유니크 키 제약 조건에 대한 이해가 부족하여 오버 엔지니어링(+ 잘못된 작업)을 하게되었습니다.해당 과정에 대한 원인을 분석하고 개념을 정리하기 위해 글을 작성합니다.이전 구현@Transactional public MemberLoginServiceDto login(String phoneNumber) { Member member = createOrFindMemberByPhoneNumber(phoneNumber); if (member.isBanned()) { throw new BannedMemberException(); } ... .. 2025. 2. 1. 이전 1 다음