백엔드 개발자 · 7년차

안녕하세요,
백엔드 개발자 이민영입니다.

2020년부터 쥬비스다이어트에서 사내 운영 시스템을 개발하고 있습니다. 주로 Java/Spring으로 API와 배치를 만들고, 느린 쿼리나 외부 연동 장애의 원인을 찾아 고치는 일을 많이 해왔습니다. 회사 밖에서는 필요한 게 생기면 직접 만들어 쓰는데, 그중 하나는 실제 서비스로 운영하고 있습니다.

01

회사 업무

쥬비스다이어트 시스템 개발팀 · 파트장 개발자 · 2020.10 ~ 현재
CRM·ERP·상담 시스템과 배치를 맡고 있습니다.

주요 결과

Java/Spring으로 API와 배치를 주로 만들고, 느린 쿼리나 외부 연동 장애는 실행계획과 운영 실측으로 원인을 확인한 뒤 고칩니다.

43.9 → 2.4초회원 검색 API (COUNT+LIST)
209 → 16.6초목록 조회 API
1.5개월EKS 전환, 환경 구성부터 prod까지
4.6 → 1.8일AI 스킬 도입 후 VOC 처리 기간

최근에 해결한 장애

  • 회원 검색 504 · OR 분기의 DEPENDENT SUBQUERY를 UNION으로43.9s → 2.4s
  • 목록 조회 API 504 · 조회 주체별 복합 인덱스 3건209s → 16.6s
  • 예외를 삼킨 채 커밋돼 알림 최대 6회 중복타임아웃·예외 전파
  • Redis 장애 때 이력 적재 대기로 실패 응답237s 실측
2026.07 ~

파일서버 → S3 이관

presigned URL·IRSA 전환. 개인정보 캐싱 문제로 CloudFront 대신 서명 발급을 한 곳으로 모음

파드 액세스 키 제거 · 진행 중
2026.07 ~ 09

Notification 통합 · Redis 장애

재접속 동작을 실측해 이력 적재를 응답 경로에서 분리, 상한을 대기 명령 폐기 경계에 맞춤

중복 발송 원인 제거
2026.07 ~ 09

쿠폰 판매·환불

기존 환불 테이블 대신 전용 테이블. 통계 자동 집계를 포기하고 UNION 가능한 원장 구조로

과다 계산 오류 발견·정정
2026.03 ~ 06

AI 코딩 도구 생산성 체계

팀 공용 Claude Code 스킬 레포, VOC 처리 절차를 스킬로

당일 처리 12% → 46%
2026.03 ~ 04

기기 스케줄링 시스템

이력 로그와 캐시 테이블 분리, 자산이 정해질 때까지 모드 결정을 미룸

예정대로 오픈
2025.11 ~ 2026.03

Java → NestJS CRM 전환

로그인·권한 영역 설계, 메뉴·권한 API 20건

서비스 자체 결함 0건
2025.06 ~ 10

AWS EKS 전사 전환

컨테이너화, Helm, ArgoCD, GitHub Actions CI

배포 수십 분 → 수 분
2026.08 ~

PR 리뷰·장애 알럿 봇 (팀 공동)

팀장님이 만든 봇을 팀원들과 함께 PR 코드리뷰·알럿 처리용으로 확장

리뷰·티켓 등록 수동 작업 제거
02

개인 프로젝트

회사 일과는 별개로 만든 것들입니다.

온전한 하루 웹사이트 대표 이미지운영 중

온전한 하루

웨딩 축의대 운영 서비스

결혼식 축의대 대행 서비스 사이트입니다. 가격과 현장 사진, 확정된 일정을 볼 수 있고 상담은 카카오톡 채널로 받습니다.

  • 관리자 CMS에서 공지·후기·Q&A 직접 관리
  • Google Calendar 연동으로 확정 일정 실시간 노출
  • GA4 이벤트 수집, 매주 성과 리포트 자동 발송
만들면서 신경 쓴 점예약 폼이나 자체 DB는 두지 않고 상담은 카카오톡, 일정 관리는 구글 캘린더로 넘겼습니다. 그래서 사이트에는 고객 개인정보가 저장되지 않습니다.
Cloudflare PagesWorkersGA4Kakao SDKPlaywright
Shelf 홈 화면Shelf 등록 화면
베타

Shelf

생필품 유통기한 관리 앱

