허동민

Backend
Engineer

느린 구간을 찾아, 수치로 개선합니다.

Java와 Spring Boot를 중심으로
성능 최적화, 실시간 데이터 파이프라인, 검색, AI · RAG를 다루는
백엔드 개발자입니다.

Java 17/21
Spring Boot
Kafka
Elasticsearch
Redis
MySQL
Docker
AWS
// StatisticsSearchService.java
return es.search(NativeQuery.builder()
  .withQuery(q -> q.match(m -> m
    .field("title").query(keyword)
    .analyzer("nori_analyzer")))
  .build(), StatisticsDoc.class);
3,200ms → 42ms응답 시간
600 req/min → 12API 요청/분

핵심 역량

병목부터 확인합니다

프로파일링과 지표로 느린 구간 추적

운영까지 고려합니다

트래픽과 장애 상황을 고려한 구조 설계

변경 전후를 측정합니다

응답 시간과 API 요청 수를 같은 조건에서 비교

Search Realtime AI · RAG

02 — Projects

세 프로젝트에서 해결한 문제들

각 프로젝트에서 어떤 병목이 있었고, 왜 구조를 바꿨으며, 결과가 얼마나 달라졌는지 정리했습니다.

Fastats

통계 검색 플랫폼

KOSIS 통계표 26만 건을 Elasticsearch에 색인하고, Nori를 적용해 검색 응답 시간을 줄였습니다.

역할검색 백엔드검색 · 색인 · 성능 측정
핵심 스택
성과42ms98.7% 단축검색 응답시간

HanaZoom

지역별 주식 투자 플랫폼

KIS 실시간 시세를 Kafka로 처리해 WebSocket으로 전달하고, 지역별 종목 순위를 지도에 표시했습니다.

역할1인 풀스택기획 · 개발 · 테스트 · 배포
핵심 스택
성과1298.0% 감소서버 API 요청/분

Resumade

AI 자기소개서 어시스턴트

사용자가 저장한 경험을 RAG로 찾아 초안에 반영하고, 생성 단계는 SSE로 전달했습니다.

역할1인 풀스택기획 · RAG · 개발 · 테스트 · 배포
핵심 스택
성과60s96.7% 단축초안 생성시간
01 / 03

Fastats — 통계 검색 플랫폼

KOSIS 통계표 26만 건을 Elasticsearch에 색인하고 Nori를 적용해, 검색 응답 시간을 3,200ms에서 42ms로 줄였습니다.

Java 17Spring BootElasticsearchMySQLMongoDBRedisDocker
소스코드

핵심 성과

검색 데이터를 Elasticsearch에 색인해 풀 스캔을 없애고, Nori 분석기로 조사가 붙은 검색어도 처리했습니다.

검색 응답시간 (ms)

BEFORE
3200ms
AFTER
42ms

색인 문서 수 (K)

BEFORE
0K
AFTER
260K

검색 정확도 (%)

BEFORE
31%
AFTER
94%

트러블슈팅 & 의사결정

선택한 기술과 함께 검토했던 대안

MySQL FULLTEXT Index

별도 인프라는 필요 없지만 한국어 형태소 분석을 지원하지 않아 조사 검색 문제를 해결할 수 없었습니다.

Typesense / Meilisearch

도입은 비교적 쉽지만, 3주 안에 팀원 모두가 참고할 만한 한국어 자료와 사례가 부족했습니다.

Elasticsearch + Nori

Nori로 한국어 형태소를 처리할 수 있고, Spring 연동 자료도 충분했습니다.

별도 검색 서버를 운영해야 하지만, 한국어 검색과 팀의 개발 기간을 고려해 Elasticsearch를 선택했습니다.

구조 변경

문제 해결 전후의 시스템 구성

문제 · 26만 건을 LIKE 쿼리로 조회하자 전체 테이블 스캔이 발생해 응답에 최대 3,200ms가 걸렸습니다. 단순 문자열 비교 방식이라 '통계청의'처럼 조사가 붙은 검색어도 처리하지 못했습니다.

AFTER를 눌러 변경된 구조를 확인하세요
CLIENTBACKENDDATAClient검색 요청Spring API검색 처리MySQLLIKE 풀스캔HTTP GETLIKE %kw%
ClientServiceDatabase
02 / 03

HanaZoom — 지역별 주식 투자 플랫폼

KIS 실시간 시세를 Kafka로 처리해 WebSocket으로 전달하고, 시·구·동별 종목 순위를 카카오맵에 표시했습니다.

JavaSpring BootMySQLRedisKafkaWebSocketDockerAWS EC2
소스코드

핵심 성과

KIS WebSocket으로 시세를 한 번만 수신해 Kafka로 넘기고, 처리된 데이터는 연결된 클라이언트에 WebSocket으로 전달했습니다.

서버 API 요청/분

BEFORE
600
AFTER
12

업데이트 지연 (ms)

BEFORE
8000
AFTER
120

지역 커버 (읍면동)

BEFORE
0
AFTER
3500

트러블슈팅 & 의사결정

선택한 기술과 함께 검토했던 대안

Redis Pub/Sub

기존 Redis를 그대로 쓸 수 있지만, 구독자가 없을 때 발행된 메시지는 사라져 장애 후 재처리할 수 없습니다.

