DDD 6

JPA로 CRUD 구현하기_(4)비즈니스 로직 수행

** 이전게시글 참고: 2021.08.20 - [Programming/JPA] - JPA로 CRUD 구현하기_(3)CRUD 구현 1. Service 구현 DB와 통신하며 데이터를 주고받는 CRUD 기능 구현이 끝났다. 이제 기능을 비즈니스 로직을 수행하는 MemberService 클래스를 구현해보자. [service/MemberService.java] package service; import repository.MemberRepository; import vo.Member; public class MemberService { private MemberRepository memberRepo; public MemberService(MemberRepository memberRepo) { this.member..

Programming/JPA 2021.08.20

JPA로 CRUD 구현하기_(3)CRUD 구현

** 이전게시글 참고: 2021.08.20 - [Programming/JPA] - JPA로 CRUD 구현하기_(2)객체와 테이블 매핑 1. CRUD 구현하기 실습에서는 JPA를 이용한 CRUD를 구현하지만, Mybatis나 다른 DB 접근방법으로 변경되어도 프로젝트의 상위계층(service)에는 영향이 없도록 하기 위해서 MemberRepository 인터페이스를 상속하는 JPA 구현 클래스를 생성한다. [repository/MemberRepository.java] package repository; import vo.Member; public interface MemberRepository { public void save(Member newMember); public Member findById(St..

Programming/JPA 2021.08.20

JPA로 CRUD 구현하기_(2)객체와 테이블 매핑

** 이전게시글 참고: 2021.08.20 - [Programming/JPA] - JPA로 CRUD 구현하기_(1)프로젝트 생성 1. Member 객체 매핑 JPA 사용을 위해서는 다음과 같이 자바 클래스와 회원 테이블을 매핑해야한다. [vo/Member.java] package vo; // JPA annotation을 사용하기 위한 라이브러리 import javax.persistence.*; // @Entity: DB Table과 매핑될 클래스임 // @Table: 매핑할 Table 정보 // @Id: 테이블의 기본키와 매핑할 필드 // @Column: 필드와 컬럼을 매핑 @Entity @Table (name="MEMBER") public class Member { @Id @Column(name = "..

Programming/JPA 2021.08.20

JPA로 CRUD 구현하기_(1)프로젝트 생성

자바의 ORM 기술표준인 JPA를 활용하여 간단한 CRUD 구현 프로젝트를 시작해보자. 여기서는 회원 추가(C), 회원 조회(R), 회원정보 수정(U), 회원 탈퇴(D) 4가지의 간단한 회원관리 기능만을 목표로 한다. [Environment] - IDE : IntelliJ - DB : H2 1.4.200 - Java : open-jdk 16.0.2 - JPA : Hibernate 5.5.6 (Aug 04, 2021) 1. 프로젝트 생성 먼저, IntelliJ에서 Maven 프로젝트를 생성한다. File - New - Project - Maven 선택 후 Next -> 프로젝트 Name, 파일 Location 설정 후 Finish 프로젝트 계층구조를 위해 다음과 같이 패키지를 생성한다. - service ..

Programming/JPA 2021.08.20

[DDD START!] 애그리거트를 통한 복잡한 도메인 모델 간 관계 관리

도메인 주도 설계를 공부하며 등장한 애그리거트라는 개념과 그 역할에 대해서 알아보자. 쇼핑몰을 구현한다고 예를 들어보면, 내부에는 무수히 복잡하고 많은 도메인 모델들이 엮여있다. Order라는 클래스는 OrderLine, ShippingInfo, PaymentInfo, Orderer 클래스들을 참조하고 또 다시 각각의 클래스들은 Receiver, Member, Product, Category 등등.. 개별의 객체 수준에서 모델을 바라보면 서로 관계를 파악하기가 어렵다. 이렇게 복잡한 도메인 객체모델들을 이해하고 관리하기 쉽도록 관련된 도메인을 하나의 상위 수준으로 묶어서 나타낸 것이 애그리거트이다. 하나의 애그리거트에 속한 객체들은 동일한 라이프사이클을 가지고, 유사성을 지닌다 (함께 생성되고 함께 변경..

책책책 2021.08.20

[DDD START!] 웹 애플리케이션 아키텍처 설계 - DIP 적용

아키텍처는 크게 4개의 영역으로 구분되는 계층구조로 이루어졌다. o 표현계층: 사용자의 요청을 응용 영역에 전달, 응용 영역의 처리 결과를 다시 사용자에게 보여주는 역할. Json Object) o 응용계층: 사용자에게 제공할 기능 구현. 직접 구현보다는 도메인 모델에 로직 수행을 위임. o 도메인계층: 도메인의 핵심 로직을 구현. ex. 주문 도메인의 '결제 완료', '주문 총액 계산', '배송지 변경' 같은 로직 o 인프라스트럭쳐계층: 상세한 구현 기술을 다룸. ex. DB연동, HTTP Client, Kafka ... 위 아키텍처는 상위 -> 하위계층으로만 의존을 하도록 되어있는데, 이 경우에 두가지 문제점이 발생한다. (1) 테스트의 어려움 - 상위 계층을 테스트하기 위해서는 하위 계층이 구현되어..

책책책 2021.08.12