프로젝트에 참고한 책: '스프링 부트와 AWS로 혼자 구현하는 웹 서비스'

코드에서 같은 부분이 반복된다면 수정시 반복되는 모든 부분을 찾아 수정을 해야하는 상황이 발생할 수 있다. 

따라서 이 프로젝트에서 개선해야하는 부분을 찾아서 개선하려고 한다 

-프로젝트에서 개선해야할 부분()

해당 코드는 IndexController에 있는 Index()메소드의 코드인데, index 메소드 외에 다른 컨트롤러와 메소드에서 세션값이 필요하면 그때마다 직접 세션에서 값을 가져와야한다. 따라서 이부분을 개선할 @LoginUser 어노테이션을 만들어보도록 하자

1. @LoginUser

config/auth 패키지에 해당 어노테이션을 작성한다

코드작성은 간단하다 

 

2. LoginUserArgumentResolver

@LoginUser 어노테이션이 기능할 수 있도록 해당 클래스를 같은 패키지에(config/auth) 생성한다 

이는 HandlerMethodArgumentResolver라는 인터페이스를 구현한 클래스이다

HandlerMethodArgumentResolver는 한 가지 기능을 지원하는데, 해당 구현체가 지정한 값으로 해당 메소드의 파라미터로 넘길 수 있다

 

 

-supportParameter()

컨트롤러 메소드의 특정 파라미터를 지원하는지 판단한다

첫째로 파라미터에 @LoginUser 어노테이션이 붙어 있고, 

두번째로 파라미터 클래스 타입이 SessionUser.class인 경우 true를 반환한다 

예를 들면 (@LoginUser SessionUser user)인 경우 기능한다

 

-resolveArgument

파라미터에 전달할 객체를 생성한다

세션에서 객체를 가져온다

 

3. WebConfig

LoginUserArgumentResolver가 스프링에서 인식될 수 있도록 WebMvcConfigurere에 추가하는 과정이다

config패키지에 WebConfig를 생성한다 

 

모든 과정이 끝났다면 @LoginUser 어노테이션으로 코드를 개선하면 된다 

 

개선 전 코드

개선 후 코드 

+ Recent posts