본문 바로가기
프로그래밍/Spring

@Enumerated 에 대한 이야기

by Mr-후 2020. 1. 7.
반응형

얼마전 회사에 특성화고 졸업을 앞둔 친구가 세명 들어왔다. 이 아이들을 실습하고 교육을 해서 정규직으로 전환을 해야하는 과제가 생겼다. 각 파트별로 특성이 있는 친구들이라 특색을 살펴보는 것도 재미있는 일이다.

그중 백엔드 파트를 지원한 아이가 코딩한 부분을 보면서 @Enumerated를 사용한 부분을 보게 되었고 Swift나 Objective-C에서 자주 사용하는 방법과 유사해서 기록을 남겨 본다. 

아마 그 친구도 내가 지금 읽고 있는 저자의 블로그나 책 같은 곳에서 보고 차용했을 것 같기도 하다. 

@Enumberated(EnumType.STRING) 
@Column(nullable = false)
private Role role; 

JPA를 사용하는 domain(@Entity) 부분에 정의한 예. 

JPA로 데이터베이스로 저장할 때 Enum값을 어떤 형태로 저장할지를 결정하고 기본적으로 int로 된 숫자가 저장된다고 한다. 숫자로 저장되면 데이터베이스로 확인할 때 그 값이 무슨 코드를 의미하는지 알수가 없기 때문에 문자열(EnumType.STRING)로 저장될 수 있도록 선언한 것이다. 

Enum클래스 Role생성 

public enum Role {
	GUEST("ROLE_GUEST", "손님"),
    USER("ROLE_USER", "일반사용자"); 
    
    private final String key; 
    private final String title; 
}

 

스프링 시큐리티에서는 권한 코드에 항상 "ROLE_"가 앞에 있어야만 한다. 

사용 방법은 다음과 같다. 

public User toEntitiy() {
	return User.builder() {
    	.name(name)
        .email(email)
        .picture(picture)
        .role(Role.GUEST)
        .build(); 
    }
}

build() 를 사용해서 User Entity를 만드는 예제코드이다. 

 

반응형