sungjindev

Redis는 MySQL보다 항상 빠른가요? 아니요.

이번 포스팅에서는 이전 포스팅에서 계속 다뤘던 검색어 자동 완성 구현을 위해 Redis와 MySQL을 각각 사용했을 때 성능을 비교하면서 어떤 것을 사용하는 것이 더 좋은지 알아보겠습니다. 결과적으로 제 상황에서 MySQL이 Redis보다 50배 빨랐습니다. Redis와 MySQL의 성능 비교를 위한 상황 우선 Redis가 좋을지 MySQL이 좋을지...

Spring Project에서 158초 걸리던 Batch 작업을 병렬 처리하여 0.009초로 줄여본 이야기

이번 포스팅에서는 직전 포스팅에서 언급했던 것처럼 검색어 자동 완성 구현 로직 내 약 158초가 걸리던 Batch 작업을 병렬 프로그래밍을 통해 0.009초로 줄여본 경험을 공유드리려 합니다. 문제가 되던 Batch 작업 병렬 처리를 도입하게된 계기부터 전체적인 상황을 이해하고 싶으신 분이라면 검색어 자동 완성 기능 구현과 관련된 직전 포스팅들을 처...

Spring 프로젝트에서 Redis를 사용하여 빠른 검색어 자동 완성 구현하기 (2)

이번 포스팅에서는 이전 포스팅에 이어서 Spring 프로젝트에서 실제로 Redis를 사용하여 검색어 자동 완성 기능을 코드로 구현해보고 그때 마주친 이슈들과 해결 방법들을 공유드리려 합니다. 검색어 자동 완성 로직을 위해 단어 쪼개기 이전 포스팅에서 자동 완성 로직을 어떻게 구현할 수 있을지 소개드렸습니다. 이번에는 해당 로직을 바탕으로 코드를 직접...

Spring 프로젝트에서 Redis를 사용하여 빠른 검색어 자동 완성 구현하기 (1)

이번 포스팅에서는 Spring 프로젝트에서 Redis를 사용하여 검색어 자동 완성 기능을 구현하기 위한 로직과 자료구조를 소개해드리려 합니다. 실제 구현 코드와 트러블 슈팅 과정은 다음 포스팅에서 이어집니다. 검색어 자동 완성이란? 대부분 다 포털 사이트에서 많이 경험해보셔서 알고 계시겠지만 정확하게 자동 완성 기능에 대해 먼저 정의부터하고 넘어가겠...

Spring Data JPA N+1 문제 해결해서 수백번 나가던 쿼리를 단 1번에 처리하기!

이번 포스팅에서는 Spring JPA를 활용해서 프로젝트를 진행하다보면 한번쯤 마주치게 되는 N+1 문제에 대해 소개하고 이를 해결하는 방법을 공유드리려 합니다. N+1 문제란? 우선, N+1 문제가 무엇인지 간략하게 소개하고 넘어가겠습니다. 예를들어 Member라는 엔티티가 있고 주소를 나타내는 Address라는 엔티티가 별도로 있을 때 Membe...

지도 서비스에서 두 대각 좌표를 이용한 MBR 영역을 사용하면 안되는 이유!

이번 포스팅에서는 두 (경도, 위도) 좌표로 만들어지는 MBR(Minimum Bounding Rectangle) 최소 크기 사각형 영역 내 존재하는 데이터들을 조회하다가 발생할 수 있는 이슈를 소개하려 합니다. MBR(Minimum Bounding Rectangle)이란? MBR이란 MySQL 데이터베이스를 활용해 지도 서비스를 개발해봤다면 한번쯤 ...

Spring Project에서 API Response time을 21초에서 0.3초로 줄여본 이야기

이번 포스팅에서는 Spring으로 Project를 진행하다가 마주친 API 성능 이슈를 소개하고 어떻게 20초 걸리던 API call을 0.3초로 줄였는지 공유해보려고 합니다. 문제의 발단 저는 현재 네이버 지도나 카카오맵과 같이 여러 전국 가게들에 대한 정보를 지도에 띄워주는 Application에서 Spring 기반의 Backend projec...

Spring Test 할 때 선택적으로 Property 사용하기

이번 포스팅에서는 Spring Test 과정에서 Test 환경마다 다르게 선택적으로 property source를 결정해야할 때가 있는데, 어떻게 구현할 수 있는지 trouble shooting 과정까지 함께 살펴보겠습니다. 문제의 발단 Spring 기반으로 사이드 프로젝트를 진행하다가 저희 서비스는 Github Actions를 활용한 CI 파이프라...

순수 Java 코드로 Excel data 읽어서 파싱하는 법과 주의점

이번 포스팅에서는 Spring으로 사이드 프로젝트를 진행하며 Excel dataset에 대한 Parsing이 필요했었는데 그때 Apache POI를 사용하면서 겪었던 문제점들과 함께 간단한 사용 방법을 소개하려고 합니다. Apache POI란? Apache POI는 아파치 소프트웨어 재단에서 만든 라이브러리로 마이크로소프트 오피스 파일들을 순수 자바...

JPA 기본키 생성 전략과 @GeneratedValue 사용 시 주의점

이번 포스팅에서는 JPA 기본키 생성 전략의 종류와 특징에 대해 알아보고 이와 관련된 @GeneratedValue 애너테이션 사용 시 주의점에 대해 알아보겠습니다. 사건의 발생 사이드 프로젝트를 진행하다가 처음에 아무 생각 없이 기본키를 생성하기 위해 @Id와 @GeneratedValue 애너테이션을 사용했습니다. 그 후 데이터베이스에 접속해 생성된...