티스토리 뷰

반응형

페이지에 설명된 소스코드는 링크에 있습니다.

 

가장 먼저 API를 통해서 데이터베이스에 저장하는 것을 개발해보자.

구현해놓은 Entity와 JPA repository를 통해서 구현이 가능하다.

 

API Code

@PostMapping("/api/v1/members")
public CreateMemberResponse saveMemberV1(@RequestBody @Valid Member member){
    Long id = memberService.join(member);
    return new CreateMemberResponse(id);
}

[참고] Member.java

@Entity
@Data
public class Member {

    @Id @GeneratedValue
    @Column(name = "memeber_id")
    private Long id;

    @NotEmpty
    private String name;

    @Embedded
    private Address address;

    @JsonIgnore // 주문정보가 빠지게 된다. api 호출시에
    @OneToMany(mappedBy = "member") // 읽기전용이 된다.
    private List<Order> orders = new ArrayList<>();
}

 

비즈니스 로직상에서 구현해놓은 join 기능을 통해서

@RequestBody를 통해서 받은 member를 넣어주면 되는 간단한 코드이다.

하지만 해당 소스 코드는 운영상의 문제가 있다.

왜냐하면 entity를 직접 접근하게 되면 entity가 API가 의존하게 된다.

 

예를 들어 entity의 이름을 변경하게 된다면, API spec 자체를 변경해줘야하는 불편함이 있다.

또한, 회원등록 API가 여러개라면 더욱 복잡하게 된다.

 

그래서 만드는 API와 대응하는 DTO를 만들어 별도의 객체로 관리하는 것이 좋다.

@PostMapping("/api/v2/members")
public CreateMemberResponse saveMemberV2(@RequestBody @Valid CreateMemberRequest request){

    Member member = new Member();
    member.setName(request.getName());

    Long id = memberService.join(member);
    return new CreateMemberResponse(id);
}

CreateMemberRequest(DTO)

@Data
static class CreateMemberRequest{
    private String name;

}

CreateMemberResponse(DTO)

@Data
static class CreateMemberResponse{
    private Long id;

    public CreateMemberResponse(Long id) {
        this.id = id;
    }
}

 

위처럼 API에서 저장하고 싶은 정보를 바탕으로 한 DTO를 생성(CreateMemberRequest)하고,

거기서 validation하거나 해당 API spec을 만들면 된다.

728x90
반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함
250x250