일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- table
- 개발공부
- 리액트
- React
- sql
- 개발
- 스프링
- 컴포넌트
- java
- reactjs
- mssql
- DATABASE
- 보안취약점
- 쿼리
- 자바
- Spring
- 스프링부트
- Vue
- restapi
- crud
- component
- GIT
- EXTJS
- JS
- Intellij
- jdk
- 자바스크립트
- springboot
- javascript
- 데이터베이스
- Today
- Total
준준의 기록일지
[DTO] 왜 Entity와 나눠야하는가에 대한 고민 본문
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
현재 솔루션을 개발중인 2년차 개발자입니다.
현재 회사에서는 Object(Entity Class)를 objects 패키지에 전부 넣어두고 Entitiy로 통신을 주고 받고 있습니다.
고객사 사이트마다 테이블 커스텀이나, 비즈니스 요구사항이 수정될 경우 문제가 있었지만, 큰 비상사태는 없던걸로 기억합니다. (다행히도..?) 문제는 잘 실행되던게 svn에서 update받아서 실행하면 종종 안되는 경우가 있었는데, 확인해보면 Entitiy에 컬럼정보나 이름이 수정되서였습니다. -> 지식이 부족했던 터라,,, udpate받으면 되지~ 커밋이 안됐나보지 했는데 학습을 할수록 이 구조가 잘못됐다는 걸 깨닫고 있네요.
현재는 ExtJS, Spring Legacy, mssql 로 솔루션 2.0에 대한 유지보수 및 엔지니어링 업무를 수행하고 있는데,
최근 국정원 보안기능확인서 취득이 필요해짐에 따라 솔루션 3.0버전에 대한 니즈가 발생했습니다. 이에 보안 코드가 적용된 개발이 필요해서 일명 "새출발"이 필요했는데, 저랑 팀 내에 두분과 함께 재개발을 진행하게 되었습니다.
모든 부분을 재개발할 수 없기때문에 보안관련 부분은 외주에 맡겨 모듈로 받아오고, 저희 VDI 작업을 진행해주던 봇들은 c#으로 대체 개발하게 되었다고 합니다.
오로지 웹개발에만 정진할 수 있게 되었다!!
현재 Vue.js Springboot 2.5.x로 진행하고, 기존에도 Hibernate를 사용했지만, 제 생각엔 하이버네이트, Spring data JPA의 특장점을 다 버린듯한 느낌을 받았습니다.
이에 Spring Data JPA 학습과 함께 적용을 적극적으로! 하고자 합니다.
첫번째 문제인 Entity -> Entity / DTO로 나눠야하는 이유에 대해 알아보자.
대부분의 Entity클래스들은 대부분 DB 테이블 스키마와 1:1로 매칭된 형태의 구조를 가지고 있다.
특히 JPA를 사용하는 경우 Entitiy 클래스 = DB 테이블이라고 봐도 될 정도로 거의 동일한 구조를 가진다.
DTO를 사용해야하는 이유
- DB 설계와 동일한 객체를 화면에 공개
- 응답 객체가 항상 엔티티와 동일할까.
- 순한참조 문제
- 어떤 값을 요청하고 어떤 값을 응답하는지에 대한 설계서 역할.
DTO를 도입함에 있어서 고민되는 부분
- 어디서부터 어디까지 DTO를 사용할 것인가.
- Entitiy -> DTO, DTO -> Entity 변환은 어떻게 할 것인가
- 어떻게 만들것인가. (모든 요청 / 응답마다 클래스 생성?)
출처 : https://velog.io/@aidenshin/DTO%EC%97%90-%EA%B4%80%ED%95%9C-%EA%B3%A0%EC%B0%B0
'스프링' 카테고리의 다른 글
[JPA, MSSQL] varchar와 nvarchar의 차이 및 String -> NVARCHAR 형변환 방법 (0) | 2021.11.22 |
---|---|
[스프링부트] 패키지 구조에 대한 고민 (0) | 2021.10.29 |
[JPA] JPA, Hibernate, Spring Data JPA (0) | 2021.08.31 |
[스프링 부트와 AWS로 혼자 구현하는 웹 서비스] Spring 비즈니스 로직의 영역 설명 (0) | 2021.08.27 |
[lombok] 기능정리 펌 (0) | 2021.08.25 |