💡 개요
보통 위치 좌표를 표현할 때 DB에선 Point 타입을 자주 사용한다.
🛠️ H2에서 Point?
…Repository을 테스트 할 땐 보통 @DataJpaTest 을 사용한다.
→ 그래야 기본적으로 인메모리 DB인 H2도 사용되고, 트랜잭션도 자동으로 적용되기 때문이다.
그런데, 엔티티에 Point 타입 필드를 사용하게 되면 H2는 기본적으로 Point 타입과 같은 공간(Spatial) 타입을 지원하지 않기 때문에, 테이블 생성 시 DDL 에러가 발생하며 테이블 생성이 실패한다.
그렇기 때문에 어쩔 수 없이 Point가 자주 사용되는 테스트라면 DB에 H2 말고 MySQL이나 PostgreSQL을 사용해야 한다.
다음은 @DataJpaTest 테스트 코드에 실제 MySQL DB을 적용하는 코드 예시이다.
👨🏻💻 JpaAbstractIntegrationTest.java
@DataJpaTest
@ActiveProfiles("test")
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@Import({JpaAuditingConfig.class, GeometryConfig.class})
public abstract class JpaAbstractIntegrationTest {
....
}
👨🏻💻 application-test.yml
spring:
config:
import: .env-test.properties
activate:
on-profile: test
datasource:
url: ${DB_URL}
driver-class-name: ${DB_DRIVER_CLASS_NAME}
username: ${DB_USERNAME}
password: ${DB_PASSWORD}
jpa:
database-platform: ${JPA_DB_PLATFORM}
properties:
hibernate:
show-sql: true
format-sql: true
hibernate:
ddl-auto: update
...
- 참고로 ${DB_URL} 와 같은 DB관련 변수는 모두 테스트용 DB(MySQL)로 설정되어 있다.
📌 참고
Geometry DataType in H2 w/ Spring JPA
위 글에 나와있듯이 예전에는 application.yml에서 hibernate.dialect를 org.hibernate.spatial.dialect.h2geodb.GeoDBDialect로 설정하면 H2에서도 공간 타입이 작동한다고 알려져 있었지만, Hibernate 6 버전부터는 해당 Dialect가 더 이상 지원되지 않으므로 사용이 불가능하다고 보는 것이 맞다.
'개발 일기' 카테고리의 다른 글
[개발 일기] 2025.06.06 - FilterChainProxy (0) | 2025.06.06 |
---|---|
[개발 일기] 2025.06.05 - 새로운 패키지 구조 (0) | 2025.06.05 |
[개발 일기] 2025.06.03 - 값 검증을 응용 계층에서?? (0) | 2025.06.03 |
[개발 일기] 2025.06.02 - JPQL과 Native Query 차이 (2) | 2025.06.02 |
[개발 일기] 2025.06.01 - 제품과 리뷰의 관계 (1) | 2025.06.01 |