전체 글 (21) 썸네일형 리스트형 대용량 엑셀 데이터 처리 시스템 구축기 (3/3) - ElasticSearch로 빠르게 검색하기 대용량 엑셀 데이터 처리 시스템 구축기 (3/3) - ElasticSearch로 빠르게 검색하기10만 개 상품 중에서 "무선이어폰"을 50ms 만에 찾는 방법을 알아봅니다.들어가며이전 편에서는 10만 행 데이터를 7초 만에 저장하는 최적화를 다뤘습니다.이번 편에서는 저장된 데이터를 빠르게 검색하는 방법을 소개합니다.문제 상황-- PostgreSQL LIKE 검색 (10만 행 기준)SELECT * FROM products WHERE name LIKE '%무선%' OR description LIKE '%무선%';-- 실행 시간: ~5000ms (Full Table Scan)ElasticSearch 사용 후GET /products/_search{ "query": { "multi_match": { .. 대용량 엑셀 데이터 처리 시스템 구축기 (2/3) - 10만 행을 7초만에 대용량 엑셀 데이터 처리 시스템 구축기 (2/3) - 10만 행을 7초만에Hibernate Batch Insert, 병렬 처리, PostgreSQL 최적화를 통해 10만 행 데이터를 7초 만에 저장하는 방법을 알아봅니다.들어가며이전 편에서는 대용량 엑셀 처리 시스템의 전체 아키텍처를 살펴봤습니다.이번 편에서는 가장 중요한 부분인 대량 데이터 삽입 최적화를 깊이 있게 다뤄보겠습니다.문제 상황// ❌ 순차 저장 (10만 행 기준 5시간 소요)products.forEach { product -> productRepository.save(product) // 1행당 50ms → 100,000 × 50ms = 5,000초}최적화 후// ✅ 배치 + 병렬 저장 (10만 행 기준 7초 소요)products.c.. 대용량 엑셀 데이터 처리 시스템 구축기 (1/3) - 문제 정의와 아키텍처 대용량 엑셀 데이터 처리 시스템 구축기 (1/3) - 문제 정의와 아키텍처10만 행 엑셀 파일을 18초 만에 처리하고, 실시간 키워드 검색을 제공하는 시스템을 어떻게 만들었을까요? 들어가며"엑셀 파일로 상품 10만 개를 한 번에 등록하고 싶은데요, 가능할까요?"이커머스 플랫폼을 운영하다 보면 이런 요구사항을 자주 만나게 됩니다. 특히 B2B 쇼핑몰이나 대형 유통사의 경우, 수만 개의 상품 데이터를 엑셀로 관리하고 일괄 업로드하는 것이 일상적인 업무입니다. 하지만 대용량 엑셀 처리는 생각보다 까다로운 작업입니다:100MB 엑셀 파일을 메모리에 올리면 OOM(Out of Memory) 발생10만 행을 순차적으로 INSERT하면 수 시간 소요업로드 후 특정 상품을 찾으려면 데이터베이스 Full Scan 필요이.. PostgreSQL GIN Index의 한계와 Elasticsearch로의 전환기 (2글자 한글 키워드 검색 성능 문제 해결) 안녕하세요, 도토리 입니다.정말 오랜만에 글을 쓰게 되었는데, 최근에 이직도 하고 재미있는걸 하게되어서 공유하고자 글을 쓰게 되었습니다.참고로 아래 내용은 실제 도메인이 아닌 예시 도메인으로 변경하여 설명하였습니다.실제 도메인적인 지식과 다를 수 있습니다.PostgreSQL GIN Index의 한계와 Elasticsearch로의 전환기2글자 한글 키워드 검색 성능 문제 해결요약PostgreSQL의 GIN Index + pg_trgm은 한글 2글자 키워드 검색에서 심각한 성능 저하 발생 (117ms+)Trigram 방식의 구조적 한계로 인해 튜닝으로 해결 불가Elasticsearch + Nori 한글 형태소 분석기로 전환하여 10ms 이내로 해결기존 PostgreSQL은 데이터 저장용으로 유지, ES는 검.. [내 기억용] 키보드 변천사 (키크론 -> feker -> 한성 -> 콕스 -> 해피해킹) 안녕하세여,제가 최근에 키보드를 하나 샀습니다 허허허그래서 키보드에 적응도 하고, 키보드를 치고싶기도 해서 이왕 노는거 키보드 써왔던거 후기나 적으면서 추억여행을 가려고 글을 씁니다! 키크론 K8제 키보드 변천사?를 이야기하자면,예전에 개발자를 시작하게 됬을 무렵 제일 처음으로 산 키보드가 키크론 K8 이었어요. 키크론 K8을 살때는 첫 회사에서 키보드 원하는거 사주신다고해서 당시에 주변 팀원들이 사는 키보드로 맞춰서 샀었어여.사실 이땐 키보드를 진짜 몰라서 그냥 적축, 갈축 뭐 몰랐고 키만 잘 눌리면 되지~ 라는 마인드만 가지고 있었고,이제와서 솔직히 이야기하면 키가 다 있는 풀배열을 쓰고싶긴했었어여 ㅋㅋㅋ 그런데, 다들 텐키리스가 공간적으로 효율이 좋다라고 하고, 노트북은 어차피 텐키리스니까 똑같다.. [글귀] 내가 좋아하는말 정리 안녕하세요, 도토리입니다. 이번에는 제가 살아오면서 좋아하는 말들을 좀 정리해보려고 합니다. 제가 스스로 생각하는 말들이기도하고, 정말 좋아하는 말이지만.. 나중에 생각이 안나는 경우가 가끔 있어서 글로 정리를 하려고 합니다! 인생은 선택의 연속이다. 제 3자의 조언은 참고하되, 내가 결정하고 책임도 내가 진다. You build it, you run it by Werner Voegls, CTO at Amazon Do something. Either lead, follow or get out of the way. by Ted Turner, CNN 회장 대화는 나와 다른 것을 만날 수 있는 많은 기회 중 가장 효율적인 기회이다. 그러나 많은 사람들이 자신의 생각과 같은 사람들이랑만 '통한다'라는 핑계를 삼.. [Java] 내가 짠 Java코드를 컴퓨터가 어떻게 읽을까? (feat. JIT compiler) 안녕하세요, 도토리입니다. 잘못된 정보가 있거나 오류가 있으면 언제든지 댓글로 이야기 해주세요!! 😅 과거에 저는 컴퓨터가 어떻게 읽어서 우리의 코드를 실행시킬까에 대해서 무지했었습니다..(부끄럽네용..ㅎㅎ) 그래서 제목처럼 내가 짠 Java 코드를 컴퓨터는 어떻게 읽을까?라는 단순한 질문에 제대로 대답을 못하는 저 자신을 발견하고 그 의문점을 토대로 JVM에 대해서 이해하고 공부한 과정입니다. 이후에 JVM에 대해서 사내 지식공유회때 공유한적이 있는데, 이때 자료를 만들어둔것을 바탕으로 몇차례 나눠서 블로그에 글을 정리해보겠습니다. 컴퓨터는 어떤 언어를 읽어면서 구동되는걸까? 다들 많이 들어보시고 알고 계실겁니다. 컴퓨터는 자기가 읽을 수 있는 기계어(0과 1로 구성)를 읽어가면서 cpu에서 실행됩.. [Spring boot] 3.xx 버전에서 2.xx버전으로 낮추기 안녕하세요, 도토리입니다. 잘못된 정보가 있거나 오류가 있으면 언제든지 댓글로 이야기 해주세요!! 😅 이젠 더이상 start.spring.io에서나 intellij 에서 새로운 스프링 부트 프로젝트를 생성할때 2.xx 버전을 지원하지 않는다. 다양한 이유에서이겠지만, 가장 큰 이유들은 아래와 같다. 1. 보안 취약점 - 지원이 종료된 버전은 새로운 보안 취약점에 대한 패치가 제공되지 않을 수 있으므로 시스템의 보안에 위험이 있을 수 있습니다. 2. 호환성 문제 - Spring Boot의 새로운 버전과의 호환성이 보장되지 않을 수 있으므로 애플리케이션의 작동에 문제가 발생할 수 있습니다. 3. 지원 및 업데이트 Spring Boot에서 더 이상 업데이트 및 지원을 제공하지 않으므로 새로운 기능 및 개선 사.. 이전 1 2 3 다음