1년 전 MongoDB 4.0 에서 복제셋(ReplicaSet) 내에서 트랜잭션을 지원하기 시작했습니다. MongoDB 4.2이에서는 해당기능을 샤딩(Sharding) 까지 확장했으며 이를 통해 MongoDB를 활용한 개발을 더욱 쉽게 만들었습니다. 스냅샷 격리(Snapshot Isolation), 쓰기에 대한 원자성 ( Write Atomicity ) 그리고 분산 커밋( Distributed Commit) 을 다룰 예정이며 , 분산 트랜잭션을 운영 업무에 적용하기 위해 필요한 모든 것을 배우게 될 것입니다.

Read More

본 글은 Spring 4.3.12의 레퍼런스 문서 에서 @ControllerAdvice@ExceptionHandler 관련 부분을 번역한 글입니다. 부족한 해석이 있다면 피드백 부탁드리겠습니다.

Advising controllers with @ControllerAdvice and @RestControllerAdvice

@ControllerAdvice 애노테이션은 클래스패스 스캐닝을 통해서 자동으로 검출되어지는 구현 클래스를 허용하는 컴포넌트 애노테이션이다. MVC 네임스페이스와 MVC 자바 설정을 사용하면 자동으로 활성화된다.
@ControllerAdvice 선언이 되어 있는 클래스는 @ExceptionHandler@InitBinder, @ModelAttribute 가 선언된 메소드들을 포함한다. 그리고 이 메소드들은 자신들이 선언되어 있는 컨트롤러 계층 구조와는 반대 방향으로 @RequestMapping 메소드들에 적용될 것이다.
기본적으로 @RestControllerAdvice@ExceptionHandler 메소드가 @ResponseBody 로 결과를 반환하고자 하는 곳에 대신 사용할 수 있다.
@ControllerAdvice@RestControllerAdvice 둘 다 컨트롤러들 중에서 일부만 대상으로 삼을 수 있다.

Read More

객체지향의 사실과 오해5장 책임과 메시지의 마지막 부분인 책임의 자율성이 협력의 품질을 결정한다 요약 입니다.

더 나은 설계란?

  • 어떤 협력이 다른 협력보다 이해하기 쉽고 변경에 유연하다고 표현
  • 객체의 책임이 자율적일수록 협력이 이해하기 쉬워지고 유연하게 변경 가능
  • 결과적으로, 책임이 얼마나 자율적인지가 전체적인 협력의 설계 품질을 결정

Read More

Spring MVC Test

  • Spring MVC 컨트롤러와의 상호작용 테스트를 위한 테스팅 프레임워크
  • 웹 환경을 목킹하기 위해서 Servlet API Mock 객체를 제공
    • MockHttpServletRequest - 자바의 HttpServletRequest mock
    • MockHttpServletResponse - 자바의 HttpServeltRequest mock
  • DispatcherServlet
    • 요청들은 Spring MVC의 DistpatcherServelt을 통해서 경로를 찾아감

Read More

Projection 대상이 한 개인 경우

1
2
QItem item = QItem.item;
List<String> result = query.from(item).list(item.name);

여러 컬럼 반환과 튜플

  • Projection 대상으로 여러 필드를 선택
  • com.mysema.query.Tuple 이라는 타입을 사용
    • Map과 유사하게 사용 가능

Read More

Mockito

  • Mockito는 자바 진영에서 테스트를 위해서 사용되는 목킹 프레임워크 중 하나 입니다.
  • Mock 들은 실 객체들을 대체 합니다.
  • Dependency Injection과 궁합이 좋습니다.

Mock 어노테이션

  • @Mock
    • 목을 생성한다
  • @Spy
    • 스파이를 생성한다
  • @InjectMocks
    • 목과 스파이를 클래스에 주입한다
  • @Captor
    • argument를 캡쳐합니다.

Read More

parameterized test

parameterized 테스트를 위해서 의존성을 추가해줍니다.

1
2
3
4
5
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>${junit-platform.version}</version>
</dependency>

Read More

Tag

테스트 클래스에 @Tag 어노테이션을 추가해주는 것 만으로는 아무런 차이가 없습니다. JUnit configuration에서 JUnit 테스트를 만들 때, Test Kind 의 설정 값을 Tags로 설정해줍니다. Tag expression 의 값으로는 @Tag 어노테이션의 value 값을 입력해줍니다.

Nested

@Nested 테스트는 테스트 작성자가 테스트하는 그룹들 간의 관계를 표현하는데 더 유용한 기능을 제공합니다. 오직 static하지 않은 클래스들만 @Nested 테스트 클래스로 제공될 수 있습니다.

Read More

assertAll

  • assertAll​(String heading, Executable… executables)
    • Assert that all supplied executables do not throw exceptions.
    • excutalble 들이 예외를 발생시키지 않을 것이라고 주장

Read More

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×