| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
- 아키텍처
- REST API
- github actions
- FastAPI
- next.js
- 배포
- React
- JWT
- playwright
- typescript
- 크롤링
- Vite
- Kotlin
- 메일자동화
- 상태관리
- electron
- python
- Android
- 마이그레이션
- 인증
- contextBridge
- 소셜로그인
- 온디바이스AI
- php
- javascript
- sqlite
- 도메인설계
- 프론트엔드
- 보안
- 백엔드
- Today
- Total
목록playwright (8)
HM소프트
취향 큐레이션 커머스를 피처 테스트 49개와 Playwright E2E로 검증하고 사흘간 버그 23개를 잡은 기록. S3 전환의 숨은 경로 가정, 한국어 UI와 역할 기반 셀렉터 충돌, 정산 집계의 상태 조건, 환불을 8단계 상태 머신으로 설계한 과정을 담았다.기능은 다 만들었다, 이제 믿을 수 있게 만들자1편에서 Laravel + Blade 모놀리스로 취향 큐레이션 커머스의 골격을 잡았다. 멀티롤 권한, 추천 엔진, 결제 위젯 v2, 정산 어댑터까지 — "기능이 있는" 상태는 됐다. 그런데 기능이 "있는 것"과 "동작하는 것"은 다르다. 이 차이를 테스트를 붙이고 나서야 숫자로 확인했다. 이번 편은 골격을 믿을 수 있게 만든 과정의 기록이다. 미디어 스토리지를 S3로 옮기고, 피처 테스트 49개로 회귀..
예약된 슬롯은 보존하고 미예약분만 갈아끼우는 시간표 무중단 전환을 이중 안전장치로 구현하고, 날짜·시간 범위 슬롯 일괄 차단을 AVAILABLE만 골라 처리한다. 요금 단가는 환경변수로 빼고, SPA의 빈 초기 HTML에 JSON-LD 구조화 데이터로 SEO를 박는다. 정책을 박제하는 Jest 단위 테스트와 Playwright E2E까지 시리즈를 마무리한다.3편: 운영하고, 노출하고, 검증하다1편에서 예약 도메인을, 2편에서 알림·실시간 연동을 다뤘다. 마지막 편은 시스템을 실제로 굴러가게 만드는 세 가지다. 운영자가 매일 쓰는 관리자 도구(특히 까다로웠던 시간표 무중단 전환과 슬롯 일괄 차단), 검색에 노출시키는 SEO, 그리고 이 모든 정책이 무너지지 않게 지키는 테스트.시간표 무중단 전환 — 예약을..
EJS 서버 렌더 데모를 링크 하나로 공유되는 정적 사이트로 전환한다. build.js로 HTML을 굽고, fetch 가로채기 shim으로 API를 정적 JSON에 연결하며, BASE_PATH 변수로 멀티 호스팅 경로를 통일한다. Playwright 감사 스크립트로 상태코드와 NaN 같은 조용한 실패까지 배포 게이트로 잡는다.데모는 서버 없이, 링크 하나로 돌아가야 한다1편에서 만든 커피머신 컨트롤 패널 데모(추출구 5개짜리 자동 드립 머신의 태블릿 화면)를 이제 누구에게나 링크 하나로 보여줘야 했다. 문제는 원래 구조였다. 화면은 EJS 템플릿을 Express가 서버에서 렌더링하고, 데이터는 /api/* 엔드포인트가 목 JSON을 돌려주는 방식이다. 보여주려면 어딘가에 Node 서버가 떠 있어야 한다...
같은 정적 산출물을 데모(하위 경로)와 임베디드 장비(루트)에 동시 배포하는 파이프라인을 만들었다. BASE_PATH 경로 확정, 백엔드 없는 fetch 심, .nojekyll 자동 생성, 그리고 공식 배포 액션이 CDN 장애로 다운됐을 때 gh-pages 직접 미러링으로 우회한 과정과 Yocto·Apache 장비 배포까지 다룬다.코드가 멀쩡해도 배포가 안 되는 날한 커피머신 제조사의 키오스크 UI를 만든 시리즈의 마지막 편이다. 1편에서는 기기와의 WebSocket 실시간 연동(추출구 상태 봉투, 재연결, 폴링 인계)을, 2편에서는 PWA 풀스크린과 태블릿 가독성을 다뤘다. 두 편 모두 "내 코드 안의 문제"였다. 그런데 이 프로젝트에서 정작 가장 많은 시간을 빼앗은 건 코드가 아니라 배포였다.이 UI..
공개 경매 데이터 수십만 건을 상대 서버 부담 없이 끝까지 긁는 분산 크롤러 인프라를 설계했다. HTML 대신 검색 인덱스를 페이지 컨텍스트에서 직접 질의하고, 1000건 한계는 적응형 재귀 분할로 우회했다. 적응형 레이트 리미팅, 체크포인트 재시작, 14대 VM 분산과 차단 시 자동 지역 이전까지 다룬다.수십만 건을, 남의 서버를 괴롭히지 않고, 끝까지한 해외 미술품 경매 데이터 플랫폼에 공개되어 있는 출품작 기록을 대규모로 수집하는 파이프라인을 만들었다. 한 건의 출품 기록에는 제목·설명·카테고리 계층·경매사·낙찰가·추정가·작가·이미지가 들어 있고, 이걸 전수에 가깝게 모아 분석에 쓰는 게 목적이었다. 데이터는 외부 공개 사이트에 있으니 가져오는 일 자체는 불법도 비밀도 아니다. 진짜 어려운 건 따로..
Playwright MCP 위에 시니어 QA의 판단력을 얹은 자율 웹 QA 플러그인을 만들었다. 페르소나 시스템 프롬프트, 6단계 작업 루프, 입력값 엣지 케이스 체크리스트, 증상-원인 진단 테이블, 그리고 파괴적 액션 강제 확인과 stale ref 금지 같은 자율 에이전트 안전장치를 코드 근거로 풀어낸다."코드는 멀쩡한데 왜 안 되죠"에서 출발배포를 끝낸 뒤 누군가 "이거 잘 되는지 한번 봐줘"라고 부탁할 때마다 나는 매번 같은 한계에 부딪혔다. 코드 리뷰 도구는 코드를 읽고, 단위 테스트는 함수를 호출한다. 둘 다 정적 분석의 영역이다. 그런데 정작 사용자가 겪는 문제는 거기에 없다. 버튼 핸들러 코드가 흠잡을 데 없어도 그 버튼이 실제로 눌리는지는 별개고, 업로드 로직이 깔끔해도 운영 서버가 422..