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

오래된개발자님의 프로필 이미지
오래된개발자

작성한 질문수

실전! 스프링 데이터 JPA

Projections

실무에서 다대일 관계일 때 다 쪽에 접근이 부자연스러운 경우

해결된 질문

작성

·

351

0

안녕하세요. 강의를 들으며 실무에 적용 중인데 궁금한 것이 있어서 질문 드립니다.

현재 메뉴 테이블과 메뉴권한 테이블 두개를 생성하였고
메뉴 : 메뉴 접근 권한= 1 : n 의 연관관계를 가지고 있습니다.
(메뉴 권한 테이블이 주인이고 양방향이며, 하나의 메뉴에는 여러 접근 권한이 들어갈 수 있습니다.)

이 상황에서 해당 테이블을 통해 작업 되는 기능은 아래와 같습니다.

  • 메뉴 명을 변경할 수 있다. (메뉴 테이블 update)

이럴 경우 Spring Data JPA를 적용한다면, 상기 기능을 처리 할 때마다 메뉴Repository가 아닌 메뉴권한Repository를 호출하여 메뉴권한 객체를 통해 메뉴를 수정해야 하는데 이 부분이 좀 부자연스럽게 느껴집니다.

이럴 경우 어떻게 처리 하는 것이 좀 더 나을까요? 제 생각에는

  1. 테이블을 다시 짜서 메뉴가 다대일 관계로 구성 되겠끔 처리한다(지만 쉽지 않은 상황이네요)

  2. 메뉴-메뉴권한 관계를 일대다 관계로 처리한다. (단방향)

  3. 연관관계는 그대로 두고 저장/수정 시에만 JdbcTemplate 등으로 처리 한다.

등이 있는데 더 나은 방안이 있을까요? 맨날 SQL로 작업 하다 ORM을 해보려고하는데 참 쉽지 않네요.

답변 1

1

안녕하세요. 오래된개발자님, 공식 서포터즈 y2gcoder입니다.

제가 프로젝트의 요구사항에 대해서 미처 다 파악하지는 못했으나, 메뉴 접근 권한에 메뉴명이 있지 않은 이상, 메뉴에서 메뉴명 컬럼이 있는게 자연스럽고, 그렇다면 메뉴명을 변경하는 것은 메뉴에서 하는 게 자연스럽습니다. 메뉴 권한을 통해 인가와 관련된 기능을 체크하고, 메뉴명을 바꿔도 된다면 메뉴 엔티티를 불러와서 dirty checking을 통해 메뉴명을 변경하는 방식으로 하는 게 어떠실까요?
제 짧은 생각입니다.


감사합니다.

업무하다가 이제 확인합니다. 말씀하신대로 처리 하니 정상적으로 되네요!

답변 감사합니다. 말씀하신데로 더티체크를 통해 처리를 하게 되었습니다!

다만 한번 select 쿼리를 날려야한다는게 데이터 정합성 및 보안상 좋습니다만, SQL Mapper 경우 바로 해당 seq에 update문 한번만 날리면 되는데 select를 추가 해야하는게 참 익숙치가 않네요 ㅠㅠ

 

 

감사합니다 :)
말씀하신 것처럼 저도 seq가 확실하다면 update문 하나로 바로 처리하는 편의성에서 오는 메리트가 분명히 있다고 생각합니다. ㅎㅎ
그래도 JPA도 한 번 애정을 갖고 봐주십쇼!

넵! 분명 SQL Mapper 보다 이점이 있기 때문에 JPA 점유율이 올라가는 것이겠죠!

아무래도 이 이점을 파악하려면 보다 실무에 적용하면서 시행착오를 겪고 이후 운영을 해 봐야 얻을거라 생각이 되네요. 여하튼, 답변 감사합니다! 좋은 하루 되세요~

감사합니다.
좋은 하루 되십쇼!

오래된개발자님의 프로필 이미지
오래된개발자

작성한 질문수

질문하기