SaaS의 뒷면 — Super Admin 대시보드와 AI 크레딧 결제를 만드는 일
내부 개발 도구 확장 super admin에 활동 로그 타임라인, Sentry/Vercel 모니터링 대시보드를 추가하고, AI 크레딧 추가 구매 플로우를 4개 Phase에 걸쳐 완성한 하루. 익스텐션 콘텐츠 스크립트 미주입 버그도 해결.
내부 개발 도구 확장 super admin에 활동 로그 타임라인, Sentry/Vercel 모니터링 대시보드를 추가하고, AI 크레딧 추가 구매 플로우를 4개 Phase에 걸쳐 완성한 하루. 익스텐션 콘텐츠 스크립트 미주입 버그도 해결.
내부 개발 도구 확장에 웹 QA 대표 에러 10가지를 재현하는 튜토리얼 데모 시나리오를 구축하고, 멤버 비활성화/재활성화와 시트 관리 UI를 7개 Phase에 걸쳐 완성한 하루.
내부 개발 도구 확장 전체에 next-intl 기반 다국어화를 적용하고, 플랜 구조를 Solo/Pro/Enterprise 3단계로 재설계하고, Chrome Web Store 심사 제출을 준비한 하루. 107개 커밋이 하나의 방향을 가리킨다.
내부 개발 도구 확장에 GitHub Ghost User 시스템, 칸반 드래그 순서 변경, 공개 이슈 공유 링크 등 제품 수준의 기능들이 대거 추가된 하루. 세션 리플레이 진행바와의 세 번에 걸친 버그 수정기도 함께.
쇼핑몰 J 관리시스템의 하드코딩된 이메일 권한을 역할 기반으로 전환하며 2,500줄을 순삭제하고, 그랑핸드 마이페이지 QA와 스탬핑 기능을 마무리하고, 내부 도구의 세션 리플레이 트리밍과 칸반 보드 레이아웃을 개선한 하루.
PlateEditor 이미지 업로드를 DOM 해킹에서 Plate 공식 API, 최종적으로 PlaceholderPlugin까지 세 번의 리팩토링으로 완성하고, 방 시스템의 폴리곤 직접 병합과 다크모드 Surface 5단계 계층 구조를 구현한 37커밋의 금요일 기록.
내부 개발 도구 확장에서 화면 녹화 버그를 수정한 직후 기능 자체를 제거하고, 숨겨져 있던 메타데이터를 대시보드에 노출하는 작업을 진행했습니다. 쇼핑몰 G은 상품 페이지 머지와 장바구니 CSS 개선이 이루어진 하루.
AI 크레딧 시스템을 정교하게 구축한 뒤 비용 분석 결과를 보고 과감히 구조를 전환하고, QA Note MCP 서버로 LLM 도구 연동의 문을 연 하루의 기록입니다.
어떤 프로젝트든 "로드맵 전체 구현 완료"라는 커밋 메시지를 작성하는 순간이 있습니다. 오늘 에서 그 순간이 왔고, +40,393줄이라는 숫자가 그 무게를 말해주고 있네요. 오늘의 핵심: 시뮬레이터가 제품이 되기까지 단순히 기능을 만드는 것과, 그걸 실제로 "설치"하고 "분석"할 수 있게 만드는 건 완전히 다른 일입니다. 오늘 가장 공들인 부분은 "내 사이
Vercel 서버리스의 4.5MB 제한을 우회하기 위해 Vercel Blob을 경유지로 사용하는 2단계 전송 구조를 도입했습니다. 클라이언트에서 Blob으로 직접 업로드 후 서버가 SFTP로 옮기는 방식으로 최대 30MB 이미지 업로드를 지원하게 됐습니다.
쇼핑몰 G의 헤더 작업을 통해 간단해 보이는 UI가 실제로는 얼마나 많은 케이스를 고려해야 하는지 경험한 날. 디테일이 쌓여 완성도가 된다는 걸 다시 한번 배웠습니다.
하루에 세 개 프로젝트, 23개 커밋. 쇼핑몰 G의 매거진/이벤트 기능 구현, 온라인 쇼핑몰 E의 디지털 카탈로그 디테일 개선, 아트페어 H VIP시스템 백오피스 편의성 향상 작업을 진행했습니다.
토요일 오후, 쇼핑몰 H 관리시스템에서 이미지 링크가 안 먹는다는 제보를 받았습니다. 분명 링크를 넣었는데 클릭해도 아무 반응이 없다고요. 코드를 뜯어보니 범인은 확장의 이었습니다. href 속성을 로 반환하고 있었는데, 정작 태그로 래핑하는 조건문은 를 체크하고 있었던 거죠. 결과적으로 래핑 조건이 영원히 false가 되는 클래식한 버그였습니다. 구조로
Prep이 QANote로 리브랜딩되며 GitHub App 토큰 기반의 진짜 봇으로 진화했고, 쇼핑몰 G 헤더와 WYSIWYG 에디터 개선 작업이 동시에 진행된 금요일의 기록입니다.
GitHub Actions workflow_call의 권한 설정 삽질과 prep 봇의 의도 분류 구조 개선, 그리고 Redis/CDN 이중 캐시 레이어 문제 해결까지. 인프라를 제대로 깔아둔 하루.
CDN과 Redis 캐시 레이어를 재정비하고, 콘텐츠 즉시 반영 기능을 추가했습니다. 안전한 캐시 퍼지를 위해 scanStream과 UNLINK를 도입했고, 개인정보 암호화 로직도 개선했어요.
프로젝트 이력을 5분 간격으로 그룹화해서 보여주는 기능을 구현하고, pnpm lockfile 버전을 호환성 이슈로 다운그레이드했습니다. 권한 분기 처리와 스크롤 기반 UI 개선도 함께 진행했어요.
오늘은 바톤 매뉴얼 프로젝트에서 꽤 많은 일이 있었습니다. 코드 라인만 봐도 +23k/-11k니까요. 물론 이 숫자가 전부를 말해주진 않지만, 오늘 하루 팀이 어디에 집중했는지는 확실히 보여줍니다. 수정 내역을 기록한다는 것 가장 눈에 띄는 작업은 카테고리와 게시물의 수정 내역 추적 기능이었습니다. 사실 "누가 언제 뭘 바꿨는지" 기록하는 건 당연해 보이지
바톤 매뉴얼 프로젝트에 변경 이력 추적 시스템을 구현하고, 카테고리/게시물 삭제 로직을 개선했습니다. 1분 단위 히스토리 그룹화와 before_content 저장으로 데이터 변경을 추적할 수 있게 되었습니다.
검색 정렬 기본값 변경이 생각보다 복잡했던 이유와, 히스토리 기능을 과감히 제거한 이야기. 그리고 새 프로젝트 아트페어 웹사이트의 시작.
검색엔진 차단 설정, 사용자 관리 AuditLog, 프로젝트 변경 이력 추적, ViewEvent 스키마 정리 등 디테일 작업을 진행한 월요일. 화려하진 않지만 프로젝트를 견고하게 만드는 하루였습니다.
일요일 아침, 레포지토리에 알림이 떴습니다. 이 열일하고 있더라고요. 온라인 쇼핑몰 T에서 Shopify 테마 동기화 커밋이 2건 들어왔습니다. 둘 다 로, 아주 작은 변경이에요. 아마 운영팀에서 직접 Shopify 어드민에서 뭔가 수정하신 것 같습니다. Shopify 테마 개발의 재미있는 점: 코드 에디터 말고도 변경이 들어오는 경로가 있다는 것 저희는
조회수 추적 시스템을 봇 필터링과 중복 방지 로직으로 개편하고, 집계 테이블 대신 원본 이벤트 직접 쿼리 방식으로 전환해 PV/UV 이중 지표와 시간대별 통계를 제공하게 됐습니다.
쇼핑몰 H 관리시스템에 활성/비활성 배너 독립 순서 관리를 위한 이중 순서 필드 패턴을 적용하고, heymap에 일별 조회수 동기화 파이프라인을 구축했습니다. 세션 실시간 검증 강화와 CSV 포맷팅 개선도 함께 진행했습니다.
PII 암호화와 FK 제약의 충돌을 raw 쿼리로 해결하고, 하이츠스토어를 라이트모드 기본으로 전환하며 배너 시스템을 정규화한 금요일.
사내 프로젝트 관리 도구에 CRUD 기능과 드래그 앤 드롭 카테고리 관리 기능을 추가했습니다. 실제로 쓸 만한 도구가 되어가는 과정이 재밌네요.
회사 전용 프로젝트 관리 도구에 구글 로그인 연동과 권한 제어를 구현하고, 프로젝트 CRUD 기능을 처음부터 끝까지 완성한 하루. 내부 도구라고 대충 만들 수 없다는 마음으로 차근차근 쌓아가는 중입니다.
iOS 환경에서 모달 배경 스크롤을 막는 방법을 정리했습니다. position: fixed와 스크롤 위치 저장/복원 로직으로 해결했어요.
테스트 코드의 반복되는 Mock 설정을 공통 유틸리티로 리팩토링하고, 여러 프로젝트의 실무 작업을 진행한 하루. 테스트 코드도 결국 코드라는 당연한 진리를 다시 한번 새깁니다.
개인정보 암호화를 구현하면서 이메일 해시 조회 방식 전환, 테스트 코드 작성, 그리고 예상치 못한 Vercel 배포 이슈를 해결한 하루의 기록.
PII 암호화와 미들웨어 보안 강화, Jest 테스트 도입, 그리고 통계 대시보드 확장. 화려하진 않지만 서비스를 단단하게 만드는 작업들.
보안 감사 결과를 바탕으로 Critical 보안 이슈 5건을 수정하고, PIPA 준수를 위한 SMS MFA, 중복 로그인 방지, 역할 변경 이력 기록 기능을 구현했습니다.
오늘은 커텐츠 관리 시스템에서 보안 점검 대응 작업을 집중적으로 진행했습니다. 사실 이런 보안 컴플라이언스 작업은 개발자라면 한 번쯤 겪어봤을 그 순간이죠. "저희 서비스, 개인정보보호법 기준 맞춰야 하는데요..." 라는 이야기를 듣고 나서 시작되는. 점검표와의 조우 !체크리스트 체크!|100% 점검표를 받았을 때 가장 먼저 한 일은 우선순위 분류였습니다.
ISMS-P 인증 요건을 위한 Audit Logger 구현, 차등 보관 정책 크론잡, 통합 에러 처리 개선, 그리고 Docker 기반 로컬 Supabase 환경 구축까지 완료한 하루였습니다.
ISMS-P 인증을 위해 Prisma Extension과 AsyncLocalStorage를 활용한 자동 DB 로깅 시스템을 구현하고, 바톤 개발 로그의 SEO와 동적 OG 이미지 기능을 개선한 금요일이었습니다.
SMS, 이메일, 어드민 컴포넌트의 대규모 리팩토링으로 500줄 이상의 중복 코드를 제거하고, ErrorCollector와 로그인 이력 추적 시스템을 새로 구축한 하루.
아트페어 H VIP시스템 프로젝트의 미들웨어 접근 제어 로직을 전면 개편하고, CSV 전화번호 포맷팅 문제를 해결한 하루. 경로 변경이 불러온 31개 커밋의 기록입니다.
아트페어 H VIP시스템 프로젝트에서 AWS S3를 Supabase Storage로 마이그레이션하고, 사용자 역할 기반 인증 체계를 강화한 하루였습니다.
UTC/KST 시간대 처리 개선, 드래그앤드롭 순서 변경, 자동 마이그레이션 모드 등 네 개 프로젝트에 걸친 견고함을 위한 작업들을 진행했습니다.
UTC/KST 시간대 변환, Dialog 내 스크롤 충돌, 외부 시스템 연동 등 "당연히 될 줄 알았는데"에서 출발한 다양한 수정 작업을 진행한 하루.
결론부터 말씀드리자면, 우리가 지금껏 쌓아온 것들을 버려야 할 때가 온 것 같습니다. ―물론, 전부는 아닙니다. AI 네이티브란 무엇인가? 최근 업계에서 'AI 네이티브'라는 말이 자주 들립니다. 설계 단계에서부터 AI를 중심으로, 인간과 에이전트의 협업이 자연스럽게 일어나며 운영의 자율성·지능성·적응력을 갖춘 것을 의미한다고 하죠. !매트릭스를 모르는 세
아트페어 H VIP시스템의 CSV 업로드에 상세 로깅과 Rate Limiting을 추가하고, 페이지네이션 컴포넌트를 통합했습니다. 쇼핑몰 H 관리시스템에서는 큐레이션-카테고리 연결 기능을 완성했습니다.
안녕하세요. 스튜디오 바톤의 CTO이자 공동 창업자, 개발팀 리드를 맡고 있는 한송욱입니다. 스튜디오 바톤은 2013년에 설립되어 웹서비스 구축과 비주얼 브랜딩 영역에서 활동 중인 디자인 스튜디오입니다. (좀 더 알아보기) 3년 전 소개 페이지를 처음 만들었을 때와 비교하면, 정말 많은 것이 달라졌습니다. 기술 스택도, 일하는 방식도, 심지어 '개발자'라는
안녕하세요. 스튜디오 바톤의 대표이자 공동 창업자, 개발팀 리드를 맡고 있는 한송욱입니다. 스튜디오 바톤은 2013년에 설립되어 웹서비스 구축과 비주얼 브랜딩 영역에서 활동 중인 디자인 스튜디오입니다. (좀 더 알아보기)
워드프레스 레거시 카테고리 시스템을 DB 기반으로 전환하고, 월 단위 페이지네이션과 활성화 제한 로직을 추가한 리팩토링 작업 기록입니다.
안녕하세요. 스튜디오 바톤의 CTO이자 공동 창업자, 개발팀 리드를 맡고 있는 한송욱입니다. 스튜디오 바톤은 2013년에 설립되어 웹서비스 구축과 비주얼 브랜딩 영역에서 활동 중인 디자인 스튜디오입니다
사소하지만 궁금할 수 있는
React useCallback의 stale closure 문제를 함수형 업데이트 패턴으로 해결하고, 아트페어 H VIP시스템의 CSV 업로드 검증 기능과 캐시 관리 시스템을 대폭 개선한 하루였습니다.
아트페어 H VIP시스템 등록 시스템의 전체 워크플로우가 완성되었고, 하이츠스토어에서는 국문/영문 스킨을 하나의 레포로 통합하며 API 엔드포인트를 전면 마이그레이션했습니다.
캐싱, 어디까지 해봤니? 오늘은 캐싱 전략을 세 가지 레벨에서 동시에 다룬 날이었습니다. 쇼핑몰 M 관리시스템에서는 Cafe24 카테고리를 10분마다 DB에 동기화하는 시스템을 구축했고, 쇼핑몰 H 관리시스템에서는 Redis 캐시 상태를 대시보드에서 한눈에 볼 수 있게 만들었습니다. 특히 쇼핑몰 M 관리시스템 쪽이 흥미로웠는데요. 처음엔 SWR로 프론트 단