분류 전체보기847 DDD 이벤트 스토밍 - 크림 클론 프로젝트 개요 본 프로젝트는 Kream 서비스를 클론하는 프로젝트이다. 기본적으로 헥사고날 아키텍처를 코드 베이스로 가져갈 예정이며 점진적으로 CQRS까지 도입해본다. 코드는 깃허브를 통해 작성할 예정이며 본 포스팅에서는 이벤트 스토밍을 통해 바운디드 컨텍스트를 도출하는 과정까지만 간략하게 기술한다. 소스코드는 https://github.com/teamhide 에서 확인할 수 있다. (아직 개발중인점 참고) 범위 모든 기능을 구현하진 않을 것이며 대략 아래와 같은 싸이클을 수행할 수 있도록 필요한 기능만을 구현할 예정이다. 유저가 회원가입을 한다. 구매자가 상품에 입찰/즉시구매를 한다. 판매자가 상품을 입찰/즉시판매를 한다. 낙찰된 상품이 배송된다. 도메인 이벤트 식별 - 주황색 도메인 이벤트 사이에 순차적인 관.. 2023. 8. 18. Webflux Function Endpoints 정리 개요 Webflux에서는 HandlerFunction이라는 것을 통해 HTTP Request를 다루게 된다. HandlerFunction은 ServerRequest를 인자로 받고 지연된 ServerResponse(Mono)를 리턴한다. Request/Response 모두 JDK8에서 제공하는 기능을 통해 불변 객체로써 동작한다. HandlerFunction은 어노테이션 기반 프로그래밍에서 등장하는 @RequestMapping과 동일한 역할을 수행한다. 클라이언트로부터 들어오는 Request는 RouterFunction을 통해 다뤄진다. 해당 객체는 위에서 설명한 것 처럼, ServerRequest를 받고 지연된 ServerResponse를 리턴한다. Request가 라우터에 등록된 핸들러와 매칭되면 핸들.. 2023. 8. 17. DB B Tree Index 정리 B-Tree 기반 인덱스 동작 방식 예를 들어 위와 같은 테이블이 있다고 가정해보자. 오른쪽은 실제 대상 테이블이고 왼쪽은 a컬럼에 대해서만 인덱스를 걸어둔 인덱스 정보라고 생각하면 된다. 인덱스 정보는 포인터(ptr)라는 데이터도 같이 가지고 있고 해당 포인터는 실제 MEMBMERS 테이블의 로우 위치를 가리키고 있다. 또한 인덱스 대상 컬럼을 기준으로 오름차순 정렬이 되어 저장된다. 예시 1 WHERE a = 9 라는 조건절을 통해 쿼리를 날린다고 생각해보자. 인덱스 테이블을 검색할 때 순차적으로 검색하는것이 아닌 Binary search를 하게 된다. 단계를 살펴보자면 아래와 같다. 인덱스 테이블에서 가운데 값인 5로 간다. 그리고 WHERE 조건과 동일한지 비교한다. 동일한 5와 9는 같지 않다... 2023. 8. 5. Spring Camp 2023 - 실무에서 적용하는 테스트 코드 작성 방법과 노하우 개요 Spring Camp 2023, 김남윤님이 발표하신 실무에서 적용하는 테스트 코드 작성 방법과 노하우 영상을 보며 포스팅으로 정리한 글입니다. Mock Server 기반 테스트 코드 예를 들어 위와 같은 코드가 있다고 가정해보자. 해당 코드는 PartnerClient라는 클래스를 통해 파트너의 정보를 얻어오는데, 해당 클래스는 외부 통신을 수행하는 클래스이다. 이런 경우 위와 같이 Mock Server를 통해 실제 응답값을 모킹하여 테스트 코드를 작성하곤 한다. 그런데 이 때 PartnerClient를 사용하는 클래스가 위처럼 수많이 늘어나면 어떻게 될까? 당연히 모든 테스트마다 Mock Server를 통해 모킹하는 작업이 필요할 것이다. 나아가서 Mock Server가 아닌 @MockBean을 통.. 2023. 8. 5. Spring AOP 개념 정리 AOP 적용 방식 AOP 적용 방식은 크게 3가지 방법이 있다. 컴파일 시점 .java 소스 코드를 컴파일러를 사용하여 .class를 만드는 시점에 부가 기능 로직을 추가한다. 이때는 AspectJ가 제공하는 특별한 컴파일러를 사용해야 하는데, 컴파일 된 .class를 디컴파일 해보면 실제로 AspectJ 관련 호출 코드가 코드상으로 들어가게 된다. AspectJ 컴파일러는 Aspect를 확인하여 해당 클래스가 적용 대상인지 확인하고 적용 대상인 경우 부가 기능 코드를 적용한다. 이렇게 원본 로직에 부가 기능이 추가되는 것을 위빙(Weaving)이라고 한다. 하지만 특별한 컴파일러도 필요하고 타 방법에 비해 복잡하다는 단점이 존재한다. (잘 사용하지 않음) 클래스 로딩 시점 자바를 실행하면 자바 언어는 .. 2023. 7. 20. Spring 빈 후처리기 정리 의존성 추가 implementation("org.springframework.boot:spring-boot-starter-aop") 먼저 위처럼 aop에 관한 의존성을 추가해준다. 이렇게 하면 aspectjweaver라는 aspectJ 관련 라이브러리를 등록하고 스프링 부트가 AOP관련 클래스를 자동으로 빈으로 등록한다. AutoProxyCreator 스프링 부트는 AnnotationAwareAspectJAutoProxyCreator라는 빈 후처리기를 자동으로 빈으로 등록한다. 해당 빈은 자동으로 프록시를 생성해주는 클래스로써 스프링 빈으로 등록된 Advisor들을 자동으로 찾은 후 프록시가 필요하다면 자동으로 프록시를 적용해준다. 일반적으로 AOP를 구현할 때 클래스 위에 @Aspect 어노테이션을 붙.. 2023. 7. 19. 이전 1 2 3 4 5 6 7 8 ··· 142 다음