Springboot/블로그만들기

[Springboot] 블로그 만들기 (18)_회원가입(3)

21종 2023. 11. 27. 18:46

Service 생성

 

UserService.java

package com.lwj.blog.service;

import javax.transaction.Transactional;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.lwj.blog.model.User;
import com.lwj.blog.repository.UserRepository;

// 스프링이 컴포넌트 스캔을 통해서 Bean에 등록을 해줌. IoC를 해준다.
@Service
// service : 트랜젝션 관리를 위해 사용
public class UserService {

	@Autowired
	private UserRepository userRepository;
	
	@Transactional // 전체가 성공하면 commit 실패시 rollback
	public void 회원가입(User user) {
		userRepository.save(user);
	}
}

 

 

ResponseDto.java 수정

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class ResponseDto<T> {

	int status;
	T data;
}

 

 

GlobalExceptionHandler.java 수정

@ControllerAdvice // 어느파일에서나 Exception이 발생해도 이 함수를 타게하기 위한 어노테이션
@RestController
public class GlobalExceptionHandler {

	@ExceptionHandler(value=Exception.class)
	public ResponseDto<String> handleArgumentException(IllegalArgumentException e) {
		return  new ResponseDto<String>(HttpStatus.INTERNAL_SERVER_ERROR.value(), e.getMessage());
	}
}

 

 

userApplicationController.java 수정

@RestController
public class UserApiController {
	
	@Autowired
	private UserService userService;
	
	@PostMapping("/api/user")
	public ResponseDto<Integer> save(@RequestBody User user) { //userName, password, email
		System.out.println("UserApiController : save 호출됨");
		// 실제로 DB에 insert를 하고 아래에서 return이 되면 된다.
		user.setRole(RoleType.USER);
		userService.회원가입(user);
		return new ResponseDto<Integer>(HttpStatus.OK.value(), 1); // 자바오브젝트를 JSON으로 변환해서 리턴(Jackson)
	}
}

 

테스트

 

회원가입 실패시

오류코드와 함께 값이 insert되지 않는다.

unique 값인 userName을 중복으로 insert 한 경우


참고 유튜브 (메타코딩님 강의)

https://youtu.be/f5zHFb1BHmY?si=3Z9DqcriDgw9HoEz