7년차 · 재직 중

운영 중인 시스템의
문제를 끝까지 파는 백엔드 개발자

2020년부터 쥬비스다이어트에서 CRM·ERP 등 사내 운영 시스템을 개발하고 있습니다. Java/Spring 기반 백엔드와 배치가 주력이며, PHP 레거시 재개발과 EC2 → EKS 전환, CI/CD 구축을 맡았습니다. 최근에는 맞춤형 프로그램 기기 배치 시스템을 신규 개발했고, 팀 공용 AI 스킬 체계를 만들어 VOC 처리 시간을 60% 줄였습니다.

쥬비스 다이어트 · 시스템 개발팀 · 파트장 2020.10 ~ 현재 전국 53개 지점 · MySQL 164GB GitHub ↗ Blog ↗

Career Timeline

2020.10 – 2026.10 · 담당 프로젝트 17건
■ 신규 구축·마이그레이션   ■ 인프라·배포·자동화   ■ 운영·연동 작업  ·  오른쪽 끝에 점이 붙은 막대는 진행 중입니다.

Core Skills

Primary

JavaSpring BootSpring Batch JPAMySQL프로시저 인덱스 설계실행계획 분석 배치 설계·운영 자동화외부 연동 장애 격리

Secondary

NestJSTypeScriptPrisma PythonFastAPIPlaywright RedisMongoDB

Infra / DevOps

AWS EKSEC2LambdaS3 CognitoIRSANAVER Cloud KubernetesHelmArgoCD DockerGitHub ActionsJenkinsGrafana

AI / Automation

Claude CodeSkills / MCP n8nSlack APINotion API

Projects

CRM 운영·유지보수 및 기능 개발

2026.04 ~ 현재
진행 중▾
JavaSpring BootMyBatis MySQLSpring BatchGrafana
  • 쿠폰 판매·환불 기능 개발. 쿠폰별 위약금률을 반영한 환불금·정산금 계산, 신청서 등록·상태 변경 API, 현금영수증 발행, 캐시 지급 취소 연동
  • 성과관리 집계 수정. 지표 테이블 구조 변경 및 집계 프로시저 수정, 컨설팅 진행건수 배치 신규 개발, 주 마감 기준 변경
  • 프로그램 식별·오픈 지점·약관 매핑 하드코딩을 DB 기반으로 이전
쿠폰 환불 — 테이블 분리 결정 설계 판단
선택하지 않은 안 j2t_form_refund 계약/쿠폰 분기 추가 15개 레포 · 420여 줄 전부 분기 반영 필요 기존 통계는 그대로 쓰지만 전파 범위가 큼 선택한 안 j3t_coupon_refund 신규 전용 테이블 원장 음수행 원결제 참조로 연결 기존 코드 무변경 · 신규 상품만 독립 처리 감수한 트레이드오프 기존 환불 통계·재무 집계가 j2t_form_refund를 읽으므로 쿠폰 환불이 자동 집계되지 않습니다. 통계 포함 요구가 생기면 UNION으로 붙일 수 있도록 원장 구조를 미리 맞춰 뒀습니다.
장애 분석 및 성능 개선
운영 reader 실측 — 수정 전후 응답 시간
EXPLAIN 실행계획과 실행 시간을 수정 전후로 대조하고, 최적화 전후 결과 건수가 일치하는지까지 확인한 뒤 반영했습니다.
  • 쿠폰 발행 목록 504 — 지점 조건이 파생테이블 바깥에 있어 행마다 상관 서브쿼리가 재평가되던 구조. 필터를 서브쿼리 안으로 옮기고 조회 주체별 패턴에 맞춰 복합 인덱스 3건을 설계했습니다. 일반 사용자용 (삭제여부, 발행일, 등록일), 계약별 윈도우 값 조회용 (삭제여부, 계약ID, 발행일), 삭제여부 필터가 없는 관리자용 (발행일, 등록일)
  • 환불 회원 검색 504 — EXPLAIN ANALYZE로 쿠폰 OR 분기가 DEPENDENT SUBQUERY로 295,140회 반복 실행되어 전체 24.5초 중 22초를 차지하는 것을 확인
