전에는 비로그인 인증을 이것저것 어렵게 했었는데 아래코드를 봐보자!
    @GetMapping("/")
    public String homeLoginV3ArgumentResolver(@Login Member loginMember, Model model) {
        //세션에 회원 데이터가 없으면 home
        if (loginMember == null) {
            return "home";
        }
        //세션이 유지되면 로그인으로 이동
        model.addAttribute("member", loginMember);
        return "loginHome";
    }
@Login 이라는 커스텀 어노테이션을 만들어서 비로그인 회원인지를 파악하고 있다. 어떻게 한걸까?!
아래는 커스텀 어노테이션이다.
@Target(ElementType.PARAMETER) // 파라미터에 붙힐 것이니!
@Retention(RetentionPolicy.RUNTIME) // 실제 동작할때까지 작동해야하므로!! 대부분 RUNTIME임.
public @interface Login {
}
mvc 1편에서 봤었던 수많은 resolver들을 기억하는가?! HandlerMethodArgumentResolver를 구현하여 커스텀 한것이다. 흔히 support() 함수로 해당 리졸버가 적용되도 되는지에 대해 bool로 판단하고, 맞으면 아래의 resolveArgument()를 실행했었다!
@Slf4j
public class LoginMemberArgumentResolver implements HandlerMethodArgumentResolver {
    @Override
    public boolean supportsParameter(MethodParameter parameter) {
        log.info("supportsParameter 실행");
        
				// Login 어노테이션이 파라미터에 있는가?
        boolean hasLoginAnnotation = parameter.hasParameterAnnotation(Login.class);
        // Member class의 타입인가?
        boolean hasMemberType = Member.class.isAssignableFrom(parameter.getParameterType());
				// 둘다 만족하면~?
        return hasLoginAnnotation && hasMemberType;
    }
		// supportsParameter가 참이면 아래 함수 실행. 
    @Override
    public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
        log.info("resolveArgument 실행");
				
				// 여기서 세션에 회원이 있는지 없는지 다 파악중!
        HttpServletRequest request = (HttpServletRequest) webRequest.getNativeRequest();
        HttpSession session = request.getSession(false);
        if (session == null) {
            return null;
        }
        return session.getAttribute(SessionConst.LOGIN_MEMBER);
    }
리졸버 인터페이스 들어가보면 support()가 true일 경우에만 아래의 resolveArgument()을 실행한다고 적혀있음!! 프레임워크가 보장해준다. (Spring 내부 구현이 관리)

WebConfig에 addArgumentResolvers를 오버라이드 해주면서 우리가 추가한 resolver를 추가하면 된다!
@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
        resolvers.add(new LoginMemberArgumentResolver());
    }