/////
Search
Duplicate
1️⃣

네 개의 영역

: ‘표현’, ‘응용’, ‘도메인’, ‘인프라스트럭쳐’는 아키텍처를 설계할 때 출현하는 전형적인 네 가지 영역
표현
: 네 영역 중 표현 영역은 사용자의 요청을 받아 응용 영역에 전달하고 응용 영역의 처리 결과를 다시 사용자에게 보여주는 역할을 수행
: 웹 애플리케이션을 개발할 때 많이 사용하는 스프링 MVC 프레임워크가 해당 영역에 해당, 웹 어플리케이션에서 표현 영역의 사용자는 웹 브라우저를 사용하는 사람일수도 있고 REST API를 호출하는
외부 시스템일 수도 있음
: HTTP 요청을 응용 영역이 필요로하는 형식으로 변환해서 응용 영역에 전달하고 응용 영역의 응답을 HTTP 응답으로 변환하여 전송, 표현 영역의 웹 브라우저가 HTTP 요청 파라미터로 전송한 데이터를
응용 서비스가 요구하는 형식의 객체 타입으로 변환해서 전달하고, 응용 서비스가 반환한 결과를 JSON 형식으로 변환해서 HTTP 응답으로 웹 브라우저에 전송
응용
: 응용 영역은 시스템이 사용자에게 제공해야 할 기능을 구현, ‘주문 등록’, ‘주문 취소’, ‘상품 상세 조회’와 같은 기능 구현을 예로 들 수 있음
: 응용 영역은 기능을 구현하기 위해 도메인 영역의 도메인 모델을 사용, 주문 취소 기능을 제공하는 응용 서비스를 예로 들경우, 다음과 같이 주문 도메인 모델을 사용해서 기능을 구현
export class CancelOrderService { public cancelOrder(orderId: string) { const order = findOrderById(orderId); if (order === null) throw new Error(...); order.cancel(); } ... }
TypeScript
복사
: 응용 서비스는 로직을 직접 수행하기보다는 도메인 모델에 로직 수행을 위임, 위 코드도 주문 취소 로직을 직접 구현하지 않고 Order 객체에 취소 처리를 위임하고 있음
도메인
: 도메인 영역은 도메인 모델을 구현, 1장에서의 Order, OrderLine, ShippingInfo 등이 해당
: 도메인 모델은 도메인의 핵심 로직을 구현, 예를 들어 주문 도메인은 ‘배송지 변경’, ‘결제 완료’, ‘주문 총액 계산’과 같은 핵심 로직을 도메인 모델에서 구현
인프라스트럭처
: 인프라 스터럭처는 구현 기술에 대한 것을 다룸, 이 영역은 RDBMS 연동을 처리하고 메시징 큐에 메시지를 전송하거나 수신하는 기능을 구현하고 몽고DB나 레디스와의 데이터 연동을 처리
: 이 영역은 SMTP를 이용한 메일 발송 기능을 구현하거나 HTTP 클라이언트를 이용해서 다른 서버의 REST API를 호출하는 것도 처리, 인프라스터럭쳐는 논리적인 개념보다는 실제 구현을 주로 다룸
: 도메인 영역, 응용 영역, 표현 영역은 구현 기술을 사용한 코드를 직접 만들지 않음, 대신 인프라스트럭처 영역에서 제공하는 기능을 사용해서 필요한 기능을 개발
: 응용 영역에서 DB에 보관된 데이터가 필요하다면 인프라스트럭처 영역의 DB 모듈을 사용하여 데이터를 읽어옴, 비슷하게 외부에 메일을 전송해야할 때는 인프라스트럭처가 제공하는 SMTP 연동 모듈을 이용해서
메일을 발송