재발 건 — 단일 임계값에 걸리지 않는 누적 지연 원인 규명
0초 게이트웨이 한도 60초 COUNT 43초 단일 기준 통과 LIST 16.6초 단일 기준 통과 순차 합계 59.8초 · 타임아웃
두 쿼리 모두 60초 미만이라 단일 쿼리 임계값 모니터링에는 잡히지 않고, 순차 실행 합계로만 한도에 닿습니다. 3년 범위 338,258행 실측. 매월 1일 쿠폰 일괄발행 배치(약 4,900건, 평시 일 150~200건)로 결과셋이 급증하는 월초 재발 패턴까지 확인해 COUNT 재최적화를 별건으로 분리했습니다.
  • 연기 승인 timeout · 알림 6회 중복 발송 — 외부 푸시 API 지연(24h 실패율 4.5%) 시 HttpsURLConnection에 타임아웃이 없고 catch가 예외를 삼켜 @Transactional이 발송 실패를 감지하지 못한 채 DB가 커밋되던 구조. connect 3초·read 5초 설정과 예외 전파로 바꾸고, 승인 성공과 알림 실패를 화면에서 분리 표시
결과
  • 장애 신고 76건 전량 30분 이내 대응 착수 (평균 21.7분)
  • 담당 VOC 105건 중 104건 원인 확인 후 종결, 그중 13건은 코드 수정으로 재발 차단
  • 성과 산식 기준 정리 후 매월 반복되던 성과 관련 문의 해소

Slack 기반 개발·운영 자동화 봇 (Iris)

2026.08 ~ 현재 · 팀 공동 개발
진행 중▾
TypeScriptNode.js Claude Agent SDKSlack BoltJira API
두 갈래 자동화 — PR 리뷰 / 장애 알럿
Iris Socket Mode 외부 URL 개방 불가 → 아웃바운드 연결 PR 리뷰 PR 등록 감지 리뷰 채널 리뷰 클레임 리액션 순서 선착순 리뷰 세션 스킬 실행 GitHub 인라인 코멘트 승인은 APPROVED 확인 후 보고 500 알럿 트리아지 Grafana 알럿 500만 선별 에러 로그 확인 원인 경로 추적 Jira 티켓 신규 / 로그 코멘트 스레드에 티켓 링크 회신 담당자 멘션 팀원이 각자 봇을 띄워도 같은 PR·같은 알럿을 두 번 처리하지 않도록, 세션을 띄우기 전에 리액션 순서로 선착순을 가립니다.
  • 스레드에서 재검사·승인 요청을 인식해 처리. 승인은 GitHub에 실제 APPROVED가 남았는지 확인 후에만 보고
  • 알림 전송 실패가 배포나 리뷰를 막지 않도록 경로를 분리
결과
  • PR 등록부터 1차 리뷰까지 수동 개입 불필요
  • 500 알럿 건별 티켓 등록·로그 첨부 작업 제거

AI 코딩 도구 기반 팀 개발 생산성 체계 구축

2026.03 ~ 2026.06
▾
Claude CodeSkills / MCP PythonSlack APINotion API
스킬 도입 전후 VOC 처리 — 실측 이전 57건 / 이후 65건
2026년 3월 스킬 도입 시점을 기준으로 이전 3개월과 이후 4개월의 담당 VOC를 비교한 값입니다.
  • 팀 공용 스킬 레포(juvis-scrum2-skills) 구축 및 운영
  • 브랜치 생성 → PR → 릴리즈까지 개발 흐름을 스킬화하여 상시 사용
  • 스킬 15개 작성 및 팀 공유 (VOC 처리 10, 개발 워크플로 3, 검증·분석 2)
  • 반복 VOC별 확인 위치와 조치 절차를 스킬에 명시해 담당자별 처리 편차 제거
  • 이후 팀 자산으로 확장, 2026년 9월 기준 51개 운영 중
대표 사례
  • 유전자 검사 처리 15일 → 당일
  • 중간상담 통계 4.2일 → 1일

맞춤형 프로그램 기기 스케줄링(CMP) 시스템

2026.03 ~ 2026.04
신규 구축▾
JavaSpring Boot MySQLMyBatis
모드 결정 시점을 뒤로 미룬 이유 설계 판단
기존 — 스케줄 시점에 모드 확정 스케줄 배치 자산 미정 · 기기 종류로 추정 체크인 신형 자산 배정 → 구형 모드값이 선택지에 없음 변경 — 자산이 확정되는 시점에 추천 스케줄 배치 모드 결정 안 함 체크인 · 체중 트리거 배정된 자산 기준으로 모드 추천
확정되지 않은 값을 미리 저장하지 않도록 바꾼 것입니다. 룸형은 스케줄 시점에 자산이 정해지므로 기존 흐름을 그대로 유지해 영향 범위를 좁혔습니다.
  • 고객 비만·지방 유형 판정 결과 기반 기기 구성 추천 로직 설계
  • 스케줄현황·배치현황 화면 및 배치 이력 테이블 설계
  • 기기 자산 단위 매칭 (신형 우선 배치, 동시 진행 기기, 오픈형 스케줄 처리)
  • 수기 배치 수정 시에도 CRM–CMP 로그가 어긋나지 않도록 동기화
