프로그래밍/Spring

    mock() vs @Mock vs @MockBean 이제 그만 헷갈리자!

    테스트를 수행하다보면, 실제 객체를 대신해주는 테스트용 객체를 생성해 줄 때, mock을 사용하게 됩니다. 이때마다 사용했던 mock() 과 @Mock 그리고 @MockBean 세가지에 대해 정리해보겠습니다. Mockito.mock() Mockito.mock() 메서드를 사용하면 클래스 또는 인터페이스의 mock 객체를 생성할 수 있습니다. 또한 mock 객체를 사용해, 해당 객체가 가진 메서드의 반환값을 조작하거나 해당 메서드가 호출되었는지 확인할 수 있습니다. @Test public void UserRepository를mocking하고_count메서드가실행되면_모킹한값을리턴한다() { UserRepository localMockRepository = Mockito.mock(UserRepository...

    Spring Data Common 모듈 에서의 디자인 패턴

    Spring Data Common 개요 Spring Data Common 에서 Repository를 추상화해서 통해 얻고자 하는 목표는 다양한 영속성 저장소(RDBMS, NoSQL 등등..)에 대한 데이터 접근 계층을 구현할 때 필요한 상용구 코드의 양을 크게 줄이는 것 입니다.(Connection과 관련된 코드 등등..) Repository Spring Data Common 에서 Repository 추상화의 핵심 인터페이스는 Repository 입니다. 이 인터페이스는 관리할 도메인 클래스와 도메인 클래스의 ID 유형을 type arguments(Repository 와 같은 형식)로 받습니다. Repository 인터페이스는 주로 작업할 유형을 캡쳐하고, 이 인터페이스를 확장하는 인터페이스를 찾을 수 ..

    Micro Service에서 WebFlux의 장점

    마이크로 서비스에서 WebFlux의 장점을 알아보기에 앞서, 기존에 자주 사용되었던 아키텍처 방식인 모놀리딕 아키텍처 환경에 대해 간단하게 알아보고 그 문제점에 대해 얘기해 보겠습니다. Monolitic Architecture 소프트웨어의 모든 구성요소가 한 프로젝트(모듈)에 통합되어 있는 형태. 모놀리식 아키텍처의 경우 모든 프로세스가 긴밀하게 결합되고 단일 서비스로 실행됩니다. 따라서 애플리케이션의 한 프로세스에 대한 수요가 급증하면 해당 아키텍처 전체를 확장해야 합니다. 코드 베이스가 증가하게 되면 모놀리식 애플리케이션의 기능을 추가하거나 개선하기가 더 복잡해집니다. 이러한 기존 모놀리딕 아키텍처 환경은 여러 문제점들이 있었습니다. 하나의 모듈이 변경되어도 전체 서버를 배포해야 했습니다. 작은 기능..

    Spring WebMVC VS WebFlux

    webMVC 스프링의 WebMVc는 동시 접속 사용자 처리를 위해 블로킹 IO 모델을 활용합니다. 이는 처리 가능한 동시 접속자의 수만큼 스레드를 생성해 각각의 스레드가 요청이 완료될 때까지 점유 되어있는 상태로 존재하며 클라이언트에게 요청에 대한 응답을 돌려줄 때 해당 스레드가 다시 가용한 상태로 전환되는 방식입니다(Tomcat의 Thread Pool) webFlux 스프링 WebFlux는 비동기, 논블로킹 형태로 구성되어 있습니다. 클라우드 환경을 기반으로 한 IT 서비스 인프라 환경이 늘어나기 시작하면서 웹 서비스아키텍처 구축 시 더 적은 자원으로 더 빠르게 서비스를 제공하려는 수요가 늘어나기 시작했고, Node.js에서는 이벤트 루프를 활용한 Non-Blocking IO를 선보이면서 웹 서비스 아..