본문 바로가기

반응형

전체 글

(226)
[Gradle] Gradle 이란? Springboot 프로젝트를 생성할 때에 project 종류로 maven 과 gradle 을 선택할 수 있다. 프로젝트를 생성해서 개발을 할때 주로 gradle 을 사용하는데, dependencies 등을 설정하고 빌드할 때 gradle 을 사용하지만 자세한 용도와 내용을 잘모르고 사용하고 있다. 그래서 Gradle 에 대한 내용을 정리해본다. 아래의 내용은 Gradle User Manual 의 What is Gradle? 페이지의 내용을 정리한 것이다. 1. Gradle 이란? Gradle 은 오픈소스 빌드 자동화 툴로 거의 모든 종류의 소프트웨어를 빌드할 수 있는 유연성을 가지고 있다. Gradle 은 빌드하려는 대상이나 빌드 방식에 대한 가정, 제한을 거의 하지않는데, 이러한 성질이 Gradle ..
[Spring] MapStruct 1. MapStruct 란? MapStruct 는 매핑된 object 를 서로 변환해주는 기능을 제공하는 라이브러리이다. mapper 인터페이스에서 두개의 Java Bean 타입에 대해서 매핑하는 함수를 선언하면 MapStruct 는 해당 인터페이스를 자동으로 구현하여 매핑 함수를 생성해준다. 스프링을 사용하다 보면 객체를 다른 객체로 변환해야 하는 경우가 있다. 주로 DTO 와 DB Entity 간의 변환이 많이 발생한다. 이런 부분에서 MapStruct 를 사용한다면 bean mapper 함수를 따로 구현하지 않고 자동으로 변환할 수 있도록 할 수 있다. MapStruct 는 어노테이션 기반으로 동작한다. @Mapper 어노테이션을 통해서 mapper 인터페이스를 선언하고 메서드를 선언하여 사용할 수..
[Design Pattern] Builder Pattern 1. Builder pattern 빌더패턴은 객체 생성 디자인 패턴 중 하나로 복잡한 객체를 단계적으로 생성할 수 있도록 하는 설계 패턴이다. 빌더패턴을 사용하면 하나의 객체 생성 코드를 통해서 다른 타입과 표현 방식을 가지는 객체를 생성할 수 있다. - why Builder pattern? 어떤 객체를 생성해야 한다고 가정해보자. 우리는 이 객체를 생성하기 위한 필드들과 로직을 포함한 생성자를 구현하여 객체를 생성할 수 있다. 하지만 만약에 이 객체에 확장이 필요하다면 어떨까? 객체에 필요한 필드들이 늘어나고 복잡한 로직들이 추가되어야 할 것이다. 이러한 문제를 해결할 수 있는 가장 간단한 방법은 서브클래스를 만드는 것이다. 부모 클래스와 자식 클래스를 나누어서 필요한 파라미터 조합들에 대하여 서브클래..
[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 에서 ..
[SpringBoot] JUnit 을 이용한 테스트 코드 작성 SpringBoot 프로젝트에서 기능들의 유닛테스트를 진행하기 위해서 테스트 코드를 작성하려 한다. 테스트 코드를 작성하기 위해서 JUnit 이라는 테스트 프레임워크를 사용하려고 한다. JUnit 은 자바 테스트 프레임워크로 다양한 어노테이션과 메서드를 통해서 테스트 코드 작성을 편리하게 해준다. 1. JUnit 이란? JUnit 이란 자바 프로그래밍 언어용 단위 테스트 프레임워크이다. @Test, @BeforeEach, @AfterEach 와 같은 어노테이션을 기반으로 테스트를 지원한다. 그리고 단정문 (Assert) 메서드를 통해서 테스트 케이스의 사용자의 기대값에 대한 기능의 수행 결과를 확인할 수 있다. assert 메서드의 결과는 테스트 케이스의 성공 실패 여부를 반환한다. JUnit 은 3가 ..

반응형