카멜케이스(camelCase) vs 스네이크케이스(snake_case)
스프링 부트에서 @Entity 클래스에서 @Column(name="emp_id")를 사용하는 이유?
@Entity
public class Emp {
private Integer emp_id;
}
위와 같은 코드는 insert시 입력한 값 대신 null이 들어갑니다.
그 이유를 알아보자.
데이터베이스는 컬럼명의 소문자와 대문자를 구별하지 않는다.
그래서 첫글자를첫 글자를 소문자, 그 뒤 단어의 첫 글자를 대문자로 표기하는
카멜 표기법(camelCase) 대신 언더바를 중간에 넣는 스네이크케이스(snake_Case)를 사용한다.
ORM 매핑 방식 1번째)
@Entity
public class Emp {
@Column(name = "emp_id")
private Integer empId;
}
하지만 자바는 변수 작명시 카멜표기법을 사용하는 것이 "관례"입니다.
그리고 JPA는 기본적으로 클래스 변수명을 그대로 DB 컬럼명과 매핑하기에
별도의 지정을 하지 않는 한 자동으로 카멜케이스를 스네이크 케이스의 DB컬럼과 매핑하지 못합니다.
@Column으로 name 속성에 스네이크 케이스로 된 DB컬럼명을 적으면
클래스 변수명을 스네이크 케이스로 변환해서 DB컬럼과 매핑시켜 줍니다.
그 별도의 지정은 아래와 같습니다.
yml에 Naming Strategy를 수정하면
카멜케이스를 자동으로 스네이크 케이스의 DB컬럼과 매핑시켜 줍니다.
ORM 매핑 방식 2번째)
yml로 카멜 케이스 -> 스네이크 케이스 변환 자동화 하기
spring:
jpa:
hibernate:
naming:
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
위와 같이 설정하면 @Column(name="emp_id") 없이도 자동으로 스네이크 케이스로 변환하여
DB컬럼과 매핑해 줍니다.
@Entity
public class Emp {
private Integer empId; //@Column(name="emp_id") 없이도 매핑해줌
}
그래서 소형 프로젝트는 @Column으로 관리.
대규모 프로젝트에는 Naming Strategy로 자동화,
필요한 곳에만 @Column을 붙여서 사용하면 좋은 것 같다.
'Java' 카테고리의 다른 글
| 엔티티에서 @Builder 사용할 때 불변성에 대한 고찰 (0) | 2026.01.31 |
|---|---|
| [Spring Boot] Entity <-> DTO 변환 방법 4가지, Setter부터 @Builder, static Factory 메서드 패턴, 상속까지 (0) | 2026.01.23 |
| Spring Boot 버전 2 부터 자동화된 필터 기능들 (0) | 2025.12.31 |
| [Java] 날짜 타입(LocalDate, Date) 다루기, Servlet, Spring, Spring Boot (0) | 2025.09.01 |
| 백준 1931번 회의실 지정,Java 풀이 (4) | 2025.07.11 |
