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

Patchee (Patchee)님의 프로필 이미지

작성한 질문수

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

다중 스키마 JPA 해결 방법

24.06.04 15:42 작성

·

113

0

log 데이터베이스가 log_연_월로 매월 스키마를 자동 생성하여 로그를 기록 및 보관하고 있습니다.

(ex) 2024.03월 >> log_2024_03(db) >> application_log(table), system_log(table), 등등...

2024.04월 >> log_2024_04(db) >> 테이블 구조는 동일

(새로운 연.월이 오면 자동으로 생성)

....

위에 대한 데이터베이스 구조에서 3월과 4월의 system_log 내용을 조회하고 싶다면?

(조회하고 싶은 날짜는 사용자의 조건에 따라 달라질 수 있음.)

mybatis에서 mapper.xml 에 쿼리를 직접 작성하여 해결 가능하지만,

jpa로는 위와 같은 문제를 어떤식으로 해결할 수 있는지 조언 부탁 드립니다.

답변 2

0

David님의 프로필 이미지

2024. 06. 04. 21:20

안녕하세요. Patchee (Patchee)님, 공식 서포터즈 David입니다.

아래 글의 아이디어를 확인해 보시면 도움이 될 것 같습니다.

https://modimodi.tistory.com/65

특정 월에 대한 요청이 들어오면 동적으로 데이터소스를 구성하여 해당 데이터소스를 사용하여 쿼리하도록 하면 어떨까요? 이미 구성된 데이터소스의 경우 캐시로 관리하면 재사용에 대한 부담도 덜 수 있습니다.

감사합니다.

 

0

인프런 AI 인턴님의 프로필 이미지

2024. 06. 04. 15:46

안녕하세요, 인프런 AI 인턴입니다.

질문하신 다중 스키마를 사용하는 데이터베이스의 경우에 JPA를 적용하여 로그 데이터에 접근하는 문제에 대해, 질문자님과 유사한 상황에 대한 해결 방법을 제시한 게시물이 있습니다. 해당 답변은 JPA를 사용할 때, 특히 테이블이나 스키마가 동적으로 생성될 때의 대응 방법에 대해 설명하고 있습니다.

  • 동적테이블 재질문“에서는 JPA를 사용하여 동적인 테이블 이름을 관리하는 경우에 대한 포괄적인 조언을 제공하고 있습니다. 특히 답변에서는 JPA가 테이블 이름을 동적으로 변경하기 어렵다는 점을 설명하며, 대신에 테이블을 파티셔닝하거나 View를 사용하는 방법을 권장합니다. 이는 이름이 동일한 테이블에 대해 JPA를 적용할 수 있는 방식으로, 여러분의 질문에 적용 가능한 접근법일 수 있습니다.

이 경우, 매월 생성되는 로그 데이터베이스 스키마의 테이블에 접근해야 한다면, JPA로는 직접적인 지원이 어렵다는 한계가 있습니다. 따라서, DB에서 테이블 자체를 파티션하거나, View를 제공하는 식으로 문제를 해결하는 것이 좋을 것 같습니다. 이름이 동일한 테이블 또는 View에 대해 JPA를 사용하여 접근함으로써, 애플리케이션이 날짜에 의존하지 않아도 되고, 코드의 복잡성을 줄일 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.