인프런 커뮤니티 질문&답변

asoostale님의 프로필 이미지
asoostale

작성한 질문수

실전! 스프링 데이터 JPA

@Query, 값, DTO 조회하기

UserForm(실전 1편에서 사용한)도 DTO 조회 쿼리문처럼 사용하면 될까요?

해결된 질문

작성

·

222

·

수정됨

1

실전 1편에서 영한샘 회원 가입이나 주문 Order를 Form을 사용하셧는데요....

 

단순한 save를 쓰더라도 UserForm을 사용시에는 DTO 조회 쿼리 작성 예시처럼 인터페이스 MemberRepository에 저렇게 사용해야하는지 궁금합니다

답변 1

1

안녕하세요. asoostale님, 공식 서포터즈 y2gcoder입니다.

도움을 드리고 싶지만 질문 내용만으로는 답변을 드리기 어렵습니다.

코드 예시와 함께 이해하고 계신 내용을 조금 더 풀어서 설명해주시겠어요?

단순한 save를 쓰더라도 UserForm을 사용시에는 DTO 조회 쿼리 작성 예시처럼 인터페이스 MemberRepository에 저렇게 사용해야하는지 궁금합니다

해당 부분에 말씀해주신 예시가 이해가 가지 않습니다!

넘겨짚어 답변을 드리자면 실무에서는 save할 때는 form 객체나 DTO 객체를 엔티티로 바꾸어 spring data jpa 가 제공하는 save() 을 활용하는 편이고, 조회 시에 DTO를 조회할 때는 이번 강의에서 배우신 것처럼 DTO로 바로 조회해도 되고, 엔티티로 조회한 뒤 이를 DTO로 매핑하는 방법도 있습니다! 추가로 나중에 영한님의 실전! Querydsl 강의를 수강해보시면 DTO 조회 시 조금 더 편하게(?) 조회할 수 있는 방법도 있으니 수강해보시길 적극 추천합니다 :)

 

감사합니다.

asoostale님의 프로필 이미지
asoostale
질문자

개떡같이 질문했는데.. 찰떡같이 답변해주셔서 감사합니다 ..ㅜ

아닙니다. 항상 제가 질문을 오해하고 잘못 답변드릴까봐 걱정되어 더 자세하게 설명해주셨으면 하는 마음이 큽니다:)
파이팅입니다!

asoostale님의 프로필 이미지
asoostale
질문자

서포터즈 선생님.. 추가로 질문 하나 더 해도 될까요? 아무래도 영한님 조언과 관련된 질문이라 다른 사이트나 챗지피티에 물어봐도 질문 의도를 이해하지 못할까봐서요 ..ㅎㅎ

 

다름아닌.. 영한선생님께서 수업 중 계속 강조하셨던 부분 중 하나인데 엔터티 객체는 최대한 순수(?), 안전성을 유지하기 위해 데이터를 주고 받을 때 MemberForm, OrderForm과 같이 DTO를 적극 쓰라고 하셨잖아요..

예를들어 제가 진행중인 토이프로젝트에 엔터티 객체가 5개라고 가정한다면(회원가입하고 아바타 설정하고 친구추가 하고 글 쓰고 댓글 달고 등등등 )

User, Friend, Post, Reply , Avatar 있다 치면

 

여기서 궁금한게

실무에서 얘네가 save에서 사용 되던, Delete로 사용되던 update로 사용되던.. 심지어 단순 조회인 findBy로 1개만 찼던 List로 받던 등등등 모든 DB와 관계된 메서드에 Form을 사용하는게 맞을까요?..

즉 User에는 UserForm을 만들어 놓고(사용된다면)

Post에는 PostForm을 만들고.. 일단 엔터티는 손대지 않고 form을 '무조건'만들어서 사용버릇을 하면되는지 궁금하네요..

 

아직 초급개발학습 단계라 머리에 정리가 안되서요..ㅎㅎ.. 즉 단순히 머리에 데이터를 주고 받을 떄 Form객체로 변환해서 사용한다라고 떄려박고 사용해도 될런지요 ㅎㅎ

 

 

맞습니다! 보통 엔티티 객체는 순수하게 도메인 로직, 핵심 비즈니스 로직만 담고 있게 하는 것이 유지보수 상 좋았습니다!

엔티티에서 http 응답 관련 기능이 들어가는 순간 백엔드 개발자 입장에서 변경하는데 더 많은 제약이 생깁니다!

특히 협업을 하시게 되면 요청에 따라 응답에 새로운 값을 추가하거나 기존에 있던 값을 빼거나, 해야하는 경우가 발생합니다. 예를 들어 유저의 정보를 조회하는 API 만들 때 응답 dto에서 비밀번호는 보여주면 안된다고 하겠습니다. 이 부분을 엔티티에 구현하는게 적절할까요?

이런 부분을 고민해보시면서 엔티티는 최대한 순수하게 작성하시는 것을 추천합니다

asoostale님의 프로필 이미지
asoostale
질문자

선생님... 마지막으로 질문 한번만 더요ㅎㅎㅜㅜ

제가 타분야 회사 다니면서 독학 중인데

영한님 기초부터 쭉 오면서 부분부분적으로 깔짝인 거 빼곤 전체적으로 뭘 만들어보지 않았고.. 큰 틀이 안잡혔는데 이 부분은 어떻게 해결해야할지 모르겠습니다.. 당장에 해볼려고 손대고 있긴 한데 로그인 기능을 어떻게 구현해야할지 몰라 검색해보니 스프링 시큐리티라는게 또 있더라구요.... 또 이거 검색하고 이해하는데 몇시간이고 그렇다고 깔끔하게 손대는 것도 아니라 코드는 에러뜨고 이게 반복입니다.. 이 보안점을 어떻게 해결해야 할까요.. 영한님 강의 중에 정말 크게 한번 클론코딩 해주는 강의는 또 없는 거 같은데. .인프런에 비슷한 의미로 큰 틀을 잡고 전체적으로 흐름을 잡을 수 있는 강의같은게 있을까요?

로그인 방법을 구현하는 것에는 스프링 시큐리티를 사용하는 것도 있지만 필터, 인터셉터 등을 활용해서 직접 구현하는 방법도 있습니다! 영한님께서도 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 강의에서 필터와 인터셉터를 이용해 간단하게나마 로그인을 구현하고 있습니다! MVC 2편을 학습하시고 토이프로젝트로 만들 때 이렇게 필터, 인터셉터를 이용해 로그인 기능을 구현해보는 것은 분명 체득에 많은 도움이 될 것이라 생각합니다.

스프링 시큐리티는 갖고 있는 기능이 많아서 그런지 원리나 구동방식을 이해하는게 쉽지는 않았습니다. 하지만 가볍게 쓸 용도라면 검색을 통해 비교적 쉽게 로그인을 구현하실 수 있습니다 :)

그리고 로그인에는 세션 기반 로그인, 토큰 기반 로그인도 있으니 각 기능들에 대해 이해하고 어떤 기능을 사용하실 것인지에 따라 구현 방식도 달라지게 됩니다.

차근차근 해나가고 싶으시다면 개인적으로는 로그인 기능에 관해서는

  1. MVC 2편 강의를 학습 후 필터, 인터셉터 기반으로 세션 기반 로그인을 구현해본다.

  2. 스프링 시큐리티를 기반으로 세션 기반 로그인을 구현해본다.

  3. 스프링 시큐리티를 기반으로 JWT 로그인을 구현해본다.

이런 식으로 학습을 진행하는 것을 추천합니다 :)

추가로

asoostale님의 프로필 이미지
asoostale

작성한 질문수

질문하기