분류 전체보기196 Querydsl 적용한 Repository에 @DataJpaTest 적용하기 @DataJpaTest를 사용하면 Querydsl이 적용된 Repository가 @Autowired되지 않는다. 기본적으로 @DataJpaTest는 JPA와 관련한 설정만 적용해주기 때문이다. 그러나 Querydsl을 사용하면 JpaRepository에 추가적으로 @Repository 애너테이션을 이용해 Spring Bean으로 등록한 QRepository를 적용시켜줘야 한다. @DataJpaTest는 Bean등록을 하지 않기 때문에 Repository에 적용될 QRepository의 등록이 이루어지지 않고, 따라서 @Autowired도 실패하는 것이다. 그럼 Bean을 등록해주면 해결되지 않을까? Bean 등록을 위해서는 Configuration을 이용해야 한다. 기본적으로 Spring Context에.. 2023. 12. 8. @BeforeEach vs @BeforeAll - 한 테스트 클래스에 여러 개의 테스트가 있으면 반드시 동시에 돌려봐야 하는 이유 / @TestInstace 테스트를 하기 전에, 뭔가 밑작업을 해놓고 싶을 수 있다. 그 때 사용하는 대표적인 애너테이션 두 개가 바로 @BeforeEach와 @BeforeAll이다. 이름만 봐도 알 수 있듯이, @BeforeEach는 각 테스트 메서드가 수행되기 전에 매 번 수행되고, @BeforeAll은 전체 메서드가 수행되기 전에 한 번 수행된다. 이번에 Spring Security 통합 테스트를 진행하면서, @BeforeAll을 사용해 볼 기회가 생겨 기록으로 남긴다. 기존에 사용하던 테스트 set up 코드는 아래와 같았다. @BeforeEach void setUp(){ String email = "jk@gmail.com"; String password = PasswordEncoderFactories.createDeleg.. 2023. 12. 8. Pull Request 022. 사용자 인증 및 권한 확인 기능 TDD로 구현하기 - Spring Security 설정 마무리 지난 글에서 사용자 로그인 기능까지 마무리했다. 이번에는 사용자 인증 기능을 구현하면서 Spring Security 적용을 마치고자 한다. 물론, 이후 로그아웃 구현에서 또 등장하긴 하겠지만... 아무튼 귀찮은 설정은 끝난다. 일단은 테스트 먼저 작성해보자. 테스트하고자 하는 점은 다음과 같다. 인증되지 않은 사용자도 조회는 가능하다. 그러나 게시글이나 댓글의 작성, 수정, 삭제는 불가능하다. 인증된 사용자는 위의 모든 기능의 이용이 가능하다. 해당 조건을 테스트하기 위해서는 세 가지 부분을 테스트해야 한다. 인증되지 않은 사용자가 조회 요청을 보냈을 때 조회가 가능해야 한다. 인증되지 않은 사용자가 등록 요청을 보냈을 때 거절되어야 한다. 인증된 사용자가 등록 요청을 보내면 수락되어야 한다. 이제 테스.. 2023. 12. 7. 테스트를 실행은 하고 싶은데 빌드에서는 제외하고 싶을 때 통합 테스트를 진행하면서 가장 걱정되는 부분은 배포 및 배포 자동화를 진행했을 때는 이 테스트들이 수행되면서 데이터베이스를 건들 것 같다는 점이었다. 또한 통합 테스트 메소드가 많아지면 많아질 수록 빌드에는 더욱 많은 시간이 들어갈 것이었다. 그렇다고 통합 테스트를 해보지 않을 수도 없었다. Spring Security가 잘 적용되는지를 알아봐야했다. 따라서 빌드에서는 해당 테스트를 빼고, 대신 테스트가 수행되게는 하고자 시도해봤다. 가장 먼저 수행해 본 방법은 build.gradle에서 아예 해당 테스트가 빌드에서 빠지게 설정한 방법이었다. 이렇게 설정하고 테스트를 수행하니 다음과 같은 결과가 나왔다. 우리가 수행하는 test는 기본적으로 gradle 기반으로 수행된다. 그런데, gradle빌드에서 해.. 2023. 12. 7. [12/6 TIS] @AuthenticationPrincipal 사용기 - null 해결법 사실 저 애너테이션을 너무너무 써보고 싶었다. 부트캠프에서 프로젝트를 진행할 때부터, 저 애너테이션으로 사용자 정보를 한 번에 가져올 수 있다면 얼마나 좋을까 생각했다. 왜? 나는 안되니까... 정말 많은 글들에서 Spring Security를 적용하면 해당 애너테이션을 통해 사용자 정보를 가져올 수 있다고 한다. 그런데 내가 하면 안됐다. 정확히는 넘어와야 할 객체가 항상 null이었다. 오늘은 이 문제를 해결하고 직접 사용해보자. @PostMapping public ResponseEntity postFreeBoard(@AuthenticationPrincipal Member writer, @RequestBody FreeBoardDto.Post dto) { FreeBoardDto.Response resp.. 2023. 12. 6. 이전 1 ··· 5 6 7 8 9 10 11 ··· 40 다음 반응형