Wanna be Brilliant Full-Stack Developer
SpringBoot Blog 만들기 회원가입을 위한 enum 사용법 본문
Back-End/블로그 만들기 With SpringBoot
SpringBoot Blog 만들기 회원가입을 위한 enum 사용법
Flashpacker 2023. 3. 3. 01:08
여기서 role 같은경우에는 Default Value가 user니까 이 user값이 언제 작동하는가?
이렇게 되어야지 데이터베이스에 인서트 될때 role값을 안넣었으니까 디폴트 값이 user가 들어간다.
이렇게 하기 위해서는 @DynamicInsert 어노테이션을 넣어야한다.
애를 붙이게 되면 insert 할떄 null인 필드 를 제외 시켜준다.
package com.cos.blog.model;
import java.sql.Timestamp;
import org.hibernate.annotations.ColumnDefault;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.DynamicInsert;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder // 빌더 패턴
//ORM -> Java(다른언어) Object -> 테이블로 매핑해주는 기술
@Entity // User클래스가 MySQL에 테이블이 생성이 된다.
@DynamicInsert
public class User {
@Id //Primary key
@GeneratedValue(strategy = GenerationType.IDENTITY ) //
private int id; // 오라클(시퀀스), Mysql(auto_increment)
@Column(nullable = false, length = 30)
private String username; // 아이디
@Column(nullable = false, length = 100) // 123456 => 해쉬(비밀번호 암호화)
private String password;
@Column(nullable = false, length = 50)
private String email; // myEmail, my_email
@ColumnDefault("'user'")
private String role; // Enum을 쓰는게 좋다.
@CreationTimestamp // 시간이 자동으로 입력
private Timestamp createDate;
}
이런 어노테이션을 붙이면 끝이 없다. 이게 결코 좋은 방법은 아니다.
package com.cos.blog.test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import com.cos.blog.model.User;
import com.cos.blog.repository.UserRepository;
@RestController
public class DummnyControllerTest {
@Autowired // 의존성 주입(DI)
private UserRepository userRepository;
//http://localhost:8000/blog/dummy/join (요청)
//http의 body에 username, password, email 데이터를 가지고(요청)
@PostMapping("/dummy/join")
public String join(User user) { //key=value (약속된 규칙)
System.out.println("id : " + user.getId());
System.out.println("username : "+user.getUsername());
System.out.println("password : "+user.getPassword());
System.out.println("email : "+user.getEmail());
System.out.println("role: " +user.getRole());
System.out.println("createDate : " +user.getCreateDate());
user.setRole("user");
userRepository.save(user);
return "회원가입이 완료되었습니다";
}
}
개발자들이 실수를 할 수 있다. user2이렇게 적을 수도 있기 떄문이다.
Enum이라는것을 만들어보자
user에서도 String을 저렇게 넣으면 실수를 할 수 있기 떄문에 왜냐하면 ADMIN, USER을 넣을수있는데
타입을 RoleType이라고 하면 타입이 감지가 된다. ADMIN과 USER 두개만 넣을 수 있도록!?
private RoleType role; // Enum을 쓰는게 좋다. //ADMIN,USER
이렇게 하면 DB는 RoleType라는것이 없기 떄문에
넣다보면 이렇게 실수하는것을 방지 하기 위해서는 무엇을 만들어야하는가? Enum을 만들면된다.
Enum을 넣으면 내가 넣는 값을 감지할 수 있다.
감지하는 이유는 무엇인가? USER아니면 ADMIN만 넣을 수 있다라는 강제성도 있다.
users라고 실수해서 넣을일이 없다.
ENUM은 데이터의 도메인을 만들떄 쓴다.
도메인은 어떤 범위를 말한데 어떤 범위안에 데이터를 넣을때!
만약에 남 녀 밖에 못넣으면 String으로 데이터 타입을 정하면 남자 여자 라고 잘못적을 수도 있는데
ENUM으로 하면 데이터를 넣을떄 값을 도메인 안에서 강제시킬 수 있다.
'Back-End > 블로그 만들기 With SpringBoot' 카테고리의 다른 글
SpringBoot Blog 만들기 전체 select 및 paging 테스트 (0) | 2023.03.07 |
---|---|
SpringBoot Blog 만들기 id로 select 테스트하기 (0) | 2023.03.03 |
SpringBoot Blog만들기 회원가입을 위한 insert 테스트 (0) | 2023.02.23 |
SpringBoot blog 만들기 Json 사용법 (1) | 2023.02.16 |
SpringBoot Blog 만들기 연관관계의 주인 (0) | 2023.02.15 |