Team project/'AdvICE' 웹 서비스 프로젝트

[AdvICE] JPA에서 복합 키 관리: Serializable 인터페이스 활용

kanado 2024. 5. 2. 16:48

 

데이터 베이스 도식화

문제: 게시글 "좋아요" 기능을 관리하기 위해 '게시글 번호'와 '사용자 메일' 두 필드를 복합키로 가진 테이블을 구현하는 과정에서 JpaRepository 인터페이스에서 FavoriteEntity 엔티티에 타입을 FavoritePk 복합 키 클래스로 구현했다.

 

FavoritePk 복합 키 클래스 구현( Serializable 인터페이스)

객체지향적인 방법으로 복합 키를 관리할 수 있는 @Embeddable과 @EmbeddedId 있지만 Serializable 인터페이스를 사용한 이유는 다음과 같다.

1. JPA 표준 준수
JPA 사양은 복합 키를 가지는 클래스가 Serializable 인터페이스를 구현해야 한다고 명시하고 있다. 이는 복합 키가 가진 값의 안정적인 전송과 저장을 보장하기 위한 요구사항이며, JPA를 구현하는 모든 환경에서 일관성 있게 복합 키를 관리하고 사용할 수 있도록 하기 위함이다.

2. 캐싱과 직렬화의 필요성
복합 키가 Serializable을 구현하면, 해당 엔티티를 캐싱 시스템에서 효율적으로 저장하고 관리할 수 있다. 많은 JPA 프로바이더와 캐싱 프레임워크는 객체의 직렬화를 통해 데이터를 캐시에 저장하고, 필요할 때 빠르게 복원할 수 있는 기능을 제공한다. Serializable을 통해 이러한 기능을 쉽게 구현할 수 있다.

3. 데이터 무결성과 동기화
Serializable 인터페이스 구현은 데이터의 무결성을 유지하고, 여러 클라이언트나 애플리케이션 간의 데이터 동기화를 보장하는 데 중요한 역할을 한다. 복합 키의 각 컴포넌트가 직렬화를 통해 안전하게 관리되며, 데이터베이스와 애플리케이션 간의 일관성을 보장한다.