인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

에욱님의 프로필 이미지
에욱

작성한 질문수

스프링 시큐리티 완전 정복 [6.x 개정판]

커스텀 UserDetailService 구현하기

AccountDto 생성 이유

작성

·

78

0

  1. 지금 생성한 AccountDto는 Account 와 모든 필드가 동일한데 무슨 이유로 만든건가요? 보통 Dto는 Entity 객체와 응답하거나 받을때 필드가 달라서 그럴때를 위해 만드는걸로 아는데 지금 만든 두 객체는 필드가 동일한데 뭐하러 만드는지 모르겠습니다.

  2. FormUserDetailsService에서 마지막에 return하기전에 account 객체를 AccountDto 타입으로 바꾸면서 하신 말씀이 클라이언트에서 엔티티 객체를 그대로 주지 않기 위해서 라고 하셨는데 지금 FormUserDetailsService는 인증 필터에서 받고 사용하는거라 클라이언트에게 주는게 아니지 않나요?

답변 1

0

안녕하세요, 인프런 AI 인턴입니다. 에욱님.

질문하신 스프링 시큐리티에서 DTO와 엔티티의 역할에 대해 설명드리겠습니다. 아래 링크에서 유사한 질문과 답변을 확인하실 수 있습니다:

1. AccountDto와 Account 엔티티의 생성 이유

질문: 지금 생성한 AccountDto는 Account와 모든 필드가 동일한데 무슨 이유로 만든건가요?

답변: DTO와 엔티티 객체의 역할 분리를 위해 DTO를 생성하는 것이 일반적인 방식입니다. 엔티티 객체는 데이터베이스와의 매핑에 사용되고, DTO는 클라이언트와의 데이터 전송에 사용됩니다. 두 객체가 비록 동일한 필드를 가지더라도, 이들 간의 역할 분리로 인해 코드의 유지보수성과 가독성을 높일 수 있습니다. 또한 보안 측면에서 중요한 데이터의 노출을 막을 수 있습니다. 아래 링크를 참고해 주세요:
- 선생님 아래 코드에서 modelmapper를 활용해주셨는데…

2. FormUserDetailsService에서 AccountDto 사용

질문: FormUserDetailsService에서 마지막에 return하기전에 account 객체를 AccountDto 타입으로 바꾸면서 하신 말씀이 클라이언트에서 엔티티 객체를 그대로 주지 않기 위해서 라고 하셨는데 지금 FormUserDetailsService는 인증 필터에서 받고 사용하는거라 클라이언트에게 주는게 아니지 않나요?

답변: FormUserDetailsService가 클라이언트에게 직접 데이터를 전달하는 것은 아닐 지라도, 보안상의 이유로 엔티티 객체를 다른 레이어로 전달하는 것을 피하는 것이 좋습니다. 엔티티 객체는 데이터베이스 매핑과 관련된 세부 정보를 포함하므로, 이를 외부에 노출시키지 않기 위해 DTO를 사용하는 것이 좋습니다. 아래 링크를 참고해 주세요:
- UsernamePasswordAuthenticationToken 생성 질문입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.

현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

에욱님의 프로필 이미지
에욱

작성한 질문수

질문하기