inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 데이터 JPA

JPA 프로그래밍 1. 프로젝트 세팅

Jpa 프로젝트 구성 패키지 질문 드립니다!

해결된 질문

518

biggwang

작성한 질문수 4

0

안녕하세요! 유익한 강의 감사드립니다!

현재 JPA 프로젝트 셋팅중에 있는데요

사내에서 패키지 구성을 DTO, VO, Entity모두 사용하고 있는데

[질문] 궁금한것은

- DTO(Controller), VO(Service), Entity(Repository)

- DTO, Entity 

위 2가지 방안중 어느것이 맞을까요?? 현재 DTO, VO, Entity 로 가려고 하는데 굳이 DTO, VO는 같이 써도 될것 같아서요 검색을 해봐도 3가지를 같이 쓰는데는 없는거 같은데 

 

선장님은 어떻게 구조를 잡고 계신 생각이 궁금하여 문의드립니다!

spring java JPA

답변 4

1

백기선

개발자 마다 DTO, VO, Entity의 의미를 너무 다양하게 생각하고 있어서 뭐라고 말해드리기 어려울거 같습니다.

제가 생각하는 Value Object는 Immutable한 객체를 만들 때 쓰는 패턴이고 도메인 객체와 클래스를 설계할 때 엔티티와 대비되는 개념으로 이해하고 있습니다. 그래서 서비스 계층에서만 쓴다고 암시하듯이 적어두신게 무슨 뜻인지 ㅈ잘 와닿지가 않습니다.

Data Tranfer Object는 요청에 들어온느 데이터를 받거나 내보내거나, 또는 저장소에서 데이터를 가져오거나 넣어나 계층을 넘나드는 객체가 해당 영역으로의 변환이 필요한 상황에서 쓰는 객체로 이해하고 쓰고 있습니다. 따라서 컨트롤러 계층에만 국한되진 않지만 주로 거기서 쓰고 있긴하죠.

마지막으로 Entity도 도메인 객체와 클래스를 설계할 때 쓰는 개념으로 식별자가 있고 고유한 라이프사이클이 필요한 객체로 이해하고 있습니다. 앞서 언급한 Value Object와 다소 대비되는 개념으로요. 물론 이 타입을 스프링 데이터 JPA가 제공하는 Repository를 구현할 때 주로 쓰긴 하지만 그 용도에만 국한된 개념이 아니라 모든 계층에서 두루 사용되는 객체입니다.

이 모든 걸 다 보여드리는 프로젝트는 없지만 스프링 기반 REST API 개발이라는 강좌에서 조금이나마 제 코딩 패턴을 엿볼 수 있지 않을까 싶습니다.

0

biggwang

답변 감사합니다~!

고민해보고 싶었던 주제 였는데 링크 참고하며 정리해 보도록 하겠습니다.

 

0

백기선

저는 VO에 대한 자세한 내용은 다음 링크를 참고하세요.

https://martinfowler.com/bliki/ValueObject.html
http://wiki.c2.com/?ValueObject

네 필요한 상황에 쓰려고 노력하긴 하는데 제대로 따르고 있진 않는거 같네요. 그리고 REST API에선 객체지향적인 설계 보다는 REST API 구현체 초점이 맞춰져 있어서 DTO와 Entity는 등장하지만 VO는 안쓴거 같네요. 굳이 따지먄 enum을 VO로 생각할 수 있지 않을까 싶긴 하지만요.

0

biggwang

답변 감사드립니다!

특정 레이어에 국한된것은 아니군요...

Controller -> Service 로 넘어갈때 DTO가 가면 안되고 VO로 변환해야 한다는 (ModelMapper 사용) 암묵적 규칙을 인지해서 위와과 같이 레이어별로 질문을 드린거 같습니다.

 

바쁘시겠지만 마지막으로 2가지만 질문 드리고 싶습니다.

[질문 1]

Immnutable 한 객체 VO를 사용한다면 어떤 상황일까요?

예를 들어 등록폼에 대한 저장 이벤트가 발생 했을때,
Controller에서 DTO객체로 받아 그 객체가 그데로 Service 그리고 Reopository 로 넘어가서 DB Insert가 이루어지는 로직이있습니다.

이때 VO 객체를 사용해야 하는 부분이 있을까요? @Entity 선언된 Entity 객체에서 받아서 Insert 하면 위 상황에서는 VO가 필요한부분은 없어 보여서 질문드립니다.

 

[질문2]

그러면 선장님은 Spring Project 하실 때 DTO, VO, Entity 객체 모두 활용하고 계시는거죠?

 

REST API 강의도 듣고 있는데 다시 한번 확인도 해보겠습니다.

답변주시면 감사하겠습니다~!

spring boot 2.7.13-SNAPSHOT trace 소문자 로그 안나옴

0

532

1

<스프링 데이터 Common: 기본 리포지토리 커스터마이징> 에 대한 질문

0

392

1

comment table에서 저장될떄 왜 id값이 2부터저장이되는건가요?

0

407

1

@EnableJpaRepositories 설정을 스프링부트가 어디에서 자동설정하나요?

0

450

0

PersistenceContext 관련 질문드립니다.

0

335

1

지금(Eager), 나중에(Lazy)의 의미를 모르겠습니다

0

338

1

transaction 구간이 길어질 경우의 처리방법 문의드립니다.

0

905

1

docker postgres

0

292

1

Multiple DataSource 사용 시 transaction 관련 질문 드립니다.

0

2908

1

entity 중 null이 아닌 필드만 update 할 방법이 있을까요?

0

1190

1

Eager 모드일 경우, join을 inner join으로 바꾸는 법이 있을까요?

0

385

1

엔티티를 상속받는 DTO가 일반적인가요?

1

1847

1

커스텀 타입 클래스를 String 타입 처럼 이용해 쿼리하는 방법에 대해 질문하고 싶습니다.

0

339

1

연관관계 매핑 어떤식으로 해야될지 감이 안잡힙니다.

0

566

4

EntityManager 주입시 Annotation관련 질문드립니다.

0

565

1

클래스 기반 프로젝션 사용 관련 질문

0

560

1

save 메서드 질문드립니다.

0

258

1

복잡한 통계쿼리도 JPA로 가능한가요?

2

5592

1

find 와 get의 차이가 무엇인가요?

0

890

1

실무에서 JPA 할 때 FK로 개발할때 연관관계를 꼭 맺어주어야 하나요?

0

998

1

\dt Did not find any relations.

0

481

1

소스코드는 어디서 볼 수 있을까요?

1

287

1

table 생성과 select 문에 대한 질문

0

174

1

스프링 데이터 RepositoryTest 관련 질문

0

2173

2