반응형
@ExceptionHandler 스프링은 API 예외 처리 문제를 해결하기 위해 @ExceptionHandler 라는 애노테이션을 사용하는 매우 편리한 예외 처리 기능을 제공합니다. 사용방법은, 잡을 예외를 파라미터로 갖는 메서드를 만들고 메서드 위에 @ExceptionHandler 애노테이션을 선언하여 사용합니다. 해당 컨트롤러에서 처리하고 싶은 예외를 지정해주면 해당 컨트롤러에서 예외가 발생할 경우 이 메서드가 호출됩니다. (발생한 예외를 잡으면 지정한 예외 또는 그 예외의 자식 클래스는 모두 잡습니다.) 에러 코드와 메세지를 갖는 객체 오류가 발생하면 단순하게 오류 코드와 메시지를 JSON 데이터로 보내는 단순한 구조를 갖는 예제로 설명하겠습니다. @Data @AllArgsConstructor pu..
스프링 타입 컨버터(Converter) 웹 개발을 하다보면 문자를 숫자로 변환하거나, 숫자를 문자로 변환해야 하는 일이 상당히 많습니다. 특히, HTTP 요청 파라미터는 모두 문자로 처리되기 때문에 요청 파라미터를 자바에서 다른 타입으로 변환해서 사용하고 싶으면 다음과 같이 숫자 타입으로 변환하는 과정을 거쳐야 합니다. 그런데! 스프링의 요청 파라미터인 @RequestParam , @ModelAttribute , @PathVariable 어노테이션을 사용하면 스프링이 중간에 해당 요청 파라미터의 반환 타입을을 보고, 타입 변환기를 사용해서 타입을 변환해줍니다. public String hello(@RequestParam Integer data) { ... } (@RequestParam 요청 파라미터의 반..
정적 오류 페이지를 보여주고 싶다면, resources/static 동적 오류 페이지를 보여주고 싶다면, 뷰 템플릿 경로인 resources/templates 둘 중 자기가 보여주고자 하는 경로에 /error 폴더를 만들어 이 error 폴더에 발생하는 HTTP 상태 코드 이름의 HTML파일을 만들어서 넣어두기만 하면 됩니다. 5xx, 4xx는 500번 대, 400번 대 오류를 처리 해주며, 구체적인 오류코드 (ex: 404, 500)이 있다면 이 구체적인 오류코드 이름의 페이지가 우선순위가 더 높습니다. Controller @Controller public class ErrorPageTestController { @GetMapping("/error-ex") public void errorEx() { t..
@Transactional에 대해 궁금하다면 아래 포스팅을 읽어보는 것을 추천드립니다. 트랜잭션이란? 특징과 사용법에 대해 쉽게 알아보자트랜잭션(Transaction) 트랜잭션은 DB의 상태를 변경시키기 위해 수행하는 작업 단위입니다. 여기서 DB의 상태를 변경시킨다는 SELECT, UPDATE, INSERT, DELETE 와 같은 쿼리를 날려 연산을 수행하는 것입니hstory0208.tistory.com트랜잭션 전파트랜잭션을 각각 사용하는 것이 아니라, 트랜잭션이 이미 진행중인데, 여기에 추가로 트랜잭션을 진행 시킬 수 있습니다.이런 경우 어떻게 동작할지 결정하는 것을 트랜잭션 전파(propagation)라 합니다. 트랜잭션이 하나일 경우먼저 트랜잭션이 하나 있을 경우를 봅시다.트랜잭션 처리는 한번에 ..
프록시 방식의 AOP 한계 @Transactional 어노테이션을 사용하는 트랜잭션 AOP는 프록시를 사용하는데 이 프록시를 사용하면 메서드 내부 호출에 프록시를 적용할 수 없는 한계를 갖습니다. 어떠한 한계가 생기는지 자세히 알아보기 위해 먼저 스프링 컨테이너에서 트랜잭션 프록시가 등록되는 것을 그림으로 봅시다. 스프링 컨테이너에 트랜잭션 프록시 등록 @Transactional 애노테이션이 특정 클래스나 메서드에 하나라도 있으면 있으면 트랜잭션 AOP는 위 그림처럼 프록시를 만들어서 스프링 컨테이너에 등록합니다. 이 때, 실제 TxService 객체 대신에 프록시인 TxService$$CGLIB 를 스프링 빈에 등록합니다. 그리고 프록시는 내부에 실제 TxService 를 참조합니다. 여기서 핵심은 실..
이전 포스팅에서 유효성 검증하는 법에 대해 알아봤었습니다. (이전 포스팅에서 다룬 내용들은 이번 포스팅에서는 생략) [Spring] 유효성 검증하기 (Validation) 웹 애플리케이션을 만들고 유효성 검증을 추가 하지 않는다면, 사용자가 폼에 잘못된 값을 입력할 시 아래와 같은 오류화면을 만나게 될 것 입니다. 이렇게 되면 클라이언트 입장에서는 상당히 hstory0208.tistory.com 하지만 이 전처럼 검증 기능을 매번 코드로 작성하는 것은 상당히 번거로운 작업입니다. 스프링은 이런 검증 로직을 모든 프로젝트에 적용할 수 있게 공통화하고, 표준화한 Bean Validation을 제공합니다. Bean Validation을 잘 활용하면, 애노테이션 하나로 검증 로직을 매우 편리하게 적용할 수 있습..