안녕하세요 오늘은 스프링 부트 AOP를 통해 Controller 호출로그와 파라미터 넘기기를 해보려고 합니다. 많은 글에서 AOP를 통해 로그를 찍긴 하지만 파라미터를 어떻게 넘길 수 있는지는 설명이 없어서 직접 경험하고 찾아서 한번 만들어 보았습니다. 이경우 리플렉션의 사전 지식이 필요합니다. build.gradle compile 'org.springframework.boot:spring-boot-starter-aop' LogAop @Component @Aspect public class LogAop { Logger logger = LoggerFactory.getLogger(LogAop.class); @Around("execution(* com.develop.kr.tddproject.controller..
스프링 부트는 내장 톰켓이 존재하여 jar를 이용한 손쉬운 배포가 가능합니다. 때문에 아래와 같이 처음 프로젝트를 생성하면서 jar를 이용한 패킹을 선택하지만 외부 톰켓을 이용하여 배포해야하는 경우에는 WAR를 이용한 배포를 하는 경우가 많습니다. 그러면 어떻게 war를 이용하여 배포를 하는지 설명하겠습니다. Gradle + War 배포 ※ 신규 프로젝트를 생성해주세요. 신규 프로젝트 생성하는 방법은 생략 하겠습니다. 시스템 환경 Spring boot (Framework) Gradle (Build Tool) Intellj (IDEA) ▶ 처음 Intellj 우축 상단을 보면 Gradle이 있을 것입니다. bulid를 보면 bootJar , jar는 존재하지만 war는 존재하지 않습니다. war를 배포하기..
사용자에 따른 json 형태로 데이터를 보내고자 할때 보내지 않아도 되는 데이터는 필터링하여 보내고 싶은 경우가 있다. 이떄 사용하는 것이 @JsonFilter 이다 User package com.ex.boot.web; import com.fasterxml.jackson.annotation.JsonFilter; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; @Data @NoArgsConstructor @AllArgsConstructor @Jso..
유효성을 체크하기 위하여 많이 사용하는 방법은 @Valid을 사용하는 것이다. 사용하기 위해서는 dependency를 추가해 줘야한다 Gradle dependency compile group: 'javax.validation', name: 'validation-api', version: '2.0.1.Final' compile group: 'org.hibernate.validator', name: 'hibernate-validator', version: '6.1.5.Final' TestController @RestController public class TestController { //사용자 조회 @GetMapping("/user") public String user(String id){ throw n..
일반화 된 예외를 처리하기 위하여 Aop를 활용한 Exception Handling을 할 것입니다. 그렇기 떄문에 우리가 사용하는 시스템에서 예외가 발생했을 때 에러를 Handling 할 수 있는 Spring boot 에서 제공하는 클래스를 만들 것 입니다. Controller에 요청을 했을때 예외가 발생하는 코드를 작성하였습니다. TestController @RestController public class TestController { @GetMapping("/user") public String user(String id){ throw new UserNotFoundExtion(String.format("존재하지 않는 회원 [ID : %s]", id)); } } UserNotFoundExtion @R..
Rest Api를 구현할 경우 4xx , 5xx , 2xx 등 여러 요청에따른 Status를 사용자에게 전달합니다. 만약 사용자가 존재하지 않는 정보를 요청한 경우 예외가 발생 할 수 있습니다. 예외가 발생하면 서브에서 발생한 에러인 500에러를 전달 할 것입니다. 이러한 status를 변경하여 사용자에게 전달할 수 있는 방법이 있습니다. 그것은 바로 @ResponseStatus를 사용하는 것입니다. @ResponseStatus 사용전 아래는 존재하지 않는 회원을 요청하는 경우로 가정하여 일부러 예외가 발생하는 코드를 작성했습니다. 에러는 error 메세지를 출력하는 ErrorCreate를 만들어 던지겠습니다. TestController @RestController public class TestCont..
Rest API를 구현 하다 보면 사용자로 부터 요청왔을때 특정값을 포함한 uri를 전달해야 하는 상황이 발생할 수 있다. 이떄 사용하는 것이 ServletUriComponentsBuilder이다. ServletUriComponentsBuilder를 통해 적절한 URI를 만들고 요청한 사용자에게 특정값을 포함한 URI를 전달 할 수 있다. ServletUriComponentsBuilder 아래의 방식은 파일업로드 후 파일다운로드 경로를 사용자에게 보내주고자 할 때 자주 사용되는 방법입니다. 지금은 간단한 예제를 만들겠습니다. TestController ServletUriComponentsBuilder.fromCurrentRequest()를 통해 사용자가 요청한 Uri를 가져온 다음 path를 통해 원하는..
DisDispacherServlet을 관리하기 위해 DisDispacherServletAutoConfiguration메소드가 자동으로 실행이된다. 사용자 요청에따른 비즈니스 로직을 처리한 다음에 결과 값을 api를 호출한 쪽에 다시 전달해야한다. 이러한 DisDispacherServlet은 사용자 요청을 처리를 담당하는 일종의 게이트라 생각 할 수 있다. 사용자 요청에 따른 결과값을 반환하기 위해 사용되어지는 AutoConfiguration파일은 HttpMessageConvertersAutoConfiguraion이 사용되어진다. HttpMessageConvertersAutoConfiguraion의 역할은 json형태로 변환 해서 사용자에게 전달하는 역할을 수행한다.