Filter vs Interceptor vs AOP — 어디서 무엇을 처리해야 할까
배경 Spring을 사용하다 보면 공통 로직을 어디에 넣어야 할지 고민하게 된다. 인증 처리 로깅 예외 처리 권한 검사 처음에는 단순하게 “한 곳에서 처리하면 되지 않을까?”라고 생각했지만 실제로는 Filter / Interceptor / AOP 각각의 역할이 명확히 다르다는 걸 알게 됐다. 특히 JWT 인증을 적용하면서 이 ...
배경 Spring을 사용하다 보면 공통 로직을 어디에 넣어야 할지 고민하게 된다. 인증 처리 로깅 예외 처리 권한 검사 처음에는 단순하게 “한 곳에서 처리하면 되지 않을까?”라고 생각했지만 실제로는 Filter / Interceptor / AOP 각각의 역할이 명확히 다르다는 걸 알게 됐다. 특히 JWT 인증을 적용하면서 이 ...
배경 혼자 개발할 때는 크게 체감하지 못했는데, 프로젝트를 진행하면서 코드 컨벤션과 GitHub 규칙의 중요성을 확실히 느꼈다. 처음에는 단순히 “코드를 보기 좋게 만드는 규칙” 정도로 생각했는데, 실제로는 그보다 훨씬 중요한 역할을 하고 있었다. 코드 컨벤션은 단순한 스타일이 아니다 코드 컨벤션은 단순히 들여쓰기나 네이밍 규칙이 아니다. ...
배경 기존 프로젝트는 전형적인 세션 기반 인증 구조였다. 로그인 시 세션 생성 서버가 인증 상태를 기억 이후 요청은 세션으로 인증 처리 기능적으로는 문제 없었지만 구조적인 한계가 명확했다. 서버가 상태를 들고 있어야 함 확장 시 세션 공유 필요 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. 퍼사드(F...