Spring/Spring 블로그만들기

[Springboot] 나만의 블로그 만들기 - 12. 회원가입 위한 insert, enum 사용법

개발자하소서 2022. 3. 21. 15:39
728x90
반응형
SMALL

📌 inser Test 작성하기

 

1. DummyControllerTest 클래스 생성 

 

 

2. 클래스 작성

 

package com.cos.blog.test;

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController //페이지로 응답할게 아니라 데이터 응답시
public class DummyControllerTest {

	//http://localhost8081/blog/dummy/join(요청) --> request
	//http의 body에 username, password, email데이터를 가지고 요청
	@PostMapping("/dummy/join") // insert 문이니까 post방식
	public String join(String username, String password, String email) { // key=value 약속된규칙
		System.out.println("username :" + username);
		System.out.println("password :" + password);
		System.out.println("email :" + email);

		return"회원가입이 완료되엇습니다.";
		
	}
}

 


📌 DB insert 하기

 

1. com.cos.blog.repository 라는 패키지를 만든다.

 

 

2.  UserRepository 인터페이스를 생성하고 jpa repository를 상속한다.

 

 

package com.cos.blog.repository;

import org.springframework.data.jpa.repository.JpaRepository;

import com.cos.blog.model.User;

// DAO역할
// 자동으로 bean이 등록된다
// @Repository 생략이 가능하다
public interface UserRepository  extends JpaRepository<User, Integer>{
 //해당 jparepository는 user 테이블을 관리하는 레파지토리이고 
// user테이블의 primary key는 integer이다
	
}

 

 

3.  다시 dummyrepositorytest로 가서 추가작성

@Autowired
private UserRepository UserRepository;
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 DummyControllerTest {

	@Autowired // 의존성주입(=DI)
	private UserRepository UserRepository;
	//http://localhost8081/blog/dummy/join(요청) --> request
	//http의 body에 username, password, email데이터를 가지고 요청
	@PostMapping("/dummy/join") // insert 문이니까 post방식
	public String join(User user) { // key=value 약속된규칙
		System.out.println("username :" + user.getUsername());
		System.out.println("password :" + user.getPassword());
		System.out.println("email :" + user.getEmail());

		UserRepository.save(user);
		return"회원가입이 완료되엇습니다.";
		
	}
}

 

4. postman에서 post방식으로 send하기

 

 

5. insert문이 삽입된 것을 확인할 수 있다.

 

근데, role값이 null로 나오는 것을 확인할 수 있다.

 

 

6. user.java 수정

 

//@ColumnDefault("'user'") -->이것을 주석처리한다.
private String role;

package com.cos.blog.model;

import java.sql.Timestamp;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

import org.hibernate.annotations.ColumnDefault;
import org.hibernate.annotations.CreationTimestamp;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;


@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder //빌더패턴
@Entity // 이 어노테이션을 사용하면 
// user클래스가 MySQL에 테이블이 자동으로 생성됨
// @DynamicInsert --> insert시에 null인 필드를 제외시켜준다.
public class User {

	@Id // primary key
	@GeneratedValue(strategy =GenerationType.IDENTITY)
	// 해당 프로젝트에서 연결된 db의 넘버링 전략을 따라간다.
	// 즉, 내가 오라클을 사용한다면 시퀀스를 사용한다는 것이고
	// mysql을 사용한다면 auto_increment를 사용한다는 뜻이다
	private int id;//시퀀스. auto_increment
	
	@Column(nullable = false, length = 30)// 아이디의 column의 값이 nul이 되면 안되기에   false로 설정하고 길이는 30으로 설정
	private String username; //아이디
	
	@Column(nullable = false, length = 100)// 비밀번호길이를 굳이 길게 설정하는 이유는 나중에 해쉬로 비밀번호를 암호화 할 것이기때문이다 
	private String password; //비밀번호
	
	@Column(nullable = false, length = 50)
	private String email; //이메일
	
	//@ColumnDefault("'user'") -->이것을 주석처리하고
	private String role; // Enum을 쓰는 것이 좋다. // admin, user, manager 도메인(=범위) 설정할 수 있다
	
	@CreationTimestamp // 시간이 자동으로 입력된다.
	private Timestamp createDate; // 가입시간
}

 

 

7. model 패키지에 enum 클래스 생성 --> 'RoleType'

 

package com.cos.blog.model;

public enum RoleType {

	USER,ADMIN
	
}

 

 

8. user.java --> role을 String에서 RoleType형으로 바꾼다

 

//@ColumnDefault("'user'") -->이것을 주석처리하고
	//DB에는 RoleType이라는 것이 없기에
	@Enumerated(EnumType.STRING)
	private RoleType role; // Enum을 쓰는 것이 좋다. // admin, user, manager 도메인(=범위) 설정할 수 있다
	// ADMIN, USER

 

 

9. dummycontrollerTest 수정

 

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.RoleType;
import com.cos.blog.model.User;
import com.cos.blog.repository.UserRepository;

@RestController //페이지로 응답할게 아니라 데이터 응답시
public class DummyControllerTest {

	@Autowired // 의존성주입(=DI)
	private UserRepository UserRepository;
	//http://localhost8081/blog/dummy/join(요청) --> request
	//http의 body에 username, password, email데이터를 가지고 요청
	@PostMapping("/dummy/join") // insert 문이니까 post방식
	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(RoleType.USER);
		UserRepository.save(user);
		return"회원가입이 완료되엇습니다.";
		
	}
}

 

 

10. postman에서 post방식으로 send하기

 

 

 

11. 이전과 달리 role에 null값이 아닌, 대문자로 USER가 들어간 것을 확인할 수 있다.

 

 

**즉, enum을 만들면 내가 넣는 값을 강제할 수 있다.

   예로들면 USER와 ADMIN만 넣어야 하는데 혹시 실수하여 users라고 넣을 수 있는 경우

   enum을 만들어 꼭 설정해야할 강제값을 넣으면 실수하지 않을 수 있다.

   --> enum을 데이터의 '도메인'(=범위)을 만들때 사용하는 것이다.

 

 

728x90
반응형
LIST