빌드 성공과 기능 성공을 구분합니다
빌드와 컴파일만으로 기능 완료를 판단하지 않습니다. UI부터 실 DB·브라우저·장치까지 8단계 검증 기준으로 확인합니다.
Full-Stack Developer
화면이 아니라, 매장 운영 흐름이 끝까지 이어지는지 확인하는 개발자입니다.
요구사항을 실제 사용 흐름으로 바꾸고, 문제가 생기면 책임 계층까지 확인합니다. 검증하지 못한 기능은 완료라고 말하지 않습니다.
// ~/portfolio/identity.tsexport const me = { name: '이하진', role: 'Full-Stack Developer', domain: '매장 운영 · 관리자 시스템', principle: '보이는 것과 보장되는 것을 구분한다', available: true,}
React 화면부터 Spring Boot·MySQL의 데이터 흐름까지 연결합니다. 화면이 보이는가보다 사용자가 이 데이터를 믿고 업무에 쓸 수 있는가를 기준으로 구현과 검증 범위를 정합니다.
빌드와 컴파일만으로 기능 완료를 판단하지 않습니다. UI부터 실 DB·브라우저·장치까지 8단계 검증 기준으로 확인합니다.
버튼이 동작해도 실제 연동을 검증하지 못했다면 완료라고 기록하지 않습니다. Case Study의 미검증 항목은 현재 상태 그대로 공개합니다.
화면의 문제를 임시값으로 덮지 않습니다. React부터 API·Service·SQL·실제 View까지 추적해 데이터 계약의 원인을 확인합니다.
집사냥 프로젝트를 함께 개발한 주 개발자의 피드백
“요청받은 작업을 처리하는 데 그치지 않고 서비스 전반의 사용자 경험을 함께 고민했습니다. 데이터 표현 방식과 화면 구성의 개선안을 제안하고, 디자인 작업과 구현 수정까지 연결했습니다. 또한 사용자 시점의 검증을 통해 엣지 케이스와 문구의 어색함까지 점검하며 서비스 완성도를 높였습니다.”
주문·메뉴·품절·결제·매출·대시보드와 영수증 출력 연계를 담당했습니다. 새 화면을 늘리기보다 메뉴 → 품절 → 주문 → 결제 → 취소 → 매출 → 대시보드 흐름을 API·DB까지 검증했습니다.
주문·메뉴·품절·결제·매출을 연결한 샐러드 키오스크와 관리자 시스템입니다. 매출 API를 조회 책임별로 분리하고, 대시보드 응답을 실 DB 기준 8.02초에서 0.43초로 개선했습니다.
관리자 페이지는 감상하는 서비스가 아니라 직원이 계속 열어 두고 쓰는 도구입니다. 지금 어떤 주문을 처리해야 하는지, 어떤 메뉴를 팔 수 없는지, 오늘 매출이 어떤지를 빠르게 판단할 수 있어야 합니다. 그래서 기능을 설계할 때 항상 화면 다음의 행동을 먼저 봤습니다.
vw_soldout_catalog View로 메뉴·재료·옵션을 같은 구조로 제공하되,
관리자 화면에는 운영자가 자주 다루는 메뉴와 재료만 노출했다. 확장 여지는 데이터에 남기고
화면은 단순하게 뒀다.
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가 0으로 채워 연속된 시간축을 반환하게 했다.
DB 실제 주문이 발생한 사실만 저장 Service 영업시간 기준으로 빠진 시간대를 생성 API 연속된 시간축으로 반환 Frontend 그대로 차트 표현
RECEIVED → PREPARING → COMPLETED와 취소 가능 조건을 먼저 확인하고 화면을 연결해,
완료된 주문에 제조 시작을 다시 누를 수 없게 했다.
fill, barHeight를
제거하고 차트 라이브러리가 업무 데이터만 받아 높이를 계산하게 했다.
기대와 달리 느려진 View 변경은 실측을 근거로 되돌렸습니다. 무엇이 맞았는지만큼 왜 어떤 방법을 버렸는지도 남겼습니다.
| 기능 | UI | Mock | API | Backend | DB | 실 DB | 브라우저 | 장치 |
|---|---|---|---|---|---|---|---|---|
| 품절 관리 | 완료 | 완료 | 완료 | 완료 | 완료 | 완료 | 완료 | 해당 없음 |
| 주문 Live · 상태 전이 | 완료 | 완료 | 완료 | 완료 | 완료 | 완료 | 완료 | 해당 없음 |
| 메뉴 CRUD · 영양/재료 | 완료 | 완료 | 완료 | 완료 | 완료 | 완료 | 완료 | 해당 없음 |
| 매출 4종 API | 완료 | 완료 | 완료 | 완료 | 완료 | 완료 | 완료 | 해당 없음 |
| 대시보드 | 완료 | 완료 | 완료 | 완료 | 완료 | 완료 | 완료 | 해당 없음 |
| 주문 취소 | 완료 | 완료 | 완료 | 완료 | 완료 | 완료 | 완료 | 해당 없음 |
| 결제 환불 연동 | 완료 | 완료 | 완료 | 미검증 | 미검증 | 미검증 | 미검증 | 해당 없음 |
| 영수증 출력 (RTOS) | 완료 | 완료 | 완료 | 완료 | 완료 | 미검증 | 해당 없음 | 미검증 |
미검증으로 남긴 것 — 환불 흐름 일부는 실제 결제 서버가 아니라 mock에 연결돼 있습니다.
영수증 출력은 device_event API까지 구현했지만 실제 프린터 장치 검증은 하지 못했습니다.
버튼이 눌린다는 이유로 완료라고 적지 않았습니다.
vw_soldout_catalog — 메뉴·재료·옵션을 같은 구조로 통합한 품절 Viewsummary / monthly / daily / time-slots 4개 책임별 APIintervalMinutes=30|60 으로 시간대 차트 단위 전환0 보정, 미래 날짜·미래 월 범위 제외soft deletedevice_event 폴링 구조로 Web과 RTOS 장치를 느슨하게 결합이 사이트는 프레임워크와 빌드 도구 없이 vanilla HTML · CSS · JS로 만들었습니다. 라이트/다크 전 항목 명도 대비 WCAG AA 이상, 가로 오버플로 없음. 소스
이하진 · Full-Stack Developer · 2026