김도현

150만건이 담긴 Table내 BETWEEN 조건 질의시 성능 개선 과정

문제 상황 현재 레코드 수는 아래 그림과 같이 약 150만개 이고, 매 1시간마다 800 ~ 1200개의 레코드가 추가되는 테이블을 사용하고 있다. 위 요구사항을 해결하기 위한 로직을 처리하는데 아래와 같이 12초 ~ 13초의 시간이 소요되어 이를 개선하고자 한다. 해결 과정 우선 슬로우 쿼리가 발생하는 이유를 찾기 위해 실행 계획을...

사용자 인증/인가 관심사 분리 (Thread Local)

사용자 인증/인가 관심사 분리 문제 해결 과정 왜 이런 과정이 필요했는지? 기존 코드에는 특정 API 컨트롤러마다 사용자 인증 정보를 가져오는 로직이 반복되고있었다. 컨트롤러에서 이에 대한 관심사를 해결하는 것 보다는 이를 분리하는게 더 역할에 맞다고 생각해서 이를 분리하기로 했다. 구체적으로 어떻게 구현한건지? HTTP Connectio...

스프링은 왜 프록시를 짝사랑하는가... (리플렉션, 다이나믹 프록시, CGLIB, AOP)

프록시 패턴에 대한 궁금증 스프링에서 AOP를 공부하려다 보면 그 개념의 근원은 프록시부터 시작한다. AOP가 적용된 로직은 프록시 패턴을 적용하여 요구사항을 해결한다고 알려져있는데 도대체 프록시 패턴이 무엇이고 왜 쓰이고, 스프링은 왜 프록시 패턴으로 AOP를 구성하게 되었는지 알아보려고한다. 프록시 패턴? 디자인 패턴 중 구조 패턴으로 ...

토비의 스프링 8장

0. 스프링이란? 스프링은 자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크 이라고 한다. 이 정의를 조금씩 분해해서 살펴보자 애플리케이션 프레임워크 애플리케이션 프레임워크는 특정 계층/기술/분야에 관계없이 애플리케이션 전 영역을 다루는 범용 프레임워크이다. 이게 일반 프레임워크랑 무슨 차이냐면, 일반적으로 프레임...

커서기반 페이징 및 MySQL 최적화 톺아보기와 적용

흔하디 흔한 오프셋 기반 페이징 offset 쿼리를 사용해서 조회할 데이터를 분할해서 가져온다. 문제점 1. 데이터 중복/유실 페이징 중 데이터 추가/삭제 시 중복된 혹은 유실된 데이터 반환 이 내용은 아직 시나리오가 정확히 이해가 가지 않아서 나중에 자세한 시나리오를 작성하기로한다. 문제점 2. 성능 일단 Limit, Offest 문법은 ...

트랜잭션과 잠금 톺아보기

트랜잭션과 락 트랜잭션은 작업의 완전성을 보장해주는 것이다. 작업을 모두 완벽하게 처리하거나, 처리하지 않고 원 상태로 복구하거나 락과 트랜잭션은 유사해 보이지만 다르다. 락은 동시성을 제어하기 위한 기능이고, 트랜잭션은 데이터의 정합성을 보장하기 위한 기능이다. 락이 없다면 어떻게 되는걸까? 하나의 회원 정보 레코드를 여러 커넥션에서 동시...