springboot 56

[SpringBoot] 대용량 엑셀 파일 생성 및 다운로드 삽질기

개요 작년에 이어 올해도 엑셀 파일 생성 및 다운로드 기능을 담당하게 되었습니다. https://jaimemin.tistory.com/1889 [SpringBoot] 대용량 엑셀 다운로드를 위한 SXSSFWorkbook 개요 기존에 Excel 생성 및 다운로드 기능을 구현하는 코드를 공유했었습니다. https://jaimemin.tistory.com/1768 [SpringBoot] Excel 생성 및 다운로드 개요 ElasticSearch로 조회한 목록들을 엑셀로 다운로드할.. jaimemin.tistory.com 한 가지 달라진 점은 기존 프로젝트와 달리 이번에는 OOM을 방지하기 위해 파일 업로드 및 생성을 별도 인스턴스에서 진행한다는 점입니다. 기존에는 모두 한 서버 내에서 진행했기 때문에 API에..

[DEV] 기록 2022.03.13

[SpringBoot] LoggerFactory is not a Logback LoggerContext but Logback is on the classpath

개요 암호화 모듈 버전업을 위해 배포를 하는데 아래와 같은 런타임 에러가 발생했습니다. java.lang.IllegalArgumentException: LoggerFactory is not a Logback LoggerContext but Logback is on the classpath. Either remove Logback or the competing implementation (class org.slf4j.impl.Log4jLoggerFactory loaded from jar:file:~/slf4j-log4j12-1.7.7jar!/). If you are using WebLogic you will need to add 'org.slf4j' to prefer-application-packages ..

[DEV] 기록 2022.01.25

[SpringBoot] AOP 간단 정리

개요 AOP(Aspect-Oriented Programming)은 IOC(Inversion Of Control), DI(Dependency Injection)와 함께 스프링 프레임워크의 핵심 요소로 거론됩니다. 이번 게시글에서는 AOP에 대해 간단히 알아보겠습니다. 본문을 읽기에 앞서 아래 게시글을 먼저 훑어보시는 것을 추천드립니다. https://jaimemin.tistory.com/2025 [디자인 패턴] JDK 동적 프록시와 CGLIB 개요 기존에 정리한 프록시 패턴(https://jaimemin.tistory.com/2016)을 통해 기존 코드를 변경하지 않고 부가적인 기능을 추가할 수 있는 장점이 있었지만 비슷한 구조를 갖는 프록시 클래스를 계속 생성 jaimemin.tistory.com htt..

Spring 2022.01.12

[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