개념 정리/Spring

[Spring] UUID와 increment PK를 언제 사용할까?

쇼티드 2023. 7. 19. 02:21
728x90
반응형

이번에 프로젝트를 진행하며 코드를 보고 있었는데 UUID를 사용하는 것을 보았다.

평소에 UUID의 존재를 알고 있었지만 당연하게 AUTO INCREMENT나 IDENTITY방식을 쓰고 있었다.

그래서 UUID와 AUTO INCREMENT를 언제 구분해서 사용하는지 궁금해져 알아보았다.

 

1. UUID

UUID는 범용 고유 식별자라는 뜻으로 128bit의 긴 고유값을 PK로 사용한다.

고유값을 PK로 사용하기 때문에 중복될 일이 없는 수준이다.

 

2. AUTO INCREMENT

auto increment는 PK를 순서대로 1부터 자동으로 증가시키며 부여해주는 것이다.

 

3. 비교

먼저 UUID의 장점은 보안이다. AUTO INCREMENT는 키 값이 외부에 노출될 수도 있기 때문에 보안상 위험하다.

API를 짜다보면 PK값이 들어가는 경우가 있는데 이럴 경우 PK와 관련된 Entity에 대한 정보다 노출 될 수도 있다.

하지만 UUID는 고유한 값이므로 노출되어도 보안상 더욱 안전하다.

 

또한 PK가 중복될 일이 없다. INCREMENT 방식은 다른 테이블이라도 PK값이 1, 2, 3 이렇게 증가하게 되어 두 PK가 중복되어 충돌하는 경우가 생길 수 있다. 하지만 아까 말한 것처럼 UUID는 중복될 일이 거의 없는 수준이기 때문에 충돌이 거의 일어나지 않는다.

 

그럼 UUID의 단점은 무엇일까? 위에서 설명한 것처럼 UUID는 128bit의 긴 길이의 고유값이다.

즉, 많은 저장소를 필요로 한다.

프로젝트의 규모가 커지고 사용자가 많아질수록 INCREMENT 방식에 비해 필요한 저장소를 훨씬 많아질 것이다.

 

이렇게 둘을 알아보았지만 언제 무엇을 사용해야하는지 애매해 더욱 알아보았다.

 

4. 언제 사용할까?

아무래도 보안을 더욱 중요하게 여기는 것 같았다.

어플리케이션의 내부용으로는 INCREMENT, 외부용으로는 UUID를 사용하는 것이 좋다고 한다.

하지만 내부용이라고 식별값이 노출된다면 UUID를 사용하라고 한다.

 

그럼 UUID를 API에 사용하면 url이 엄청 길어져 이상할 것 같은데 이 부분은 좀 더 알아봐야겠다.

 

 

 

728x90
반응형