springboot 52

[SpringBoot + Fastexcel] 대용량 엑셀 생성 및 다운로드

개요 여태까지 엑셀 생성 및 다운로드 기능을 구현할 때 Apache Poi 라이브러리를 사용했었고 이와 관련하여 게시글을 여러 번 남겼습니다. https://jaimemin.tistory.com/2069 [SpringBoot] 대용량 엑셀 파일 생성 및 다운로드 삽질기 개요 작년에 이어 올해도 엑셀 파일 생성 및 다운로드 기능을 담당하게 되었습니다. https://jaimemin.tistory.com/1889 [SpringBoot] 대용량 엑셀 다운로드를 위한 SXSSFWorkbook 개요 기존에 Excel 생성 및 다운.. jaimemin.tistory.com Apache Poi 라이브러리가 보편적으로 사용됨에 따라 레퍼런스도 많고 주기적인 버전업이 이루어졌기 때문에 지금까지 해당 라이브러리를 사용해왔..

리서치 2022.09.14

[SpringBoot] Prometheus, Grafana 연동하는 방법

개요 기존에 엑셀 다운로드 기능을 Apache POI 라이브러리를 통해 구현했는데 메모리도 많이 먹는 것 같고 non streaming 방식이라 streaming 방식인 fastexcel 라이브러리로 변경하려고 합니다. 기존 코드를 대체하기 위해서는 합리적인 이유가 필요한데 이를 위해 모니터링 툴을 연동하여 각각의 라이브러리를 적용했을 때 CPU 사용량, JVM Heap 메모리, 그리고 실행 속도를 비교해봤습니다. 처음에는 Spring Admin UI를 사용하려고 했지만 실무에서 Prometheous와 Grafana가 많이 쓰인다고 해서 프로메테우스와 그라파나를 연동해봤고 연동하는 방법에 대해 간단히 정리하고자 합니다. 다행히 잘 정리된 글들이 있어 해당 글들을 참고했습니다. https://devbksh..

[DEV] 기록 2022.09.01

[SpringBoot] Failed to start bean documentationPluginsBootstrapper

개요 SpringBoot에 actuator를 연동한 뒤 실행하였더니 아래와 같은 오류 메시지가 발생했습니다. org.springframework.context.ApplicationContextException: Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException: Cannot invoke "org.springframework.web.servlet.mvc.condition.PatternsRequestCondition.getPatterns()" because "this.condition" is null 원인 SpringFox 측에서 업데이트를 진행하지 않아 Spring..

[DEV] 기록 2022.08.31

[SpringBoot] Prometheus 연동시 "INVALID" is not a valid start token

