spring

[Spring] 엔티티의 Id값을 Long 타입으로 지정하는 이유

허몽구 2023. 10. 1. 11:39

문득 Entity 설계를 하다가, 왜 항상 id는 Long으로 설정할까? 라는 의문이 생겼다.

첫 프로젝트에서는 int로 설계 했던 기억이 있는데, 엔티티 관련 설계를 찾아보면 id를 Long으로 설정하는게 99%여서 나도 Long으로 설계하게 되었다...

그때는 마냥 Long이 int보다 범위가 넓으니까 그렇겠지! 라고 생각하고 넘어갔는데,

지금 생각해보니 int도 21억까지 설정이 가능한데... 개인 프로젝트에서 id값이 21억이 넘어갈 수가 있을까? 라는 궁금증이 생겨 한 번 찾아봤다!

 

엔티티의 ID 값을 Long으로 설정하는 이유

 

1. 숫자 범위

위에 언급했던 것처럼 int는 -21억 ~ 21억까지 저장이 가능하다.

int 4 바이트 (32비트) - 231 ~ (231 - 1)
- 2,147,483,648 ~ 2,147,483,647
Long 8 바이트 (64 비트) - 263 ~ (263 - 1)
- 9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,8087

 

2. NULL을 사용하기 위해

int나 long 의 경우, 원시타입으로 null값을 가질 수 없다.

 

 

반면 Long은 Wrapper type으로, 값이 없을 경우 null로 초기화가 가능하다.

따라서 값이 0이라면, id가 0으로 저장됐음을 파악할 수 있다.

즉, id가 없어서 0으로 세팅이 된 건지, 실제 값이 0인지 데이터를 보고 판별할 수 있다는 것이다.

 


 

https://www.inflearn.com/community/questions/260916/id%EA%B0%92%EC%9D%84-long-%ED%83%80%EC%9E%85%EC%9C%BC%EB%A1%9C-%EC%A7%80%EC%A0%95%ED%95%98%EB%8A%94-%EC%9D%B4%EC%9C%A0%EA%B0%80-%EB%94%B0%EB%A1%9C-%EC%9E%88%EB%82%98%EC%9A%94

 

찾아보니 인프런에도 누가 동일한 주제로 질문한 내용이 있었다!

참고하면 좋을 것 같다.

 

다른 분들이 Entity의 id를 Long 타입으로 설정하길래 아무 생각 없이 따라 썼는데, 이유를 알고 나니 왜 그렇게 작성해야 하는지 알게 되어 좋았다!