inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

실전! 스프링 데이터 JPA

Projections

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

해결된 질문

406

오래된개발자

작성한 질문수 5

0

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

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

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

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

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

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

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

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

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

spring JPA java spring-boot

답변 1

1

y2gcoder

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

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


감사합니다.

0

오래된개발자

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

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

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

 

 

0

y2gcoder

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

0

오래된개발자

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

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

0

y2gcoder

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

changeTeam 메서드 질문

0

35

1

existsByUserIdAndProjectId vs existsByUserAndProject 중 어떤 방식이 적절할까요?

0

88

1

existsByUserIdAndProjectId vs existsByUserAndProject 중 어떤 방식이 적절할까요?

0

129

3

MemberRepository 구현체

0

73

1

pdf 표현 질문드립니다.

0

78

1

로그가 남지 않는 문제.

0

100

1

테스트 라이브러리가 강의는 junit4가 맞나요??

0

80

2

pdf 파일과 차이점이 있는 것같은데 문제 없나요?

0

77

2

@PrePersist, @PreUpdate 호출 시점 질문드립니다.

0

104

2

Sort 인터페이스는 잘 사용 안하나요?

0

61

1

스캔대상 질문드립니다.

0

50

1

하이버네이트6에서의 최적화에 이은 질문

0

92

1

save() vs saveAndFlush DB 통신 횟수

0

61

1

순수 JPA 리포지토리 코드 수정부분

0

93

2

bulk연산 후 flush하는 이유를 모르겠어요

0

164

3

bulk insert 질문입니다.

0

191

2

교만했던 것 같아요.

0

152

1

RESTful 강의는 안하시는 건지 궁금합니다.

0

154

2

동적 테이블에 대한 질문

0

90

1

영속성 전이와 연관관계

0

142

2

강의 10:25 질문

0

80

1

단건 update 질문

0

104

2

엔티티 와 도메인의 경계

0

132

1

UsernameOnlyDto 타입 type mismatch 오류

0

123

1