목록2021/09 (3)
훈훈훈
Introduction WebClient 를 사용하여 외부 API 를 Mock 기반 테스트를 할 때, response 값에 대한 stub 객체를 만드는 방법에 대하여 정리해보려고 한다. 전체 코드는 Github 에서 확인할 수 있다. Problems 일반적으로 Mockito 를 사용할 때 아래와 같은 방법으로 stub 객체를 만들 수 있다. ( Mockito 는 BDD 방식을 지원하기 때문에 when( ) 대신 좀 더 가독성이 좋은 given ( ) 을 사용하였다. ) given(webClientWrapper.get() .uri("http://localhost:8080/test") .retrieve() .bodyToMono(String.class) .block() ).willReturn("ok"); 하지..
Introduction 이번에는 Mybatis 와 JPA 를 동시에 적용한 환경에서 어떤 transactionManager 를 사용해야되는지 살펴보려고 한다. 해당 글은 스프링에서 트랜잭션을 담당하는 핵심 인터페이스인 PlatformTransactionManager 를 먼저 정리 후, Mybatis 그리고 JPA 에 대한 내용을 정리하는 순서로 작성하였다. PlatformTransactionManager 스프링 트랜잭션 추상화의 핵심 인터페이스이다. 모든 스프링 트랜잭션 기능과 코드는 이 인터페이스를 통해 트랜잭션 서비스를 이용할 수 있다. 아래는 해당 인터페이스에 정의 된 메서드 목록이다. getTransaction( ) 메서드는 트랜잭션 속성에 따라 새로 생성하거나 진행 중인 트랜잭션에 참여하거나, ..
Replication 이란 ? 데이터베이스의 부하를 분산시키는 방법 중 하나이다. Write 관련 작업들은 Master DB 에서 처리를 하고 Read 관련 작업들은 Slave DB 에서 처리를 통해 부하는 분산 시키는 전략이다. 대부분의 서비스들은 Read 관련 작업들이 많기 때문에 Slave DB 를 여러 대 두어 분산시킬 수 있다. 단, 주의할 점은 Replication 은 짧은 시차가 존재한다는 점이다. Master 와 Slave 간의 Sync 를 맞추는 간격 사이에서 데이터의 정합성이 깨질 수 있다. 따라서 Master 에서도 읽기 작업이 필요한 순간들이 있다. 코드구현 Java 는 JDBC 커넥션 객체의 Connection.setReadOnly(true | false) 메소드를 통해 Repli..