본문 바로가기

전체 글846

스프링 MVC 1 정리 서블릿 @ServletComponentScan @SpringBootApplication @ServletComponentScan public class ServletApplication { public static void main(String[] args) { SpringApplication.run(ServletApplication.class, args); } } 스프링 부트는 서블릿을 직접 등록해서 사용할 수 있는 어노테이션을 제공한다. 예를 들어 위처럼 @ServletComponentScan 어노테이션을 사용하면 스프링이 자동으로 현재 패키지 기준 하위 패키지를 스캔하여 모든 서블릿을 찾고 등록시켜준다. @WebServlet @WebServlet(name = "helloServlet", urlPatt.. 2023. 9. 12.
스프링 통합 테스트를 위한 AbstractTestExecutionListener 개요 테스트는 메소드별로 타 테스트에 영향이 없어야한다. 스프링에서는 @Transactional 어노테이션을 사용하면 테스트 실행 시 발생한 DB작업에 대해 테스트가 종료 시 자동으로 롤백해주는 기능을 제공한다. 지금까지 해당 기능을 통해 통합 테스트를 수행했고 별다른 문제가 발생하지 않았는데, 이번에 비즈니스 로직을 추가하면서 전파 속성이 REQUIRES_NEW인 트랜잭션 단위에 대해 문제가 발생했고 이에 따라 데이터베이스를 초기화시켜주는 작업을 @Transactional 사용에서 AbstractTestExecutionListener를 사용하는 것으로 변경하게 되었다. 본 포스팅에서는 MySQL 대상으로 각 테스트 시 데이터베이스 초기화를 통해 테스트를 격리시키는 방법에 대해 기술한다. Abstract.. 2023. 8. 30.
Reactive Streams 개념 정리 구성 요소 Publisher: 데이터를 생성하고 통지(발행, 게시, 방출)하는 역할을 한다. Subscriber: 구독한 Publisher로부터 통지된 데이터를 전달받아서 처리하는 역할을 한다. Subscription: Publisher에 요청할 데이터의 개수를 지정하고 데이터의 구독을 취소하는 역할을 한다. Processor: Publisher와 Subscriber의 기능을 모두 가지고 있다. 즉, Subscriber로서 다른 Publisher를 구독할 수 있고 Publisher로서 다른 Subscriber가 구독할 수 있다. 동작 과정 Subscriber는 Publisher를 구독한다. (subscribe) Publisher는 Subscriber에게 데이터를 통지할 준비가 되었음을 알린다. (onSu.. 2023. 8. 23.
스프링 테스트 코드를 위한 어노테이션 개요 테스트 코드를 작성하다보면 중복코드가 많이 발생한다. 예를 들어 서비스 레이어를 테스트하는 슬라이스 테스트인 경우 @ExtendWith(MockitoExtension.class)를 통해 Mokcito를 활성화시켜주고, 필요하다면 @ActiveProfiles를 통해 프로필을 설정하는 등의 코드들이 계속 생겨나는 모습을 볼 수 있다. 본 포스팅에서는 통합 테스트/유닛/레포지토리 테스트 코드 작성 시 코드 로직 작성에만 집중할 수 있도록 각 테스트 대상에 맞는 통합 어노테이션을 만들고 적용하는 과정에 대해 기술한다. @TestEnvironment @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @ActiveProfiles("test") @Te.. 2023. 8. 22.
스프링 프로젝트 시작을 위한 컨벤션 설정 개요 프로젝트를 시작하기 전 가장 중요한 점이 있는데 바로 일관적인 코드가 유지될 수 있도록 하는것이다. 이는 코드 관점에서는 아키텍처와 규칙이 될 수 있겠고 컨벤션 관점에서는 포맷팅이 있을 것 같다. 사람이 코드 포맷팅을 직접 지키면서 작업하기는 힘들기 때문에 일반적으로 플러그인 등의 기능을 이용하여 모든 코드에 일관성을 지키는데 이를 도와주는 것이 바로 Spotless이다. Spotless를 사용하면 현재의 코드가 정해진 규약을 충족하는지 체크할 수 있고 충족하지 않는다면 자동으로 코드를 변경해주는 기능 또한 제공한다. 또한 모든 코드는 테스트 코드가 필수적으로 들어가는데, 사람이 직접 엣지 케이스를 찾아내는건 쉽지 않은 일이다. 이때 코드 커버리지를 측정하는 방법을 도입할 수 있는데 이는 실제로 굉.. 2023. 8. 22.
DDD 이벤트 스토밍 - 크림 클론 프로젝트 개요 본 프로젝트는 Kream 서비스를 클론하는 프로젝트이다. 기본적으로 헥사고날 아키텍처를 코드 베이스로 가져갈 예정이며 점진적으로 CQRS까지 도입해본다. 코드는 깃허브를 통해 작성할 예정이며 본 포스팅에서는 이벤트 스토밍을 통해 바운디드 컨텍스트를 도출하는 과정까지만 간략하게 기술한다. 소스코드는 https://github.com/teamhide 에서 확인할 수 있다. (아직 개발중인점 참고) 범위 모든 기능을 구현하진 않을 것이며 대략 아래와 같은 싸이클을 수행할 수 있도록 필요한 기능만을 구현할 예정이다. 유저가 회원가입을 한다. 구매자가 상품에 입찰/즉시구매를 한다. 판매자가 상품을 입찰/즉시판매를 한다. 낙찰된 상품이 배송된다. 도메인 이벤트 식별 - 주황색 도메인 이벤트 사이에 순차적인 관.. 2023. 8. 18.