📕 Today I Learned - 오늘 내가 공부한 것을 정리합니다.
Java에서는 관례상 필드명으로 camelCase (예: deletedAt) 를 사용하고
Database에서는 컬럼명으로 언더_스코어 (예: deleted_at) 를 사용한다.
엔티티 클래스 작성 시 필드에 별도로 컬럼명을 명시해주지 않아도 Spring JPA에서 테이블이 생성될 때 자동으로 컬럼명이 언더 스코어 생성되는 것을 알게되었다. (spring.jpa.hibernate.ddl-auto)
@Column(name="deleted_at") // 이렇게 명시하지 않아도 된다!
private LocalDateTime deletedAt;
똑똑한 Spring JPA가 자동으로 만들어주겠지...만 내부적으로 어떤 동작이 이루어지는지 살짝 파보았다 🔎


SpringBoot가 hibernate의 기본 인터페이스 구현을 덮어쓰고 SpringImplictNamingStrategy 와 SpringPhysicalNamingStrategy를 사용한다.
SpringBoot 의 디폴트
spring.jpa.hibernate.naming.physical-strategy = SpringPhysicalNamingStrategy
→ 엔티티의 필드명을 파싱(parse)하여 테이블의 컬럼명을 언더스코어 형식으로 매핑한다.
만약, 테이블의 컬럼명을 언더스코어 형식이 아닌 다른 형식으로 사용한다면
application.properties
spring.jpa.hibernate.naming.physical-strategy 을 추가
# 기본 변수 이름을 그대로 이용한다.
spring.jpa.hibernate.naming.physical-strategy = org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
전략 범위 2가지
// camel case를 underscore 형태로 변경(Default)
SpringPhysicalNamingStrategy
// 변수 이름을 그대로 사용
PhysicalNamingStrategyStandardImpl