springboot 52

[SpringBoot] 순환참조 허용 설정 방법

개요 내부 메서드 호출에 대해서도 프록시 적용을 위해 setter를 통한 자기 자신 주입을 적용하려는데 아래와 같은 에러 메시지가 발생했습니다. Requested bean is currently in creation: Is there an unresolvable circular reference? 원인 스프링 부트 2.6.X부터는 기본적으로 순환 참조를 금지하도록 변경되었습니다. * 참고: https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.6-Release-Notes GitHub - spring-projects/spring-boot: Spring Boot Spring Boot. Contribute to spring-projects/spr..

[DEV] 기록 2022.01.04

[SpringBoot] @Aspect 어노테이션

개요 기존에 빈 후처리기에 대해서 알아봤으며 gradle 혹은 pom.xml에 'org.springframework.boot:spring-boot-starter-aop' 라이브러리를 추가하면 AnnotationAwareAspectJAutoProxyCreator라는 자동 프록시 생성기가 스프링 빈에 자동으로 등록이 된다는 것을 배웠습니다. (https://jaimemin.tistory.com/2028) 자동 프록시 생성기는 스프링 빈으로 등록된 Advisor들을 찾고, Pointcut에 매칭이 될 경우 자동으로 프록시를 적용해줍니다. @Aspect 어노테이션은 편리하게 Advisor 생성 기능을 지원하는데 이번 게시글에서는 @Aspect에 대해서 간단히 알아보겠습니다. 1. @Aspect 프록시 예시 @A..

Spring 2021.12.23

[SpringBoot] 빈 후처리기 (BeanPostProcessor) 정리

개요 기존에 ProxyFactory에 대해 간단히 알아봤습니다. (https://jaimemin.tistory.com/2026) 이제 학습한 프록시를 컴포넌트 스캔한 빈에 적용하기 위해서는 실제 객체를 스프링 컨테이너에 빈으로 등록하지 않고 부가 기능이 적용된 프록시를 실제 객체 대신 스프링 컨테이너에 빈으로 등록해야 합니다. 이를 위해서 등장한 개념이 빈 후처리기이며 이번 게시글에서는 빈 후처리기와 스프링에서 제공하는 빈 후처리기에 대해 간단히 알아보겠습니다. 1. 빈 후처리기 빈 후처리기는 스프링이 빈 저장소에 등록할 목적으로 생성한 객체를 빈 저장소에 등록하기 직전에 조작하고 싶을 때 사용하는 기능입니다. 빈 후처리기는 객체를 조작할 수도 있고, 완전히 다른 객체로 교체하는 것도 가능합니다. 빈 후..

Spring 2021.12.21

[SpringBoot] Execute failed: Invalid row number (1048576) outside allowable range (0..1048575)

개요 기존에 대용량 엑셀 다운로드를 위한 SXSSFWorkbook에 대해 공유한 적이 있습니다. https://jaimemin.tistory.com/1889 [SpringBoot] 대용량 엑셀 다운로드를 위한 SXSSFWorkbook 개요 기존에 Excel 생성 및 다운로드 기능을 구현하는 코드를 공유했었습니다. https://jaimemin.tistory.com/1768 [SpringBoot] Excel 생성 및 다운로드 개요 ElasticSearch로 조회한 목록들을 엑셀로 다운로드할.. jaimemin.tistory.com 엑셀 칼럼을 추가해달라는 운영팀 요청에 추가한 뒤 테스트하는 과정에서 아래와 같은 에러 메시지가 발생했습니다. Execute failed: Invalid row number (1..

[DEV] 기록 2021.10.14

JPA를 학습해야하는 이유

개요 구글 트렌드를 보면 아래 사진처럼 전 세계적으로 MyBatis보다 JPA가 핫하다는 것을 알 수 있습니다. 하지만, 유독 우리나라와 중국에서만 아직까지 JPA보다 MyBatis가 많이 쓰이는 것으로 보입니다. 아무래도 각 기업마다 레거시 프로젝트들이 많고 타 국가보다 보수적인 성향을 지녀 JPA로 전향을 하지 않아 그런 듯합니다. (저 또한 JPA보다는 MyBatis가 더 익숙하며 현재 프로젝트에서는 섞어서 쓰고 있습니다.) 그럼에도 불구하고 JPA를 배워야 하는 이유는 우리가 이름만 들어도 아는 네카라쿠배당토와 같은 서비스 기업들이 JPA를 적용하고 있기 때문입니다. 또한, 결국에는 우리나라도 세계적인 트렌드에 맞춰 MyBatis보다 JPA를 더 중용하는 날이 머지않아 올 것으로 예측되기 때문에 ..

DB/JPA 2021.08.16

[SpringBoot] 파일 업로드 및 다운로드

개요 파일 업로드와 다운로드는 웹 애플리케이션에서 자주 쓰이는 기능입니다. 최근에 엑셀 다운로드 기능을 개발하면서 파일 다운로드 기능은 구현(https://jaimemin.tistory.com/1889)을 해봤는데 아직 파일 업로드 기능은 실무 프로젝트에 적용해본 적이 없으므로 이번 기회에 파일 업로드에 대해 정리해보겠습니다. 1. HTML 폼 전송 방식 HTML 폼 전송 방식에는 아래와 같이 크게 두 방식이 있습니다. application/x-www-form-urlencoded multipart/form-data 1.1 application/x-www-form-urlencoded 기존 게시글(https://jaimemin.tistory.com/1805) HTML Form - POST 방식을 참고하시면 ..

Spring 2021.08.14

[SpringBoot] 스프링 TypeConverter 정리

개요 컨트롤러에서 @RequestParam 어노테이션이나 @ModelAttribute 어노테이션을 붙이면 String 자료형이 다른 제네릭 타입으로 자동 형 변환되는 것을 확인할 수 있습니다. 이는 스프링에서 기본으로 제공해주는 TypeConverter 덕분인데 이번 게시글에서는 TypeConverter에 대해 알아보겠습니다. 1. 스프링 타입 컨버터 HTTP 요청 파라미터는 모두 문자열로 처리 따라서, 요청 파라미터를 다른 제너릭 타입으로 변환하기 위해서는 변환하는 과정을 거쳐야 함 개요에서도 언급했듯이 @RequestParam, @ModelAttribute, @PathVariable 같은 어노테이션이 해당 과정을 대신해주기도 함 그 외 TypeConverter 적용 예시 @Value 어노테이션을 통해..

Spring 2021.08.11

[SpringBoot] API 예외처리

개요 기존에 정리한 HTML 예외처리(https://jaimemin.tistory.com/1888)와 달리 API 예외처리는 고려해야 할 요소가 상당히 많습니다. HTML 예외처리 같은 경우 적절한 예외 페이지만 있으면 대부분의 문제를 해결할 수 있지만, API 예외처리 같은 경우 각 API마다 정해진 규약이 다르므로 각 에러 상황에 맞는 에러 응답 스펙을 정의해야 하고 JSON으로 데이터를 내려주어야 합니다. 이처럼 API마다 정해진 규약이 다르기 때문에 실무 개발을 진행하다 보면 각 프로젝트마다 API 규격 정의서를 작성해야 하는데, 규격도 양방향으로 합의한 후 정해야하기 때문에 해당 프로세스에 상당히 많은 시간을 투자해야 합니다. API 규격은 회사마다 상이하고 심지어 팀 마다도 다를 수 있으므로 ..

Spring 2021.08.08

[SpringBoot] 대용량 엑셀 다운로드를 위한 SXSSFWorkbook

개요 기존에 Excel 생성 및 다운로드 기능을 구현하는 코드를 공유했었습니다. https://jaimemin.tistory.com/1768 [SpringBoot] Excel 생성 및 다운로드 개요 ElasticSearch로 조회한 목록들을 엑셀로 다운로드할 수 있는 기능을 추가해달라는 요청이 들어와 구현을 해봤습니다. 구현 코드 ExcelController.java ExampleService.java ExcelView.java * 주석으로도 작.. jaimemin.tistory.com https://jaimemin.tistory.com/2069 [SpringBoot] 대용량 엑셀 파일 생성 및 다운로드 삽질기 개요 작년에 이어 올해도 엑셀 파일 생성 및 다운로드 기능을 담당하게 되었습니다. https:..

[DEV] 기록 2021.08.05

[SpringBoot] HTML 예외처리와 예외 페이지

개요 실무 개발을 경험해보면 실제 개발하는 시간보다 예외처리 및 테스트 코드 작성하는데 시간이 더 많이 걸립니다. 따라서, 이번에는 예외처리와 예외 페이지에 대해 정리해보겠습니다. 1. 서블릿의 예외처리 과정 서블릿은 크게 두 가지 방식으로 예외처리 지원함 Exception을 던지거나 response.sendError(HTTP 상태 코드, 에러 메시지) 메서드 호출 1.1 Exception 자바의 메인 메서드를 직접 실행할 경우 main이라는 쓰레드가 실행되며 실행 도중 예외를 잡지 못하고 실행한 main() 메서드를 넘어서 예외가 던져지면, 예외 정보를 남기고 해당 쓰레드 종료 웹 애플리케이션의 경우 사용자 요청 별로 별도의 쓰레드가 할당되고, 서블릿 컨테이너 안에서 실행 애플리케이션에서 excepti..

Spring 2021.08.03