버전및 세팅
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로 변경한다.
참고 :
'Language > Spring' 카테고리의 다른 글
[SpringBoot] 스프링 시큐리티 연동및 설정, 인메모리 방식 유저 추가 방법 (0) | 2021.12.18 |
---|---|
[SpringBoot] IntelliJ 에서 스프링부트 DevTools 사용법과 실행원리 (0) | 2021.12.01 |
[SpringBoot] 기능구현한 코드를 코드로 테스트 하는방법및 주의사항 (0) | 2021.11.23 |
[SpringBoot] 웹개발 3가지 방식과 동작원리 (2) | 2021.11.22 |
[SpringBoot] 스프링부트 Gradle 프로젝트 빌드하고(jar파일 생성) 실행하는법 (0) | 2021.11.11 |