springboot (10) 썸네일형 리스트형 [JPA] LazyInitializationException 과 OSIV 테스트 코드를 작성하다가 LazyInitializationException 에러가 발생하였다. 이슈에 대해서 찾아보니 JPA 의 lazy loading 과 관련된 이슈였으며, @Transactional 등을 사용하여 해결할 수 있었다. 오늘은 해당 이슈가 발생하고 이를 해결하면서 가졌던 의문점과 이에 대한 설명을 정리해본다. 1. LazyInitializationException 에러 설명 및 발생 원인 org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.msa.dataset.domain.entity.Project.categories: could not initialize proxy .. [SpringBoot] Logging - 3 (log4j2) 이전에 springboot 의 로깅 프레임워크를 공부하면서 logback 까지만 공부하고 사용했었다. 보다 최신 로깅 프레임워크인 log4j2 를 한번 들여다보고 싶었는데 기회가 없다가 이번에 개인 공부를 하면서 로그 환경을 설정할 기회가 있어서 log4j2 에 대해서 알아보았다. 1. log4j2 log4j2 는 자바 로깅 프레임워크 중 하나로 log4j 의 최신버전이다. 비동기 로깅을 통해서 logback 이나 이전버전의 log4j 보다 성능을 향상시킨 버전이다. Log4j2 기능 Async Logger log4j2 는 비동기 로깅 기능이 추가되었다. 비동기 로깅은 I/O 작업을 별개의 스레드에서 실행하도록 하여 애플리케이션의 성능을 향상시킨다. 이를 통해서 logger 가 처리할 수 있는 처리량이 .. [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] 예외처리 - 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 을 사용하면 반복적인 코드가 제거되어 코드의 가독성이 좋아지고 유지보수에 유리해진다. 또한 반복적인 코드 작성의 시간이 줄어 생산성이 향상된다. 하지만 경우에 따라서는 코드가 직관적이지 않고 어노테이션으로 생략되는 .. [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 설정 -.. 이전 1 2 다음