본문 바로가기

개발/SpringBoot

[JPA] Entity 설계 시 ID 값을 Integer 대신 Long 타입으로 지정하는 이유

 

JPA 공부 중 많은 코드들이 Entity 설계 시 ID 값을 Long 타입으로 지정해주는 것을 보았다.

 

NULL값을 처리해주기 위해 원시 타입인  int, long 대신 wrapper 클래스를 사용하는것은 알고 있었지만

 

Integer 을 써도 될것같은데 굳이 Long을 쓰는 이유를 알아보았다.

 

Long과 Integer의 주요 차이점

  1. 값의 범위
  • Integer: -2,147,483,648 ~ 2,147,483,647 (약 21억)
  • Long: -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 (약 922경)
  1. ID 값으로 Long을 선호하는 이유:
  • 확장성: 데이터가 증가해도 ID 값이 부족할 걸정이 없음
  • 안정성: Integer 최대값 도달 시 오버플로우 발생 가능
  • 일관성: 다른 시스템과의 통합 시 ID 값 호환성 보장

예를 들어:

 
// Integer 사용 시 문제
@Id private Integer id; // 약 21억개 제한
 
// Long 사용 시
@Id private Long id; // 약 922경개 가능

 

실제 사례:

  1. SNS 서비스: 트위터의 경우 초기에 Integer를 사용하다가 ID 부족으로 Long으로 마이그레이션
  2. 대규모 커머스: 주문번호, 상품번호 등에서 Long 사용
  3. 로그 시스템: 대량의 로그 데이터 ID 관리

메모리 차이:

  • Integer: 4 bytes
  • Long: 8 bytes

하지만 현대 시스템에서 이 정도의 메모리 차이는 크게 중요하지 않으며, 확장성이 더 중요한 요소라고 한다.

 

또한 현직에 계신 개발자분께 여쭤봤을때는 Integer로 처리하기 충분한 엔티티도 서비스가 커질꺼라는 기대? 그리고 관행 때문에 Long으로 많이 하신다고 하셨다.

 

 

결론: 특별한 제약이 없다면 ID 값은 Long을 사용하는 것이 안전하고 확장성 있는 선택이다. 하지만 작은 서비스는 Integer를 써도 무방하다.