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

인생은회전목마님의 프로필 이미지
인생은회전목마

작성한 질문수

자바 ORM 표준 JPA 프로그래밍 - 기본편

일대다 [1:N]

히스토리성 앤타타에 대해 어떤식으로 구성하는지 고견 여쭙고 싶습니다.

작성

·

282

·

수정됨

0

만약 계좌에 대한 결제 이력을 쌓아야 한다면

계좌(one) : 이력(many) 관계로 이력이 쌓일 듯합니다.

그런데 이력 테이블의 기본키를 간단히 시퀀스로 관리하자니

실제 계좌의 이력을 쿼리로 실행될 때, 쿼리의 성능이 안나올 것 같

습니다. 그래서 계좌번호, 거래일자, 일자별 시퀀스 3

개의 필드를 복합키로 구성하려고 하는데.. JPA를 활용한

엔티티 구성에서 추후에 문제가 되거나 관리에 어려움이 있지 않을까 궁금합니다

그리고 실무에서는 어떤식으로 이력성 테이블을 구성하는지도 궁금합니다!!

답변 1

0

안녕하세요, 인프런 AI 인턴이에요.

히스토리성 앤타타 구성에 대해 여쭙겠습니다. 계좌에 대한 결제 이력을 쌓기 위해 계좌(one)와 이력(many) 관계로 이력을 구성하려고 한다면, 계좌번호, 거래일자, 일자별 시퀀스 3개의 필드를 복합키로 구성하는 것은 하나의 방법입니다.

이 경우 JPA를 활용한 엔티티 구성에서 문제가 될 수 있는 점은 복합키를 잘 다루는 것입니다. JPA에서 복합키를 사용하려면 @EmbeddedId@IdClass를 사용하여 복합키 클래스를 만들어야 합니다. 복합키를 사용함으로써 조회나 수정을 할 때 추가적인 작업이 필요할 수 있으며, 성능적인 측면에서도 고려해야 합니다.

실무에서는 이력성 테이블을 구성하는 방법에는 여러 가지가 있습니다. 몇 가지 예시를 드리자면 다음과 같습니다:
1. 별도의 히스토리 테이블을 생성하여 이력을 저장하는 방식
- 계좌 정보와 이력 정보를 별도의 테이블로 구성하고, 이력이 발생할 때마다 이력 테이블에 추가하는 방식입니다.
2. Versioning을 통한 이력 관리 방식
- 계좌 테이블에 버전 컬럼을 추가하고, 변경이 발생할 때마다 버전 번호를 업데이트하는 방식입니다.
- 변경 이력은 계좌 테이블에 저장되며, 특정 버전을 조회하려면 버전 컬럼을 조건으로 조회합니다.
3. 일자별 테이블을 활용한 이력 관리 방식
- 매일 새로운 이력 테이블을 생성하고, 해당 테이블에 이력을 저장하는 방식입니다. 이렇게 하면 테이블의 크기가 작아져 조회 성능이 향상될 수 있습니다.

어떤 방법이 가장 적합한지는 프로젝트의 요구사항과 데이터 크기에 따라 다를 수 있으므로, 실무에서 해당 방법을 선택하는 것이 좋습니다.

더 자세한 내용이 필요하다면, 데이터베이스 아키텍처나 프로젝트의 요구사항 등을 고려하여 전문가의 조언을 받는 것이 도움이 될 것입니다.

질문에 대한 도움이 되셨길 바라며, 추가로 궁금한 사항이 있으시면 언제든지 물어보세요. 좋은 하루 되세요!

인생은회전목마님의 프로필 이미지
인생은회전목마

작성한 질문수

질문하기