유통기한을 사진으로 찍어 등록해두면 날짜가 가까워질 때 알림을 보내주는 앱입니다. 계정 없이 쓸 수 있습니다.

  • 기기 내 OCR로 날짜·제품명 자동 인식
  • 제품별 알림 시점·시간 설정
  • 분류·장소·상태 필터와 기한순 정렬
만들면서 신경 쓴 점DB 스키마를 v6까지 올리는 동안 이미 등록한 물품과 사진이 없어지지 않도록 마이그레이션을 작성했습니다. 저장이 실패했을 때 복구하는 처리와, 되돌리기가 더 최근 상태를 덮어쓰지 않게 하는 처리도 넣었습니다.
FlutterSQLiteML Kit OCRLocal Notifications
베이비로그 홈 화면
개발 중

베이비로그

임신 다이어리 앱

임신 기간의 기록을 사진과 함께 남기는 다이어리 앱입니다.

  • 임신 주차·D-day 자동 계산
  • 사진 다이어리와 캘린더 뷰
  • 정부 지원 정보·영양·병원 정보 내장
  • 백업·복원과 전체 데이터 삭제
만들면서 신경 쓴 점서버 없이 모든 데이터를 기기에만 저장합니다. 백업 파일은 사진을 풀기 전에 먼저 검사해서, 파일이 손상된 경우와 저장 공간 문제를 구분해 알려줍니다.
FlutterDriftSQLiteGolden Test
$ python3 scripts/upload_naver.py draft.json
✓ 이미지 12장 · EXIF 보정 · 얼굴 모자이크
✓ 본문·사진 순서대로 입력
✓ 장소 · 카테고리 · 해시태그
→ 임시저장 완료 (--publish 없이 발행 안 함)
오픈소스
Py

블로그 자동 업로드

네이버 블로그 발행 자동화

사진과 초안을 넣으면 네이버 블로그 에디터에 글을 입력하고 임시저장까지 해주는 도구입니다. AI 에이전트 스킬로 설치하면 대화하면서 글을 쓸 수 있습니다.

만들면서 신경 쓴 점실수로 글이 공개되지 않게 기본은 임시저장이고, --publish 옵션을 줬을 때만 발행합니다. 계정 정보와 로그인 세션은 내 컴퓨터에만 저장됩니다.
PythonPlaywrightPillowAgent Skills
~/.claude
├─ CLAUDE.md · 지침
├─ skills/ ● 51
├─ hooks ● on
├─ agents/ · plugins/
└─ sessions ● 3 active
오픈소스
JS

Claude Dashboard

Claude Code 워크스페이스 관리

Claude Code의 지침, 스킬, 훅, 에이전트, 실행 중인 세션을 한 화면에서 보고 고칠 수 있는 로컬 대시보드입니다.

만들면서 신경 쓴 점따로 서버를 두지 않고 ~/.claude 디렉토리를 직접 읽고 씁니다.
React 19ViteNode.js
03

이 사이트는 이렇게 배포합니다

정적 사이트라 그냥 올려도 되지만, 회사에서 배포할 때 쓰는 방식을 그대로 적용해봤습니다. 테스트가 깨지면 배포하지 않고, 배포 후에는 새 버전이 실제로 떠 있는지 확인합니다.

pull_requestPR을 올리면
  1. HTML 검사html-validate
  2. E2E 테스트Playwright · 데스크톱/모바일
  3. 미리보기 배포pr-N.minyeong-dev.pages.dev
  4. 반영 검증/api/health 커밋 대조
  5. PR 댓글미리보기 주소 회신
push → mainmain에 머지되면
  1. 같은 테스트재사용 워크플로
  2. 운영 배포Cloudflare Pages · 순차 실행
  3. 반영 검증엣지 전파까지 폴링
  4. 스모크 테스트운영 주소 대상
  5. Slack 알림실패해도 배포와 분리
지금 서빙 중인 버전
commit
—
배포
—
실행
—
GET /api/health(Pages Function) 응답을 그대로 보여줍니다.
  • 배포 명령이 성공해도 한 번 더 확인CDN에 이전 버전이 남아 있을 수 있어서, /api/health가 돌려주는 커밋이 방금 배포한 커밋과 같아질 때까지 확인합니다.
  • 운영 배포는 한 번에 하나씩머지가 연달아 일어나도 배포끼리 겹치지 않게 순서대로 실행합니다.
  • 알림이 실패해도 배포는 그대로Slack 알림은 별도 job이라 알림이 실패해도 배포 결과에는 영향이 없습니다.