Replies: 2 comments 2 replies
-
|
Beta Was this translation helpful? Give feedback.
2 replies
-
오 확실히 개발하기 편하고 좋게 해주셨네요 감사합니다 세연님~! |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
회원 인터페이스 제공
회원을 사용하면서 필요한 빠른 개발과 편의성을 위해 인터페이스를 제공하고자 했습니다.
또한, 테스트에서도 어노테이션만 추가하시면 기존 테스트 코드에서 특별한 추가 없이 사용할 수 있습니다.
Overview
main source에는
@Auth AuthMember
(이하사용자 정보 어노테이션
이라 한다.)을 사용하면 사용자의ID
,nickname
값을 사용할 수 있습니다.또한, 각각의 controller test에 테스트에 대한 전반적인 변경 사항을 적용 시켜 놓았습니다.
ItemControllerTest
에는 하나의 예시로 모두 적용하여 넣어 놓았으니 참고하시면 됩니다.WithoutFilterSupporter
클래스는 현재 작성된 모든 controller 테스트 코드에 적용하였으니 그대로 사용하면 되고, 추가로 Controller 테스트 클래스를 생성한다면 넣어주시면 됩니다.이제 주의 점으로는 각 테스트 메서드를 작성하실 때 @WithMember만 추가해주시면 Controller에 작성된
사용자 정보 어노테이션
에 값이 자동으로 바인딩이 됩니다.회원 어노테이션 추가 (Source)
Usecase
@Auth
와AuthMember
를 같이 사용해야 받아올 수 있습니다.사용자 정보 어노테이션
은 파라미터에만 있으면 자동으로 값이 바인딩이 됩니다. 다만, 다른 곳에서 작성하신다면 값을 넣을 수 없습니다.Filter 기능 추가 (Source)
Usecase
WebConfig.java
파일에 만약 filter를 건너뛰고 싶은 기능이 있다면 해당 pathResolver에 추가해주시면 됩니다.인증 작업이 필요 없는
경우에 사용할 수 있습니다.[추가]
Path (Source)
기본적으로 모든 path는 필터를 거치게 하였습니다 따라서 uri 접근을 인증 없이 허용하고자 하면
permitAll
이나permitOne
을 넣어야 합니다.authentication
또한 존재하는데, 추후에 admin과 같은 다른 인증 작업에 사용될 예정입니다.uri
: 적용하고자 하는 uri, Ex) "/members"httpMethods
: 적용하고자 하는HttpMethod
httpMethod
: 하나의 메소드를 추가하고자 하면 httpMethods, httpMethod 둘 다 사용 가능GET
,POST
,PUT
,PATCH
,DELETE
제공roles
: 적용하고자 하는Role
role
: 하나의 role을 추가하고자 하면 roles, role 둘 다 사용 가능Paths (Source)
위 Path를 관리하는 PathReslver와 연결해주는 클래스입니다.
permitAll
: 전체를 적용하고자 할 때 사용합니다.permitOne
: 하나의 path에 대해서만 적용하고자 할 때 사용authentications & authentication
: 추가 인증을 적용하고자 하는 작업에 사용예정Supporter 클래스 (Test)
아래 클래스들은 테스트의 편의성을 위해 제공해드립니다.
이후, 모든 테스트 코드에서
헤더
or쿠키
에 인증 관련 토큰이나 값을 전달하지 않고 진행할 수 있습니다.@WithMember (Test)
회원 어노테이션 클래스입니다. 이전에는 Filter에서 인증 작업을 진행한 후 인가 작업을 진행했지만, 통합 테스트에서 Filter를 제외하면서 따로 인가 작업을 넣어줘야 했는데, 위
@WithMember
의 경우 자동으로 값을 넣어주는 역할을 진행하게 됩니다.따라서
*Controller
테스트를 진행하면서ThreadLocal
에 AuthorizationMember에 대한 값을 자동으로 저장하기 위한 어노테이션입니다.위 기능을 통해, 테스트 메서드마다 ThreadLocal에 인가 정보를 넣어주고
mockMvc
에서 controller의 파라미터로 값을 넣어주지 않아도 됩니다.@WithMember
를 사용할 때는@ExtendWith(FilterProcessExtension.class)
를 추가해주셔야 합니다.Usecase
@WithMember
를 사용 가능하며, 값을 가지고 올 수 있습니다.마지막에 위치
해야 합니다.AuthorizationMember를 가지고 오지 않아도 사용 가능합니다.
AuthorizationMember를 json으로 변환하여 따로 넣지는 않았습니다.
Controller에서는 위와 같이 넣어주시고
테스트를 진행하면 위와 같이 값이 자동으로 바인딩이 됩니다.
Filter 적용 Support 클래스 (Test)
WithoutFilterSupporter
,WithFilterSupporter
두 개의 클래스를 제공합니다.제공 목적
통합 테스트에서 테스트를 진행할 때 Filter를 적용시키지 않고 테스트를 진행하거나 Filter를 포함한 통합테스트를 진행할 수 있도록 지원해주는 클래스입니다.
아마
WithoutFilterSupporter
만 사용하시면 될 것 같습니다.테스트 지원 클래스인 만큼 하나의
@SpringBootTest
어노테이션과@WebMvcTest
어노테이션을 커스터마이징하여 processor를 만들어 하나의 어노테이션으로 모든 것이 되도록 지원할 예정이었나, 생각보다 코드가 방대해져서@WithMember
+WithoutFilterSupporter
로 분할하여 제공해 드리는 점 양해 부탁 드립니다.(재윤님이 말씀해주셨던 Test클래스에서
@SpringBootTest
와@WebMvcTest
등이 보이지 않는 거에 대한 가독성 및 테스트 명확성 등에 대한 피드백 감사합니다!)WithoutFilterSupporter
@WebMvcTest
or@SpringBootTest
어떤 걸 사용해도 상관 없습니다.WithoutFilterSupporter
만 적용 시켜주면 됩니다.사용자 정보 어노테이션
에 값이 바인딩되기 위해서는 @WithMember를 추가해주셔야 합니다.WithFilterSupporter
아마 사용하지 않을 거 같아서 자세하게 작성하지는 않겠습니다.
WithFilterSupporter
의 경우@SpringBootTest를 같이 제공해주다 보니
따로 사용하면 안됩니다.다시 한 번 강조
테스트에서 Filter없이 사용하여 통합 테스트를 할 경우
와 같이
WithoutFilterSupporter
를 통해 filter를 없애고, @WithMember를 통해 Controller에 작성된사용자 정보 어노테이션
에 값이 자동으로 바인딩되게 됩니다.@WithMember vs @CurrentMember
@WithMember의 경우 필터를 적용시키지 않는 테스트 코드에서 ThreadLcoal에 값을 넣어주는 역할을 자동으로 해주게 됩니다.
해당 어노테이션을 사용하면 테스트 코드에서 mockMvc에 AuthorizationMember에 대한 코드를 작성할 필요가 없게 됩니다.
@Auth 의 경우 Main source에서만 사용하면 됩니다.
위 기능은 Controller의 파라미터에
사용자 정보 어노테이션
을 작성하게 되면 ThreadLocal에서 저장했던 인가 정보(ID, nickname)를 받겠다는 하나의 확인용 어노테이션이라고 생각하면 될 거 같습니다.참고로, 인가 정보를 받기 위해서는 @CurrentMember와 AuthorizationMember 둘 다 필요합니다.
따라서 @WithMember와 @AuthMember둘 다 사용하는 의도가 유사할 수 있으나 다릅니다.
마무리
추가 적인 질문 사항이나 변경 요청 사항은 아래에 작성해주시면 될 거 같습니다.
사실 이렇게만 제공하려 했다면 좀 더 일찍 끝낼 수 있었는데, 어노테이션 하나에 집착하여 Processor를 시도하다 보니 조금 늦어진 점 죄송합니다.
Beta Was this translation helpful? Give feedback.
All reactions