히스토리성 앤타타에 대해 어떤식으로 구성하는지 고견 여쭙고 싶습니다.
324
작성한 질문수 18
만약 계좌에 대한 결제 이력을 쌓아야 한다면
계좌(one) : 이력(many) 관계로 이력이 쌓일 듯합니다.
그런데 이력 테이블의 기본키를 간단히 시퀀스로 관리하자니
실제 계좌의 이력을 쿼리로 실행될 때, 쿼리의 성능이 안나올 것 같
습니다. 그래서 계좌번호, 거래일자, 일자별 시퀀스 3
개의 필드를 복합키로 구성하려고 하는데.. JPA를 활용한
엔티티 구성에서 추후에 문제가 되거나 관리에 어려움이 있지 않을까 궁금합니다
그리고 실무에서는 어떤식으로 이력성 테이블을 구성하는지도 궁금합니다!!
답변 1
0
안녕하세요, 인프런 AI 인턴이에요.
히스토리성 앤타타 구성에 대해 여쭙겠습니다. 계좌에 대한 결제 이력을 쌓기 위해 계좌(one)와 이력(many) 관계로 이력을 구성하려고 한다면, 계좌번호, 거래일자, 일자별 시퀀스 3개의 필드를 복합키로 구성하는 것은 하나의 방법입니다.
이 경우 JPA를 활용한 엔티티 구성에서 문제가 될 수 있는 점은 복합키를 잘 다루는 것입니다. JPA에서 복합키를 사용하려면 @EmbeddedId나 @IdClass를 사용하여 복합키 클래스를 만들어야 합니다. 복합키를 사용함으로써 조회나 수정을 할 때 추가적인 작업이 필요할 수 있으며, 성능적인 측면에서도 고려해야 합니다.
실무에서는 이력성 테이블을 구성하는 방법에는 여러 가지가 있습니다. 몇 가지 예시를 드리자면 다음과 같습니다:
1. 별도의 히스토리 테이블을 생성하여 이력을 저장하는 방식
- 계좌 정보와 이력 정보를 별도의 테이블로 구성하고, 이력이 발생할 때마다 이력 테이블에 추가하는 방식입니다.
2. Versioning을 통한 이력 관리 방식
- 계좌 테이블에 버전 컬럼을 추가하고, 변경이 발생할 때마다 버전 번호를 업데이트하는 방식입니다.
- 변경 이력은 계좌 테이블에 저장되며, 특정 버전을 조회하려면 버전 컬럼을 조건으로 조회합니다.
3. 일자별 테이블을 활용한 이력 관리 방식
- 매일 새로운 이력 테이블을 생성하고, 해당 테이블에 이력을 저장하는 방식입니다. 이렇게 하면 테이블의 크기가 작아져 조회 성능이 향상될 수 있습니다.
어떤 방법이 가장 적합한지는 프로젝트의 요구사항과 데이터 크기에 따라 다를 수 있으므로, 실무에서 해당 방법을 선택하는 것이 좋습니다.
더 자세한 내용이 필요하다면, 데이터베이스 아키텍처나 프로젝트의 요구사항 등을 고려하여 전문가의 조언을 받는 것이 도움이 될 것입니다.
질문에 대한 도움이 되셨길 바라며, 추가로 궁금한 사항이 있으시면 언제든지 물어보세요. 좋은 하루 되세요!
벌크연산에서 member.getAge 호출 시 영속성 컨텍스트에서 데이터를 가져오는건가요?
0
22
2
inheritance startegy 선택시 고려사항
0
22
1
Entity 동등성 비교
0
18
1
실무 조언 관련 질문입니다.
0
44
1
H2데이터베이스 파일 생성
0
56
2
서브쿼리 강의에서 ALL 예시 관련 질문드립니다.
0
52
2
수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?
0
51
1
JPQL 메소드와 락
0
55
1
Delivery @OneToOne
0
60
1
17강 4~5분대 테이블 값 조회가 안됩니다.
0
92
2
UnsupportedOperationException 발생
0
86
3
H2 Database 연결이 안됩니다.
0
92
2
연관관계 매핑 질문드립니다.
0
85
2
h2데이터베이스 실행오류
0
107
2
persistence.xml
0
106
2
양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?
0
80
1
영속성 컨텍스트
0
65
1
JPA 프록시
0
94
1
Native Query와 MyBatis
0
68
1
영속성 컨텍스트는 어떤 메모리에 저장되는건가요?
0
85
1
임베디드 타입 예시 코드 관련 질문
0
114
3
명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요
0
94
3
인텔리제이 패키지 커서 단축키 질문
0
108
2
혹시 현재는 ID 데이터 타입이 String이면 안되나요?
0
143
1





