spring12 Spring Data JPA - Write, Read Only 분리 적용하기 - 2. 무력화 되는 경우 이전 포스팅을 통해 Spring Data JPA를 사용하면서 AbstractRoutingDataSource, LazyConnectionDataSourceProxy를 사용하여 Write, Read Only DB를 분리하여 사용하는 방법의 원리를 알아보았다. 그럼 이 설정을 무력화하려면 어떻게 하면될까? 앞서 봤던 설정의 핵심은 LazyConnectionDataSourceProxy를 사용하여 DataSource로 부터 Connection을 가져오는 타이밍을 늦추는 것이었다. 그럼 이를 무력화 할 수 있는 방법은 Transaction이 시작되자마자 DataSource로부터 Connection을 가져와 이를 직접 사용하게 만드는 것이다. 이러한 방법 중에 당장 테스트해볼 수 있는 방법은 기존 설정에 p6spy를.. 2021. 12. 18. Spring Data JPA - Write, Read Only 분리 적용하기 - 1. 설정 및 원리 프레임워크를 사용하여 비지니스 로직이 아닌 특정한 기술을 구현하려면 프레임워크 내부에 대한 충분한 이해가 필요하다.구글링을 통해 해당 기능의 코드를 알아내더라도 정확하게 내부적인 동작 원리를 아는 것이 좋다는 뜻이다.그렇지 않다면 해당 코드 관련해서 이슈가 생겼을 때 원인을 파악하고 적절한 조치를 취하기가 어렵거나 불가능할 수도 있다. 이번 포스팅에서는 Spring Data JPA를 사용할 때 DB의 부하를 분산시키기 위해 주로 사용하는 기법인@Transactional에 readonly=true 옵션을 줬을 때 Read Only(Secondary) DB를 사용하고, 그렇지 않은 경우(쓰기를 할 때) Write(Primary) DB를 사용하는 방법에 대해 설정과 내부적인 원리를 알아보고,다음에는 이 설정을.. 2021. 12. 17. Testcontainers MongoDB init script 실행하기 통합 테스트를 하다보면 가끔씩 인프라에 대해 init script(초기화 스크립트)를 작성하고 실행해야할 때가 있다. 이번 포스팅에서는 Spring Application에서 통합 테스트 시 테스트 인프라를 설정하기 위해 자주 사용되는 Testcontainers와 DB Module 중 하나인 MongoDB Module을 사용했을 때 초기 데이터를 위해 init script를 어떻게 실행할지에 대해 알아보도록 하겠다. (예제는 여기에서 확인할 수 있다.) 프로젝트 생성 Spring Boot 프로젝트를 아래와 같이 Spring Data MongoDB, Testcontainers 의존성을 추가하고 생성한다. 예제 도메인 클래스 추가 프로젝트 생성 후 MongoDB에 저장할 도메인 클래스를 추가하자 import .. 2021. 10. 29. Spring Security 인증 기본 구조 Spring Security의 인증에 사용되는 기본 구조와 component에 대해서 알아보도록 하자. (Spring Security는 인증 및 보안과 관련하여 관련하여 많은 기능들을 담고 있으나 여기서는 인증 관련하여 기본 구조만 알아보도록 하겠다) AuthenticationFilter 인증(authentication) 요청을 Spring Security에서 처리할 수 있도록 Authentication 객체로 변환시킨 뒤 이를 AuthenticationManager로 처리를 위임한다. AuthenticationManager에서 처리 후 Filter에서 성공/실패에 대한 응답을 핸들링을 한다. AuthenticationManager (implementation: ProviderManager) Authen.. 2021. 7. 18. Spring JPA Querydsl 세팅 (with Kotlin) Spring Data JPA를 사용한 Spring Boot 프로젝트 기반으로 코드를 작성할 때 Command 작업은 큰 문제는 없지만 집계와 같은 Query 성 작업은 JPA 로는 어느정도 한계가 있다. JPQL을 사용할 순 있겠지만 String base로 코드가 작성되기 때문에 작업을 하면서 실수가 날 여지가 있고 직접 실행하지 않는 이상 이 실수를 알기 힘든 경우가 있다. Querydsl 를 사용하면 이러한 JPQL의 단점을 보완할 수 있다. Querydsl 에서 생성해준 컴파일 된 코드 기반으로 쿼리를 작성하기 때문에 일단 쿼리 작성 자체가 매우 쉬워지고 컴파일 시점에서 오류 또한 찾을 수 있다. 이번 포스팅은 Kotlin 기반의 Spring Boot 프로젝트에 JPA 기반 Querydsl 을 세팅.. 2021. 6. 7. Rest Assured 테스트 시 redirect 막기 Rest Assured 를 사용하여 서버에 요청을 보낼 때 Spring Web application 에서 Found 와 같은 Redirect 응답을 하면 Controller 리턴하는 Redirect 응답이 오는 것이 아니라, Redirect 처리가 되어 Location header의 URL로 요청을 보낸 응답이 와서 assertion이 실패되는 케이스가 있었다. 에를 들어 Controller 에서 아래와 같이 Redirect 에 대한 ResponseEntity 를 응답할 때 Rest Assured 에서는 https://devs0n.tistory.com/ 에 대한 응답을 받는 것이다. ResponseEntity .status(HttpStatus.FOUND) .location(URI.create("https.. 2021. 6. 3. 이전 1 2 다음