Under a freelance contract, I design, build, deploy, and operate a New York physical therapy clinic’s web service on my own. Squarespace limited UI customization and slowed page responses, so I won the move to AWS with a working GitHub Pages demo and rebuilt the site in Go with Docker.
미국 물리치료 클리닉과 프리랜서 계약을 맺고, 웹 서비스 전체를 혼자 설계, 구축, 배포, 운영하고 있습니다. Squarespace는 UI 커스터마이징에 제약이 있었고 페이지 응답이 느렸기 때문에, 작동하는 GitHub Pages 데모로 AWS 이전을 설득한 뒤 Go와 Docker로 재구축했습니다.
A non-technical staff member needed to publish site changes with AI agents, without backend or cloud access, while the redirects, analytics, and form fallbacks the Go server handled kept working. I split the site into its own repository on AWS Amplify behind a Cloudflare Worker and froze its route, form, and link contracts, enforced by Python checks, a browser smoke test, a CI gate, and Gitleaks. Changes now ship through pull requests with Amplify previews, and a clinic staff member has shipped a form fix this way.
비개발자 직원이 백엔드와 클라우드 접근 없이 AI 에이전트로 사이트를 수정하고 배포해야 했고, Go 서버가 처리하던 리다이렉트와 분석, 폼 폴백은 그대로 지켜야 했습니다. 사이트를 별도 저장소로 분리해 Cloudflare Worker 뒤의 AWS Amplify로 배포하고, 라우트와 폼, 링크 계약을 고정해 Python 검사, 브라우저 스모크 테스트, CI 게이트, Gitleaks로 강제했습니다. 지금은 PR과 Amplify 미리보기로 변경이 배포되며, 클리닉 직원이 이 방식으로 폼 수정을 직접 배포했습니다.
In April 2026, the site went down for 2 hours 54 minutes while EC2 status checks kept passing. I ruled out an out-of-memory crash with the systemd journal and found in CloudWatch that the gp3 volume was pinned at its 125 MiB/s throughput ceiling by unindexed admin-dashboard queries. After restoring on a fresh instance with no customer data loss, I added CloudWatch alarms, query time limits, log rotation, and indexes found with EXPLAIN, and published a postmortem.
2026년 4월, EC2 상태 검사는 정상이었지만 사이트가 2시간 54분 동안 응답하지 않았습니다. systemd 저널로 메모리 부족 가설을 배제한 뒤, CloudWatch에서 인덱스 없는 관리자 대시보드 쿼리 때문에 gp3 볼륨이 처리량 한도인 125MiB/s에 막힌 것을 확인했습니다. 새 인스턴스에서 고객 데이터 손실 없이 복구한 뒤 CloudWatch 알람, 쿼리 실행 시간 제한, 로그 로테이션, EXPLAIN 기반 인덱스를 적용했고, 사후 보고서로 공개했습니다.