Spring

· Spring
OncePerRequestFilter — “요청당 딱 한 번 실행되는 서블릿 필터”무엇인가요?OncePerRequestFilter는 서블릿 필터의 편의 베이스 클래스로, 한 HTTP 요청 처리 흐름에서 필터가 중복 실행되지 않도록 보장합니다.스프링 MVC의 HandlerInterceptor보다 **더 앞단(서블릿 계층)**에서 동작합니다.언제 쓰나요?요청 입구에서 공통 전/후 처리할 때(예: TraceId 생성/헤더반사, MDC 세팅/정리, CORS/로깅/감사(Audit)/멀티테넌시 등)컨트롤러 진입 전, 응답 반환 후 finally 정리가 필요한 로직장점중복 실행 방지: 내부 guard로 동일 요청에서 한 번만 실행전/후처리 용이: try/finally로 리소스/컨텍스트 정리선택적 스킵: shouldN..
· Spring
MDC란? (Mapped Diagnostic Context)**MDC는 로깅 프레임워크가 관리하는 “쓰레드 로컬 컨텍스트 저장소”**입니다.키-값 형태(traceId, userId, path 등)를 넣어두면, 로거 패턴에서 %X{traceId}처럼 꺼내 모든 로그 라인에 자동 포함시킬 수 있습니다.왜 필요한가동시 처리되는 요청의 로그가 섞여 보이는 문제 해결“이 에러가 어떤 요청에서, 어떤 사용자에게서 발생했는지”를 한 번에 필터링분산 환경(외부 호출, 마이크로서비스)에서 호출 체인 추적 근간 제공핵심 포인트MDC는 쓰레드 로컬입니다.→ 같은 쓰레드에서는 유지되지만, @Async처럼 스레드가 바뀌면 사라져요.→ 그래서 TaskDecorator로 컨텍스트를 복사/전파해야 합니다.반드시 요청 끝에서 MDC를..
오류 코드 (무한 루프)public MemberService(){ private final MemberService instance = new MemberService();}  무한 루프의 동작 원리final 키워드를 사용하면 해당 필드는 생성 시점에 반드시 초기화되어야 합니다.클래스 내부에서 다른 인스턴스를 생성하는 final 변수가 있다면, 이 필드를 초기화하기 위해 생성자가 호출될 때 새로운 인스턴스를 생성하게 됩니다.그런데 new MemberService()로 인스턴스를 생성할 때, 클래스 내에서 또 다른 new MemberService()가 호출되면 무한 재귀가 발생하게 됩니다.즉, 객체가 생성되기 전에 final 필드를 초기화하기 위한 과정에서 또 다른 객체 생성이 발생하므로 무한 루프에 빠지..
· Spring/MVC
HTTP 메서드 매핑 PathVariable(경로 변수)URL 경로에 동일한 패턴의 가변 값을 받아서 처리하기 위할 때 사용/** * PathVariable 사용 * 변수명이 같으면 생략 가능 * @PathVariable("userId") String userId -> @PathVariable String userId */@GetMapping("/mapping/{userId}")public String mappingPath(@PathVariable("userId") String data) { log.info("mappingPath userId={}", data); return "ok";}  특정 조건 매핑파라미터헤더미디어 타입 조건 매핑 - HTTP 요청 Content-Type, consume미디어 타입..
· Spring/MVC
FrontController vs 스프링 MVCFrontController => DispatcherServlethandlerMappingMap => HandlerMappingMyHandlerAdatper => HandlerMappingModelView => ModelAndViewviewResolver => ViewResolverMyView => View  DispatcherServlet부모 클래스에서 HttpServlet을 상속 받아서 사용, 서블릿으로 동작DispatcherServlet => FrameworkServlet => HttpServletBean => HttpServlet스프링 부트는 DispatcherServlet을 서블릿으로 자동으로 등록모든 경로(urlPatterns="/")에 대해서 매..
· Spring/MVC
V1 구조public class MemberControllerV1 implements ControllerV1 { @Override public void process(HttpServletRequest request, HttpServletResponseresponse) throws ServletException, IOException { String viewPath = "/WEB-INF/views/new-form.jsp"; RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath); dispatcher.forward(request, response); }}@WebServlet(name = "frontControllerServlet..
류가든
'Spring' 카테고리의 글 목록