[DEV] 기록 129

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

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

[DEV] 기록 2022.09.14 (6)

[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

[Docker] 윈도우 10 도커 설치 WSL 2 installation is incomplete 발생하는 경우

개요 새로운 컴퓨터 환경 설정을 위해 Docker Desktop 윈도우 버전을 다운로드하였는데 아래와 같은 오류 메시지가 발생했습니다. 다행히 위와 같은 케이스가 발생했을 때 어떻게 대처할지 잘 정리해준 블로그가 있어 해당 블로그를 참고하여 docker를 정상적으로 설치할 수 있었습니다. https://blog.nachal.com/1691 WSL 2 installation is incomplete, 윈도우10 도커 설치시 리눅스 커널 업데이트, Docker Linux Kernel Update on Wind 윈도우에서 도커를 설치하다가 WSL2가 설치되지 않았다는 오류 메세지가 뜨면, 리눅스 커널 업데이트를 해야 합니다. 뭔 윈도우에 리눅스 커널이야?!?!? 1. 파워쉘을 관리자 권한으로 실행 (파워쉘 b..

[DEV] 기록 2022.08.28

[DBeaver] DB 백업 후 복구하는 방법

개요 개발계 DB와 로컬 DB를 동기화해야 하는 케이스가 발생하여 찾아본 결과 DBeaver에서 dump와 restore 기능을 제공하는 것을 알게 되었습니다. DBeaver에서 UI로 간단하게 제공하기 때문에 쉽게 진행할 수 있었습니다. 1. DB Dump 뜨는 방법 dump 뜨고 싶은 database에 우클릭 후 도구 > dump database 클릭 postgresql의 경우 schema, mariadb의 경우 database database 내 dump 뜨고 싶은 테이블들 모두 선택 저장 위치 선택 후 start 선택한 저장 장소에 dump 파일이 잘 저장되었는지 확인 * 주의: 저 같은 경우 DBeaver Community Version을 사용하는데 dump 파일 크기가 너무 커질 경우 exit..

[DEV] 기록 2022.08.28

[Git] Invocation failed Unexpected end of file from server

개요 안드로이드 스튜디오에서 개발한 commit 내역을 깃헙에 push 하려는데 아래와 같은 에러 메시지와 함께 정상적으로 작동이 되지 않았습니다. (개발 환경은 mac이었습니다.) 원인 깃헙에서 2021년 8월부터 인증에 password 방식이 아닌 token 방식으로 전환하면서 발생하는 오류라고 합니다. (저 같은 경우 2022년 8월인데 왜 이제야 위 에러가 발생했는지는 잘 모르겠습니다.) 해결 방법 이미 개발냥발님이 잘 정리해주신 내용이 있어 개발냥발님 포스팅 링크를 첨부합니다. 개발냥발님 감사합니다! [Mac] GitHub push token 오류 해결 Github 오류 7.29일 새벽 갑자기 git push가 안 되는 현상을 겪었다. 오류의 첫 줄이 무슨 말이냐면 Password 인증방식이 일..

[DEV] 기록 2022.08.03

[C++ STL] map vs unordered_map

개요 프로그래머스 호텔 방 배정 문제를 푸는데 자료구조로 map을 사용할 경우 TLE가 발생하지만 unordered_map을 사용할 경우 실행 시간이 훨씬 빨라져 AC를 받을 수 있었습니다. 이에 따라 이 두 자료구조의 차이점을 알고 싶었습니다. 다행히도 Peter Ahn님이 잘 정리하신 게시글이 있었고 저는 해당 게시글을 짧게 요약해보겠습니다. https://gracefulprograming.tistory.com/3 [C++] map vs hash_map(unordered_map) 개요 hash_map은 비표준 Container인데 반해(stdext namespace에 포함) unordered_map은 C++11에서 STL 표준 Container로 추가되었으며, (사실 TR1부터 추가되었지만 C++11..

[DEV] 기록 2022.07.29

[Java Secure Coding] TOCTOU

개요 작성한 코드에 대해 보안성 검토를 받았는데 파일에 대해 TOCTOU 문제가 발생할 수 있다는 코멘트를 받았습니다. 제가 작성한 코드는 아래와 같았습니다. if (file.exists()) { file.delete(); } 원인 싱글 쓰레드일 경우에는 위 코드가 문제없겠지만 멀티 쓰레드 환경에서는 위 코드에 대해 race condition이 발생할 수 있습니다. TOCTOU는 Time Of Check to Time Of Use의 줄임말인데 이 말은 즉슨 file이 존재하는지 확인한 시점에는 파일이 존재할 수 있으나 파일을 삭제하려고 하는 시점에 이미 해당 파일이 삭제되었을 수 있다는 뜻입니다. 정리를 하자면 멀티 쓰레드 환경에서 동시에 해당 파일에 접근하여 나중에 들어온 요청이 먼저 들어온 요청보다 ..

[DEV] 기록 2022.07.29

[MySQL + MariaDB] 날짜를 기준으로 파티셔닝

개요 분 단위로 쌓이는 통계 정보를 저장하는 테이블을 생성했고 데이터가 엄청 많이 쌓일 것이기 때문에 월별로 테이블 파티셔닝을 진행했습니다. 기존에 작성한 PostgreSQL 테이블 파티셔닝과 살짝 다른 점이 있어 별도로 정리해봤습니다. https://jaimemin.tistory.com/1913 [PostgreSQL] 월별로 DB 파티셔닝 예제 개요 제가 담당하고 있는 파트에서 매일 몇 만 건씩 데이터가 쌓이는 DB가 있었습니다. DB에 너무 많은 데이터들이 쌓일 경우 조회 성능이 떨어질 수 있으므로 월별 DB 파티셔닝을 진행했고 진행 jaimemin.tistory.com 1. 파티셔닝 지원 확인 우선, 현재 MySQL 버전이 파티셔닝을 지원하는지 확인을 해야 합니다. 제가 알기로는 MySQL 5.7 ..

[DEV] 기록 2022.07.21