Spring

Spring/Spring

[Spring] 로컬 캐시의 영향 없이 테스트 환경 구축하기

1. 개요 Spring에서 제공하는 로컬 캐시를 사용하면 간단하게 성능을 향상시킬 수 있다. 그러나 로컬 캐시의 특성상 메모리에 데이터를 저장하므로 테스트 수행 시엔 예상치 못한 결과를 얻을 수 있고, 이는 테스트의 멱등성을 깨뜨리게 된다. 다음과 같이 상품의 재고 소진 여부를 체크하는 코드가 있다. 재고가 한 번 소진되면 다시 복구되는 일은 잘 없으므로 로컬 캐시를 적용했다고 가정해보자. (실제로는 서버가 한 대가 아니고서야 로컬 캐시 대신 글로벌 캐시를 적용하는 편이 좋을 것이다) @Cacheable(value = ["item"], key = "#itemId") fun isSoldOut(itemId: String): Boolean { return itemRepository.existsInventory..

Spring/Spring

[Spring] 스프링의 테스트 컨텍스트 캐싱(Spring TestContext Caching)에 대해 알아보자

1. 개요 Spring은 테스트에 사용되는 애플리케이션 컨텍스트를 생성/관리/적용해주는 기능을 가진 테스트 프레임워크를 제공하며, 이를 Spring TestContext Framework라고 한다. Spring TestContext Framework는 다양한 기능들을 제공하는데, 이 중 대표적인 것이 바로 테스트 컨텍스트 캐싱(TestContext Caching)이다. 본격적으로 알아보기에 앞서 테스트 컨텍스트의 의미에 대해 한 번 짚어보자. 사실 정확히 말하자면 '테스트 컨텍스트'는 테스트에서 사용되는 애플리케이션 컨텍스트(= ApplicationContext or WebApplicationContext)를 생성하고 관리해주는 오브젝트를 가리키는 용어다. 그러나 테스트가 사용하는 애플리케이션 컨텍스트도..

Spring/Spring

[Spring] @ContextConfiguration이란?

1. 개요 @ContextConfiguration은 통합 테스트 환경에서 ApplicationContext를 어떻게 로드하고 설정할지를 결정하는 데 사용되는 클레스 레벨의 애너테이션이다. 주로 테스트 환경에서 @SpringBootTest를 이용해 전체 빈을 로딩하는 대신 가벼운 컨텍스트 환경을 구성하기 위해 사용된다. 이 애너테이션을 사용하면 일부 클래스만을 빈으로 등록하여 단일 클래스에 대한 테스트 실행 속도를 향상시킬 수 있다. 추후 다른 포스팅에서 다룰 예정인데, 이렇게 @ContextConfiguration을 사용하여 임의의 컨텍스트를 지정하면 여러 개의 컨텍스트가 생성되어 Test Context Caching의 효율이 떨어질 수 있으므로 단일 테스트 클래스의 실행속도는 빨라진다 하더라도 전체 테..

Spring/Spring

[Spring] feign + hystrix 사용 시 특정 예외 무시하도록 처리하기

1. 개요 서비스 중에 일부분에서 외부 API에 요청을 날리고, boolean 타입의 응답을 받는 로직이 포함되어 있었다. 만약 true이면 특별 유저로 간주하고 프론트에서 다른 화면을 보여주는 구성이었다. 간헐적으로 404 에러가 내려오는 케이스가 있었는데, 이 경우엔 fallback 메서드를 통해 false로 처리해두었다. 트래픽이 몰리자 클라이언트에서 전달받은 유저ID에 대해 유저 데이터가 없는 케이스가 늘어났고, 서킷 브레이커가 열리게 되었다. 때문에 기본 응답으로 false가 내려가면서 특별 유저라 하더라도 일반 유저가 보는 화면을 보게 되었다. hystrix는 resilience4j와 다르게 특정 예외를 골라서 무시할 수 있는 옵션이 없어서 상당히 애를 먹었다. resilience4j는 다음과..

Spring/스프링 핵심 원리 - 고급편

[스프링 핵심 원리 - 고급편] 실무 주의사항

본문은 인프런의 [스프링 핵심 원리 - 고급편]를 수강하고 정리한 글입니다. 필요에 따라 생략/수정된 부분이 있을 수 있으며, 내용이 추후 변경될 수 있습니다. 스프링 핵심 원리 - 고급편 1. 쓰레드 로컬 2. 템플릿 메서드 패턴과 콜백 패턴 3. 프록시 패턴과 데코레이터 패턴 4. 동적 프록시 기술 5. 스프링이 지원하는 프록시 6. 빈 후처리기 7. @Aspect AOP 8. 스프링 AOP 개념 9. 스프링 AOP 구현 10. 포인트컷 11. 실무 주의사항 1. 프록시의 내부 호출 스프링의 프록시 방식의 AOP는 메서드 내부 호출(self-invocation)에 프록시를 적용할 수 없다는 한계가 있다. 프록시 방식의 AOP는 프록시를 통해서 대상 객체(target)를 호출해야만 AOP가 적용된다. ..

코택
'Spring' 카테고리의 글 목록