본문 바로가기
스프링 (Spring)/DTO, Lombok, JPA, H2

DTO, Data Transfer Object

by 후닝훈 2021. 7. 15.
반응형

Data Transfer Object (DTO)

- 계층 간 데이터 교환을 위해 사용하는 객체

- 여기서 말하는 계층이란, View - Controller - Service - DAO와 같은 각 계층을 말한다.

- VO와 혼용되어 쓰이나, 이는 보통 DTO를 지칭하는 말이다.

- 데이터를 전달하고 주고 받을때 기존의 클래스를 사용하지 않고, 새로운 클래스를 만들어서 하는것.

- 데이터를 담을 private 변수와 그 변수를 조작할 수 있는 Getter, Setter 메서드로 구성돼있다.

 

- form, ajax에서 name 필드 값을 프로퍼티에 맞춰서 값을 다른 페이지로 넘겼을 시 , 값을 받아야 할 페이지에서는 값을 하나씩 일일이 받는 것이 아니라 name 속성의 이름이랑 매칭 되는 프로퍼티에 자동적으로 DTO가 인스턴스화 되어 UserDTO를 자료형으로 값을 받을 수 있다.

- DB 값 → DAO → Service → DTO

 

기존의 코드

public Long update(Long id, Course course) {
        Course course1 = courseRepository.findById(id).orElseThrow(
                () -> new IllegalArgumentException("해당 아이디가 존재하지 않습니다.")
        );
        course1.update(course);
        return course1.getId();
    }

업데이트 서비스에서 업데이트 메소드를 만들었을 때,

1. 업데이트할 대상의 ID

2. 업데이트할 내용을 가진 데이터

가 Course class를 이용해서 전달을 받고 있다.

이는 DB에 연결된 Class를 직접적으로 바꾸는 방식이라, 오류가 날 가능성이 높아진다.

이러한 상황에서 DTO가 필요한 것이다.

 

DTO 파일 생성

package com.sparta.week02.domain;

import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.Setter;

@Setter
@Getter
@RequiredArgsConstructor
public class CourseRequestDto {
    private final String title;
    private final String tutor;
}

 

Application 수정

            // 이 코드를
            Course new_course = new Course("웹개발의 봄, Spring", "임민영");
            courseService.update(1L, new_course);
            // 아래와 같이 수정	
            CourseRequestDto requestDto = new CourseRequestDto("웹개발의 봄, Spring", "임민영");
            courseService.update(1L, requestDto);

 

CourseService 수정

   // 이 코드를
   @Transactional 
    public Long update(Long id, Course course) {
        Course course1 = courseRepository.findById(id).orElseThrow(
                () -> new IllegalArgumentException("해당 아이디가 존재하지 않습니다.")
        );
        course1.update(course);
        return course1.getId();
    }
    
    // 아래와 같이 변경
     @Transactional 
    public Long update(Long id, CourseRequestDto requestDto) {
        Course course1 = courseRepository.findById(id).orElseThrow(
                () -> new IllegalArgumentException("해당 아이디가 존재하지 않습니다.")
        );
        course1.update(requestDto);
        return course1.getId();
    }

 

Course 수정

    public Course(CourseRequestDto requestDto) {
        this.title= requestDto.getTitle();
        this.tutor = requestDto.getTutor();
    }

	public void update(CourseRequestDto requestDto) {
        this.title = requestDto.getTitle();
        this.tutor = requestDto.getTutor();
    }

 

실행확인

 

 

Application 전체코드

public class Week02Application {

    public static void main(String[] args) {
        SpringApplication.run(Week02Application.class, args);
    }
    @Bean
    public CommandLineRunner demo(CourseRepository courseRepository, CourseService courseService) {
        return (args) -> {
            courseRepository.save(new Course("프론트엔드의 꽃, 리액트", "임민영"));

            System.out.println("데이터 인쇄");
            List<Course> courseList = courseRepository.findAll();
            for (int i=0; i<courseList.size(); i++) {
                Course course = courseList.get(i);
                System.out.println(course.getId());
                System.out.println(course.getTitle());
                System.out.println(course.getTutor());
            }

            CourseRequestDto requestDto = new CourseRequestDto("웹개발의 봄, Spring", "임민영");
            courseService.update(1L, requestDto);
            courseList = courseRepository.findAll();
            for (int i=0; i<courseList.size(); i++) {
                Course course = courseList.get(i);
                System.out.println(course.getId());
                System.out.println(course.getTitle());
                System.out.println(course.getTutor());
            }
        };
    }
}
반응형

'스프링 (Spring) > DTO, Lombok, JPA, H2' 카테고리의 다른 글

JPA 사용 심화  (0) 2021.07.20
Lombok  (0) 2021.07.15
Spring의 Service / JPA Update, Delete  (0) 2021.07.14
JPA Repository - Save, findAll, findById  (0) 2021.07.14
CRUD  (0) 2021.07.13

댓글