결과
  • 3월 31일 배포, 4월 예정대로 정식 오픈
  • 오픈 이후 데일리 이슈 없이 운영, QA 버그 전건 처리
  • 수기로 정하던 기기 배치를 고객 유형 기반 추천으로 전환

Java → NestJS CRM 마이그레이션

2025.11 ~ 2026.03
▾
NestJSPrismaMySQL GitHub ActionsArgoCDHelm
메뉴 권한 부여 단위 설계
메뉴 메뉴별 권한 유형 사용자 차단 부여보다 우선 다섯 단위 중 어느 경로로든 권한을 받을 수 있고, 개별 차단이 그 위에 덮입니다. 부여·차단·수정 이력은 모두 로그로 남깁니다.
  • 로그인·권한 영역의 설계를 맡아 프로세스 정의부터 ERD 문서화, 테이블 설계, 로깅 설계까지 수행
  • 메뉴 / 메뉴별 권한 API 20건 개발
  • 사용자별 커스텀 메뉴, 매출 통계 대시보드 API 개발
  • Prisma 마이그레이션 도입 및 타임존 처리 불일치 수정
결과
  • 담당 범위 계획 대비 100% 완료, QA 버그 전건 처리
  • 운영 전환 후 prod 500 에러 월 평균 1건 미만 (외부 API 제한·배포 중 일시 오류, 서비스 자체 결함 0건)

배포 파이프라인 구성 및 운영

2025.08 ~ 2026.09
▾
GitHub ActionsArgoCDHelm DockerSlack APIJira API
GitOps 배포 흐름과 알림 경로
CI · GitHub Actions CD · ArgoCD (GitOps) 알림은 배포와 분리 시작·결과 2단계로 발송하되, 알림 전송이 실패해도 배포 run은 실패로 떨어지지 않습니다. 시크릿 갱신 실패는 별도 알림으로 구분합니다.
  • HUB 서비스의 staging CI/CD 파이프라인을 처음 구성하고, prod 배포 환경(이미지·시크릿·환경변수 분리)까지 구축
  • main 배포를 staging 이미지 프로모션 방식에서 직접 빌드·푸시로 전환
  • GitHub Actions environment 선언으로 배포 이력이 Jira 이슈에 자동 기록되도록 연동 (CRM·HUB·상담PC)
  • staging 배포 Slack 알림 — 배포 형상(develop 전체 / 체리픽 / main 동일)을 커밋 거리로 판별해 포함 이슈 목록과 함께 발송
결과
  • 배포 절차 표준화로 담당자별 편차 제거
  • 어떤 이슈가 어떤 환경에 나갔는지 Jira에서 추적 가능

AWS EKS 기반 전사 서비스 전환

2025.06 ~ 2025.10
▾
AWS EKSKubernetesDocker HelmGitHub ActionsArgoCD
  • EC2 기반 Java 서비스 컨테이너화 및 Helm Chart로 배포 설정 관리
  • ArgoCD로 Git 변경 감지 기반 자동 배포 구성
  • GitHub Actions로 빌드 → 테스트 → 이미지 푸시 CI 구성
결과
  • 배포 소요 시간 수십 분 → 수 분
  • 트래픽 증가 시 자동 스케일링 대응

ERP 배치 시스템 재개발

2025.03 ~ 2025.06
▾
JavaSpring Batch (JDK 21) MySQLJPADocker ComposeJenkins
  • PHP 기반 ERP 배치를 Spring Batch로 재개발
  • Job / Step 구조 표준화 및 공통 배치 틀 설계
  • 배치 실행 결과 Slack 발송 및 실패 감지
결과
  • 신규 배치 개발 소요 시간 약 40% 감소
  • 배치 실패 즉시 인지, 원인 파악 시간 수 시간 → 수십 분

GA + CRM 고객 여정 데이터 분석

2022.05 ~ 2023.05
▾
Java Spring BootPython 3.7 MySQLGoogle Analytics
고객 여정 단계 모델링
  • 단계별 데이터를 GA와 CRM 양쪽에서 수집해 연결하는 파이프라인 구축
