DevBoi

[JPA] ModelMapper 관련 공부 본문

Develop/[JPA]

[JPA] ModelMapper 관련 공부

HiSmith 2022. 10. 27. 14:47
반응형

최근 사이드 프로젝트를 계속 진행하면서, 뭔가를 정리할 시간이 없었다...

뭔가 알고는 있었지만 계속 찾아서 써먹는 ModelMapper에 대해서 정리를 해보려고한다.

 

잘알다 싶이, JPA에서 사용하는 Entity는 DTO로 사용하면 절대 안된다.

쉽게 얘기하면, DB layer와 view layer에서 각각 엔티티와 DTO를 다르게 사용해야한다.

이유는 다양하지만, JPA특성상 엔티티의 값을 set하고, save하면 자동으로 디비 쿼리가 나가기 때문에가 가장 크다고 생각한다.

 

Entity를 Dto처럼 쓴다면, 추후 운영 상에 디비에 대한 정보를 의도치 않게 바꿀수 있다.

 

그래서

Entity와 Dto를 분리해야하는데, Entity로 정보를 얻고, 이걸 Dto로 변환하려면 어떻게 해야할까?

ModelMapper라는 라이브러리로, 자동으로 매핑 시켜줄 수 있다.

 

ModelMapper는 스프링 빈으로 등록해서 사용하면 된다.

물론 이게 최선의 구조는 아니다.

단순히 정상적으로 모델 매퍼가 동작하는지 테스트를 위한것이다.

해당 처럼하면, service에서 repository로 엔티티리스트를 받고, 

해당 엔티티를 dto로 변환해서, 컨트롤러, 즉 웹 레이어로 넘기게 된다.

아 참고로 RootContext 위에는 컴포넌트를 붙여야한다 (어노테이션)

해당 전체 데이터를 가져와서 입장, 미입장 코드에 따라 정렬한 값이다.

전체 데이터를 보여줄때 사용할 메소드이다.

 

보기가 너무 답답해서 stream과 람다를 활용해서, 변경했다.

해당 부분으로 getAllUserInfo로 활용, 해당 데이터를 Ajax로 불러오는 것까지 성공했다.

이렇게 modelmapper를 사용하면된다

단순히 소스와 목적지만 넣으면 알아서 해주니까 편하다 ㅋ

 

무튼 저기에서 서비스단위에서 해당 로직을 수행해서 써도되고

모델안에서 변환 로직을 짜서 그안에서 꺼내서 써도 뭐..된다..

반응형

'Develop > [JPA]' 카테고리의 다른 글

[JPA] JPA Dto <-> entity  (0) 2022.12.07
[JPA] 도메인 설계  (0) 2022.11.23
[JPA] 모델 설계 및 구현  (0) 2022.09.08
[JPA] Page 기능 개발  (0) 2022.03.21
[JPA] 비관적 락 과 낙관적 락  (0) 2022.03.21