개요 Spring Security가 적용된 프로젝트에서 actuator를 적용하고 프로메테우스와 연동했을 때 아래와 같은 오류 메시지와 함께 State가 DOWN인 것을 확인했습니다. "INVALID" is not a valid start token 원인 Spring Security가 적용되어 endpoint를 접근할 수 없어 발생하는 문제였습니다. 해결 방법 actuator가 endpoint에 접근할 수 있도록 actuator 관련 url에 대해서는 Spring Security가 적용되지 않도록 처리해주면 해결이 됩니다. @Override public void configure(WebSecurity web) throws Exception { web.ignoring() .antMatchers("/actu..

[DEV] 기록 2022.08.31

[Maven + Tomcat] 메이븐 빌드 후 톰캣에 war 배포하는 방법

개요 개발한 프로젝트를 dev 환경에서 테스트해보기 위해 EPC에 배포를 진행해야 했습니다. 이에 따라 Maven 빌드를 진행하여 war 파일을 생성하고 EPC 톰캣 내 ROOT.war 파일과 바꿔치기하여 배포를 진행하였고 해당 과정을 간단하게 공유해보겠습니다. Maven Wrapper를 통해 war 파일 생성 A. Maven과 Maven Wrapper란? Maven은 Gradle과 같이 build tool 중 하나입니다. Maven Wrapper는 개발자들이 Maven을 별도의 환경에서 개발할 때 local machine에 별도로 설치를 원하지 않거나 Maven의 특정 버전을 통해 빌드하길 원할 때 사용됩니다ㅣ. 즉, Maven Wrapper를 사용할 경우 특정 버전 혹은 개발 환경에 의존하지 않고 독..

[DEV] 기록 2022.06.02

[QueryDSL] QClass 생성 오류 해결 방법

개요 QueryDSL을 사용하기 위해 maven에 querydsl dependency와 QClass를 생성하는 plugin을 추가한 뒤 build를 진행했는데도 불구하고 아래의 문구와 함께 빌드 오류가 발생했습니다. querydsl dependency com.querydsl querydsl-jpa 4.4.0 com.querydsl querydsl-apt 4.4.0 querydsl plugin com.mysema.maven apt-maven-plugin 1.1.3 process target/generated-sources/java com.querydsl.apt.jpa.JPAAnnotationProcessor com.querydsl querydsl-apt ${querydsl.version} 해결 방법 mav..

[DEV] 기록 2022.05.15

[SpringBoot] 컴파일 후 data.sql 오류가 발생할 경우

개요 ddl-auto를 create-drop으로 설정했기 때문에 resources 폴더 하위에 data.sql 파일을 생성하여 초기 데이터 값을 넣도록 설정했습니다. 위와 같이 설정했을 때 SpringBoot 2.4.X 버전에서는 정상적으로 작동했지만 2.5.0 버전 이상부터는 오류가 발생하여 찾아보니 application.properties 혹은 application.yml에 추가적인 설정이 필요했습니다. 문제 원인 SpringBoot 2.5.0 버전부터는 hibernate 초기화 과정보다 data.sql이 먼저 실행되어 문제가 발생했습니다. 해결 방법 application.yml 혹은 application.properties에 아래 내용 추가하면 됩니다. spring.jpa.defer-datasour..

[DEV] 기록 2022.05.02

[SXSSFWorkbook] 엑셀 드롭다운 셀 생성하는 방법

개요 기존에 Excel 생성 및 다운로드 관련 게시글을 여럿 공유했었습니다. https://jaimemin.tistory.com/2069 [SpringBoot] 대용량 엑셀 파일 생성 및 다운로드 삽질기 개요 작년에 이어 올해도 엑셀 파일 생성 및 다운로드 기능을 담당하게 되었습니다. https://jaimemin.tistory.com/1889 [SpringBoot] 대용량 엑셀 다운로드를 위한 SXSSFWorkbook 개요 기존에 Excel 생성 및 다운.. jaimemin.tistory.com https://jaimemin.tistory.com/1889 [SpringBoot] 대용량 엑셀 다운로드를 위한 SXSSFWorkbook 개요 기존에 Excel 생성 및 다운로드 기능을 구현하는 코드를 공유했었..

[DEV] 기록 2022.04.20

[SpringBoot + MyBatis] TypeHandler 통해 JSON List varchar로 저장

개요 api 응답으로 json list가 오는데 이를 MariaDB varchar형 칼럼에 저장하려고 하니 원하는 대로 안됐습니다. 열심히 검색한 결과 이를 위해서는 커스텀 TypeHandler를 정의해야했고 TypeHandler를 적절히 구현하면 JSON 형태의 문자열을 그대로 DB에 저장하고 조회할 수 있었습니다. 저는 keichee님 블로그를 보고 위 문제를 해결할 수 있었으며 하기 내용도 keichee님이 작성하신 내용과 거의 동일하므로 해당 블로그를 방문하시는 것을 추천드립니다! 1. DTO 구조 DTO 구조를 보면 ExampleWrapper 클래스가 ExampleJson 배열을 필드로 두고 있고 여기서 ExampleJson 클래스가 json 형태로 DB에 저장될 정보입니다. 2. TypeHan..

[DEV] 기록 2022.04.13

[SpringBoot] 여러 파일을 .zip 파일로 압축해서 다운로드

개요 UI 기획서 요구사항 중 하나가 서버에서 NAS에 저장된 tar.gz 파일과 서버에서 생성한 json 파일을 zip 파일로 압축해서 다운로드하는 기능이었습니다. 따라서 제가 구현한 기능이 정상적으로 작동하는지 확인하기 위해 tar.gz 파일 생성하는 코드, json 파일을 생성하는 코드, 그리고 이 둘을 압축하여 클라이언트로 내려주는 Controller를 구현해봤습니다. 소스 코드 tar.gz 생성하는 샘플 코드 json 파일을 생성하는 샘플 코드 이 둘을 압축하는 컨트롤러 클라이언트 측 다운로드하는 함수 참고 https://simplesolution.dev/spring-boot-download-multiple-files-as-zip-file/ Spring Boot Download Multiple ..

[DEV] 기록 2022.04.12