[Spring Boot] 회원가입

Leeseojune·2020년 11월 22일
3

SpringBoot

목록 보기
1/3
post-thumbnail

개발 환경 : Intellij, Gradle, MySQL, REST API, PostMan

1. 사전 지식

Java 기본 문법.
Spring boot와 MySQL연동하기.

2. 구현

application.properties 설정

server.address=localhost
server.port=8080


spring.jpa.generate-ddl=true

spring.jpa.database=mysql

spring.datasource.url=jdbc:mysql://localhost:3306/User?useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Seoul
spring.datasource.username=testId
spring.datasource.password=testPw
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect

build.gradle dependency 추가

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web-services'
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    compile 'mysql:mysql-connector-java'
    compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.11.2'

}

UserRequest.java (Vo file)

@AllArgsConstructor
@Getter
@NoArgsConstructor
public class UserRequest {
    private String userId;
    private String userPw;
}

RegisterController.java (Controller file).

@RequiredArgsConstructor
@RestController
public class UserController {
    private final UserService userService;

    @PostMapping("/register")
    public String Register(@RequestBody UserRequest request){
        return userService.register(request);
    }


}

User.java (Entity file)

@Entity
@Table(name = "User")
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class User{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int userCode;
    
    private String userId;
    private String userPw;
}

UserRepository.java (DAO file)

@Repository
public interface UserRepository extends JpaRepository<User, Integer> {}

UserService.java (interface file)

public interface UserService {
	String register(UserRequest request);
}

UserServiceImpl.java (구현 file)

@Service
@RequiredArgsConstructor
public class UserServiceImpl implements UserService {
	private final UserRepository userRepository;
    
    @Override
    public String register(UserRequest request){
    	try{
        	userRepository.save(
            		User.builder()
            			.userId(request.getUserId())
                		.userPw(request.getUserPw())
                		.build()
                );
           	return "Success";
            }catch(Exception e){
            	throw new AlreadyExistException();
            }
     }
}
        	

어노테이션 설명

@RestController : 데이터를 return하는 Controller, @Controller 과 @ResponseBody를 합친것.

@Repository : DAO에 특화된 어노테이션

@Service : 내부 자바 로직 처리

DAO란?

DB에 대한 Insert, Update, Delete, Select를 처리함.

이 말을 쉽게 풀어서 쓰자면, DB와 직접적으로 연결되어있다는 말이다.
DAO를 찾아보면 VO, DTO가 같이 나오는 경우가 있는데, 그렇다면 VO와 DTO는 무엇일까???

VO, DTO

DTO(Data Transfer Object)는 데이터가 포함된 객체를 한 시스템에서 다른 시스템으로 전달하는 작업을 하는 객체.
VO(Value Object)는 읽기 전용 DTO라고 생각하면 된다.
위 프로그램의 UserRequest를 VO라고 할 수 있다.

여러 질문 환영입니다.

오류 지적 감사하게 받겠습니다.

0개의 댓글