의문?!
테이블을 막 건드려도 될까?
= read, update할 때 Course 클래스를 막 써도 될까?
= 내가 아닌 다른 사람이 변경이라도 한다면??
😱 완충재로 활용하는 것이 DTO(Data Transfer Object)입니다.
1. DTO (Data Transfer Object)란?
- 데이터 전송 객체는 프로세스 간에 데이터를 전달하는 객체이다. 프로세스 간 통신이 일반적으로 원격 인터페이스로 재정렬하면서 이루어지게 되는데 여기에서 각 호출의 비용이 많다는 점을 동기로 하여 이용하게 된다.
2. 사용법
2-1) 경로
2-2) 코드
**@RequiredArgsConstructor -> private으로 선언된 멤버 변수가 final로 선언되면 생성자를 자동으로 만들어줌.
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@RequiredArgsConstructor
public class CourseRequestDto {
private final String title;
private final String tutor;
}
-> Course로 연결 되어 있던 코드 Dto로 연결
- Course 클래스
public void update(CourseRequestDto requestDto) {
this.title = requestDto.getTitle();
this.tutor = requestDto.getTutor();
}
- CourseService 클래스
@Transactional // SQL 쿼리가 일어나야 함을 스프링에게 알려줌
public Long update(Long id, CourseRequestDto requestDto) {
Course course1 = courseRepository.findById(id).orElseThrow(
() -> new IllegalArgumentException("해당 아이디가 존재하지 않습니다.")
);
course1.update(requestDto);
return course1.getId();
}
- Application (호출부)
CourseRequestDto requestDto = new CourseRequestDto("웹개발의 봄, Spring", "임민영");
courseService.update(1L, requestDto);
**** DAO/DTO/VO ****
DAO
- DAO(Data Access Object) 는 데이터베이스의 data에 접근하기 위한 객체입니다. DataBase에 접근 하기 위한 로직 & 비지니스 로직을 분리하기 위해 사용합니다.
DTO
- DTO(Data Transfer Object) 는 계층 간 데이터 교환을 하기 위해 사용하는 객체로, DTO는 로직을 가지지 않는 순수한 데이터 객체(getter & setter 만 가진 클래스)입니다.
- 유저가 입력한 데이터를 DB에 넣는 과정을 보겠습니다.
- 유저가 자신의 브라우저에서 데이터를 입력하여 form에 있는 데이터를 DTO에 넣어서 전송합니다.
- 해당 DTO를 받은 서버가 DAO를 이용하여 데이터베이스로 데이터를 집어넣습니다.
VO
- VO(Value Object) 값 오브젝트로써 값을 위해 쓰입니다. read-Only 특징(사용하는 도중에 변경 불가능하며 오직 읽기만 가능)을 가집니다.
- DTO와 유사하지만 DTO는 setter를 가지고 있어 값이 변할 수 있습니다.
DAO/DTO/VO 출처 : https://melonicedlatte.com/2021/07/24/231500.html
'프로그래밍 > SpringBoot' 카테고리의 다른 글
REST API - GET/POST/PUT/DELETE - Controller (0) | 2022.05.22 |
---|---|
Rest API란? (Rest의 개념) (0) | 2022.05.22 |
Lombok (0) | 2022.05.22 |
JPA (3) - Create, Read, Update, Delete - Service (0) | 2022.05.22 |
JPA (2) - 생성일자, 수정일자 (0) | 2022.05.22 |