Home
Sangki Han
Cancel

ExcelUtils 메모리 누수 해결 - AutoCloseable 패턴으로 리소스 관리 개선

개요 Apache POI를 사용한 엑셀 다운로드 기능에서 메모리 누수 문제가 발생했습니다. XSSFWorkbook 리소스가 제대로 해제되지 않아 대량의 엑셀 다운로드 요청 시 메모리 부족 문제가 발생할 수 있었습니다. 이 글에서는 AutoCloseable 인터페이스를 활용하여 리소스 관리를 개선한 과정을 상세히 다룹니다. 주요 개선 사항 XS...

PostgreSQL 파티셔닝으로 대용량 테이블 성능 개선하기

대용량 날씨 데이터, 파티셔닝으로 해결하다 문제 상황 회사 프로젝트에서 전국 지역별 날씨 예보 데이터를 저장하는 batch.weather_forecast_latest 테이블을 운영하고 있었다. 시간이 지나면서 데이터가 기하급수적으로 쌓이기 시작했고, 최신 데이터만 필요한 쿼리에서도 테이블 풀스캔이 발생하는 심각한 성능 문제가 생겼다. -- 기존 ...

Azure Function App 비용 37% 절감하기 - EP3에서 EP1으로 Scale Down

회사에서 Azure Function App을 사용한 서버리스 아키텍처를 운영하고 있었다. 인프라는 관리 하지 않았지만 인프라 담당자의 퇴사로 인프라 관리까지 업무를 맡게 되었다. 어느 날 Azure 청구서를 확인하고 깜짝 놀랐다. “이렇게 비용이 많이 나온다고…?” 문제 발견: 과도한 스펙 9월 청구 내역 9월 Function App 비용을...

대용량 데이터 마이그레이션 성능 개선기

마이그레이션 일지 전력, 온도 5분데이터를 Mongo로 옮겨야함 점포는 약 17000개 5분마다 데이터가 17000개가 들어오니 하루에 약 4896000건의 데이터 1년의 데이터를 이관을 해야하니 전력, 온도 각각 약 1,787,040,000건의 데이터를 이관을 해야한다. 총 3,574,080,000건 현재 데이터가 한행에 시간당 데이터가 한...

스프레드 활용

스프레드 연산자(…)는 배열이나 객체의 요소를 쉽게 펼치고 조작할 수 있는 유용한 기능이다. 배열결합 AS-IS const array1 = [1, 2, 3]; const array2 = [4, 5, 6]; const combinedArray = array1.concat(array2); console.log(combinedArray); // [...

map 메소드 활용

AS-IS const cars = []; for (const name of names) { cars.push(new Car(name)); } TO-BE map을 이용하여 간단한 반복문은 더욱 간결하고 가독성있게 표현할 수 있다. const cars = names.map(name => new Car(name))

Jest 활용

Jest Jest는 JavaScript 및 TypeScript로 작성된 애플리케이션을 위한 오픈 소스 테스트 프레임워크입니다. Facebook에서 개발하였으며, 주로 유닛 테스트에 사용됩니다. 사용사례 아래는 간단한 자동차게임에 필요한 객체이다. Car.js import * as rand from "../util/random.js" class...

Jekyll v3 deprecated

블로그 글을 반영을 하려는데 아래와 같은 v3 버전을 사용하지 않는다는 에러가 발생하였다. Error: This request has been automatically failed because it uses a deprecated version of `actions/upload-artifact: v3`. Learn more: https://gi...

EntityManager 구현

Github Repo 기존에는 H2QueryBuilderDML, H2QueryBuilderDDL 내부에서 DMLColumnData와 DDLColumnData까지 각각 내부 데이터를 검증하는 로직이 포함되어 있었다. 하지만 각 클래스안에 너무 많은 책임이 있다고 생각하여 클래스들을 감싸고 각 쿼리 메소드별로 클래스를 나눠 책임을 분산하였다. DD...

QueryBuilder DML 구현

Github Repo DDL이란 DML은 Data Manipulation Language의 약자로, 데이터베이스에서 데이터를 조작하기 위한 SQL 명령어들을 포함하는 언어이다. DML은 데이터의 입력, 수정, 삭제 및 검색과 관련된 다양한 작업을 수행하는 데 사용된다. SELECT: 데이터베이스에서 데이터를 조회할 때 사용합니다. IN...