본문 바로가기

반응형

Tech/Spring | SpringBoot

(20)
[SpringBoot] Logging - 3 (log4j2) 이전에 springboot 의 로깅 프레임워크를 공부하면서 logback 까지만 공부하고 사용했었다. 보다 최신 로깅 프레임워크인 log4j2 를 한번 들여다보고 싶었는데 기회가 없다가 이번에 개인 공부를 하면서 로그 환경을 설정할 기회가 있어서 log4j2 에 대해서 알아보았다. 1. log4j2 log4j2 는 자바 로깅 프레임워크 중 하나로 log4j 의 최신버전이다. 비동기 로깅을 통해서 logback 이나 이전버전의 log4j 보다 성능을 향상시킨 버전이다. Log4j2 기능 Async Logger log4j2 는 비동기 로깅 기능이 추가되었다. 비동기 로깅은 I/O 작업을 별개의 스레드에서 실행하도록 하여 애플리케이션의 성능을 향상시킨다. 이를 통해서 logger 가 처리할 수 있는 처리량이 ..
[Spring] JaCoCo 테스트 코드를 작성하다 보면 단순히 내가 작성한 테스트 코드의 성공 여부 외에도 얼마나 내가 테스트 코드를 잘 작성하고 있는지 확인할 필요가 있다. 이럴 때 사용하는 것이 코드 커버리지 툴인데, 이러한 툴들을 사용하면 내가 작성한 테스트 코드의 커버리지와 기준에 미치는지 여부 등을 리포트 형식으로 체계적으로 확인할 수 있다. 1. JaCoCo JaCoCo 는 Java 코드의 커버리지를 체크하는 라이브러리이다. 테스트 코드를 실행하고 그 결과로 html 이나 xml, csv 형식의 리포트를 생성한다. 이 리포트를 통해서 소스 코드 중에서 테스트 되어지는 라인과 분기들에 대해서 확인할 수 있다. 이 글에서는 spring 프로젝트에서 JaCoCo 를 사용하여 테스트 커버리지를 확인하는 방법을 설명할 것이다. ..
[Spring] lombok - @Builder 1. @Builder @Builder 는 객체에 Builder 패턴을 자동으로 적용해주는 lombok 의 어노테이션이다. Builder 패턴은 복잡한 객체를 간단하게 생성할 수 있도록하는 디자인 패턴 중 하나로 생성자를 통한 생성이 아닌 빌더의 필드별 함수를 통해서 객체를 생성한다. @Builder 는 클래스 레벨에 붙이거나 생성자 또는 메서드에 붙여서 파라미터를 활요한 Builder 패턴을 자동으로 생성해준다. 2. @Builder class 만약에 클래스가 @Builder 로 지정된다면 클래스의 모든 필드를 매개변수로 받는 private 생성자가 자동으로 생성된다. 이때 생성자는 컴파일러를 통해 자동으로 생성되기 때문에 사용자가 따로 생성자를 구현하거나 @XArgsConstructor 형식의 어노테이..
[Spring] MapStruct 1. MapStruct 란? MapStruct 는 매핑된 object 를 서로 변환해주는 기능을 제공하는 라이브러리이다. mapper 인터페이스에서 두개의 Java Bean 타입에 대해서 매핑하는 함수를 선언하면 MapStruct 는 해당 인터페이스를 자동으로 구현하여 매핑 함수를 생성해준다. 스프링을 사용하다 보면 객체를 다른 객체로 변환해야 하는 경우가 있다. 주로 DTO 와 DB Entity 간의 변환이 많이 발생한다. 이런 부분에서 MapStruct 를 사용한다면 bean mapper 함수를 따로 구현하지 않고 자동으로 변환할 수 있도록 할 수 있다. MapStruct 는 어노테이션 기반으로 동작한다. @Mapper 어노테이션을 통해서 mapper 인터페이스를 선언하고 메서드를 선언하여 사용할 수..
[Spring] ResponseEntity 1. ResponseEntity Spring 에서는 HttpEntity 라는 클래스를 제공한다. HttpEntity 는 HTTP 요청이나 응답에 사용되는 객체를 구현한 클래스로 HttpHeaders 와 HttpBody 를 포함하는 클래스이다. 이러한 HttpEntity 를 상속받아서 구현한 클래스가 ResponseEntity 와 RequestEntity 클래스이다. ResponseEntity 는 사용자의 HttpRequest 에 대한 응답 데이터를 포함하는 클래스이다. 그렇기 때문에 HttpEntity 로부터 상속받은 HttpHeaders, HttpBody 와 응답코드인 HttpStatus 를 포함한다. ResponseEntity 는 status code, headers, body 등과 같은 모든 HTT..
[SpringBoot] 예외처리 - 3 (@ExceptionHandler, @ResponseStatus, @ControllerAdvice) 1. @ExceptionHandler(Exception.class) @Controller 레벨에서 예외를 처리하는 방법이다. 예외를 처리할 메서드를 구현하고 @ExceptionHandler 어노테이션으로 해당 메서드를 선언하여 예외 처리 메서드로 지정할 수 있다. 이때 @ExceptionHandler 어노테이션의 값으로 예외처리할 Exception 클래스 종류를 지정할 수 있다. 이 방식의 가장 큰 약점은 @ExceptionHandler 로 선언된 메서드가 해당 컨트롤러 클래스에서만 유효하다는 것이다. 모든 컨트롤러에 해당 메서드를 구현하는 것은 코드의 양이 늘어나고 전반적인 해결방법이 아니기 때문에 사용하기 어렵다. 모든 클래스가 특정 base 클래스로부터 상속되도록 하는 방식으로 구현하여 해결할 수 ..
[SpringBoot] 예외처리 - 2 (HandlerExceptionResolver) 1. HandlerExceptionResolver Spring 에서 예외처리를 위해서 HandlerExceptionResolver 인터페이스를 작성하고 이를 구현한 구현체를 사용한다. Spring 은 에러 처리와 메인 로직을 분리하기 위해 노력하였고, 예외 처리 전략을 추상화한 HandlerExceptionResolver 인터페이스를 만들었다. 대부분의 HandlerExecptionResolver 는 try-catch 와 같이 Exception 을 catch 하고 HTTP 상태코드나 응답 메시지를 설정한다. 그렇기 때문에 WAS 입장에서는 해당 요청이 에러가 아닌 정상적인 응답으로 인식되어서 BasicExceptionController 로 에러처리 요청을 보내지 않고 바로 응답으로 전달되게된다. 예외가 ..
[SpringBoot] 예외처리 - 1 (BasicErrorController) SpringBoot 로 REST api 를 구현하다 보면 요청에 대한 예외가 발생하는 경우가 있다. 이러한 예외 처리를 잘해주지 않으면 사용자가 원하는 응답을 얻지 못하거나 애플리케이션 자체가 오류로 중단될 수 있다. SpringBoot 에서는 @ExceptionHandler, HandlerExceptionResolver, @ControllerAdvice, ResponseStatusException 등의 예외처리 방법을 제공해준다. BasicErrorController SpringBoot 에서 제공하는 예외 처리 방법들을 살펴보기 전에, SpringBoot 의 기본 예외 처리 방법을 알아보려고 한다. Spring 은 Controller 를 통해서 클라이언트의 요청을 수신하는데, Controller 에서 ..

반응형