ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [내일배움캠프] 12월 19일 월요일 TIL 회고록
    카테고리 없음 2022. 12. 20. 00:21

    오늘 공부한 것 : 블로그를 참고하여 과제를 다시 처음부터 만들었다.

     

    과제를 만들면서 RequestDtd와 ResponseDto를 사용했는데 RequestDto랑 ResponseDto랑 무슨 차이이고

    또 왜 쓰는건지 궁금해서 구글링을 해봤다.

     

    DTO ( Data Transfer Object) : DTO는 VO(Value Object)로 불리기도 하며, 계층간 데이터 교환을 위한 객체를 의미한다.

    VO의 경우 Read Only의 개념을 가지고 있다. Entity와 다른 점은, Entity는 데이터베이스와 동일하게 만들어져 있는 클래스이고

    DTO는 Entity와 같은 필드 값을 가질 수는 있지만 Service에서 더 추가하고 빼는 작업등을 할 수 있기 때문에 DTO는 데이터베이스에 

    Column과는 독립적이다.

     

    DTO를 쓰는 이유

    1. Entity 클래스와 거의 유사한 형태임에도 DTO 클래스를 추가로 생성하는 이유는 Entity 클래스가 데이터베이스와 맞닿은 핵심 클래스이기 때문이다.

    Entity 클래스를 기준으로 테이블이 생성되고 스키마가 변경되는데, 화면 변경과 같은 사소한 기능 변경을 위해 테이블과 연결된 Entity 클래스를 변경하는 것은 너무나 큰 변경이다.

     

    또 View Layer와 DB Layer 역할 분리를 철저히 하는 것이 좋은데, 실제로 Controller에서 결과값으로 여러 테이블을 조인해서 줘야 할 경우가 빈번하기 때문에 Entity 클래스 만으로 표현하기 어려운 경우가 많다.

     

    2) 다양한 비즈니스 로직과 요구사항에 대해 유연하게 대응할 수 있다.

     

    파라미터로 엔티티 자체를 받게 되면 엔티티에서 정해진 포맷에 맞춰 개발을 해야한다. 하지만 DTO는 각 비즈니스 로직에 맞춘 필드들만 생성함으로써 DTO를 보면 어떤 값이 매핑되는지 쉽게 파악할 수 있고, 만약 API 설계 상황에서 필드에 다른 이름을 부여하거나 하는 상황에서도 유연하게 대처할 수 있다.

     

    3) Controller와 Service 사이에서 강한 의존을 방지하기 위해서 DTO를 사용한다.

    Service가 받고 싶은 파라미터가 Controller에게 종속적이게 되면 Service가 Controller 패키지에게 의존하게 된다. 따라서 이를 방지하기 위해서라도 Service가 원하는 포맷에 맞춰  Controller 딴에서 DTO를 통해 그 포맷을 맞춰주는 것이다.

     

    4) Service 레이어가 모듈로 분리되어버리면 해당 Type을 쓸 수 없게 된다.

     

    5) 트랜잭션으로 처리되어야하는 DTO 항목이, 항상 요청으로 들어온 결과값과 동일하지 않을 수 있다.

     

    해당 블로그를 참고하며 그대로 적었다.

    https://studyandwrite.tistory.com/402

     

    [스프링/Spring] DTO는 왜 써야 하나?

    1. 고민? DTO(Data Transfer Object)란 계층간 데이터 교환을 위해 사용하는 객체(Java Beans)입니다. 아래 코드를 보면서 DTO는 왜 필요한가에 대해 생각해보겠습니다. * 실제 엔티티 설계의 일부입니다. 위

    studyandwrite.tistory.com

     

    해당 사이트도 보면 좋을 것 같아서 남긴다.

    https://www.baeldung.com/java-dto-pattern

     

    클라이언트와 웹 서버 사이의 요청에 관련된 정보는 Request 객체에 저장되어 관리가 되고,

    응답에 관련된 정보는 Response 객체에 저장되고 관리된다.

     

    Request 

    정의 : 클라이언트가 전송한 요청정보를 제공하는 기본객체

     

    Request의 기능

    1. 클라이언트와 관련된 정보 읽기 ( 클라이언트: 웹브라우저 )
    2. 서버와 관련된 정보 읽기
    3. 클라이언트가 전송한 요청 파라미터 읽기 기능
    4. 클라이언트가 전송한 요청헤더 읽기 기능
    5. 클라이언트가 전송한 쿠키 읽기 기능
    6. 속성처리 기능

    Response

    정의: Response 객체는 웹 브라우저로 클라이언트 요청에 대한 응답할 응답 정보를 가지고 있는 객체

     

    Response의 기능

    1. 서버정보와 서버의 기능, 웹 브라우저에 전달된 컨텐츠 정보 또는 사용자의 로컬컴퓨터에 저장시킬 쿠키들을 클라이언트에게 전달한다.
    2. 웹 페이지에 출력을 생성하는데 사용할 수 있는 메소드를 제공한다.

    입문주차까진 전부 만들었다. 이제 회원가입, 로그인, 토큰기능만 만들면 LV1 과제는 끝날거같다.

    LV2 과제가 문제인데.. 시간안에 다 만들 수 있을지 모르겠다.. 

    알고리즘은 시간날때 천천히 풀어야겠다 ㅠㅠ..

     

Designed by Tistory.