Spring 입문주차/1주차

15. Create, Read 구현하기(DTO)

note994 2024. 8. 14. 12:20

DTO란 무엇일까?

 

DTO(Data Transfer Object)는 데이터 전송 및 이동을 위해 생성되는 객체를 의미한다.

Client에서 보내오는 데이터를 객체로 처리할 때 사용된다.

또한 서버의 계층간의 이동에도 사용된다.

그리고 DB와의 소통을 담당하는 Java 클래스를 그대로 Client에 반환하는 것이 아니라 DTO로 한번 변환한 후 반환할 때도 사용된다.

 

특별한것이 아니라 그냥 자바 클래스이지만 의미를 부여한 것이다.

 


Create 구현

1. 메모 데이터를 저장할 Memo 클래스 생성 후 아래 코드 작성

package com.sparta.memo.entity;

import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Getter
@Setter
@NoArgsConstructor
public class Memo {
    private Long id;
    private String username;
    private String contents;
}

 

2. 메모 생성하기 API를 받을 수 있는 Controller와 메서드 생성

controller 패키지를 만들고 MemoController 클래스 만들고 아래의 코드 작성

 

3. Client에 데이터를 반환할 때 사용할 MemoResponseDto 클래스 생성

package com.sparta.memo.dto;

import lombok.Getter;

@Getter
public class MemoResponseDto {
    private Long id;
    private String username;
    private String contents;
}

 

4. Client의 요청 데이터를 받아줄 MemoRequestDto 클래스 생성

 

위와 같은 dto 패키지에 MemoRequestDto 클래스 생성

package com.sparta.memo.dto;

import lombok.Getter;

@Getter
public class MemoRequestDto {
    private String username;
    private String contents;
}

다시 MemoController로 돌아와서 이렇게 수정한다.

클라이언트에서 보낸 데이터를 Entity화 시키기 위해 받은 데이터를 이용해 Memo 클래스의 객체를 생성한다.

 

지금 오류가 발생하는 이유는

Memo 클래스가 현재  기본생성자(@NoArgsConstructor) 밖에 없기 때문이다. 

 

클라이언트로부터 받은 데이터타입을 받는 생성자를 만들어준다.


Memo의 Max ID 찾기

 

현재 DB가 없기때문에 Map으로 대신한다. 

 

현재 저장된 자료중 가장 큰 ID값을 구해서 + 1을 한 후 maxId를 저장한다. 만약 저장된게 없다면 id값을 1로 저장한다.


DB에 저장 후 Responsedto를 사용해 반환

마찬가지로 MemoResponseDto에도 생성자를 만들어줘야 한다.


Read 구현

 


PostMan으로 테스트하기


추가로 알아낸 점

Create 구현하면서 만든 Controller 메서드의 반환이 없어도 일단 정상 작동하는것을 알았다.

'Spring 입문주차 > 1주차' 카테고리의 다른 글

17. Database  (0) 2024.08.14
16. Update, Delete 구현하기  (0) 2024.08.14
14. 메모장 프로젝트 설계  (0) 2024.08.14
13. HTTP 데이터를 객체로 처리하는 방법  (0) 2024.08.14
12. Path Variable과 Request Param  (0) 2024.08.13