데브허브 | DEVHUB | Repository가 만들어내는 쿼리는 어떤 모습일까Repository가 만들어내는 쿼리는 어떤 모습일까
- JPA Repository는 ID 생성 전략(Identity, Sequence, Table, UUID, Auto)에 따라 다양한 INSERT 및 SELECT 쿼리를 생성합니다. ⚙️
IDENTITY 전략은 DB의 자동 ID 생성 기능을 활용하여 INSERT 쿼리에 ID 컬럼을 포함하지 않습니다. 🚀
SEQUENCE 전략은 DB 시퀀스 객체에서 ID를 먼저 가져온 후, 해당 ID를 포함하여 INSERT 쿼리를 실행합니다. 🔢
TABLE 전략은 별도의 시퀀스 관리 테이블을 생성하고 ID를 가져와 업데이트 후 INSERT를 수행하며, 성능 문제로 현재는 잘 사용되지 않습니다. 🐢
UUID 전략은 ID 타입이 UUID여야 하며, 생성된 UUID 값을 직접 INSERT 쿼리에 포함합니다. 🧬
- 1대N 관계 저장 시, 부모 엔티티를 먼저 저장하고 생성된 부모 ID를 사용하여 자식 엔티티를 저장하는 순서로 쿼리가 발생합니다. 🔗
- 1대N 관계 조회 시, 기본적으로
LEFT JOIN을 사용하여 관련 데이터를 함께 가져오는 쿼리가 생성됩니다. 🧩
- 테스트 코드 작성 시
EntityManager.flush() 및 clear()를 사용하여 캐시를 비워 정확한 테스트 결과를 얻는 것이 중요합니다. 🧹
- N대N 관계는 JPA에서 직접 매핑하기보다 중간 엔티티(조인 테이블)를 두어 1대N 관계로 해소하는 것이 권장됩니다. 🔄
- JPA 사용 여부와 관계없이 관계형 데이터베이스의 기본 원리(스키마 설계, 정규화, 코드 관리)를 이해하는 것이 가장 중요합니다. 🏛️
- 대부분의 스키마는 1대N 관계로 해결 가능하며, JPA 사용 시 N+1 문제 등 주요 이슈 해결에 집중하는 것이 효율적입니다. 🎯