발자국 리팩토링을 시작으로 디프만부터 지금까지 계속 JPA를 공부하며 사용하고 있다
사실 따지고보면 제대로 JPA를 사용한지는 반년도 안됐다
근데 그마저도 대부분 구글링하고 공부하면서 하는거라 제대로 쓸 줄 모른다..😭
하지만 디프만 덕분에 엄청난 성장을 했기에 실패에 무너지지 않으며 계속해서 공부하며 성장하고 있따!!
아무튼 이게 중요한게 아니라 오늘 발자국 리팩토링을 하면서 해낸 걸 정리하고자 글을 쓴다
JPA 사용을 제대로 해본게 디프만에서 무려 우수상을 받은 '개미는 툰툰'이 처음이었는데..ㅋㅋㅋㅋㅋㅋ
냅다 자랑하는거 웃기네 아무튼!!
항상 JPA를 쓸 때는 엔티티 그대로 조회해서 비즈니스 단에서 DTO로 필요한 정보만 뽑아 쓰는 방식으로 했다
사실 그동안의 API는 그렇게 해도 부하가 클 정도로 데이터를 조회해오지 않아서 이렇게 하는게 오히려 빠르고 쉬웠다
코드도 저게 더 간결했음!
그냥 repository에는 간단한 조회 로직만 있으니까!!
근데 발자국 코드는 기존에 JDBC로 구현했기도 했고 처음했던 프로젝트였던 만큼 DTO랑 도메인이 꼬일만큼 꼬여있었다
그래서 코드도 사실 많이 지저분하고 안쓰는 모델도 되게 많다ㅠ
지금 차근차근 정리하고 있긴 하지만 이걸 아예 깨끗하게 새로 짠다는건 사실 말이 안된다..
그럼 안드한테 넘겨주는 DTO 변경도 많이 발생할텐데 그러면 안드도 수정을 해야하니까..ㅠㅠ
그래서 최대한 기존 DTO는 변경하지 않는 선에서 깔끔하고 간결하게 JPA를 사용하려고 했다
그런데 그러다보니 엔티티를 그대로 조회해서 서비스에서 처리하는 것도 한계가 있었다..
사실 DTO 매핑해서 JPA 조회하는거 가능한건데 내가 어려울까봐 무서워서 애써 모른척했다
근데 오늘 막상 해보니까? 나름 할만했다!!!
https://algorithmstudy-mju.tistory.com/153
먼저 내가 참고한 블로그를 남긴다!!
이분도 나랑 비슷한 고민을 하셨는데 방법은 생각보다 간단했다
나도 처음에는 native query를 쓰고 데이터에 적당한 alias를 지정하면 될 줄 알았지만
No converter found capable of converting from type...
라는 에러를 마주하게 되었다
그래서 저 블로그를 보고 해결한 방법은 그냥 인터페이스를 만들어서 매핑시켜주는 것이었다
Spring JPA Projection으로 내가 정의한 인터페이스를 기준으로 적절한 데이터만 가져오는것을 이용하여 Repository에 있는 반환값에 매핑시켜주는것이다.
요건 블로그에 있던 글!!
기존에 반환하려던 DTO의 인터페이스를 생성하고 getter 함수를 인터페이스에 정의해준다
그리고 repository에서 생성한 인터페이스로 조회하고 이를 다시 DTO로 변경하는 방식으로 Mapping에 성공했다
사실 이게 맞는 방법이 아닐수도 있고, 이것보다 더 좋은 해결 방법도 분명히 있을 것이다
하지만 오늘의 나에겐 이게 최선의 방법이었고 다음에 더 좋은 방법을 찾으면 공부해서 수정하면 되니까!
오늘도 자그마한 나의 성장에 만족스럽다
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
뭐 이렇게 대단하게 쓸일은 아니지만 난 이 문제로 꽤 오래 고민했는데 오늘 해결해서 기분이 너무 좋다ㅠㅠ
그래서 API 한개만 더 리팩토링 하고 자려고ㅋㅋㅎㅋㅎㅋ
내일 운동... 갈수 있지 그럼...
열정야미 컴백했다 그럼 빠잉!
'UMC 발자국' 카테고리의 다른 글
너디너리 1기 해커톤 후기🌱 (0) | 2022.05.24 |
---|---|
빌더 패턴 (Builder Pattern) (0) | 2022.04.03 |
UMC 1기를 마치며✨👣 (3) | 2022.02.18 |
[Spring] Spring Security 기능을 제거하는 간단한 방법 (0) | 2022.01.15 |
[MySQL] 좌표 및 동선 저장 방법 (0) | 2022.01.11 |
댓글