redis 3

[쇼핑몰 프로젝트 - 리팩토링] 카테고리 N+1 문제 해결과 Redis 캐싱 적용

0. 개요쇼핑몰 프로젝트의 카테고리는 재귀적 계층 구조로 설계되어 있었다. 처음에는 백엔드에서 전체 카테고리 트리를 재귀적으로 내려주는 방식이었지만, 이 방식은 N+1 문제를 유발했고, 그로 인해 쿼리 수가 과도하게 늘어나고 응답 속도도 매우 느려지는 문제가 있었다. 당시에는 시간적인 여유가 없어서, 문제를 임시로 해결하기 위해 프론트 서버에서 아래와 같이 로직을 구성한 것 같다.최상위 카테고리 목록을 먼저 /topCategories API로 조회.그 중 자식이 있는 카테고리에 대해 /subCategories/{id} API를 반복 호출.이 방식은 겉보기에 구조를 분리한 것처럼 보이지만, 결국 카테고리 개수만큼 API 요청이 발생하게 되면서 N+1 문제를 DB 쿼리에서 API 요청 수준으로 옮긴 것에 불..

[쇼핑몰 프로젝트] 분산 환경에서 데이터 캐싱 - Redis

0. 개요장바구니 로직을 설계하던 중, 사용자가 장바구니를 이용할 때마다 DB에서 매번 데이터를 넣고 가져오는 방식은 비효율적이라 생각했다. 그래서 장바구니 데이터를 세션으로 관리하고, 특정 시점(세션 종료, 로그아웃)에만 DB에 백업하여 저장하는 방식으로 설계를 진행했다.1. 문제서버 이중화 환경에서, 세션 통해 장바구니를 관리하면 세션 불일치 문제가 발생했다.서버가 이중화된 환경에서 사용자가 장바구니 세션이 없는 다른 서버로 요청이 가면 장바구니 기능이 제대로 동작하지 않는 문제가 발생했다.사용자가 많을 경우, 서버 메모리의 부담이 커진다.장바구니는 사용자가 자주 또 많이 이용하는 기능이다. 이는 서버의 메모리 사용량을 크게 증가시켜, 서버의 성능 저하로 인해 서비스의 품질에 영향이 갈 것이라 생각했..

[Spring Boot] DB 연결하기 - MySQL, H2, Redis

1. MySQL(0) MySQL 로컬 서버 활성화/종료# 서버 활성화mysql.server start# 서버 종료mysql.server stop (1) 터미널로 연결하기로컬에 설치된 MySQL 서버에 root 사용자로 접속하는 명령어.mysql -u root -p MySQL 원격 접속을 위한 명령어.-h: 호스트. 111.111.111.111은 MySQL 서버의 IP 주소.-P: 포트 번호.-u: 사용자 이름.-p: 비밀번호 입력을 요청.mysql -h 111.111.111.111 -P 3306 -u nhn_exam_17 -p (2) Spring Boot 에서 properties 파일로 연결하기의존성 추가. com.mysql mysql-connector-j runtime 2. pr..

Spring 2024.11.30