결과
  • 신규 지점 입지 선정 시 데이터 기반 판단 가능
  • 기획 부서의 직접 데이터 조회·활용 증가

그 외 작업

Notification — Redis 장애 시 발송 이력이 유실되던 경로 장애 분석
기존 — 이력 적재를 응답 경로에서 await SENS 발송 성공 · 문자 도착 이력 큐 적재 await Redis 다운 · 237초 대기 호출자 타임아웃 실패로 응답 직원 재발송 → 문자 중복 · 인증번호 2개 유효 요청당 약 11분 커넥션 점유 발송은 이미 성공했는데 이력 저장을 기다리다 실패로 응답되는 구조였습니다. 변경 — 적재를 응답 경로에서 분리 SENS 발송 성공 즉시 응답 적재를 기다리지 않음 이력 적재는 별도 경로 · 상한 240초 실패해도 로그만 남기고 응답에 영향 없음 상한값은 ioredis가 대기 명령을 폐기하는 경계에 맞췄습니다 — 그 안에 복구되면 유실이 없습니다.

Notification 메시징 전환 및 Redis 장애 대응

2026.07 ~ 2026.09 · 월 6~9만 건 발송
▾
NestJSBullMQRedis MySQLNAVER Cloud SENS
  • 서비스마다 흩어져 있던 문자·알림톡 발송을 notification 서비스 한 곳으로 통합. 호출부는 허브를 거쳐 발송을 위임하고, 인증 관련 발송만 허브에 남겼습니다.
  • SENS 연동으로 SMS / LMS / MMS와 알림톡 템플릿 발송 처리
  • MMS 이미지 첨부 — 이미지를 base64로 전달하는 방식으로 구현. SENS가 EUC-KR 기반이라 본문 인코딩과 확장자 검사를 따로 처리했고, 요청 본문 크기 제한에 걸리던 건도 함께 조정했습니다.
  • 광고성(AD) 발송 옵션과 080 수신거부 번호 연동
  • 발송 이력 저장 시각이 UTC로 들어가던 것을 KST로 보정, 강조표기형 알림톡에서 강조 제목이 누락되던 템플릿 3건 보정
  • Redis 장애 시 이력 유실 — 위 그림 참고. 적재를 응답 경로에서 분리하고 시도 상한을 ioredis가 대기 명령을 폐기하는 경계(240초)에 맞췄습니다.
  • health 응답이 비정상 판정에도 HTTP 200을 반환해 k8s probe가 파드를 재시작하지 못하던 문제를 503으로 수정

파일서버 → S3 이관 및 접근 방식 전환

2026.07 ~ 2026.09
▾
AWS S3IRSAEKS JavaGitHub Actions
  • 사내 파일서버를 참조하는 코드를 전수 조사해 이관 범위를 산정했습니다. 서비스 코드뿐 아니라 FTP로 붙던 레거시 배치까지 포함됐습니다.
  • 파일 조회를 presigned URL 발급 API로 전환 — 애플리케이션이 파일을 직접 읽어 내려주지 않고, 허브가 발급한 URL로 클라이언트가 S3에서 바로 받도록 바꿨습니다.
  • IRSA 적용 — 파드에 액세스 키를 두지 않고 서비스 어카운트에 역할을 붙여 권한을 받도록 구성
  • FTP에 의존하던 외부 연동 배치를 정리하고 중단
  • 컨테이너 런타임 베이스를 JDK에서 JRE로 교체해 이미지 경량화

알림성 배치 API 고도화

2024.12 ~ 2025.01
▾
JavaSpring Boot (JDK 21)JPA DockerJenkinsSwagger
  • 서버 Cron에 묶여 있던 배치를 API 엔드포인트 + Jenkins 스케줄러 Job 구조로 바꿨습니다. 실행 주체가 스케줄러로 분리되면서 수동 재실행과 실행 이력 확인이 가능해졌습니다.
  • 앱푸시 배치 — 대상자 조회 후 푸시 발송
  • 카카오 알림톡 배치 — 대상자 조회 → 템플릿 매핑 → 발송 → 후처리 프로시저 호출
  • Docker 컨테이너 기반 배포, 환경별 설정 파일 분리
  • Slack Webhook으로 실행 결과와 실패를 실시간 통보, Swagger로 배치 API 문서화

유전자 검사 관리 시스템 · Webhook 전환

