Tech (56) 썸네일형 리스트형 [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가 .. [SpringBoot] SpringBoot 에 lombok 적용하기 1. lombok lombok 은 자바 라이브러리 중 하나로 자바 개발시에 반복적으로 구현되는 getter, setter, toString 등을 자동으로 생성해주어 코드를 간결하게 유지하고 생산성을 높여주는 라이브러리이다. 어노테이션을 기반으로 동작하며, 클래스에 어노테이션을 추가하여 컴파일 과정에서 실제 기능이 생성되는 방식으로 동작한다. 즉 소스코드에서는 어노테이션만 보이고 해당 메서드들은 보이지 않지만 실제로 컴파일 된 결과물 .class 파일에는 코드가 생성되어지게 된다. lombok 을 사용하면 반복적인 코드가 제거되어 코드의 가독성이 좋아지고 유지보수에 유리해진다. 또한 반복적인 코드 작성의 시간이 줄어 생산성이 향상된다. 하지만 경우에 따라서는 코드가 직관적이지 않고 어노테이션으로 생략되는 .. [Spring] Database 연동 - 4 (JPA) 1. JPA JPA 는 Java Persistence API 의 줄임말로 Java 표준 ORM 인터페이스이다. ORM 은 Object Relational Mapping 의 줄임말로 객체와 RDB 를 매핑하는 기술이다. 객체와 DB 를 매핑하면서 SQL 쿼리 중심이 아닌 객체 중심의 코딩을 할 수 있도록 한다. JPA 는 Java 표준 ORM 인터페이스로 JPA 의 기능을 사용하면 기존의 반복적인 코드는 물론이고 기본적인 SQL 쿼리를 자동으로 생성해주어 코드를 간결하게 유지할 수 있다. 또한 JPA 를 사용하여 데이터를 객체와 매핑하게 되면, SQL 과 데이터 중심의 설계에서 Java 언어와 객체 중심의 설계로 전환할 수 있다. 2. 환경 설정 JPA 를 사용하기 위해서는 application 의 라이브.. [SpringBoot] Logging - 2 (Logback) 1. Logback Logback 은 자바 로깅 프레임워크 중 하나로 Spring boot 에서 기본 로깅 모듈로 사용하고 있는 모듈이다. Spring boot 에서 dependency 를 설정할 때 spring-boot-starter-web 패키지를 설정하는데, 해당 패키지에 Logback 이 포함되어 있다. Logback 은 일반적으로 logback.xml 파일을 통해 설정하는데, Spring boot 환경에서는 logback-spring.xml 파일을 통해서 Logback 을 설정한다. Logback 의 설정으로는 로그를 출력하는 방식 (콘솔, 파일, 네트워크 통신 등등), Spring Profile 별 로그 설정, 로그 레벨, 로그 형식 등등의 기능을 설정할 수 있다. 2. Logback 설정 -.. [SpringBoot] Logging - 1 (JCL, Slf4j, logback, log4j, log4j2) 1. Spring logging 예전의 Spring 은 JCL (Jakarta Commons Logging) 을 사용하여 로깅을 구현하였다. JCL 은 인터페이스 형태로 되어 있는데, 이를 구현한 구현체를 사용하여 여러 로깅 구현체로 교체하면서 사용할 수 있다. JCL 의 구현체는 Configuration 을 통해서 설정할 수 있는데, JCL 이 구현체를 선택하는 시점은 컴파일 시점이 아닌 런타임 시점이다. 그렇기 때문에 JCL 은 클래스 로더에 의존적인 방식으로 로깅 구현체를 찾게된다. JCL 은 클래스 로더를 통해 컴파일 시점에 로깅 구현체를 찾는 방식에서 가비지 컬렉션이 제대로 작동하지 않는 문제가 발생한다. 이러한 문제를 해결하기 위해 클래스 로더 대신에 컴파일 시점에 구현체를 선택하는 방식으로 .. 이전 1 2 3 4 5 6 7 다음