본문 바로가기

Spring19

@WebMvcTest와 테스트 코드 개선하기 개요 프로젝트를 진행 초기에 반복적인 테스트 실행을 위해서 해결해야 하는 문제점이 두가지 있다고 판단하였습니다. 첫째, 애플리케이션 컨텍스트 초기화 횟수를 줄여 테스트 시간을 개선할 것 둘째, 문서화 코드 중복을 줄일 것 저는 해당 문제를 해결하기 위해 테스트 코드를 최적화한 테스트 컨벤션을 제시하였습니다. 프로젝트 종료 후 테스트 수행 시간을 체크하였을 때 약 30% 정도 테스트 시간이 감소한 것을 확인할 수 있었습니다. 이번 게시글에서는 상기한 문제의 해결 방법에 대해서 다루겠습니다. 컨텍스트 캐싱 스프링 부트는 통합 테스트를 지원하기 위해 다양한 어노테이션을 지원합니다. @WebMvcTest는 표현 계층 통합 테스트를 지원하기 위한 어노테이션으로 Spring MVC를 구성하는 빈들을 스캔하여 어플리.. 2023. 10. 4.
낙관적 락과 동시성 테스트하기 개요 여러 명의 라이더가 하나의 배달에 대해 동시에 배차 요청을 하는 상황이 있을 것입니다. 라이더A가 배달에 대해 배차 요청을 하고, 동시에 라이더B가 배달에 대해 배차 요청이 들어오게 된다면 다음과 같은 상황이 발생할 것입니다. 이 경우 라이더A가 배달에 대해 배차 요청을 하고 요청이 성공했다는 응답까지 받게 됩니다. 그러나 동시에 들어온 라이더B의 배차 요청으로 인해 라이더A의 갱신 내역은 사라지고 라이더B의 갱신 내역이 저장되게 됩니다. 이를 두 번의 갱신 분실 문제라 합니다. 이를 해결하기 위해서는 다음과 같은 방법이 있습니다. 마지막 커밋만 인정하기 최초 커밋만 인정하기 충돌하는 갱신 내용 병합하기 기본적으로는 마지막 커밋만 인정하기가 사용됩니다. 하지만 배차 요청의 경우 마지막 커밋만 인정해.. 2023. 9. 16.
분산 환경에서의 스프링 스케줄러 사용 개요 스케줄러를 사용할 때, 서버가 하나뿐인 환경에서는 동시에 같은 스케줄링 작업이 중복해서 실행되는 것을 고려할 필요가 없습니다. 그러나 둘 이상의 서버를 사용하는 분산 환경에서는 클러스터링이 필요합니다. 세션 기반 로그인을 분산 환경에서 사용해보았다면 레디스나 JDBC를 이용해서 세션 클러스터링을 고민해보거나 시도해본 경험이 있을 것입니다. 스케줄러도 동일합니다. 분산 환경에서 스케줄링한 작업이 동시에 한 번만 실행하는 것을 보장해주기 위해 클러스터링이 필요합니다. 이에 대한 해결방법은 두 가지입니다. 첫째, 스케줄러 락을 제공하는 라이브러리인 shedlock을 사용하는 것 둘째, 스프링이 제공하는 스케줄러 대신 quartz를 사용하여 스케줄러 클러스터링을 하는 것 저는 전자의 방법인 shedlock.. 2023. 9. 10.
스프링 시큐리티 인증 프로세스와 데이터베이스 인증 처리 복습 AbstractAuthenticationProcessingFilter는 사용자의 인증을 위한 정보를 모아서 미완성의 Authentication 객체를 만듭니다. 구현체를 기준으로 다시 정리해봅시다. UsernamePasswordAuthenticationFilter는 HTTP 요청으로부터 인증을 위한 파라미터를 뽑아냅니다. 이를 토대로 인증되지 않았고 권한도 없는 UsernamePasswordAuthenticationToken 객체를 만듭니다. 생성된 Authentication 객체는 AuthenticationManager로 전달되어 인증 프로세스를 수행합니다. 다시 한 번 구현체를 기준으로 정리해봅시다. 생성된 UsernamePasswordAuthenticationToken 객체는 Pro.. 2023. 8. 12.
스프링 빈에 관하여 Bean Spring에서 Bean이란 Spring IoC 컨테이너에 의해 관리되는 객체를 말합니다. Spring bean은 컨테이너에 의해 인스턴스화되고, 의존성을 주입받고, 생애주기동안 관리됩니다. 스프링 컨테이너는 하나 이상의 빈을 관리합니다. 이러한 빈은 컨테이너에 제공하는 configuration metadata를 통해 생성됩니다. Bean definition과 Configuration metadata Configuration metadata는 개발자가 스프링 컨테이너에게 애플리케이션의 객체를 어떻게 인스턴스화, 구성, 조합하는지에 관한 관한 방법을 나타냅니다. 이러한 Configuration metadata는 xml 또는 자바 기반으로 작성할 수 있습니다. 작성한 metadata는 Applica.. 2023. 6. 30.
스프링 부트가 제공하는 프로덕션 준비 기능 0. 스프링 부트 - 핵심 원리와 활용 - 인프런 | 강의 실무에 필요한 스프링 부트는 이 강의 하나로 모두 정리해드립니다., - 강의 소개 | 인프런 www.inflearn.com 본 게시글은 해당 강의를 수강하고 정리한 내용입니다. 1. 액추에이터(actuator)란? 스프링 부트는 애플리케이션을 프로덕션 환경으로 전환할 때 애플리케이션을 모니터링하고 관리하는데 도움이 되는 다양한 추가 기능을 포함하고 있다. 이러한 프로덕션 준비 기능은 스프링 부트 액추에이터 모듈을 통해 제공한다. 스프링 부트 액추에이터는 지표(metric), 추적(trace), 감사(auditing), 모니터링과 같이 운영환경에서 시비스할 때 필요한 프로덕션 준비 기능을 편리하게 사용할 수 있는 다양한 편의 기능들을 제공한다. 이.. 2023. 5. 29.