작성
·
232
0
안녕하세요!
좋은 강의 만들어 주셔서 감사합니다.
요즘 실무에서 JPA를 쓰고 싶어서 열심히 강의를 듣고 있습니다.
요즘 테이블을 키를 선정할때 JPA를 사용하면 어떻게 해야할까 고민하고 있는데요.
JPA는 대리키를 사용하기 때문에 처음 개발할때 좋다고 들었는데요.
아래와 같은 상황에서는 고민하지 말고 대리키를 사용하면 좋을지 아니면 자연키로 설정할지 고민입니다.
예를 들어서 지금 만들려는 시스템에서는 하나의 DB에서 멀티테넌트로 운용할 계획입니다.
1. 한 회사는 여러 테넌트를 가질 수 있다.
2. 테넌트와 카테고리 별로 할인율을 변경할 수 있다.
복잡한 질문드려 죄송합니다 !
답변 1
0
안녕하세요. KK님^^ 그림까지 그려주셔서 고마운 질문입니다.
지금 예시로 들어주신 것에서 좀 걸리는 점이 있습니다. 바로 테넌트라는 단어인데요.
테넌트를 분리하는 방법이 보통 다음과 같은 3가지 방법중 한가지를 선택합니다.
1. DB를 완전히 분리한다.
2. 같은 DB를 사용하고, 스키마 이름만 분리한다(같은 DB, 계정 분리)
3. 같은 테이블을 사용하고, 테넌트 ID로 분리한다.
이런식으로 분리할 때 사용하는 용어인데, 이 방법중에 3번을 선택한다면, 모든 테이블에 테넌트ID가 들어가야 합니다.
그런데 적어주신 비즈니스 요건을 보면 테넌트 ID가 이렇게 물리, 논리적으로 비즈니스를 완전히 분리한다기 보다는,
회사는 개별 쇼핑몰ID를 가질 수 있다 처럼 들리거든요.
그리고 쇼핑몰ID 별로 별도의 할인율 지정할 수 있다. 이렇게 보입니다.
만약에 앞서 말씀드린 기술적인 관점의 테넌트라면 모든 DB에 테넌트ID를 넣고, 복합키를 고려해야 합니다.(물론 대리키 방식도 가능합니다.)
그런데 이후에 말씀드린 쇼핑몰 ID의 개념이라면, 복합키를 고려하기 보다는 최대한 대리키를 사용하고, 성능 때문에 필요한 컬럼은 역 정규화 하고, index를 잘 활용하는 방법을 권장드립니다.
감사합니다^^