다차원적으로 성장하는 한계없는 개발자 ??
KeyPoint
Spring 기반 서버 개발 및 AI·DevOps 경험을 바탕으로,
실제 서비스 구축과 운영에 강점을 가진 백엔드 개발자입니다.
AI 모델과 데이터 처리 기술을 서비스에 통합하여
지능적이고 효율적인 시스템을 구현하는 데 집중하고 있습니다.
자동화·운영 효율·협업을 통해 서비스 품질과 팀 생산성을 함께 성장시키는 개발자가 되겠습니다.
*DevOps/Infra
Docker aws Raspberry Pi githubAction Nginxk8sargoCDJenkins
Data
MySQL PostgreSQL Redis
FrameWork
Spring React FastAPI
Test/API docs
JUnit SwaggerJMeter
Monitoring/Logging
Grafana Promethus
Management
Github Notion Figma Slack Discord
AI tools
ClaudeCursorAIOpenAI
Language
JAVAPythonTypeScriptJavaScript
▸ FLIK - RAG 기반 AI 여행 코스 추천 서비스 개발
▸ 도르멍드르멍 - 제주 오디오 스토리텔링 관광 서비스 개발
▸ SafeWalk - 보행자 사고 안전 관리 플랫폼 개발
▸ 지역 소상공인 AI 홍보글 생성 서비스 개발
▸ 인스타그램 클론 프로젝트
▸ sns 대용량 트래픽 처리 시뮬레이션 프로젝트
▸ 웹소켓 택시 배차 구현 프로젝트
▸ 온라인 쇼핑몰 서버 성능 개선 & 모니터링 시스템 구축 프로젝트
▸ AI 동화책 생성 서비스 개발
▸ 식물 센서 데이터 수집 & 생장 예측 프로젝트
1인으로 관광데이터 공모전을 신청하고 엄두가 안나서 취소하려던 찰나,
좋은 기획자 팀원을 만나서 본 프로젝트를 도전하게 되었습니다.
제출 기한까지 1개월 남짓 남은 시간에 몰입하여 배포를 완료하였고
서비스 요구사항의 AtoZ를 혼자 구현해보는 역량을 쌓을 수 있었습니다.
핵심 기능
▸ RAG 기반 AI 코스 생성
▸ 플랜 저장 및 공유
▸ 여행기 작성
▸ 동선 지도 시각화
Skills
Spring Boot
AWS
Docker
RaspberryPi
Team
▸ 2인 구성 ( 기획/디자인 1, 풀스택 1)
▸ Role : 풀스택
▸Work : 2025.08 - 2025.10(2개월)
❶ App/Batch 서버 분리 구조
❷ 이중 DB 구조 (MySQL + PostgreSQL)
❸ Raspberry Pi 기반 Docker 환경
❹ Blue/Green 무중단 배포
❺ 네트워크 및 보안
➏ RAG 기반 추천 시스템
➐ 이벤트 기반 아키텍처
➑ 클라이언트 구현
✔ 대용량 데이터 처리 실무 경험: 하루 5,000+ 데이터 수집, 30,000+ 벡터 검색
✔ 분산 시스템 설계 능력: 이중 DB 구조, 서버 분리, 이벤트 기반 아키텍처
✔ 성능 최적화 경험: API 응답 50% 개선, 벡터 검색 40% 향상, 락 경합 70% 감소
✔ Kafka 시스템 확장 가능성: Redis Streams → Kafka 전환 설계 완료
✔ 추천/광고 도메인 이해: RAG 기반 개인화 추천, 피쳐 집계 경험
✔ 프론트엔드 업무 이해도 : 클라이언트 구현 경험으로 협업시 원활한 소통 가능
해커톤 주최측으로부터 제공된 쿠버네티스 환경에서 팀 전용 네임스페이스를 활용하여
내부 ClusterIP Service를 통해 Application과 DB 간 통신 구조를 구현했습니다.
이로써 해커톤 현장의 제한된 리소스로 외부 인프라 의존 없이 완전한 백엔드 서비스를
빠르게 구현/배포하는 경험을 가질 수 있었습니다.
핵심 기능
▸ 관광지 안내판에 부착된 QR 코드 스캔
▸ AI TTS(제주 방언)스토리 생성
▸ 이야기 조각 수집
Skills
Spring Boot AWS Docker RDS Kubernetes MySQL LLM TTS
Team
▸ 5인 구성 ( 기획1, 디자인 1, 프론트엔드 2, 백엔드 1)
▸ Role : 백엔드
▸Work : 2025.07 (2박 3일 해커톤)
❶ Kubernetes + ArgoCD + Jenkins
❷ Pod 분리 구조
❸ 트러블 슈팅
❹ 서비스 지속화 및 인프라 마이그레이션
❺ AI 스토리텔링 오디오 자동 생성 파이프라인 구현
목표: 명소 QR 스캔 시, 해당 명소의 오디오 콘텐츠가 존재하지 않는 경우
→ 자동으로 스토리텔링 스크립트를 생성하고 → 제주어 음성으로 변환하여
→ 클라우드에 저장하는 AI 기반 자동 생성 파이프라인을 구축.
➏ 오디오 자동 생성 파이프라인 흐름
➐ 성과 및 특징
➑ 협업
✔ 운영환경 제약 속에서 문제 해결 프로세스를 체득
✔ 실무형 DevOps 역량 강화
▸ Kubernetes, ArgoCD, Jenkins 연동 원리 이해
▸ 클라우드(RDS) + 온프레미스(Raspberry) 혼합 아키텍처 직접 구현 경험
✔ 서비스 종료 후에도 독립적 운영 가능한 실무형 배포 구조 완성
✔ AI를 활용한 TTS(Text to Speach) 오디오 파일 생성 파이프라인 설계
부하 테스트를 통해 성능 병목을 사전 발견하고 해결하여 시스템 처리량을 4배 향상시켰습니다.
[문제 발견]
서비스 확장성 검증을 위해 Apache JMeter로 대규모 트래픽 시뮬레이션을 실시했습니다. 30,000개 스팟 데이터의 pgvector 기반 유사도 검색 부하 테스트 결과, 동시 사용자 100명 시나리오에서 응답 시간이 200ms에서 2000ms로 급증했고, 300명 이상에서는 PostgreSQL CPU 사용률이 90%를 초과하며 API 타임아웃이 빈발하는 것을 확인했습니다.
[원인 분석]
pg_stat_statements로 슬로우 쿼리를 분석하고 EXPLAIN ANALYZE를 실행한 결과, 벡터 검색이 평균 1.8초 소요되는 것을 확인했습니다. pgvector 인덱스가 생성되지 않아 30,000개 전체를 순차 스캔한 후 정렬하는 것이 병목이었고, 카테고리 필터링이 벡터 검색 후 적용되어 불필요한 연산이 과다했습니다.
[해결 방법]
HNSW 인덱스(m=16, ef_construction=64)를 생성하여 벡터 검색 알고리즘을 최적화했습니다. 카테고리 필터링을 서브쿼리로 분리하여 검색 대상을 사전 축소하고, HikariCP Connection Pool을 튜닝(최대 20개)했습니다. Redis 캐싱(TTL 5분)을 도입하여 반복 검색을 최적화했고, 사용자 벡터 업데이트를 실시간에서 5분 단위 배치로 전환하여 DB 부하를 분산했습니다.
[성과 검증]
최적화 후 동일한 부하 테스트 환경에서 벡터 검색 응답 시간을 2000ms에서 120ms로 94% 단축했고, PostgreSQL CPU 사용률이 40%로 감소했습니다. 동시 사용자 500명 시나리오에서도 안정적으로 200 req/s를 처리하며(4배 향상), Redis 캐시 히트율 75%를 달성했습니다. 대규모 트래픽에 대응 가능한 안정적인 시스템을 사전 구축했습니다.
리소스 격리와 워크로드 분산을 통해 API 응답 안정성과 배치 처리 효율을 동시에 개선했습니다.
[문제 상황]
실시간 API 처리 중 벡터 재계산(3초), 통계 집계(2초) 등 무거운 배치 작업이 실행되면 App 서버 CPU가 80%까지 치솟으며 API 응답 시간이 불안정해졌습니다. 특히 피크 타임에는 p95 응답 시간이 800ms까지 증가하며 사용자 경험이 저하되었고, PostgreSQL에서 트랜잭션 처리와 벡터 연산이 동시에 실행되면서 MySQL 락 경합도 빈번하게 발생했습니다.
[아키텍처 설계]
워크로드 특성에 따라 서버와 데이터베이스를 분리하는 전략을 수립했습니다. App Server는 실시간 API(스와이프, 검색, 코스 조회)만 처리하고, BatchServer는 Spring Batch 기반으로 벡터 재계산, 통계 집계, 데이터 동기화를 Quartz Scheduler로 5분 주기 실행하여 리소스 격리를 실현했습니다. 데이터베이스 계층에서는 MySQL을 트랜잭션 중심 비즈니스 로직(사용자, 장소, 코스 CRUD)에 특화시키고, PostgreSQL을 pgvector 확장을 활용한 대용량 벡터
연산 전용으로 분리했습니다.
[기술 구현]
MySQL과 PostgreSQL 간 데이터 동기화는 Spring Batch의 청크 지향 처리로 구현하여 10,000건씩 벌크 처리했고, PostgreSQL의 HNSW 인덱스로 벡터 검색을 최적화했습니다. Redis를 통해 App/Batch 서버 간 상태를 공유하며, 각 서버의 리소스 사용률과 배치 작업 실행 시간을 Prometheus로 수집하여 Grafana 대시보드에서 실시간 모니터링합니다.
[성과]
App 서버 CPU 사용률이 80%에서 50%로 30% 감소했고, API 응답 시간이 안정화되어 p95가 200ms 이하로 유지되었습니다. PostgreSQL 벡터 검색 속도가 40% 향상되었고, MySQL 트랜잭션 격리로 락 경합이 70% 감소했습니다. 배치 처리량은 시간당 12,000건을 안정적으로 처리하며, 서버 장애 시에도 독립적으로 복구 가능한 안정적인 구조를 확보했습니다.
확장 가능한 이벤트 기반 아키텍처를 설계하여 현재는 Redis로 구현하되, 향후 Kafka로 무중단 전환이 가능한 유연한 시스템을 구축했습니다.
[설계 배경]
실시간 사용자 행동 분석과 추천 시스템 최적화를 위해 이벤트 기반 아키텍처가 필요했으나, 초기 트래픽 규모(초당 5-10개 이벤트)를 고려하여 단계적 확장 전략을 수립했습니다. 현재는 비용 효율적으로 구현하되, 향후 트래픽이 100배 증가해도 대응 가능한 유연한 구조를 목표로 했습니다.
[아키텍처 설계]
EventPublisher/Consumer 추상화 레이어를 설계하여 구현 기술(Redis/Kafka) 교체가 가능하도록 했습니다. 이벤트 토픽, 파티셔닝 키, 순서 보장 등 분산 메시징 시스템의 핵심 개념을 미리 반영했고, 현재는 Redis List와 스케줄링 기반 폴링(1초 주기)으로 초당 10개 이벤트를 1.5초 레이턴시로 처리합니다.
[안정성 전략]
트랜잭션 아웃박스 패턴으로 DB 저장과 이벤트 발행을 하나의 트랜잭션으로 묶었고, 3회 재시도 실패 시 Dead Letter Queue로 이동시켜 이벤트 유실을 방지했습니다. Redis AOF 영속성 설정으로 서버 재시작 시에도 이벤트를 보존하며, 큐 길이, 처리 지연, 실패율 등의 메트릭을 실시간 수집하여 임계치 초과 시 슬랙 알림을 발송합니다.
[Kafka 전환 준비]
KafkaEventPublisher 구현체를 작성하고 로컬 환경에서 기능 검증을 완료했습니다. application.yml의 event.provider 설정만 변경하면 코드 수정 없이 Kafka로 전환 가능하며, Consumer Group 기반 부하 분산과 at-least-once 보장으로 대규모 트래픽에 대응할 수 있습니다.
[성과]
사용자 행동 로그, 벡터 업데이트, 코스 생성 이벤트를 비동기로 처리하여 API 응답 시간을 3초에서 300ms로 90% 단축했습니다. 이벤트 유실률 0%를 유지하며, 설정 변경만으로 100배 트래픽 증가에 대응 가능한 유연한 아키텍처를 확보했습니다.
RAG 방식과 사용자 피드백 학습을 결합하여 국내 관광 추천 평균을 크게 상회하는 추천 정확도를 달성했습니다.
[추천 시스템 설계]
여행 코스 추천의 핵심인 장소 추천 시스템을 RAG(Retrieval Augmented Generation) 방식으로 구현했습니다. 장소 텍스트 데이터(이름, 설명, 리뷰)를 OpenAI Embedding API로 1536차원 벡터로 변환하여 PostgreSQL vector 타입에 저장하고, HNSW 인덱스로 코사인 유사도 기반 검색을 최적화했습니다. 사용자 선호도는 스와이프 이벤트를 Spring Events로 비동기 처리하여 실시간 학습하며, 저장한 장소들의 평균 벡터를 사용자 선호 벡터로 계산합니다. 음식점, 관광지, 숙소 등 카테고리별로 독립적인 선호도 벡터를 관리하여 정교한 추천이 가능하도록 설계했습니다.
[추천 정확도 개선]
초기에는 벡터 유사도만으로 추천하여 같은 카테고리 내 장소가 과도하게 반복되는 문제가 있었습니다. 기획자와 협력하여 10가지 페르소나(액티비티중심 20대, 휴식 선호 가족 등)로 100개 테스트 시나리오를 구성하고 A/B 테스트를 반복했습니다. 사용자가 코스를 수정·삭제하는 행동을 부정적 피드백, 그대로 사용하는 경우를 긍정적 피드백으로 정의하여 추천 가중치를 동적 조정하는 피드백 루프를 구현했고, 영업시간, 계절성, 지리적 접근성 등 관광 도메인 특화 피처를 필터링에 적용했습니다.
[코스 생성 알고리즘]
(1) 사용자 선호 벡터 기반 후보 장소 추출(카테고리별 Top-K), (2) 지역 좌표 기반 반경 검색(10km→20km→30km 확장), (3) Haversine 공식으로 장소 간 거리 계산 및 최적 동선 구성, (4) 필터 적용, (5) 슬롯별 장소 배치 순서로 코스를 생성합니다. Redis 캐싱과 배치 서버의 사전 계산된 추천 후보를 활용하여
생성 속도를 최적화했습니다.
[성과]
Top-5 추천 정확도(Precision@5)를 39%에서 55%로 16%p 개선하여 국내 관광 추천 평균(약 40%)을 크게 상회했습니다. 사용자 피드백 기반 학습으로 추천 정확도가 18% 향상되었고, 코스 생성 속도는 45초에서 31초로 30% 단축되었으며, 동선 효율성이 25% 개선되었습니다.