TypeORM과 같은
ORM
을 쓰게되면 Entity, DTO와 같이 DataBase의 Schema를 정의하는 파일을 나누어 사용하게되는데 일단 뭔지는 알아야지 어떻게 TypeORM이 해당파일을 읽는지, 더 효율적으로 코드를 짤수있을지 알수있을것 같다
Entity
에서의 Class는 실제DB
테이블에 존재하는Column
들과 매핑되는 Class이며,
DB
의 영속성을 나타내기위해 사용된다 즉,Entity
로Request
,Response
를 나타내는것은 목적에 맞지않는것
Entity
는 변경하게되면 서로 의존성이 있는 클래스에 영향을 끼치게 되므로 변경이 안되게 해야하는데 View단에서의 변경을위해서 DTO를 만들게 된다
Data Transfer Obejct(데이터 전송 객체)
Layer사이의 교환이
Clienet <-
(DTO)
-> Controller <-(DTO)
-> Service <-(Entity)
-> DB이뤄질수 있도록 하는 객체로 View <-> Controller사이의 데이터를 주고 받을때 활용성이 높다 (변경이 가능하므로) 하지만 비즈니스 로직은 포함되지않는다 (비즈니스 로직은
Service
)
Entitiy
는 값이 변하면 DB에 반영이 되기때문에 해당 DB를 쓰는 모든 Service에 반영이 된다, 즉 객체 설계를 위해서는 DTO로 분리를해 관리를 해야한다
즉, DB와 View사이의 역할을 분리하기 위해
Entity와 DTO를 분리하게된다
국비학원에서 Spring Boot를 통한 프로젝트를할때 DTO,DAO,VO에대한 개념이 모호한상태에서 프로젝트를 진행하다보니 어디에선 VO,어디에선 DTO이렇게 썻는데 확실하게 분리하는법을 알게됐다