Development Study (14) 썸네일형 리스트형 [JPA] 02. EntityManager & JPQL EntityManager 설정 EntityManager의 생성과정 JPA 설정파일(ex. Hibernate의 persistence.xml)을 읽은 후 EntityManagerFactory를 생성한다. EntityManagerFactory로부터 EntityManager를 생성한다. // persistence-unit : 데이터베이스당 등록되는 영속성 유닛의 고유 이름값 (persistence.xml에 기술됨) EntityManagerFactory factory = Persistence.createEntityManagerFactory("persistence-unit"); EntityManager entityManager = factory.createEntityManager(); EntityManagerFac.. [JPA] 01. JPA? JPA ? Java Persistence API의 약자로, Java로 구성된 ORM(Object Relational Mapping) 기술 표준으로 객체와 관계형 데이터베이스를 매핑한다. 개발자는 응용단에서 개발하듯이 객체를 다루면, JPA가 이를 해석해 알맞은 SQL을 작성하여 DB에 반영한다. JPA는 응용서비스와 데이터베이스의 중간자 역할을 수행해준다. (엄연히 말하면 AppService와 JDBC Driver사이에 존재한다.) JPA의 구현체 중 대표적인 예로 Hibernate가 있다. (Spring Data JPA를 사용해도 내부적으로 Hibernate를 사용하게 된다. JPA, SpringDataJPA, Hibernate 개념 구분 JPA는 기술 명세로써, 인터페이스 표준을 말한다. Spring.. SpringCloud + SpringBoot 의존성 문제 SpringBoot만 사용해보다가 SpringCloud를 붙여서 MSA 예제를 만들어보는도중 버전 의존성 문제가 하나 발생했다. Spring Cloud는 버전이 Boot랑은 조금 다르게 구성된 것 같았다. (나도 처음 보는 모듈이라 사실 아직 잘모른다.) 공식문서에 몇개 모듈 지원되는거 있다고 나오고 블로그 몇개 검색해보고 Greenwich 모듈을 사용하도록 설정했다. Spring Boot는 기존에 작성한 예제 프로젝트들을 SpringBoot 2.2.9버전을 사용중이라 이번에도 그대로 버전을 적용했다. (이전에 유투브에서 백기선님이 올리신거 출근길에 봐봤는데 2.3에서 spring-boot-starter-web 이 모듈이 조금 바뀐 듯 했다.) Validator를 기본 web모듈에서 제공하지 않는다..... Maven DependencyManagement 사용시 주의사항 Spring Cloud 모듈을 사용해보고 싶어서 Spring Cloud & MSA 키워드를 통해 구글링을 해봤다. 너무나 많은 분들이 이미 많이 개발하고 계시고 블로그도 잘 정리해놓은 것을 보고 예제로 한번 구현해봤다. 물론 복붙은 안했지만 다만 있는그대로만 진행해보면 조금 재미없으니까 일단 돌아가는거 한번보고 Maven Multi Module로 변경하면서 진행해보기로 했다. 분명히 각각 프로젝트로 구성했을 때 잘되는거 확인했는데 멀티 모듈로 변경하니까 갑자기 의존성 라이브러리를 받지 못하는 현상이 발생했다. 왜지? 그전에랑 차이점이라고는... 프로젝트 설정 관련된 (parent, properties, dependencymanagement) 부분은 상위 프로젝트의 Pom.xml에서 작성했고 각 모듈에서는.. [DDD-Start] Ch08. 애그리거트 트랜잭션 관리 애그리거트의 트랜잭션 서로다른 스레드가 하나의 애그리거트에 동시에 접근하여 상태를 수정하게 된다면 무결성이 깨지게 된다. 예를들어 발송이 시작되기 전에 주문자가 배송정보를 변경하려고 할 때, 운영자가 발송을 해버린다면 운송업체는 기존의 배송정보를 통해 배송을 하게될 것이지만 고객(주문자)는 새로 변경한 배송지로 배송이 올 것을 기대하게 된다. 이런 현상을 막기 위해서는 하나의 애그리거트에 접근한 스레드가 트랜잭션을 완료할 때까지 다른 스레드가 해당 애그리거트로 접근하지 못하게 트랜잭션을 처리해야 한다. 이 때 사용되는 방법은 크게 선점 잠금과 비선점 잠금이 있다. 선점잠금 C++,Java등에서 사용하는 Mutex와 동일한 개념같다. 가장 먼저 접근한 스레드에게 우선권이 주어지고, 해당 스레드가 작업을 완.. [DDD-Start] Ch07. Domain Service 여러 애그리거트가 필요한 기능 한 애그리거트로 구현할 수 없는 기능이 있다. 결제 금액 계산 로직 상품 애그리거트 : 상품의 가격 주문 애그리거트 : 주문한 상품별 개수 할인쿠폰 애그리거트 : 조건에 따른 할인 쿠폰들 회원 애그리거트 : 회원 등급에 따른 할인율 주문 애그리거트를 통해 주문한 상품목록과 회원정보, 회원이 가지고 있는 쿠폰 등을 조회할 수 있지만 할인은 각 상품별로 다를 수 있기때문에 주문 애그리거트만으로는 결제금액을 확정지을 수 없다. 주문 애그리거트에 할인을 계산하기 위한 부가적인 애그리거트를 할당하는 방법은 좋지않다. 주문 애그리거트는 주문 기능을 수행해야 하는데 할인이라는 기능은 주문에 종속되지 않는다. 예를들어 할인쿠폰은 대부분 사용할 수 있는 기간이 정해져있고( 기간이 지난 할인.. [DDD-Start] Ch06. 응용서비스와 표현영역 표현 영역과 응용서비스 영역 표현 영역은 사용자와의 상호작용을 수행한다. 사용자의 요청을 받고, 서비스로부터 받은 결과를 통해 사용자에게 적절한 응답을 전달한다. 응용서비스 영역은 실제 사용자가 원하는 기능을 수행한다. 사용자가 요구한 기능을 수행하기 위해 필요한 도메인 객체를 사용한다. 비즈니스 로직은 도메인에 구성되어있으므로 서비스 영역은 복잡한 로직없이 도메인 객체 간 흐름 제어를 수행한다. 표현 영역 프로세스 사용자의 요청을 해석한다. 사용자가 브라우저에서 폼에 입력하여 서버로 전달하면 표현영역은 요청온 URL, 파라미터, 쿠키, 헤더 등 정보를 해석한다. 사용자가 요구한 기능을 서비스에 요청한다. 사용자가 원하는 기능을 실행하기 위해 해석한 입력값을 서비스가 해석할 수 있는 값으로 적절히 변환하.. [DDD-Start] Ch05. 리포지터리의 조회기능(JPA중심) Ch4는 읽었는데 잘 와닿지 않았다. 아직 JPA도 공부를 안한 상태라 그런지 내가 습득하기는 좀 어려운 거 같다. Ch5도 여차 비슷했는데, 사실 부끄러지만 책 내용을 읽으면서 Spring Data JPA쓰면 이런거 다 구현안해도 되지않나 왜 안쓰고 이렇게 직접 다 구현해야하나 이런 생각을 종종하면서 읽고 있었는데 이 챕터 뒷부분에 저자님이 이런이런거 Spring Data JPA를 사용하면 일일이 직접 구현 안해도 된다고 써주셨다. 알고 쓰는거랑 모르고 쓰는거랑은 아예 다른거니까.. 일단 한권을 훑어서라도 읽고 싶어서 이해안가는 부분은 추후 다시 봐야겠다. JPA를알고 접근하면 좀더 이해하기 좋을거같기도하고.... Spec 검색을 위한 스펙 검색 조건이 다양해지면 각 조회 별로 findByXX 메서드를.. 이전 1 2 다음