Junit 13강

연어는결국강으로·2022년 10월 4일
0

Junit

목록 보기
4/9

13강. 서비스레이어 책등록 완료

  1. 책등록 코드 구현
  • 서비스 단에 아래와 같이 코딩을 하면 문제점이 있다.
@Service
@RequiredArgsConstructor
public class BookService {
	private final BookRepository bookRepository;
	
	
	// 1. 책등록
	public Book 책등록하기(BookSaveReqDto dto) {
		Book bookPS = bookRepository.save(dto.toEntity());
		return bookPS;
	}

1. DTO관련 설명

  • 위 bookPS는 영속화된 객체이다. Book 모델이 다른 모델과 연관관계를 가지게 되는 경우 아래와 같은 문제가 발생할 수 있다.
  • 영속화된 객체를 컨트롤러단까지 응답하게 되면 컨트롤러 단에서 Spring에 있는 open-in-view가 지연로딩(lazy loading)을 하게 해준다.
  • lazy loading을 하게되면 컨트롤러단에서 수많은 변수가 일어날 수 있다.
  • 따라서 데이터를 dto로 주고 받아서 영속화된 객체는 서비스단에서 절대 빠져나가지 못하게 해야 한다.

2. DTO 구현

package com.thekim12.junitproject.web.dto;

import com.thekim12.junitproject.domain.Book;

public class BookRespDto {
	private Long id;
	private String title;
	private String author;
	
	public BookRespDto toDto(Book bookPS) {
		this.id = bookPS.getId();
		this.title = bookPS.getTitle();
		this.author = bookPS.getAuthor();
		return this;
	}
	
}
  • 위와 같이 구현하는 경우 아래처럼 새로운 객체를 만들어서 사용해야 된다는 단점이 있다.
    BookRespDto dto = new BookRespDto();
    dto.toDto(book);
  • 다른 방법으로 static함수로 만드는 방법이 있다. 이것은 메모리에 띄워지는게 단점이다.
    	public static BookRespDto toDto(Book bookPS) {
    			BookRespDto dto = new BookRespDto();
    			dto.id = bookPS.getId();
    			dto.title = bookPS.getTitle();
    			dto.author = bookPS.getAuthor();
    			return dto;
    		}
  • 위 설명을 그림으로 표현한것

0개의 댓글