Data Modeling
메뉴마다 반복되던 옵션 데이터를 공통 정책으로 분리하고, 메뉴별 적용 관계와 예외만 따로 관리했습니다.
Backend / Product Engineer
현장에서 생기는 문제를 실제 기능으로 구현합니다.
Java와 Spring Boot를 기반으로 주문·결제·품절·매출처럼 실제 운영 과정에서 필요한 기능을 구현했습니다. 화면에서 시작한 문제도 API, 비즈니스 로직, SQL과 DB까지 따라가며 원인을 확인하고 해결하는 편입니다.
개발 전에는 매장 운영과 관리 업무를 오래 경험했습니다. 그래서 기능을 만들 때도 화면 자체보다 실제 업무가 어떤 순서로 진행되고, 어디에서 불편이나 오류가 생기는지를 먼저 봅니다.
ASAK 프로젝트에서는 관리자 영역을 중심으로 React 화면, Spring Boot API, MySQL을 연결하며 주문·품절·결제·매출 기능을 구현했습니다. 문제가 생기면 프론트에서 임시로 맞추기보다 API 응답과 비즈니스 로직, SQL까지 확인하면서 원인을 찾았습니다.
메뉴마다 반복되던 옵션 데이터를 공통 정책으로 분리하고, 메뉴별 적용 관계와 예외만 따로 관리했습니다.
메뉴·옵션·재료 품절, 주문 상태 전이, 취소 가능 조건을 서로 다른 규칙으로 분리했습니다. 화면에 보이는 상태와 실제 서버 판단이 다르지 않도록 API와 DB 로직을 함께 확인했습니다.
Mapper별 시간을 측정해 대시보드 병목을 찾고 약 8초의 응답을 0.43~0.50초로 줄였습니다. View를 수정한 뒤 오히려 약 5배 느려진 것을 확인해 해당 변경은 원복했습니다.
2인 팀으로 진행해 프론트와 백엔드를 완전히 나누기보다 기능 단위로 함께 개발했습니다. 관리자·백엔드 구현을 중심으로 DB·API 작업과 함께 WBS, 개발 문서, QA도 정리했습니다. 메뉴 → 품절 → 주문 → 결제 → 취소 → 매출 전 과정을 실제 데이터로 확인했습니다.
고객 주문부터 매장 관리까지 하나의 흐름으로 연결한 샐러드 키오스크 프로젝트입니다. 주문·결제·환불, 품절 정책, 매출 통계와 관리자 기능을 구현하고 DB 모델링·QA·기술 조율을 함께 맡았습니다. 실제 병목을 추적해 대시보드 응답을 0.43~0.50초까지 개선했습니다.
프로젝트 규칙과 검증 기준이 도구마다 달라지는 문제를 줄이기 위해 공통 원본을 각 환경의 형식으로 배포하는 툴킷을 구성했습니다. Windows 설치·검증 스크립트와 기존 설정을 덮어쓰지 않는 배포 흐름을 함께 정리했습니다.
ASAK은 고객의 키오스크 주문부터 매장의 주문 관리까지 연결한 9주 팀 프로젝트입니다. Admin/Backend를 중심으로 개발했고, DB 모델링과 API 구현뿐 아니라 WBS와 QA 기록도 함께 관리했습니다.
menu ├─ menu_option └─ menu_option_grouplegacy rows · 9,166
opt_group
├─ opt_item
└─ opt_policy
└─ opt_policy_item
menu ── menu_opt_policy
policy 82 · policy item 734
공통 선택 규칙과 메뉴 연결을 분리해 중복을 줄이고, 메뉴별 차이는 예외 데이터로 관리할 수 있게 했습니다.
GET /api/admin/sales/summary?period=month GET /api/admin/sales/monthly?year=2026 GET /api/admin/sales/daily?from=2026-07-01&to=2026-07-31 GET /api/admin/sales/daily/time-slots?date=2026-07-20&intervalMinutes=30
10:00~22:00 기준으로 Service에서 생성했습니다.
DB 실제 주문 데이터 저장 Service 빠진 시간대를 생성하고 0으로 보정 API 연속된 시간축으로 반환 Frontend 반환된 데이터를 차트로 표현
RECEIVED → PREPARING → COMPLETED
흐름과 취소 가능 조건을 API에 적용했습니다. READY 주문의 취소 요청은
409 ORDER_CANCEL_NOT_ALLOWED로 차단됩니다.
waitingOrderNo를 완료 화면과 영수증 요청에서 사용했습니다.
KPI의 중복 조회를 합친 뒤, 전체 데이터를 먼저 집계하던 View 대신 필요한 기간과 최근 주문만 베이스 테이블에서 조회했습니다. 결과값을 기존 View와 비교하면서 단계별로 측정해 최종 응답을 0.43~0.50초까지 줄였습니다.
`vw_order_list_summary`를 상관 서브쿼리 방식으로 바꾸면 빨라질 것으로 예상했지만, MySQL이 View를 `TEMPTABLE`로 구체화해 약 5배 느려졌습니다. 실제 View 실행계획을 확인한 뒤 즉시 원복하고 Mapper에서 필요한 조회만 직접 수행했습니다.
아직 해결하지 못한 항목도 그대로 남겼습니다. 결제수단의 Kiosk 반영과 일부 재료 품절 연쇄는 최종 QA에서 실패로 기록했습니다. Admin 브라우저 전체 클릭, 실PG, 실물 장치/RTOS E2E는 검증하지 않았습니다.
요구사항부터 시나리오·화면·API·WBS·테스트까지 ID로 추적했습니다. API나 DB가 바뀌면 영향을 받는 화면과 작업 순서를 함께 정리하고, 실제로 확인하지 못한 항목은 완료 상태로 두지 않았습니다.
요구사항 → 시나리오 → 화면 → DB / API → WBS → 테스트 → 최종 시연
07/02 프로젝트 시작 07월 화면·계약·핵심 기능 08월 연동·성능·통합 QA 09/02 최종 검증·시연
이 포트폴리오는 vanilla HTML · CSS · JS로 직접 구성했습니다. 소스 보기
이하진 · Backend / Product Engineer · 2026