2021.03 ~ 2021.08 · 2025.08 ~ 2025.10
▾
JavaSpring BatchMyBatis WebhookAWS S3
  • 1차 (2021) — 외부 검사 업체 API를 주기적으로 폴링해 검사 상태와 결과를 갱신하는 Spring Batch를 구성하고, CRM에 대상자 등록·상태 조회 화면을 만들었습니다.
  • 2차 (2025) — 업체 변경에 따른 마이그레이션을 수행하고, 폴링을 Webhook 수신으로 전환해 상태 변경이 발생한 시점에 바로 반영되도록 바꿨습니다.
  • 재전송·재등록 시 결과가 중복 적재되던 문제를 DB 유니크 제약과 S3 키트번호 기준 덮어쓰기로 차단했습니다. 애플리케이션에서 조회 후 분기하는 대신 저장소 레벨에서 보장하는 쪽을 택했습니다.
  • 운영 페이지 추가 — 키트 초기화, 결과 수동 적재

MongoDB Data API 자체 구현

2024 · 제공 중단 대응
▾
Node.jsAWS Lambda API GatewayMongoDB Atlas
  • MongoDB가 Data API 제공을 중단하면서 대체가 필요했고, 기존에도 주기적으로 타임아웃이 나던 상태였습니다.
  • Lambda + API Gateway로 CRUD API를 직접 구현하되, 기존과 동일한 인터페이스를 유지해 호출하는 쪽 코드를 고치지 않고 전환했습니다.
  • Atlas 연결을 핸들러 바깥에서 생성해 재사용하도록 두어 콜드 스타트 영향을 줄였습니다.
  • 전환 후 기존 간헐적 타임아웃 해소

사내 메신저 알림 & 헬프 챗봇

2023.10 ~ 2024.03
▾
JavaSpring BootRedis NAVER Works APIAWS LambdaPython
  • 여기저기로 나가던 업무 알림을 네이버웍스 한 곳으로 모으고, CRM에 알림 항목별 수신 설정 화면을 만들었습니다.
  • 토큰 관리 자동화 — Access 토큰을 Redis에 캐싱하고, 캐시가 없으면 Refresh 토큰을 조회해 만료가 가까우면 갱신, 완전히 만료됐으면 재발급하도록 분기했습니다. 알림을 보낼 때마다 토큰 상태를 신경 쓰지 않아도 되게 하는 것이 목적이었습니다.
  • 발송 실패 시 1회 재시도하고, 최종 실패는 로그로 남겨 추적 가능하게 처리
  • 지점 문의를 챗봇으로 접수해 담당자에게 전달하는 Lambda 콜백 API를 Python으로 구현, 문의자에게 전달 성공 여부를 회신

카카오톡 상담 챗봇

2021.06 ~ 2022.01
▾
PythonFastAPI Java Spring BootMySQL
  • FastAPI로 챗봇 응답 API를 구성하고 상담 시나리오별 분기를 처리했습니다.
  • 챗봇이 고객 정보를 필요로 할 때 호출하는 CRM 데이터 조회 API를 별도로 분리해 두어, 챗봇 쪽과 CRM 쪽 변경이 서로 영향을 주지 않도록 했습니다.
  • 상담 예약 자동 접수 처리
  • CRM에 챗봇 접속률·전환율 통계 화면 개발

고객 만족도 리서치 시스템

2020.10 ~ 2021.03 · 입사 후 첫 프로젝트
▾
PHPJavaSpring MyBatisMySQL
  • ERP에 리서치 항목·대상 관리 화면(PHP), CRM에 지점별 점수와 기간별 추이를 보는 통계 화면(Spring)을 나눠 개발했습니다.
  • 모바일 앱에서 고객이 직접 설문을 제출할 수 있도록 조회·등록 REST API 개발
  • 수기로 집계하던 설문을 자동 통계로 전환

개인 프로젝트 · Education

블로그 자동 업로드 · Python, Playwright

2025 ~ 현재
  • 네이버 블로그 에디터를 제어해 발행 전 과정 자동화 (이미지 스티칭, 장소 위젯·태그 삽입 포함)

AI 숏폼 생성 파이프라인 · n8n, GPT-4o, ElevenLabs, fal.ai

2025 ~ 현재
  • 스크립트 생성 → TTS → 이미지 생성 → 영상 편집을 워크플로로 연결

대진대학교 통신공학과

컴퓨터공학과 복수전공 · 정보처리기사(2018) · Google Analytics Certification