본문 바로가기

개발/프로젝트

[스프링부트 게시판] 11. JPA DELETE

이번 게시글에서는 DELETE 작업을 수행하도록 하겠습니다.

 

전에 INSERT, SELECT, UPDATE로 사용한 사용자(User) 데이터베이스의 현재 상태입니다.

 

DBeaver

 

사용자 삭제를 위한 DELETE 작업을 위해 UserController 클래스에 다음과 같은 함수를 추가하였습니다.

 

[UserController]

@DeleteMapping("/user/{id}")
public String delete(@PathVariable Long id) {

    try {
        userRepository.deleteById(id);
    } catch (EmptyResultDataAccessException e) {
        return "삭제에 실패하였습니다. 해당 id는 DB에 존재하지 않습니다.";
    }

    return "삭제가 완료되었습니다. id : " + id;
}

 

사용자 중에 lee로 시작하는 id가 4번인 값을 제거하도록 하겠습니다.

 

Postman
DBeaver

 

정상적으로 4번의 id에 해당하는 데이터가 DELETE 처리가 되었습니다. 만약 에러가 발생하여 어떤 에러 메세지가 나오는지 확인을 하고 싶다면 Exception에 대한 메세지 출력 처리를 해야합니다.

 

우선 먼저 Controller 패키지애서 새 컨트롤러 클래스를 추가하도록 하겠습니다.

 

[ExceptionController]

@ControllerAdvice("com.toyProject.controller")
@RestController
public class ExceptionController {
	
	@ExceptionHandler(value=Exception.class)
	public String handleArgumentException(Exception e) {
		return "<h1>"+e.getMessage()+"</h1>";
	}
	
}

 

해당 코드의 어노테이션 및 코드 내용의 해석을 설명드리겠습니다.

 

@ControllerAdvice - @Controller 에 발생하는 예외를 잡아 처리해주는 어노테이션입니다. Default로는 @Controller가 들어있는 모든 컨트롤러 클래스를 확인 할 수 있으며 따로 괄호 안의 특정 패키지 내에 위치한 @Controller만 예외 처리를 할 수도 있습니다.

@ExceptionHandler - @Controller, @RestController가 적용된 Bean내에서 발생하는 예외를 잡아서 하나의 메서드에서 처리하는 기능입니다. 현재 작성한 코드는 모든 Exception에 해당하는 에러 메세지를 출력하도록 설정을 했습니다.

 

Result

 

아까 삭제한 4번의 값은 없기 때문에 해당 에러 메세지 출력이 정상적으로 나타났습니다.