로그인 API를 개발하던 중 계속 500 에러 발생
하던 중에 userId는 int 형식이 아니라 long 형식으로 하는 것이 좋겠다고 판단!
우선 ERD 수정
java 파일 수정
DB 파일 수정 (여기서 long을 BIGINT라고 적는 것을 처음 알았다)
그러고 나서 우선 회원가입 API를 포스트맨에서 테스트 했을 때. 500 에러 발생
intellij 콘솔에서 확인한 결과
Unknown column 'u1_0.user_id' in 'field list'
라는 오류 발생.
이는 User 엔티티에서는 userId라고 정의했는데, 실제 DB 테이블의 컬럼 이름은 user_id로 되어 있지 않다는 뜻.
하지만..DB를 다시 확인해도

정상적으로 userId로 작성된 것 확인.
그래에서 엔티티에 @Column(name = "userId") 이 코드를 추가했지만 또 안됨.
다시 콘솔을 확인하니
Hibernate:
select
u1_0.user_id,
u1_0.birth_date,
u1_0.gender,
u1_0.name,
u1_0.phone_number,
u1_0.profile_url,
u1_0.reading_taste,
u1_0.user_email,
u1_0.user_nickname,
u1_0.user_password
from
user u1_0
where
u1_0.user_email=?
이런 코드가 나온다.
이거는 JPA가 네이밍 전략을 자동으로 적용하고 있기 때문!
Spring Boot는 기본적으로
org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
이 전략을 사용하는데 이는 하이픈 방식으로 자동 변환시킨다.
application.yml 파일에
spring:
jpa:
hibernate:
naming:
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
이 코드 수정
Java: 카멜케이스 → userId
데이터베이스: 보통 스네이크케이스 → user_id
Hibernate는 이 차이를 맞춰주기 위해 다음과 같은 자동 네이밍 전략을 사용
userId → user_id
userEmail → user_email
| 방법 | 설명 | 권장 여부 |
|---|---|---|
DB 컬럼도 스네이크케이스 (user_id)로 만들기 | JPA 기본 전략과 일치함 | 일반적으로 권장 |
| Java에 @Column(name=...)로 명시하기 | DB 컬럼명을 따로 쓰고 싶을 때 사용 | 추천 |
하이픈(user-id) | SQL/DB에서 지원 안 됨 | 절대 비추천 |
Java는 camelCase가 표준 스타일이고,
SQL은 snake_case가 가독성 측면에서 일반적.
그래서 JPA는 이 둘의 차이를 자동으로 변환해주는 네이밍 전략을 사용한다.
1. JPA가 자동 변환하도록 맡기기 (관례 따르기)
DB는 snake_case (user_id)
Java는 camelCase (userId)
JPA가 자동으로 변환해줌 → 가장 관리 쉬움
2. @Column 애노테이션으로 명시적으로 하나하나 맞추기 (통일감 있음, 하지만 번거로움)
예: Java와 DB 모두 카멜케이스로 통일하고 싶다면:
@Column(name = "userId")
private Long userId;
실무에서는 JPA의 자동 네이밍 전략을 그대로 사용하는 방식 선호!
❓ 다시 DB는 스네이크 케이스, java 파일