김영한 강사님의 강의를 듣고 실습을 하고 있었는데 member의 id가 50씩 늘어나는 문제를 확인했다.
이게 뭐였지 50개씩 할당을 미리 하는게 뭔가 있었던거 같은데 싶어서 찾아보니까 H2, PostgreSQL, Oracle 등에선 내부에서 SEQUENCE 전략을 사용하는데 성능 향상을 위해 기본적으로 ID 값을 한 번에 50개씩 미리 할당해준다는 사실을 다시 알았다.
아그래서 ID가 50씩 뛰던 것.
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
이렇게 바꾸면 DB가 직접 auto_increment를 관리해서 ID가 1씩 증가한다.
근데 두 번째 문제가 발생했다.
전략 바꾸고 서버 실행 후 회원등록을 했는데 whitelabel 500 오류가 생겼다..
Whitelabel Error Page
There was an unexpected error (type=Internal Server Error, status=500).
could not execute statement [NULL not allowed for column "MEMBER_ID"]
보니까 MEMBER_ID가 NULL이라는 오류가 발생하는데 GPT로 간단히 해결하긴 싫어서 구글링하며 찾아보니
IDENTITY 전략은 DB에서 직접 auto_increment를 설정해야 하는데 기존 테이블에선 member_id에 auto_increment가 설정되어있지 않아서 null이 들어가다가 에러가 발생한 거였다.
해결은?
그냥 깔끔하게 ddl-auto에서 create-drop으로 바꾸고 테이블을 새로 생성해서
다시 update 상태로 바꾸니 해결됐당
DDL과 실제 DB 구조 불일치가 될 수 있으니 잘 확인하자.
에러 로그는 caused by 라인을 확인하자
'Backend > JPA' 카테고리의 다른 글
[JPA] 다대일과 일대다 연관관계 매핑 이해하기 (0) | 2025.04.11 |
---|---|
[JPA] 영속성 컨텍스트부터 엔티티 생명주기까지 확실히 알자! (0) | 2025.04.07 |