세션 기반 인증에서 JWT 기반 인증으로 전환하면서 정리한 것들
배경 기존 프로젝트는 전형적인 세션 기반 인증 구조였다. 로그인 시 세션 생성 서버가 인증 상태를 기억 이후 요청은 세션으로 인증 처리 기능적으로는 문제 없었지만 구조적인 한계가 명확했다. 서버가 상태를 들고 있어야 함 확장 시 세션 공유 필요 API 서버로 확장하기 어려움 그래서 Spring Security + ...
배경 기존 프로젝트는 전형적인 세션 기반 인증 구조였다. 로그인 시 세션 생성 서버가 인증 상태를 기억 이후 요청은 세션으로 인증 처리 기능적으로는 문제 없었지만 구조적인 한계가 명확했다. 서버가 상태를 들고 있어야 함 확장 시 세션 공유 필요 API 서버로 확장하기 어려움 그래서 Spring Security + ...
“삭제는 끝이 아니라 또 다른 상태로의 전이다. 사용자에게는 실수를 만회할 기회를, 시스템에는 정합성을 유지할 여유를 주어야 한다.” 프로젝트를 리팩토링하면서 데이터를 즉시 물리적으로 삭제(Hard Delete)하는 방식 대신, 논리적으로 삭제(Soft Delete)하고 일정 기간 이후 자동으로 영구 삭제하는 전략을 적용했다. 단순히 데이터를 숨기...
문제 상황 기능별로 브랜치를 나눠 PR을 생성하는 과정에서 의도하지 않은 커밋이 포함되는 문제가 발생했다. 모든 PR의 base는 develop 하지만 특정 PR에 이전 작업의 커밋과 변경 파일이 함께 포함됨 예: feature/common-response PR에 common-enums 관련 변경이 같이 노출 원인 분석 문제의...
배경 PUT과 PATCH를 구분할 때 흔히 다음처럼 이해한다. PUT → 전체 수정 PATCH → 일부 수정 이 기준만으로 회원 정보 수정 API를 설계하다 보니 이런 고민이 생겼다. PUT이면 모든 필드를 다 보내야 하는가? 수정 불가능한 값까지 요청에 포함하는 것은 비효율적인가? 하지만 이 문제는 단순히 “데이터를 얼...
요청이 필터를 거쳐 인증과 인가를 수행하고 DispatcherServlet을 통해 컨트롤러로 전달되는 흐름 정리 오늘은 Spring Security를 단순히 “권한 설정을 적는 도구”로 보는 것이 아니라, 실제 요청이 들어왔을 때 내부에서 어떤 순서로 동작하는지 흐름 중심으로 정리했다. 1. 인증과 인가의 역할 구분 먼저 가장 중요한 전제는 인...
호출 개수가 아니라 책임의 방향으로 구분하기 설계에서 중요한 것은 겉으로 드러나는 복잡함이 아니라 해당 클래스가 어떤 책임을 가지며 어디를 향해 의존하는가이다. 이번 리팩토링의 출발점은 Facade와 Application Service의 개념을 구분하는 것이 아니라 서비스 간 순환참조를 해결하는 것이었다. 당시에는 순환참조를 끊기 위해 Facad...
“JPA를 사용한다는 것은 단순히 라이브러리를 쓰는 것이 아니라 객체와 데이터베이스 사이의 영속성 컨텍스트라는 거대한 흐름을 제어하는 일이다.” 오늘 학습한 JPA의 핵심 동작 원리와 성능 최적화 전략을 정리해 본다. 이론을 넘어 실무에서 마주할 수 있는 디테일한 설정들이 왜 중요한지 다시 한번 깨닫는 시간이었다. 1. 영속성 컨텍스트와 쓰기...
“개발자의 진짜 실력은 ‘가장 완벽한 구조’를 만드는 것이 아니라 현재 상황에서 ‘가장 타당한 최선의 선택’을 내리는 데 있습니다.” 프로젝트 규모가 확장됨에 따라 발생하는 서비스 간 순환 참조(Circular Dependency) 문제를 퍼사드 패턴을 통해 어떻게 해결했는지 그리고 왜 이 방식이 가장 효과적인 전략인지 정리해 보았습니다. 1...
“인증은 단순히 문을 여는 것이 아니라, 사용자가 누구인지 안전하고 효율적으로 증명하는 과정입니다.” 전통적인 세션 방식과 현대적인 JWT 방식의 차이를 이해하고 스프링 부트에서 이를 처리하는 효율적인 도구들을 정리해 봅니다. 1. Session vs JWT: 상태를 기억할 것인가 들고 다닐 것인가? Session 방식 (Stateful) ...
“스프링의 자동화 뒤에 숨겨진 원리를 이해하면, 더 견고한 아키텍처를 설계할 수 있습니다.” 스프링 부트의 빈 등록 원리, 의존성 주입의 우선순위, 그리고 클라이언트 친화적인 예외 처리 전략을 한 페이지에 정리했습니다. 1. Spring Bean 등록과 스캔의 원리 스프링은 어노테이션을 통해 객체의 생명주기를 관리합니다. @Compon...