
프로젝트 전반적인 설계 및 개요

도메인 모델 설계

JWT(AT,RT) 적용 및 RT 저장 방식 변경

ArgumentResolver가 해결할 수 있는 어노테이션 기반 파라미터 정리.

게시글 조회 캐싱 처리 과정 정리 및 맞닥뜨린 에러 해결 과정

docker compose 사용하여 모니터링 구축 과정 정리 및 트러블 슈팅

redis 도입 전/후 동시성 이슈 해결 및 성능 최적화

기존 아키텍처 구조 현재 프로젝트는 아래와 같은 아키텍처로 구성된 상태입니다. Spring Boot ↔ Redis (SET 구조) ↔ MySQL 사용자가 게시글 상세 페이지를 조회하면, 기본적인 게시글 정보(제목, 내용 등)와 함께 좋아요 수도 함께 반환됩니다. 이때 좋아요 수는 실시간성과 성능을 고려하여 RDB가 아닌 Redis의 Set 자료구조를 활...

LG 우승 !! 다음은 첼시?

아직 미완성 블로그

회원가입 성공 시 가입 축하 메일을 발송하는 로직을 구현했다. 초기에는 단순한 동기 호출로 시작했지만, 시스템의 결합도를 낮추고 데이터 정합성을 보장하기 위해 점진적으로 구조를 고도화했다. 초기: 이벤트 발행 없는 강결합 로직 개선: '회원가입'과 '메일발송'의 결합

나는 왜 테스트 코드를 작성하는가? 지금까지는 API를 만들고 나면 Postman을 켜고, 버튼을 누르고, DB를 조회하며 "눈"으로 검증했다. 하지만 다양한 프로젝트를 진행할수록 이 과정은 지루해지고 번거로웠다. (물론 Postman으로 검증하지 않는것은 아닙니다) 특히 이번 프로젝트에서는 TDD의 철학을 조금이라도 녹여내고 싶었은 마음이 있었다. 테스...

현재 전체 통합 테스트를 진행하면 아래와 같이 세 번의 스프링 부트 서버가 실행된다. > > > 테스트 코드를 작성하고 실행하며 유지보수하는 과정은 모두 비용이다. 따라서 테스트 시간을 단축하는 것은 개발 생산성을 위해 중요한 과제다. 현재는 프로젝트 규모가 작아 차이가 미미할 수 있지만, 규모가 커질수록 이 차이는 확연하게 벌어질 것이다. 테스트...

배경 및 문제 상황 현재 개발 중인 MailVoca 서비스에는 사용자별 학습 기록을 분석하여 단어를 추천해 주는 기능이 있다. 추천 로직의 우선순위는 다음과 같다. 틀린 단어: 사용자가 학습했으나 틀린 기록이 있는 단어 학습하지 않은 단어: 아직 학습 기록이 없는 단어 맞춘 단어: 추천 제외 초기 개발 단계에서는 빠른 구현을 위해 JPA의 findAll...

인덱스 설계 및 적용

하지만 여전히 아래와 같은 성능 저하가 발생한다 Using temporary; Using filesort 정렬 사용 DEPENDENT SUBQUERY 서브 쿼리는 독립적으로 실행될 수 없고, 외부(메인 쿼리)에서 id 값을 받아야만 실행 이전 포스팅에 이어서 우선, Using filesort는 랜덤 추천(ORDER BY RAND())이라는 비즈니...