들어가며
개발의 흐름과 Hexagonal 아키텍처 구조에서 각 클래스와 인터페이스가 어떻게 상호작용하는지를 확실하게 이해하기 위해 기록하려고 한다.
어댑터 개발
앞선 3편에서는 Membership 도메인 개발을 통해 회원정보에서 사용되는 값들을 정의했다.
이제 어댑터를 통해 외부와 통신을 어떻게 하는지 코드를 개발할 계획이다.
포트와 어댑터는 동시에 개발되며, 어댑터는 포트의 구현체이므로 먼저 개발한다.
인바운드 어댑터 층은 Controller와 Request 2가지로 구성된다.
HTTP요청을 어떻게 처리할 것인가
@WebAdapter
@RestController
public class RegisterMembershipController {
@PostMapping(path = "/membership/register")
Membership registerMemeber() {
}
스프링 프레임워크에서 제공하는 @PostMapping 어노테이션을 사용하여 /memberships/register 경로로 들어오는 HTTP POST 요청을 처리하기 위한 Controller이다.
registerMembership 메서드는 회원가입 요청을 외부로부터 받아 Service에 보내기 위해 HTTP POST 본문에 있는 데이터를 '어떤 객체'로 받아올 것인지 정해야 한다.
회원가입 registerMember를 위해 어떤 요청이 필요한가?
@Data
@AllArgsConstructor
@NoArgsConstructor
public class RegisterMembershipRequest {
private String name;
private String address;
private String email;
private boolean isCorp;
}
회원가입 registerMember를 위한 객체 값은 name, address, email, isCorp를 받아오기로 한다.
@Data - Getter와 Setter 자동으로 생성
@AllArgsConstructor - 모든 필드의 생성자 생성
@NoArgsConstructor - 매개변수가 없는 기본 생성자 생성
Controller는 외부 요청을 받고 전달하는 클래스
Membership registerMemeber(@RequestBody RegisterMembershipRequest request) {
// request -> UseCase(inbounded port) -> Service (biz logic)
@RequestBody 어노테이션은 HTTP 요청의 본문(body)에 담겨 있는 데이터를 메서드의 파라미터로 매핑/
request 객체의 구조로 전달되는 본문 데이터를 매핑해서 registerMember메서드 실행
request는 UseCase라는 Service가 biz logic을 구현할 수 있도록 연결하는 인터페이스로 전달될 것이다.
'개발 방법론' 카테고리의 다른 글
MSA(마이크로 서비스 아키텍처) 멤버서비스 서비스층 개발 [6] (0) | 2023.12.19 |
---|---|
MSA(마이크로 서비스 아키텍처) 멤버서비스 인바운드 포트 [5] (0) | 2023.12.19 |
MSA(마이크로 서비스 아키텍처) 멤버서비스 도메인 [3] (0) | 2023.12.18 |
MSA(마이크로 서비스 아키텍처)의 멀티 모듈과 DDD(도메인 주도 설계) [2] (0) | 2023.12.18 |
MSA(마이크로 서비스 아키텍처)란? [1] (1) | 2023.12.18 |