728x90
프로젝트에서 정산 기능을 구현하는 과정에서, 결제 내역을 1대 N 관계로 리스트 형태로 정산 엔티티에 저장하는 방식과, 결제와 정산 간에 중간 테이블을 생성하여 관리하는 방식 중 어느 방법을 선택할지 고민하였습니다.
본 글에서는 이러한 고민과정에서 어떠한 방식을 채택했는지 정리하고자 합니다.
1대 N 사용
장점
- 구조가 더 단순합니다.
- 쿼리가 간단할 수 있습니다. (join이 필요없기 때문)
- 추가적인 테이블이 필요 없어 데이터베이스 구조가 간결합니다.
단점
- 정산에 포함된 결제 정보가 변경될 경우 데이터 일관성 유지가 어려울 수 있습니다.
- 결제와 정산 간의 관계가 정산 쪽에만 표현되어 있어, 결제 측면에서 조회가 어려울 수 있습니다.
- 대량의 결제 데이터가 있는 경우 성능 문제가 발생할 수 있습니다.
중간 테이블 사용
장점
- 결제와 정산 간의 관계를 명확하게 표현할 수 있습니다.
- 양방향에서 쉽게 조회가 가능합니다 (결제에서 정산, 정산에서 결제).
- 추가 정보(예: 정산 시점의 금액, 정산 처리 일시 등)를 저장하기 용이합니다.
- 데이터의 일관성과 무결성을 유지하기 쉽습니다.
단점
- 추가적인 테이블로 인해 데이터베이스 구조가 약간 복잡해집니다.
- 일부 쿼리에서 조인이 필요할 수 있어 성능에 영향을 줄 수 있습니다.
결론
각 방법은 장단점이 있지만, 1대 N방식보다 중간 테이블을 생성하는 방향으로 진행하기로 했습니다.
그 이유는 다음과 같습니다.
1. 확장성
- 향후 추가적인 정보나 기능이 필요할 때 더 유연하게 대응할 수 있습니다.
2. 데이터 일관성
- 결제와 정산 간의 관계를 명확히 표현하여 데이터 일관성을 유지하기 쉽습니다.
조회 용이성
- 양방향에서 쉽게 조회할 수 있어 다양한 비즈니스 요구사항에 대응하기 쉽습니다.
감사 및 추적
- 각 결제가 어느 정산에 포함되었는지 명확히 추적할 수 있어 감사나 문제 해결 시 유용합니다.
중간 테이블 접근 방식은 더 복잡하지만 장기적으로 더 유연하고 확장 가능한 솔루션을 제공합니다. 비즈니스의 성장과 변화를 고려할 때, 이 방식이 더 적합할 가능성이 높다고 판단 되어 중간 테이블을 생성하는 방향을 채택했습니다.
'TIL,일일 회고' 카테고리의 다른 글
[TIL, 일일 회고] 2024.10.18 - 서버 사이드 렌더링 적용하기 (0) | 2024.10.18 |
---|---|
[TIL, 일일 회고] 2024.10.17 - Spring Data JPA의 명명 규칙 (0) | 2024.10.17 |
[TIL, 일일 회고] 2024.10.15 - 테이블에서 컬럼 추가하기 (IntelliJ) (0) | 2024.10.15 |
[TIL, 일일 회고] 2024.10.14 - Grafana에서 CPU 사용량이 50% 이상일 때 자동으로 Slack에 알림이 전송하기 (0) | 2024.10.14 |
[TIL, 일일 회고] 2024.10.13 - vi/vim 명령어 (1) | 2024.10.13 |