1. DDD Start 8장 읽기 애그리거트 트랜잭션 처리에 대한 내용으로 애그리거트 수정이 동시에 발생했을 경우, 이를 어떻게 처리 할지에 대한 내용을 담고 있다. DB 레벨에서의 선점 락과 선점 락으로 인해 발생할 수 있는 문제(데드락)을 회피하기 위한 비선점 락에 대한 전략(JPA-Hibernate의 @Version을 활용한 업데이트 전략) 그리고 오프라인 락을 통하여 락에 대한 선점을 미리 하는 방법까지 간단하게 학습할 수 있었다. 다시 읽어보면서 내용 정리를 해보고 좀 더 깊게 생각해봐야겠지만, 실제 업무에서는 대부분 DB 레벨에서의 선점 락을 사용하는 경우가 많았는데, 디비 레벨에서의 선점 락을 사용할 경우, 락을 대기하는 스레드가 발생하여 실제 동시성에 크게 영향을 주면서 개발을 할 수 밖에..
DDD Start의 3장 내용을 정리 애그리거트(Aggregate) 도메인 모델에 대한 파악과 애그리거트 상위 수준에서의 접근과 개별 객체 혹은 구현 단위에서의 접근으로 나눌 수 있다. 상위 수준에서의 이해가 없는 상태에서 개별 객체에 대해 모델링을 하거나 개발을 하게 되면 상위 수준에서의 도메인 간의 관계가 어려워지게 된다. 상위 수준에서 올바른 이해를 바탕으로 개별 객체에 대한 모델링을 진행해야지 전체 모델링을 망가트리지 않으면서 추가 요구사항을 수행할 수 있기 때문에 큰 그림에서의 도메인 모델에 대한 이해는 필수이다. 애그리거트 단위로 묶어서 상위 모델을 바라보면 상위 수준에서 도메인 모델 간의 관계를 쉽게 파악할 수 있다. graph LR subgraph 주문 Address --- Shipping..
DDD Start 3,4장 학습 1~2장을 통하여 DDD와 관련된 주요 개념과 키워드들을 살펴보았고, 3장부터는 도메인의 영역을 큰 그림을 통하여 세부 그림을 이해하는 법부터 시작하여 애그리거트를 구성하는 방법과 주의해야 할 부분이 대하여 조금 더 깊게 볼 수 있어서 좋았다. 4장에서는 실제 JPA를 이용하여 엔티티 매핑과 벨류 매핑을 직접 실습 해볼 수 있었는데, 자바로 되어 있는 매핑 코드를 코틀린 베이스로 옮겨서 작성해야 하니 생각보다 걸리는 지점이 있어서 조금 시간을 소모 할수 밖에 없었다. JPA를 공부하고 바로 이 책을 봤었더라면 좀 더 업무 코드에서도 의미 있는 엔티티 구성과 로직을 만들어 낼 수 있었겠다는 아쉬움도 들긴 하지만, 지금이라도 모자란 부분이 무엇인지 확인해볼 수 있는 좋은 기회..
DDD Start의 2장 내용을 정리 아키텍처 / 네 개의 영역? / 계층 구조 아키텍처 ClientClientPresentationPresentationApplicationApplicationDomainDomainInfrastructureInfrastructureHTTP 요청[표현]- 유효성 검사- 응용 영역에 필요한 객체 변환/생성Application Layer 호출[응용]- 적절한 도메인 서비스 호출- 트랜잭션 시작- 도메인에 필요한 도메인 엔티티 조회- 매소드/로직 호출[도메인]- 도메인에 필요한 객체를 표현- 도메인에 관련된 구현을 담당구현기술을 다루는 부분은인프라스트럭쳐 레이어를 참조한다.구현 기술을 다루는 부분을 책임지며RDB, NoSQL 등 실제 구현을 다루게 됨아키텍처를 구성하는 요소는 ..
DDD Start의 1장 내용을 정리 도메인 소프트웨어로 해결하려고 하는 문제의 영역. 하나의 도메인은 다시 하위 도메인으로 나눌 수 있는데, 이렇게 나눠놓은 하위 도메인끼리 연동하여 완전한 기능을 제공하게 된다. 이렇게 문제의 영역을 해결하는 과정에서 꼭 모든 기능을 소프트웨어로 구현해야 할 필요는 없다. 즉, 해당 도메인에서 필요한 기능을 외부 업체 또는 기능을 활용하여 연동 할 수도 있다. 도메인 모델 문제 영역을 개념적으로 표현 도메인에 대한 모델을 여러 이해 당사자가 이해할 수 있는 개념적 모델링을 할 수 있다. 단순히 구현 수준에서의 모델이 아닌, 여러 이해 당사자가 이해할 수 있는 모델로서 작성하는 것이 의미가 있다. 표현하는 방법은 해당 도메인에 따라, 달라질 수 있다 UML, 그래프 등 ..
1. H2 데이터베이스 사용 중 소소한 삽질 신규 서비스 API 개발에 H2 데이터베이스를 적극적으로 사용하고 있는데, 컬럼명에 예약어를 사용하여 생각보다 오랜 시간 삽질을 하게 되었다. 실제 에러 스택트레이스에 예악어라는 메세지가 보이질 않아서 더 해맨 부분도 있었던거 같다. Keywords / Reserved Words 2. DDD 1장 ~ 2장 학습 DDD Start 책을 읽으면서 내용을 계속 정리하고 있다. 책이 참 좋다고 생각이 들었는데, 실제 구현 코드도 같이 예제 형식으로 보여주고 있어서 실제 JPA-Hibernate를 주로 사용하는 나로서는 참 공감이 가면서도 부족한 부분이 무엇인지 정확하게 알게 해주는거 같아 좋았다. 엔티티 vs 벨류 무분별한 세터는 무조건 지양 의미 있는 도메인 용어 ..
1. @Transactional 회사 업무 중, 테스트 환경에서 적절하게 @Transactional을 부여하지 못해서 실수한 부분이 있어서 메모하려고 한다. Repository를 의존하고 있는 서비스 레이어에서 명시적으로 @Transactional을 서비스 매서드에 마킹 해놓지 않은 상태에서 해당 서비스 메서드의 호출이 종료된 시점에 @OneToMany(FetchType.Lazy)로 마킹된 하위 모델 엔티티가 조회를 시도하게 되면서 생기는 문제였다. 기본적으로 Data JPA에서의 Repository는 CRUD 오퍼레이션에 대해 트랜잭션을 가져가게 되는데, 문제가 되는 상황은 엔티티에서 FetchType.Lazy를 사용했을 때, 즉 지연 로딩을 사용할 때가 문제가 되는 듯 했다. 만약 레파지토리에서의 트..
@JsonView와 @JsonFilter를 사용하여 Partial response 구현하기 개요 JSON HTTP API를 구현할 때, 페이징만 구현하는 경우를 쉽게 볼 수 있는데, 여기서 한 걸음 더 나아가 조금 더 나은 퍼포먼스를 위하여 클라이언트가 필요한 필드만 골라서 받을 수 있도록 구현하는 것이 필요할 수 있다. 예를 들어 아래와 같은 상황을 예를 들어 볼 수 있다. HTTP Reqeust HTTP/1.1 GET /books/1?fields=isbn,title HTTP Response { "isbn": "978-3-16-148410-0", "title": "Book Title" } 책 데이터를 조회하는 JSON API가 있다고 했을 때, 헤당 API에서 제공하는 정보 중 일부 정보만을 클라이언트..
- Total
- Today
- Yesterday
- ecma
- EJS
- Express.js
- jade
- tomcat
- SideBarEnhancements
- Spring
- Sublime Text 3
- RestTemplate
- Spring Boot
- package.js
- maven
- cluster
- Spring MVC
- http method
- Prototype
- 스프링
- Handlebars
- springboot
- HTTP
- Squelize.js
- Package Control
- node.js
- HttpClient
- Kotlin
- pm2
- WebFlux
- Til
- implicit prototype chain
- Sublime Text 2
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |