[SpringBoot] AbstractAggregateRoot로 DomainEvent 발행하기
·
Java,Kotlin,SpringBoot
DDD에서 AggregateRoot와 Domain Event란?도메인 주도 개발(Domain-Driven Design)에는 애그리거트(Aggregate)라는 단위로 도메인을 관리한다.애그리거트는 복잡한 도메인을 관리하기 쉬운 단위로 분리한 것인데 이커머스를 예로 들면 상품이 하나의 애그리거트, 리뷰가 하나의 애그리거트가 될 수 있다.애그리거트는 다른 애그리거트에 관여하지 않고, 생성되고 변경되는 이유가 각자 다르다.AggregateRoot애그리거트는 여러 개의 모델로 이루어져 있을 수 있다. 이 때, 여러개의 모델을 한 번에 관리하는 주체를 AggregateRoot라고 한다.애그리거트의 내부를 변경하기 위해서는 오직 애그리거트 루트만 가능하며, 한 트랜잭션에서는 한 개의 애그리거트만 수정해야 한다.Dom..
[SpringBoot] @Async로 비동기 작업 처리하기
·
Java,Kotlin,SpringBoot
2년전 면접에서 @Async 어노테이션을 사용하면 스레드가 새로 생성되는지, 아니면 사용하고 있던 스레드를 계속 사용하는건지 질문을 받았던 적이 있다. 지금은 당연히 기본으로는 새로운 스레드를 생성해서 사용한다고 답변할 수 있지만, 그 당시에는 멘탈이 나가서 잘 모르겠다고 답변했다. 비동기적으로 실행하는건 아는데, 스레드에 대한 개념이 부족하고 그런것도 신경쓰지 않은채 사용해왔던 것이다. 결과는 당연히 좋지 않았다.오랜만에 스프링을 다시 하는김에, @Async를 어떻게 사용하는지, 어느 사례에서 활용하면 좋을지 정리해보았다.@Async@Async 어노테이션은 스프링에서 비동기작업을 처리하기 위해 제공해주는 메소드로, 순수 자바 코드나 다른 프레임 워크에서 사용할 수 있는 어노테이션은 아니다.@Async ..
[SpringBoot] h2 테이블 이름 upper_case 해제하기
·
Java,Kotlin,SpringBoot
h2 옵션 추가h2 로 테스트 DB를 사용하면 기본으로 테이블 이름이 모두 대문자가 된다.이 옵션을 해제하려면, application.yml 의 datasource 설정에 DATABASE_TO_UPPER=false 옵션을 추가하면 된다.datasource: driver-class-name: org.h2.Driver url: jdbc:h2:~/testDB;DATABASE_TO_UPPER=false username: sa password:이렇게 설정해주면 /h2-console에 접속했을때 내가 의도한 테이블명이 되어있는 것을 확인할 수 있다.(그냥 기본값이 false이면 안되는 걸까..)참고https://stackoverflow.com/questions/17529384/h2-runscr..
[SpringBoot] MockK 사용하기
·
Java,Kotlin,SpringBoot
Spring Boot + Kotlin 조합으로 유닛 테스트 코드를 짜다 보면 repository를 어떻게 주입해줘야할지 고민이 된다. 이럴때 주로 가짜로 구현체를 만들어서 주입해주게 되는데 테스트할 클래스가 JPARepository를 바라보고 있는 경우에는 가짜 구현체에 구현해줄게 너무 많다. 그래서 여러가지 방법을 찾다가 moking 라이브러리를 사용하기로 하였는데 서치중 mockK를 어떻게 사용했는지 기록하고자 한다.MockKMockK는 Kotlin에서 Mocking해주는 라이브러리이다. baeldung에서 이렇게 소개하고 있다.kotlin은 모든 class와 method들이 기본으로 final이므로 open 키워드를 붙여주지 않으면 상속되지 않는데, 이러한 특성때문에 대부분의 mocking라이브러리..
togeepizza
'springboot' 태그의 글 목록