백엔드·인프라
클라우드 계정 장애 복구와 IaC 재구축
Hufscheer · 2026.09 ~ 10
클라우드 계정 장애로 서비스 전체가 멈췄을 때 새 계정에 인프라를 Terraform으로 다시 세워 운영을 재개했습니다.
- DNS를 AWS 밖(Cloudflare)으로 옮겨 계정 문제와 도메인·메일을 분리
- S3 접근은 앱 고정 키 대신 인스턴스 역할로 전환
- 계정 밖 가동 점검(Cloudflare Worker)과 Grafana 알림 17종, GuardDuty, 비용 이상 알림 추가
TerraformAWSCloudflareGrafanaDocker
백엔드·인프라
CI·배포 시간 단축
Hufscheer · 2026.09 ~ 10
8~17분으로 들쭉날쭉하던 CI의 원인을 테스트마다 도는 TRUNCATE와 러너 디스크로 좁혀 고쳤습니다.
- MySQL을 tmpfs에 올려 테스트 DB 시간을 101~632초에서 54초로 고정
- 배포 잡에서 중복으로 돌던 전체 테스트를 문서 테스트만 남겨 510초 → 132초
- 테스트 병렬 실행은 CI 러너에서 이득이 오차 범위라 적용하지 않음
GitHub ActionsMySQLGradle
백엔드·인프라
응원 지표 지키기
Hufscheer · 2026.04 ~ 07
아직 시작하지 않은 경기에 8분 동안 같은 문구의 응원톡 7,617건이 쌓여 팀 응원 순위가 흔들린 일을 막고, 지표가 무엇을 세는지 다시 봤습니다.
- 방문자(쿠키)당 60초에 120건, 3초 안에 같은 문구는 4번째부터 차단 (Caffeine)
- 응원 수를 부풀리려던 봇 요청(분당 57회)은 입력 범위 검증에서 모두 거절
- 응원톡 21,715건 중 99%가 프리셋 버튼 3종임을 확인하고 시상 기준을 팀에 질문
Spring BootCaffeineMySQL
백엔드·인프라
무중단 배포와 부하 테스트 판단
Hufscheer · 2026.05
대회 직전에도 배포가 서비스를 끊지 않게 했고, 부하 테스트는 지표를 근거로 하지 않기로 했습니다.
- nginx 라우터와 graceful shutdown 기반 Blue/Green 배포로 최대 30초이던 배포 중단 제거
- 대회 2개가 겹치는 기간을 앞두고 Prometheus 14일 치를 확인: CPU 최대 32%, 힙 44%, 봇이 몰린 날에도 CPU 7.6%
- 5~10일이 드는 부하 테스트는 하지 않기로 결정
nginxDockerPrometheus
AI
LLM 욕설 마스킹 비용 줄이기
Hufscheer · 2026.04 ~ 05
응원톡 욕설 마스킹에 쓰는 LLM 호출을 줄이고, 결과에 설명문이 섞여 나오는 누수를 막았습니다.
- LLM 앞단에 정적 필터와 결과 캐시를 두어 호출 수 감소
- 공급자를 인터페이스로 분리해 설정만으로 Gemini와 OpenRouter 전환
- 마스킹 결과 대신 설명문이 섞여 나오는 누수를 출력 검사와 프롬프트 두 단계로 차단
Spring BootGeminiOpenRouterCaffeine
AI
작업 기록 검색 서버 (MCP)
개인 · 2026.06 ~ 현재
코딩 에이전트 대화, 커밋, 문서 같은 제 작업 기록을 매일 모아 에이전트가 쓰는 검색 서버로 만들었습니다.
- 전문 검색에 의미 검색을 붙이며 골드셋 43개 질의로 전후를 재 상위 10건 재현율 0.77 → 0.84
- 바꿔 말한 질문은 두 방식 모두 0.42로 나아지지 않았음도 기록
- 배포 전마다 같은 질의로 재는 회귀 게이트, 응답 중앙값 30ms
TypeScriptSQLite FTS5MCPEmbedding
AI
에이전트 모바일 웹앱
개인 · 2026.06 ~ 현재
AI 비서 봇 3개와 Claude Code를 휴대폰 한 화면에서 쓰는 PWA를 만들어 매일 쓰고 있습니다.
- 진행 중인 일이 칸반에 안 보이던 불편을 노션 상태 자동 반영과 완료 3일 뒤 자동 보관으로 해결
- 응답이 느린 문제에서 추론 강도·우선 처리 옵션은 실측 결과 효과가 없어 빼고, 최종 답을 받으면 바로 완료 처리하도록 바꿔 메시지당 약 0.9초 단축
- 구현은 하위 에이전트에 맡기고, 새 테스트는 고친 코드를 빼고 돌려 실제로 실패하는지 확인
ReactPWANode.jsPlaywright
프론트엔드
Vling 영상 검색·채널 검색 개편
버즈앤비 · 2026.07 ~ 09
유튜브 데이터 SaaS Vling의 검색 화면 두 개를 팀원과 함께 개편해 2026년 9월 출시했습니다.
- 영상 검색: 큐레이션 섹션 4개, 결과 그리드, 관련 채널 추천, 요금제별 노출 한도 연결
- 채널 검색: 정성 필터 11종, 광고 부적합 채널 제거, URL 검색, 즐겨찾기 폴더
- 카테고리 필터를 넣으면 일부 계정에서 섹션이 통째로 사라지는 문제를 배포 전에 찾아 폴백 추가
TypeScriptReactNext.jsApollo Client
프론트엔드
검색 화면 성능 개선
버즈앤비 · 2026.07 ~ 09
측정 스크립트로 느린 곳을 먼저 찾고 고쳤습니다. 수치는 모두 샌드박스 실측입니다.
- 검색 화면 CLS 0.246 → 0.002 (스켈레톤 key를 그리드 슬롯 번호로)
- 정렬 변경 응답 2,194ms → 40ms (shallow 라우팅), 썸네일 TTFB 928ms → 154ms
- 검색 결과 오염 원인을 태그 오매칭으로 봤다가, 재검증에서 제 분석 실수임을 확인하고 철회
Next.jsWeb VitalsPlaywright
백엔드·인프라
Lo.ci 위치 기반 SNS
백엔드 1인 · 2025.11 ~ 2026.02
지도에서 수만 건의 마커를 조회하는 위치 기반 SNS의 서버를 혼자 만들었습니다.
- H3 셀 인덱싱과 구역 집계 사전 계산으로 마커 조회 3초 → 0.1초
- 동시 갱신 때 생기던 중복 INSERT를 ON DUPLICATE KEY UPDATE로 DB에서 원자 처리
- 알림을 커밋 뒤 비동기 이벤트로 분리, N+1은 JOIN FETCH와 @BatchSize로 해결
JavaSpring BootMySQLRedisUber H3
백엔드·인프라
Pinta (Lo.ci 재설계)
개인 · 2026.02 ~ 04
Lo.ci에서 부딪힌 인증, 쿼리, 이미지 문제를 다시 설계했습니다.
- 인증마다 하던 DB 조회를 Caffeine JWT 캐시(30초)로 감소
- 프로필 통계 3쿼리 → 1쿼리, 피드 페이지당 쿼리 20개 감소
- CloudFront 온디맨드 이미지 리사이징을 Lambda@Edge로 만든 뒤 imgproxy(EC2)로 교체
JavaSpring BootCaffeineCloudFrontFlyway
백엔드·인프라
VitaCheck 영양제 추천
5인 팀 백엔드 · 2025.07 ~ 12
섭취 중인 영양제 성분을 분석해 맞춤 영양제를 추천하는 서비스의 서버를 팀으로 만들었습니다.
- user와 auth 모듈을 분리하고 알림 코드를 user 모듈로 옮겨 모듈 경계 정리
- Gemini 기반 추천에 중복 성분 검증 추가, 구글 로그인 구현
- 목적별 검색 페이지네이션을 Page에서 Slice로 전환 (팀원의 OOM 수정 후속)
JavaSpring BootQueryDSL멀티모듈