[Spring] id 키값 타입Long을 UUID로 변경하기(H2 DB, JPA 사용)

    버전및 세팅

    Springboot 3.0.2

    DB: embadded H2 

    자바: 17

    plugins {
        id 'java'
        id 'org.springframework.boot' version '3.0.2'
        id 'io.spring.dependency-management' version '1.1.0'
    }

     

    UUID 적용 사유

    아래 처럼 id를 Long 타입으로 주고 글이 하나 생길때마다 하나씩 늘어나는 방식으로 줬다면 글이 총 몇개있는지 파악할 수 있다.  전체 개수가 몇개인지 파악되는 것을 꺼려할수도 있기 때문에 id를 암호화 하거나 UUID로 변경해야 한다.

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", updatable = false)
    private Long id;

     

    UUID 적용 방법

    1. Entity id 필드 어노테이션 추가, 필드 타입 UUID로 변경

    @Id
    @GeneratedValue(generator = "UUID")
    @GenericGenerator(name = "UUID", strategy = "org.hibernate.id.UUIDGenerator")
    @ColumnDefault("random_uuid()")
    @Column(name = "id", updatable = false, nullable = false)
    private UUID id;

    @GeneratedValue는 기본키를 자동으로 생성해 주는 어노테이션인데 자동 생성 전략이 필요하다. 하지만 기본적으로 쓸수 있는 자동 생성 전략을 쓰는 것이 아니고 커스텀한 자동 생성 전략을 쓰기 위해서 generator ="UUID" 로 하고 @GenericGenerator 에서 name="UUID"로 매핑을 하여 strategy(자동 생성 전략)을 "org.hibernate.id.UUIDGenerator"로 한다. 그리고 id 필드 타입을 Long에서 UUID로 변경한다.

     

    참고
    @ColumDefault 어노테이션은 H2 DB는 UUID를 생성 시키기 위해서 id필드 COLUMN_DEFAULT 스키마에 random_uuid()가 있으면 된다. 사실 H2 DB를 사용하면 이것만 있으면 된다.

     

     

    2. Repository UUID로 변경

    JpaRepository를 상속 받을때 2번째 타입인수가 id의 타입이다. Long으로 되어있는걸 UUID로 바꾼다. 안바꾸면 id로 데이터 가져오려고 할때 타입 에러가 뜬다.

     

    3. Controller 변경

    id를 URL에서 받았기 때문에 @PathVariable Long id 로 데이터를 가져왔었다. 타입을 UUID로 변경한다.

     

    4. DTO 변경

    데이터를 주고 받기 위한 DTO에서도 id에 대한 타입을 UUID로 변경한다.

     

     

    참고 : 

      - https://techblog.woowahan.com/2607/

      - https://www.youtube.com/watch?v=NuRJbkdMwxk

    댓글

    Designed by JB FACTORY