
이번 포스팅에서는 Spring Security를 사용하여 일반 회원가입과 OAuth 2.0 소셜 로그인을 동시에 구현하면서 겪었던 트러블 슈팅 경험을 공유하려고 한다.

이번 포스팅에서는 OAuth 2.0 인증 과정에서 발생한 Refresh Token 전송 문제와 이를 해결한 과정을 다룰 것이다.

회원 인증과 인가를 구현할 때, 세션과 JWT중 어떤 방식을 선택할지 고민하는 것은 백엔드 개발자라면 한 번쯤 고민해보았을 것이다. 이번 프로젝트에서 나는 JWT방식을 선택하였고 왜 그랬는지에 대한 고민의 과정을 정리하였다.

Spring Config Server에서 Config 파일에 대한 변경사항을 서비스들에게 갱신해주는 여러 방안에 대한 고민을 시작으로 고민의 마무리를 할 수 있었던 자동화까지의 고민 과정을 담았다.

JPA를 사용하다 보면 'N+1 문제'라는 용어를 자주 접하게 된다. 직접 겪은 n+1에 대한 내용과 문제 해결에 대한 내용을 다루고 마지막에는 성능 비교를 하면서 얼마나 성능이 좋아지는지에 대해 수치로 표현하였다.

프로젝트에서 겪은 이메일 전송 로직 응답 시간 지연 문제와 이에 대한 성능 개선을 다루었다.

Micro Service Architecture를 채택한 서비스에서 발생한 데이터 검증 문제를 해결한 경험을 이야기한다.

대규모 트래픽 테스트를 통해 발견한 응답시간 지연 문제를 Redis 캐싱으로 해결한 과정을 담은 이야기이다.

데이터베이스 이중화를 도입한 경험에 대해서 이야기한다.

프로젝트에 Hashicorp Vault를 도입한 경험에 대해 작성하였다.

RabbitMQ에서 메시지 처리 중 발생할 수 있는 예외 상황에 대응하는 방법과 안정적인 재처리 구조를 Spring AMQP와 함께 정리해보았다.

비동기로 구현할 때 항상 예외 처리를 고려하자.

카프카에서 메시지가 중복으로 처리되는 경험을 한 후 이에 대한 해결 방안을 고민해보았다.

프로젝트에서 Kafka + Redisson 환경에서 발생한 race condition을 해결하며 얻은 인사이트와 코드/아키텍처 개선 과정을 담는다.

FortiShop 프로젝트에서 고트래픽 환경에서 발생한 Kafka 메시지 처리 실패 문제를 구조적으로 해결한 경험을 공유한 내용이다.

회원 아이디와 회원의 역할까지 함께 전달하여 다른 마이크로 서비스에서 이를 인증된 사용자의 정보도 신뢰하여 데이터를 반환하도록 하였다.

WebFlux 환경이 아닌 Spring MVC 기반에서 직접 Rate Limiting을 구현해야 했던 배경부터 Redis를 활용한 분산 제어 방식, Lua Script를 통한 동시성 보장, 필터 등록 방식까지 구체적으로 서술하였다.