• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

이럴 때는 엔티티 관계 설정을 1:1로 해야하는지 1:n 으로 해야하는지 궁금합니다.

23.08.02 01:08 작성 조회수 235

0

[질문 내용]
https://www.inflearn.com/questions/958528

이전 질문에 이어서 질문 드립니다.

이전 내용을 간단히 요약하면 보안매체 엔티티와 보안매체가 갖는 토큰을 엔티티로 표현할 때, 보안매체 한 개에 유효한 토큰은 하나만 가질 수 있으므로 1:1 관계로 해야할지, 아니면 사용자에 연결된(만료된 토큰과 현재 유효한 토큰) 모든 토큰을 가지고 온 후, 그 이후에 유효한 토큰을 소스상에서 필터해서 얻어내는 식으로 하여 1:n으로 해야할지 여쭈어보았는데요. 답변으로 1:n으로 관계를 짓고, 유효한 토큰을 필터하는 식으로 하길 권해주셨습니다.

이게 '보안매체에 유효한 토큰은 오직 한개' 라는 개념적인 관점에서는 1:1이지만, JPA에서의 엔티티 클래스로 표현해보자면 하나의 고객KEY를 외래키로 하는 토큰은 여러개가 있을 수 있으니 1(단일객체)가 아닌 N(리스트)로 표현하고, 비즈니스 로직상에서 유효한 하나를 뽑아서 현재 활성화된 토큰을 얻어낸다고 보면 되는걸까요?

매번 쿼리를 통해 필요로하는 객체로 뽑아내다가, 이를 엔티티 클래스, 관계로 소스를 짜려니 어색하네요. 항상 감사합니다. 답변주시면 감사드리겠습니다!! ㅠㅠ

 

답변 2

·

답변을 작성해보세요.

0

OMG님의 프로필

OMG

2023.08.06

안녕하세요. 정정훈님, 공식 서포터즈 OMG입니다. AI 답변에 더하여 답변 드립니다.

이전 내용을 간단히 요약하면 보안매체 엔티티와 보안매체가 갖는 토큰을 엔티티로 표현할 때, 보안매체 한 개에 유효한 토큰은 하나만 가질 수 있으므로 1:1 관계로 해야할지, 아니면 사용자에 연결된(만료된 토큰과 현재 유효한 토큰) 모든 토큰을 가지고 온 후, 그 이후에 유효한 토큰을 소스상에서 필터해서 얻어내는 식으로 하여 1:n으로 해야할지 여쭈어보았는데요. 답변으로 1:n으로 관계를 짓고, 유효한 토큰을 필터하는 식으로 하길 권해주셨습니다.

이게 '보안매체에 유효한 토큰은 오직 한개' 라는 개념적인 관점에서는 1:1이지만, JPA에서의 엔티티 클래스로 표현해보자면 하나의 고객KEY를 외래키로 하는 토큰은 여러개가 있을 수 있으니 1(단일객체)가 아닌 N(리스트)로 표현하고, 비즈니스 로직상에서 유효한 하나를 뽑아서 현재 활성화된 토큰을 얻어낸다고 보면 되는걸까요?

제가 답변 드린 의도를 정말 잘 꿰차고 정리하여 남겨주셨네요. 말씀드린 의도는 정리해주신 내용이 맞습니다.

매번 쿼리를 통해 필요로하는 객체로 뽑아내다가, 이를 엔티티 클래스, 관계로 소스를 짜려니 어색하네요.

이 부분은 현재 재직중인 회사에서 쿼리(DB) 중심의 개발을 하고 있고,

영한님의 JPA강의를 수강하여 ORM을 익힌 개발자 관점에서 너무 공감되는 말씀입니다. JPA를 사용하면 다음과 같은 특징이 있습니다.

 

  1. 객체 지향 프로그래밍: JPA를 통해 개발자는 비즈니스 로직에 집중할 수 있으며, 이는 코드의 가독성과 재사용성을 증가

  2. 데이터베이스 독립성: JPA는 데이터베이스에 대한 쿼리를 추상화함으로써 다양한 데이터베이스에 독립적으로 코드를 작성 가능

  3. 개발 속도: 데이터베이스 테이블을 자동으로 생성하거나 변경할 수 있는 기능을 제공함으로써 개발 퍼포먼스 향상

     

패러다임(?)의 차이로 인해 어색한 부분은 이해가 충분히 되는 부분이고 어색하겠지만 계속 고민하고 개발에 적용해보시면 위에서 설명드린 내용을 공감 되실거라 생각하고, 영한님 JPA 강의를 수강하여 적용하시다 보면 쿼리 중심의 개발을 하실 때가 어색해질 날이 오지 않을까 조심스레 예상해봅니다..ㅎㅎ

 

감사합니다.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.08.04

안녕하세요, 인프런 AI 인턴이에요. 엔티티 관계 설정에 대한 질문이신 것 같아요.

개념적인 관점과 JPA에서의 엔티티 클래스 관점 사이에서 혼동이 있을 수 있습니다. 보안매체 엔티티와 토큰 엔티티 사이의 관계를 고려할 때, “보안매체에 유효한 토큰은 오직 한 개”라는 개념에 따라 1:1 관계로 설정하는 것이 맞습니다. 따라서 JPA에서의 엔티티 클래스로 표현할 때에도 하나의 고객 키를 외래키로 하는 토큰은 여러 개가 있을 수 있으므로 1(단일 객체)이 아닌 N(리스트)로 표현하시면 됩니다.

비즈니스 로직상에서는 필터링을 통해 현재 활성화된 토큰을 얻어내는 것이 맞습니다. 매번 쿼리를 통해 필요한 객체를 뽑아내다가, 이를 엔티티 클래스 및 관계로 소스를 작성하려니 어색하게 느껴지실 수도 있지만, 이는 JPA의 특성으로 인한 것이기 때문에 어쩔 수 없는 부분입니다.

이렇게 구현하셔도 문제가 없으며, JPA를 이용하여 효율적으로 데이터를 처리할 수 있습니다. 추가적으로 성능이 문제가 된다면 캐싱 등의 방법을 고려해보실 수 있어요.

더 궁금한 사항이 있다면 언제든지 물어보세요. 좋은 하루 되세요!