본문 바로가기

전체 글55

RDB 성능 개선하기 - BETWEEN vs LIKE RDB를 운영하다 보면 범위검색은 심심치 않게 발생한다 이번 글에선 범위 검색 중 흔히 사용하는 조건절의 BETWEEN과 LIKE의 차이 및 효율에 대해 다뤄보고자 한다 먼저 이해를 돕기 위해 송금 집계 테이블이 있다고 가정하자 송금 집계 테이블엔 송금 날짜, 송금 타입 컬럼이 있다 송금 집계 테이블의 송금 날짜 레코드는 202312 ~ 202501까지 존재한다송금 집계 테이블의 송금 타입 레코드는 A와 B가 있으며, A = 90만 건, B = 10만 건 (9:1) 비율로 존재한다 송금 집계 테이블엔 (송금 날짜, 송금 타입) 인덱스가 존재한다 (편하게 idx1 로 부르자)위 정보를 바탕으로 idx1를 시각화하면 다음과 같다 우린 2024년에 B 타입으로 송금한 레코드 정보를 찾기 위해 다음과 같은 조건.. 2025. 3. 8.
[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.
(Java/Kotlin)[Spring Security] MockMvc 테스트 시, 특정 Filter 를 제외하기 이번 글에서는 MockMvc 테스트 시, 특정 Filter를 사용하지 않도록 하는 방법에 대해서 다뤄보겠습니다 미리 말씀드리자면 이 방법은 편법에 가깝다고 생각합니다 더 나은 방법이 있다면 해당 방법을 사용하는 것을 권장합니다 먼저 Spring에서 Bean을 등록할 때 Bean 이름은 기본적으로 Bean의 타입 (또는 클래스)을 기반으로 생성됩니다. Bean의 이름이 같은 경우에는 나중에 정의된 Bean이 이전에 정의된 Bean을 오버라이드하게 됩니다. 따라서 @TestConfiguration 어노테이션이 명시된 클래스 내에서 제외하고자 하는 Bean을 재정의하면 이 Bean은 이전에 정의된 Bean을 오버라이드합니다. 이를 Filter에 적용하면 Test 패키지 내에 MockMvc 테스트에서 제외하고자.. 2023. 11. 30.
반응형