만약 서비스레이어에서 공통 로직이 발생하는 경우 어떤식으로 코드를 작성할 수 있을까?글 작성 전 도메인 로직에서는 별도 레포지터리 영역을 접근할 수 없기에, 서비스 영역에서만 작성이 가능하다는 전제가 필요하다.일단 서비스 레이어 자체 MemberService 에서 단순히 하나의 메서드를 만들어서 공통으로 사용하는 방법도 있다.해당 방법은서비스 레이어의 코드가 너무 길어진다 - 는 단점코드 크기가 커지면서 연란성이 적은 코드가 한 클래스에 함께 위치하여코드 이해도를 저하시킬 위험성이 존재한다.해당 문제점을 해결을 위해서는 일단 레이어 ( 혹은 클래스 ) 를 분리하는 방법이 존재한다.오로지 비밀번호를 변경하는 서비스레이어를 생성하여public class ChangePasswordService { privat..
응용 서비스 구현시 인터페이스의 필요성에 대해 종종 논의됨.public interface ChangePasswordService { public void changePassword(String memberId, String curPw, String newPw); } public class ChangePasswordServiceImpl implements ChangePasswordService { // 구현 ... }인터페이스가 필요한 경우?여러 구현체가 존재하는 경우 런타임에 구현 객체를 바꿀 필요가 있을 경우단일 구현체다?하나의 응용 서비스에 대해 한 가지의 구현만 존재하기에, 인터페이스로 인한 구조 복잡성이 쓸 데 없이 증가한다.만약 TDD 의 경우TDD 는 실제 클래스의 구현 전에 인터페이스의 작성..
표현영역(Presentation Layer)사용자 요청의 해석사용자의 웹 요청을 해석하고 처리한다.예시사용자가 웹 폼에 입력한 데이터를 기반으로 HTTP 요청을 처리하고 어떤 기능을 실행할지 판단.요청의 변환과 서비스의 실행받은 요청을 응용 서비스가 요구하는 형식으로 변환 , 응용 서비스의 메서드를 호출응용 영역(Application Layer)기능 제공사용자의 요청에 따른 실제 기능 제공필요한 입력 값을 받고 수행 결과 반환한다표현 영역과의 독립성응용 서비스는 표현 영역과 독립적이다.단순히 기능을 수행하는 역할만을 함.사용자가 웹 브라우저 사용여부, REST API 호출여부, TCP 소켓 사용여부를 알 필요가 없음. Uploaded by N2T
표현 영역사용자가 보고 상호작용하는 부분사용자가 입력한 ID 와 비밀번호 같은 정보를 받아서 서버에 전달한다.응용 영역사용자의 요청을 받아서 실제로 처리하는 부분웹 사이트에서 회원가입을 요청표현 영역이 해당 요청을 받아서 응용 영역의 서비스에 전달응용 영역은 해당 정보를 사용하여 실제로 회원 가입을 처리하고 결과를 반환@PostMapping("/member/join") public ModelAndView join(HttpServletRequest request) { String email = request.getParameter("email"); String password = request.getParameter("password"); // 사용자 요청을 응용 서비스에 맞게 변환 (4) JoinRequ..
밸류 타입의 식별자 활용식별자를 부각시키기 위하여 밸류 타입을 사용가능하다.OrderNo, MemberId 등이 밸류 타입으로 사용된 식별자이다.밸류 타입을 식별자로 매핑하면 @Id 대신 @EmbeddedId 를 사용@Entity @Table(name = "purchase_order") public class Order { @EmbeddedId private OrderNo number; } @Embeddable public class OrderNo implements Serializable { @Column(name="order_number") private String number; }EmBeddable 테이블에 Serializable 는 왜 사용되었을까?JPA 는 2차 캐시를 사용하여 엔티티를 캐시할..
밸류와 엔티티 구분밸류 매핑 애그리거트애그리거트 내에서 루트 엔티티를 제외한 구성요소는 대부분 밸류 객체별도의 테이블에 데이터를 저장하는 구성요소가 있다면, 그것이 진짜 엔티티인지 의심해야 한다. 예를 들어, 주문 애그리거트에서 OrderLine은 별도 테이블에 저장되지만, 밸류 객체로 취급된다.엔티티 확인밸류가 아닌 엔티티로 확정된 경우, 해당 엔티티가 다른 애그리거트에 속하지 않는지 확인해야 한다.독자적인 라이프 사이클을 가진다면, 별도의 애그리거트일 가능성이 높다.식별자 오해 방지애그리거트 구성요소가 고유 식별자를 갖는지 확인하는 것이 중요하다.테이블에 PK가 있더라도, 그것이 반드시 애그리거트 구성요소의 식별자는 아니다.류 매핑 전략밸류 매핑 오류 예시Article과 ArticleContent 클..