Spring

    [Spring] ContextCaching 으로 Test 성능 개선하기 (@MockBean, @SpyBean)

    [Spring] ContextCaching 으로 Test 성능 개선하기 (@MockBean, @SpyBean)

    예제 및 테스트 코드는 github 에서 확인 가능합니다. Spring Test 에서 ApplicationContext 캐싱하기안녕하세요 Spring 환경에서 테스트시에 테스트 코드가 늘어남에 따라 테스트 수행시간이 오래걸리는 경우를 한번쯤 겪어보셨을텐데요.일반적으로는 테스트시 @SpringBootTest 를 이용하게 되면 스프링의 ApplicationContext 에 있는 모든 Bean 을 띄우게 됩니다. 이 과정에서의 소요시간이 상당합니다. 만약 테스트마다 ApplicationContext 를 새로 띄우게 되면 그만큼 시간이 더 오래 소요될텐데요. 스프링에서는 이런 문제가 없기 위해 Context Caching 이라는 개념이 존재합니다.테스트시 ApplicationContext 를 캐싱해서 재사용하는..

    [Spring] @Component vs @Configuration

    [Spring] @Component vs @Configuration

    예제 및 테스트 코드는 github 에서 확인 가능합니다. @Component VS @Configuration안녕하세요. 스프링을 사용하면서 위의 두 어노테이션을 자주 사용하고 계실텐데요.저도 마찬가지로 두 어노테이션을 자주 사용하지만 Bean 으로 선언하거나 생성할 수 있다는 것만 알고있었지둘 사이에 어떤 차이가 있는지 그리고 어떤 상황에 사용해야 할지에 대해서는 잘 알고있지 못했습니다.그래서 둘 사이의 용도 그리고 동작방식에 어떤 차이가 있는지 좀 더 알아보기 위해 글을 작성하게 되었습니다. @Component먼저 @Component 에 대해 간단하게 어떤 어노테이션인지 알아보겠습니다.스프링 공식문서에서는 @Component 를 다음과 같이 이야기 합니다.Indicates that the annot..

    [Spring] Transactional REQUIRES_NEW 옵션에서 예외 및 Rollback

    [Spring] Transactional REQUIRES_NEW 옵션에서 예외 및 Rollback

    예제 및 테스트 코드는 github 에서 확인 가능합니다. 트랜잭션 REQUIRES_NEW 옵션에서의 예외 및 롤백 Overview 이번에는 스프링 환경에서 @Transactional 의 Propagation 옵션인 REQUIRES_NEW 와 해당 옵션을 사용할때의 예외/롤백에 대해 알아보겠습니다. 우선 트랜잭션 전파(Transaction Propagation)에 대해 먼저 알아보겠습니다. 트랜잭션 전파는 한 트랜잭션이 실행중에 다른 트랜잭션을 실행할 경우 어떻게 동작할지를 결정 하는것입니다. 트랜잭션 전파의 종류는 다음과 같습니다. REQUIRED (Default) REQUIRES_NEW SUPPORTS NOT_SUPPORTED MANDATORY NEVER NESTED 전파옵션의 기본값은 REQUIRE..

    [Spring] 서로 다른 테스트 클래스에서 테스트 데이터를 공유하는 방법

    [Spring] 서로 다른 테스트 클래스에서 테스트 데이터를 공유하는 방법

    예제 및 테스트 코드는 github 에서 확인 가능합니다. 스프링에서 여러 테스트 클래스에서 테스트 데이터를 공유하는 방법 이번에는 Spring 환경에서 서로 다른 테스트 클래스에서 데이터를 공유하는 방법에 대해 소개해드리려 합니다. Spring Integration Test 를 작성하다 보면 테스트를 위한 데이터를 세팅하는 과정, 혹은 테스트를 위한 선행 작업 or 전처리 작업이 필요한 경우가 있습니다. 이때, 일반적으로 많이 사용하는 방법으로는 @BeforeEach, @BeforeAll 과 같은 JUnit 라이프 사이클 어노테이션을 많이 이용하게 됩니다. @BeforeEach 의 경우 테스트 마다 매번 실행되기에 테스트 간의 격리를 할 수 있어 보다 신뢰성 있는 테스트를 할 수 있다는 장점이 있지만 ..

    SpEL(Spring Expression Langauge) 사용법 + 어노테이션에 SpEL로 값 전달하기

    SpEL(Spring Expression Langauge) 사용법 + 어노테이션에 SpEL로 값 전달하기

    예제 및 테스트 코드는 github 에서 확인 가능합니다. Spring Expresion Language(SpEL) 이란? 스프링 공식 문서에서는 SpEL을 다음과 같이 설명합니다. SpEL은 런타임 시 객체 그래프 쿼리 및 조작을 지원하는 강력한 표현언어이다. 출처: https://docs.spring.io/spring-framework/docs/3.2.x/spring-framework-reference/html/expressions.html Type Operators Arithmetic +, -, *, /, %, ^, div, mod Relational , ==, !=, =, lt, gt, eq, ne, le, ge Logical and, or, not, &&, Conditional and, or, ..