본문 바로가기

postgres4

[Join Series] 3. Hash Join 필자가 기획한 조인 시리즈의 마지막 주인공은 해시 조인이다 일반적으로 해시 조인은 다른 조인들에 비해  비교적 좋은 성능을 보인다고 알려져 NL 조인과 소트 머지 조인 대신 무분별하게 사용하는 케이스가 종종 있는 바로 그 해시 조인이다 그럼 해시조인이 빠르다는 얘기는 과연 사실이고, 무분별하게 사용해도 괜찮을까?? 해시조인이 빠른 건 사실이지만 필자는 해시 조인을 무분별하게 사용하는 건 추천하지 않는다 위 내용을 정확히 알려면 해시 조인이 어떻게 동작하는지 그 매커니즘을 알아야 한다 이번에도 A 테이블과 B 테이블이 조인하는 경우를 예시로 들어보자 (A= Driving, B= Innier. A.id = B.A_id) A 테이블과 B 테이블 중 더 작은 테이블(Build Input) 을 해시 테이블로 생성.. 2025. 4. 5.
[Join Series] 2. Sort Merge Join 두번째로 다룰 조인 방식은 소트 머지 조인(Sort Merge Join)이다 이전 글에서 설명했던 NL 조인에 비해 다룰 내용이 비교적 많지 않아 글이 짧을 것으로 예상된다 소트 머지 조인은 NL 조인의 대량 데이터 조인 시 발생하는 단점을 극복하기 위해 주로 사용되었는데 소트 머지 조인이 무엇이고, 어떻게 동작하는지 알아보자 소트 머지 조인은 각 DB 프로세스에 독립적으로 할당된 PGA 영역의 Sort Area에  조인 대상 컬럼을 기준으로 대상 테이블들을 모두 Sorting 하고 (결과 집합의 크기가 클 경우 Temp Table에 저장하기도 한다) Sorting 된 각 테이블을 Merge 하는 단순한 과정으로 동작한다A, B 테이블이 서로 조인하는 과정을 예로 들어보자(A = Driving, B = .. 2025. 3. 28.
[Spring/Postgres] SKIP Lock 사용하여 동시성 이슈 해결하기 서버를 운영하다 보면, 여러 클라이언트에서 동시에 들어온 DB 자원 점유 요청을 순서대로 처리해야 할 때가 있다 예를 들면 놀이공원 입장권 예매 서비스가 그렇다 (필자는 실제 예매 서비스가 어떻게 구성되어 있는지 모른다. 이후 등장하는 내용은 모두 픽션..) 입장권 데이터를 관리하는 롯데월드 서비스와 입장권 예매를 담당하는 YES24, 인터파크, 지마켓 등이 있고 각 회사는 서로 독립된 회사와 환경에서 운영되고 있다고 가정한다  예를 들어 롯데월드 입장권 예매가 12시에 오픈한다 가정하면 12시가 땡 치면 여러 티켓 발급서비스로부터 티켓 발급 요청이 동시다발적으로 발생할 것이고, 티켓 관리 서비스에서 제대로 된 설정이 이루어지지 않았다면 위 흐름과 같은 위험한 상황이 발생할 수 있다 먼저 위 상황이 왜 .. 2025. 3. 1.
[Spring/Postgres] Exclusive Lock 제대로 사용하기 (동시성 문제) 데이터베이스에 데이터를 적재하는 애플리케이션을 운영하다 보면 데이터베이스에 Lock을 거는 행위는 매우 빈번하게 일어난다 이번 글에서는  필자가 Springboot Web Application + Postgres 환경에서  비관적 락의 잘못된 사용으로 발생했던 이슈와, 해결하는 과정을 담아보았다  먼저 필자가 비관적 락을 사용했던 이유는 동시성 이슈 해소를 위함이었다 예를 들어 A 테이블의 1번 Low에 동시에 접근하는 두 트랜잭션이 있을 경우 1번 트랜잭션 실행 이후 2번 트랜잭션이 실행되는 것이 보장되어야 했고,  Postgres의 기본 Isolation Level인 READ COMMITED 와  Hibernate에서 제공하는@Lock(LockModeType.PESSIMISTIC_WRITE)  어노테.. 2025. 2. 22.
반응형