프로젝트에 참고한 책: '스프링 부트와 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 어노테이션으로 코드를 개선하면 된다
개선 전 코드
개선 후 코드
'개인프로젝트 > My Book' 카테고리의 다른 글
[개인프로젝트 #1] 7. 배포 스크립트 만들기 (0) | 2022.01.28 |
---|---|
[개인프로젝트 #1] 7. ec2에 프로젝트 Clone 받기 (0) | 2022.01.28 |
[개인프로젝트 #1] 5. 로그인 구현(Dto) (0) | 2022.01.27 |
[개인프로젝트 #1] 5. 로그인 구현(SecurityConfig,UserService) (0) | 2022.01.27 |
[개인프로젝트 #1] 5. 구글,네이버 로그인 기능 구현 (0) | 2022.01.27 |