본문 바로가기

반응형

Tech/Spring | SpringBoot

(21)
[Spring] Spring 과 Tomcat 스프링을 사용하다 보면 톰캣  (Tomcat) 이라는 이름을 듣게된다. 예전에 공부했었던 웹서버, WAS 등의 기억을 더듬어서 막연하게 스프링에 내장되어 있는 WAS 정도로 이해하고 넘어갔었다. 이번 글에서는 톰캣이 무엇인지, 스프링과 톰캣이 어떤 관계를 가지는지에 대해서 정리해보려 한다.1. Web Server 와 WAS (Web Application Server)톰캣에 대해서 본격적으로 알아보기 전에 Web Server 와 WAS 의 개념부터 정리해보자. 일반적인 웹 서비스에서 클라이언트는 서버의 규격에 맞는 HTTP 요청을 보내고 서버로부터 응답을 받는다. Web Server 와 WAS 는 둘다 클라이언트의 요청에 알맞은 응답을 보내는 역할을 하는데, 이때 어떤 요청에 대응하는지 목적과 기능에 따라..
[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 로 에러처리 요청을 보내지 않고 바로 응답으로 전달되게된다. 예외가 ..

반응형