RabbitMQ

메시지 전달은 안정적이지만, 소비가 끝난 과거 데이터를 다시 처리하는 용도에는 맞지 않았습니다.

Kafka

운영할 구성 요소는 늘지만, 토픽에 남은 메시지를 장애 복구 후 다시 처리할 수 있습니다.

1인 프로젝트에는 다소 무겁지만, 장애 후 재처리가 필요해 Kafka를 선택했습니다.

구조 변경

문제 해결 전후의 시스템 구성

문제 · 지역별 종목 순위를 갱신하려고 각 클라이언트가 5초마다 API를 호출했습니다. 접속자가 늘자 같은 데이터를 확인하는 요청이 분당 600건 넘게 발생했습니다.

AFTER를 눌러 변경된 구조를 확인하세요
CLIENTBACKENDDATAClient5초 폴링Spring API랭킹 조회MySQL반복 조회HTTP poll/5sfindAll()
ClientServiceDatabase
03 / 03

Resumade — AI 자기소개서 어시스턴트

저장된 경험을 RAG로 검색해 자기소개서 초안에 반영하고, 생성 단계별 진행 상태를 SSE로 전달합니다.

Java 21Spring Boot 3.4ElasticsearchRedisLangChain4jMySQL
소스코드Live

핵심 성과

질문과 관련된 사용자 경험을 RAG로 찾아 프롬프트에 넣고, 생성 과정은 5단계로 나눠 SSE로 전달했습니다.

초안 생성 시간 (초)

BEFORE
1800s
AFTER
60s

경험 매칭 정확도 (%)

BEFORE
38%
AFTER
87%

자연스러움 점수 (%)

BEFORE
44%
AFTER
91%

트러블슈팅 & 의사결정

선택한 기술과 함께 검토했던 대안

파인튜닝

사용자별로 모델을 다시 학습해야 하고, 경험 데이터가 바뀔 때마다 학습을 반복해야 합니다.

Long-context 주입

구현은 단순하지만, 저장된 경험이 많아질수록 입력 토큰과 응답 시간이 함께 늘어납니다.

RAG (LangChain4j)

재학습 없이 경험을 추가할 수 있고, 질문과 관련된 항목만 프롬프트에 넣을 수 있습니다.

경험을 바로 추가·수정할 수 있고 입력 토큰을 제한할 수 있어 RAG를 선택했습니다.

구조 변경

문제 해결 전후의 시스템 구성

문제 · 질문만 모델에 전달하면 사용자의 경험이 빠진 비슷한 문장이 반복됐습니다. 응답 생성이 30초를 넘길 때는 서버 타임아웃으로 결과를 받지 못했습니다.

AFTER를 눌러 변경된 구조를 확인하세요
CLIENTAIOUTPUTUser자소서 문항APIAI APIZero-shotRaw Draft경험이 빠진 초안zero-shotraw
ClientExternal APIService

03 — Skills

기술 스택

주력으로 쓰는 다섯 가지와, 프로젝트에서 함께 다룬 기술들입니다.

옆 카드를 누르거나 좌우로 밀어보세요

04 — Experience & Education

교육 및 경험

교육 과정에서 배운 내용을 팀 프로젝트와 개인 프로젝트에 적용해 왔습니다.

Java
Spring
Kafka
Elasticsearch
Redis
MySQL
Docker

~/hurdong (main) $

개인 프로젝트

Now
HEAD2026.01 ~ 현재
CodeGenie코딩테스트 문제를 분석해 풀이 방법과 코드를 제안하는 AI 에이전트
Glance보유 종목과 수익률을 시각화하고 투자 전략을 공유하는 서비스
채용 공고와 저장된 경험을 바탕으로 자기소개서 초안을 만드는 AI 에이전트

한국폴리텍대학 — 데이터분석과

1,200H
폴리텍 (2025)2025.03 ~ 2025.12

AI·데이터 분석 교육 · 하나금융그룹 연계 프로젝트

지역별 주식 거래 데이터를 지도에 표시하고 주문 기능을 제공하는 WTS

삼성 청년 SW 아카데미 (SSAFY) 11기

1,600H
SSAFY (2024)2024.01 ~ 2024.12

알고리즘 교육 · 백엔드 중심 팀 프로젝트 3회

통계청 26만 건 검색 성능을 Elasticsearch로 개선한 통계 시각화 서비스
Tikkle동료를 도우면 "티끌" 재화를 얻는 사내 시간 경제 시스템
CodeArena라이브 코딩테스트의 제출 코드를 실시간으로 채점하는 플랫폼

KB IT'S YOUR LIFE 4기

480H
KB (2023)2023.07 ~ 2023.09

금융 도메인 상식과 Java · JSP 웹 개발 기초, 첫 팀 프로젝트

GiftHub소상공인이 기프티콘을 직접 발행·판매하는 마켓플레이스

홍익대학교 — 컴퓨터공학과

init2017.03 ~ 2024.02

컴퓨터공학 학사 졸업

Contact

Available

백엔드 개발자로 함께 일할 기회를 찾고 있습니다

새로운 도전을 함께할 팀과 의미 있는 서비스를 만들고 싶습니다.

© 2026 허동민 · All rights reserved.

Designed & Built with Next.js + Tailwind CSS