항해 99 본과정 TIL

항해 주특기 스프링

둥탕탕 2023. 4. 18. 22:12

스프링 주 LV1과제

-로그인 기능이 없는 게시물 만들기가 스프링 1주차 과제로 주어졌다. 정말 아무것도 모르는 상태에서 만들려고 하니까 어려움이 많았다.. 

-과제를 진행하면서 중요했던 부분 어려웠던 부분을 정리하겠다.

 

 

 

ENTITY를 그대로 반환하지 말고 DTO에 담아서 반환하기

 

Entity - DB 테이블과 매핑되는 클래스로 데이터베이스의 테이블에 존재하는 컬럼들을 필드로 가지는 객체

          -  데이터베이스의 persistent의 목적으로 사용되는 객체 -> requset나 response 값을 전달하는 클래스로 사용x

          - 여러 서비스나 로직들이 Entity 클래스를 기준으로 동작하기 때문에 변경하지 않는게 좋다.

          - Setter 메소드 사용 지양 -> 변경되지 않는 인스턴스에 대해서도 setter로 접근이 가능해지기 때문에 객체의 일관성

            보안성 보장 어려움.

         - Setter 메서드가 아닌 Constructor(생성자)를 사용하여 불변 객체로 활용

 

 

 

 

DTO(Data Transfer Object)

           -계층 간 데이터 교환이 이루어질 수 있도록 하는 객체

           - Controller같은 클라이언트 단과 직접 마주하는 계층에서는 Entity 대신 DTO를 사용해서 데이터 교환

           - Controller외에도 여러 레이어 사이에서도 사용가능. 

           -Getter, Setter 메서드 포함하고 있음(setter 매서드를 가지는 경우 가변 객체로 활용)- 껍데기

 

 

 

Entity와 DTO를 분리하는 이유

 

DTO는 데이터를 담고 있다는 점에서 Entity와 유사하지만 목적 자체가 전달이다. -> 일회성 사용되는 성격

Entity객체는 단순히 데이터를 담는 객체가 아니라 실제 데이터베이스와 관련된 중요한 역할을 한다,

DB로부터 조회된 Entity를 그대로 View로 넘기게 되었을 때 노출되면 안되는 정보까지 노출이 될수도 있다.