Spring의 Argument Resolver 이해하기

2025. 2. 18. 19:30·프레임워크/Spring
728x90
반응형


1.  Argument Resolver 소개

Argument Resolver는 Spring MVC에서 컨트롤러 메서드의 파라미터를 유연하게 처리할 수 있게 해주는 강력한 기능입니다. 이를 통해 개발자는 요청 데이터를 원하는 형태로 가공하여 컨트롤러에 전달할 수 있습니다.


2.  Argument Resolver의 역할

  • HTTP 요청 데이터 변환: 요청의 파라미터, 헤더, 바디 등을 원하는 객체로 변환합니다.
  • 공통 로직 처리: 인증 정보 추출, 데이터 검증 등의 공통 로직을 처리할 수 있습니다.
  • 코드 중복 제거: 컨트롤러에서 반복되는 로직을 Argument Resolver로 이동시켜 코드 중복을 줄일 수 있습니다.

3.  Argument Resolver 동작 원리

  1. 사용자가 HTTP Request를 보냅니다.
  2. DispatcherServlet이 요청을 받습니다.HandlerAdapter의 Argument Resolver 호출
  3. HandlerMapping을 통해 요청을 처리할 핸들러(컨트롤러)를 찾습니다.
  4. HandlerAdapter가 Argument Resolver를 호출합니다.
  5. Argument Resolver가 요청 데이터를 처리하여 핸들러 메서드의 파라미터로 전달할 객체를 생성합니다.
  6. 핸들러(컨트롤러) 메서드가 실행됩니다.

4.  Argument Resolver 구현 방법

Argument Resolver를 구현하려면 HandlerMethodArgumentResolver 인터페이스를 구현해야 합니다.

public class CustomArgumentResolver implements HandlerMethodArgumentResolver {

    @Override
    public boolean supportsParameter(MethodParameter parameter) {
        return parameter.getParameterType().equals(CustomObject.class);
    }

    @Override
    public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
                                  NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
        // 요청 데이터를 처리하여 CustomObject 생성 및 반환
        CustomObject customObject = new CustomObject();
        // customObject 설정...
        return customObject;
    }
}

 


5.  Argument Resolver 사용 예시

  • 커스텀 어노테이션 정의
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface CurrentUser {}
  • Argument Resolver 구현
public class CurrentUserArgumentResolver implements HandlerMethodArgumentResolver {

    @Override
    public boolean supportsParameter(MethodParameter parameter) {
        return parameter.getParameterAnnotation(CurrentUser.class) != null
                && parameter.getParameterType().equals(User.class);
    }

    @Override
    public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
                                  NativeWebRequest webRequest, WebDataBinderFactory binderFactory) {
        HttpServletRequest request = (HttpServletRequest) webRequest.getNativeRequest();
        return getUserFromSession(request);
    }
}
  • 컨트롤러에서 사용
@GetMapping("/profile")
public String getProfile(@CurrentUser User user) {
    return "User: " + user.getName();
}

6.  마무리

Argument Resolver는 Spring MVC에서 요청 데이터 처리를 유연하게 만들어주는 강력한 도구입니다. 이를 통해 코드의 재사용성을 높이고, 컨트롤러의 책임을 줄여 더 깔끔한 코드를 작성할 수 있습니다. 복잡한 비즈니스 로직이나 공통 처리 로직을 Argument Resolver로 분리함으로써, 개발자는 핵심 비즈니스 로직에 더 집중할 수 있게 됩니다.


 

728x90
반응형

'프레임워크 > Spring' 카테고리의 다른 글

Spring Boot 3에서 Swagger와 H2 Database 사용하기  (1) 2025.02.20
스프링 Filter, Interceptor, AOP 정리  (2) 2024.09.15
'프레임워크/Spring' 카테고리의 다른 글
  • Spring Boot 3에서 Swagger와 H2 Database 사용하기
  • 스프링 Filter, Interceptor, AOP 정리
키큰난쟁이
키큰난쟁이
개발 블로그
    반응형
    250x250
  • 키큰난쟁이
    키큰난쟁이의 놀이터
    키큰난쟁이
  • 전체
    오늘
    어제
    • 분류 전체보기 (38)
      • AI (1)
        • AI 응용 (1)
      • 프로그래밍 언어 (5)
        • Java (3)
        • PHP (1)
        • JavaScript (1)
      • 프레임워크 (3)
        • Spring (3)
      • 서버 (8)
        • Web Server (2)
        • WAS (2)
        • Hypervisor (4)
      • 데이터베이스 (5)
        • MySQL•MariaDB (2)
        • Oracle (1)
        • Cubrid (2)
      • 운영체제 (4)
        • Linux (4)
      • 클라우드 (1)
        • Ncloud (1)
      • 데브옵스 (7)
        • VCS (2)
        • CICD (3)
        • Docker (2)
      • 지식 (2)
        • Web (2)
      • 기타 (2)
        • 일상 (2)
  • 블로그 메뉴

    • 일상
  • 링크

    • Instagram
    • github
  • 공지사항

    • 라이믹스 → 티스토리 이사
  • 인기 글

  • 태그

    애플실리콘
    Apple Silicon
    젠킨스
    자바
    프록시모스
    PROXMOX
    docker
    깃허브
    mariadb
    GitHub
    CI/CD
    마리아디비
    우분투
    리눅스
    도커
    jenkins
    devops
    java
    DBMS
    db
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
키큰난쟁이
Spring의 Argument Resolver 이해하기
상단으로

티스토리툴바