2026. 08. 09.#권한판정로직
사용자가 프로젝트에서 특정 행동을 할 수 있는지 판단하는 로직을 처음으로 작성했습니다.
구현 도중 프로젝트 멤버 조회 권한 자체가 없어 판단이 항상 실패하는 구조적 문제를 발견해 조회 권한을 추가로 만들었습니다.
리뷰 중에는 멤버가 한 명도 없는 프로젝트에는 관리자도 못 들어가는 별도의 허점을 발견해 문서에 기록해두었고,
코드 구조를 한 차례 더 정리한 뒤 승인, 커밋했습니다.
2026. 08. 09.#최종관리자보호
프로젝트에 책임자(OWNER)가 한 명도 남지 않게 되는 상황을 원천 차단하는 안전장치를 DB 레벨에 만들었습니다.
이 사람을 지우거나 강등하면 OWNER가 0명이 되는지를 매번 확인하는 트리거를 구현했고,
나중에 프로그램에서 이 에러를 구분해 처리할 수 있도록 고유 에러 코드(SIA01) 부여를 추가로 요청했습니다.
승인 후 커밋했습니다.
2026. 08. 09.#프로젝트멤버십
특정 프로젝트에 누가 속해 있고 어떤 역할(OWNER/EDITOR/REVIEWER/VIEWER)인지
저장하는 project_members 테이블을 만들었습니다.
이 시점에 프로젝트 자체 테이블이 아직 없어 참조 연결(FK)을 걸 수 없다는 구조적 문제를 미리 인지했고,
나중에 반드시 연결한다는 원칙을 문서에 못박아두는 방식으로 처리했습니다. 인덱스 성능 관련 확인까지 마친 뒤 승인, 커밋했습니다.
2026. 08. 09.#접근격리
테이블에 보안 잠금(RLS)만 걸려있고 실제 열람 규칙이 없어 아무도 접근하지 못하던 상태를,
본인이 속한 회사 데이터만 보이도록 여는 작업을 진행했습니다.
재사용 가능한 판단 함수를 만들고, 프로필은 본인 것 또는 같은 회사 사람 것까지 보이도록 범위를 제안해 승인받았습니다.
재귀 오류 없이 안전하게 동작하는 구조인지 집중적으로 검토한 뒤 승인, 커밋했습니다.
2026. 08. 09.#워크스페이스멤버십
사용자가 어느 회사에 속하는지 저장하는 workspace_members 테이블과 역할(ADMIN/MEMBER) 값을 만들었습니다.
부트스트랩 관리자 계정을 초기 회사에 연결하는 Seed도 함께 작성했습니다.
리뷰 중 실제 이메일 대신 임시 값이 들어가 있던 부분과 slug 값이 두 곳에 중복 하드코딩된 문제를 발견해 수정을 요청했고, 반영 확인 후 커밋했습니다.
2026. 08. 09.#프로필자동생성
계정은 있는데 프로필 정보가 없으면 문제가 생기는 상황을 막기 위해,
계정 생성 시 자동으로 프로필이 함께 만들어지는 트리거를 구현했습니다.
이메일이 없는 특수 계정(전화번호 가입 등)은 이 방식으로 처리할 수 없다는 제약을 발견해 문서에 명시해두었습니다.
리뷰 중 이메일 형식 예외 처리와 트랜잭션 롤백 동작을 확인한 뒤 승인, 커밋했습니다.
2026. 08. 09.#워크스페이스부트스트랩
회원가입 없이 운영하는 정책을 실제로 구현하기 위해 workspaces 테이블과 초기 회사 1개를 심는 Seed 스크립트를 작성했습니다.
회원가입 화면이 실제로 없는지 감사하고 Supabase 설정에서도 공개 가입을 껐습니다.
리뷰 중 slug 중복 방지, 수정 시각 자동 갱신, RLS 활성화 3가지를 추가로 요구해 반영시켰고, Git 추적 상태까지 확인한 뒤 커밋했습니다.
2026. 08. 08.#다음작업준비
다음 작업인 Workspace(작업공간) 초기 설정을 위한 구현 지시문을 작성했습니다.
Supabase CLI 설치, 로그인, 프로젝트 연결(link)까지 직접 진행했고,
이 과정에서 명령어 오타(꺾쇠괄호 포함)를 정정하는 안내를 받았습니다.
프롬프트 작성을 마친 뒤 이어지는 작업은 새 대화창에서 진행하기로 했습니다.
2026. 08. 08.#로그인검증완료
방화벽 문제를 해결한 뒤 별도 환경에서 직접 로그인, 로그아웃, 재접근 차단, 오류 메시지, 한국어 표시를 화면으로 확인했습니다.
스크린샷 2건으로 정상 동작을 확인했고, 로그아웃 후 재접근 차단은 구두로 확인해 처리했습니다.
이를 근거로 AC-AUTH-001, AC-AUTH-002를 최종 승인 처리했습니다.
2026. 08. 08.#역할분담확정
다른 도구(Antigravity)에서는 같은 문제가 없었다는 점이 이상해 원인 규명을 요청했고,
Codex CLI 공식 문서를 확인한 결과 샌드박스 네트워크 차단이 의도된 기본 설계임을 확인했습니다.
설정으로 네트워크를 열 수는 있지만, 검증의 신뢰성과 보안을 이유로 열지 않기로 판단했습니다.
이후 "Codex는 코드 작성과 정적 검사까지, 네트워크가 필요한 확인은 직접"이라는 역할 분담을 확정해 이후 작업 지시에 반영했습니다.
2026. 08. 08.#로그인장애진단
구현을 마친 뒤 실제로 로그인이 되지 않는 문제가 발생해 원인을 하나씩 좁혀갔습니다.
계정 상태(이메일 인증 여부), 환경변수 값, 네트워크 프록시, 카페 와이파이 순으로 배제해봤지만 계속 실패했습니다.
최종적으로 Windows 방화벽에서 Codex 샌드박스가 만든 차단 규칙 3개를 발견했고,
샌드박스 안팎을 비교하는 재현 실험까지 직접 진행해 원인을 확정했습니다.
2026. 08. 08.#로그인구현
백로그 순서에 따라 EPIC-01의 첫 기능인 로그인·로그아웃·접근 제어 구현을 지시했습니다.
Codex가 Supabase 클라이언트, 로그인 화면, 세션 관리 파일을 작성해 보고했고, 코드 검토 과정에서 두 가지를 확인했습니다.
Next.js 최신 버전에서 middleware.ts가 proxy.ts로 이름이 바뀐 점을 뒤늦게 발견해 정정을 지시했고,
UI 문구가 영어로 되어 있어 한국어로 바꾸도록 추가로 지시했습니다.
2026. 08. 08.#Supabase준비
로그인 기능 구현에 필요한 Supabase 프로젝트 준비 작업을 진행했습니다.
프로젝트 생성부터 회원가입 차단 설정, 테스트 계정 생성, .env.local 작성까지 직접 수행했습니다.
진행 중 API 키 위치를 못 찾거나 계정 상태를 SQL로 확인해야 하는 상황이 있어 여러 차례 안내를 받았습니다.
코드 작업이 아니라 외부 서비스 설정 작업으로 별도 분류해 기록해둡니다.
2026. 08. 08.#환경정리
패키지 버전이 "latest"로 고정되지 않은 문제와, 개발 서버를 실행할 때마다 AGENTS.md 파일이 자동으로 변경되는 문제를 발견했습니다.
버전은 현재 설치본 기준으로 고정하고, 자동 생성 파일은 원인을 조사해 한 번 정식으로 커밋하는 방식으로 정리했습니다.
.gitignore 예외 처리와 Git 운영 정책 문서화도 함께 진행했고, 승인 후 커밋·푸시까지 마쳤습니다.
2026. 08. 08.#구조정리
app/ 폴더가 문서상 권장 위치인 src/app/과 다르고, 축약 경로(@/)도 설정되어 있지 않다는 잔여 이슈를 확인했습니다.
다음 작업을 시작하기 전에 정리하는 게 낫다고 판단해 파일 이동과 tsconfig 설정 추가, README·아키텍처 문서 동기화까지 지시했습니다.
검토 후 승인했고, 커밋과 푸시를 완료했습니다.
2026. 08. 08.#Enum검토
Codex가 Core Enum(상태값) 구현을 완료했다고 보고했지만, 파일이 커밋 전 상태라 우선 검토를 보류했습니다.
access.ts, progress.ts, index.ts, 테스트 파일까지 4개를 직접 받아 값과 타입 구조, 테스트 품질을 문서 기준과 하나씩 대조했습니다.
기준과 정확히 일치함을 확인한 뒤 승인했고, 커밋과 푸시까지 마무리했습니다.
2026. 07. 20.#AI과금검증
Console 크레딧이 $499로 잡혀 있는 걸 보고 처음엔 해킹인가 싶었습니다.
인보이스를 열어보니 "Auto-recharge"로 $495.02가 결제된 것이었는데,
API 키 사용량 리포트를 대조해보니 실제 사용량은 두 키 합쳐서 $4.46뿐이었습니다.
Claude와 함께 크레딧 화면, 인보이스, API 키별 비용, 비용 리포트를 하나씩 캡처해서 숫자를 맞춰본 게 결정적이었습니다.
Fin(AI 상담원)에게 이 불일치를 근거로 조사를 요청하자 "시스템 오류 가능성이 높다"는 인정을 받아냈고,
결국 카드로 $544.52 전액 환불이 처리됐습니다.
AI가 만들어낸 결과물(코드든 결제 청구든)을 검증 없이 그대로 받아들이면 안 된다는 원칙은,
개발 산출물뿐 아니라 과금 시스템에도 똑같이 적용된다는 걸 다시 확인한 하루였습니다.
2026. 07. 20.#AI산출물검증
Antigravity가 계획 diff에 "// JSON 파싱 로직 생략 (동일하게 처리)" 같은 placeholder를 넣은 걸 두 번 반려했습니다.
narrative 요약은 실제 코드가 아니라는 원칙을 오늘도 그대로 지켰고,
실제로 전체 코드로 다시 받아보니 문제없이 구현돼 있었습니다.
확인 절차 자체가 버그를 막은 건 아니지만, 확인 없이 넘어갔으면 몰랐을 부분이라 원칙의 가치를 다시 느꼈습니다.
2026. 07. 20.#기획원칙
테스트 중 "회사 프로젝트를 AI 매칭 근거로 써도 비밀유지에 문제없을까?"라는 질문이 떠올랐습니다.
답이 바로 안 나와서 일단 판단을 미루고 넘어갔는데, 이 판단을 미루는 감각 자체가 맞았다고 봅니다.
애매하면 익명화 규칙을 급하게 만들기보다, 데이터를 더 쌓아서 패턴을 확인한 뒤 아키텍처에 반영하기로 했습니다.
2026. 07. 20.#Job스튜디오
Job 스튜디오를 실제로 테스트하다가 예상 못한 지점을 발견했습니다.
AI가 매칭한 경험 데이터를 전량 그대로 경력기술서/자소서에 반영하다 보니,
재직 경험 중 노출하고 싶지 않은 프로젝트명까지 그대로 들어가더군요.
해결책은 프롬프트를 손대는 게 아니라, 매칭 결과를 먼저 체크박스로 보여주고 선택한 것만 생성에 반영하는 중간 단계를 추가하는 것이었습니다.
AI 큐레이션과 최종 산출물 사이에 '사람이 거르는 단계'를 넣는 패턴, 다른 AI 큐레이션 기능에도 그대로 적용할 수 있을 것 같습니다.
2026. 07. 20.#콘텐츠 스튜디오
브런치/티스토리 콘텐츠 생성 분리
콘텐츠 생성 스튜디오에서 '브런치/블로그'로 뭉쳐있던 포맷을 브런치용과 티스토리용으로 나눴습니다.
무작정 나누지 않고, 먼저 두 플랫폼에서 조회수 잘 나오는 글의 특징을 웹서치로 조사했습니다.
브런치는 다음 포털 노출·에디터 추천이 핵심이라 에세이체+짧은 문단이 유리하고,
티스토리는 구글 SEO가 핵심이라 H2/H3 구조화+키워드 제목이 유리하다는 차이를 확인했고,
이걸 각 플랫폼용 프롬프트 규칙에 그대로 반영했습니다.
작은 기능이지만 "같은 소재도 플랫폼 특성에 맞게 다르게 가공해야 한다"는 원칙을 코드로 증명한 케이스입니다.
2026. 07. 20.#아키텍처재설계
반복되는 문제를 근본적으로 해결하기 위해 감지 방식을 전면 재설계했습니다.
서버가 요청 헤더로 "이게 진짜 사용자 활동인지" 추측하는 대신,
클라이언트에서 마우스·키보드 이벤트를 직접 감지해 하트비트 API를 호출하는 방식으로 전환했습니다.
이제 백그라운드 요청이 무엇이든 관계없이 정확하게 동작합니다.
2026. 07. 20.#트러블슈팅
같은 버그가 한 번 더 재현됐습니다. 이번엔 Next.js의 링크 프리페치 요청이 원인이었습니다.
헤더로 프리페치 여부를 구분하는 방식을 적용했지만,
이후 헤더 이름이 다른 형태의 백그라운드 요청이 또 발견되면서 "헤더 기반 감지" 자체의 구조적 한계를 확인하게 됐습니다.
2026. 07. 20.#트러블슈팅
배포 후 실사용 테스트 중 유휴 로그아웃이 동작하지 않는 버그를 발견했습니다.
원인은 Vercel Speed Insights가 보내는 백그라운드 성능 측정 요청이었습니다.
이 요청이 관리자 경로를 통과하면서 계속 활동 쿠키를 갱신시키고 있었습니다.
요청 경로를 감지해 조기 리턴하는 방식으로 해결했습니다.
2026. 07. 20.#보안강화
Admin 페이지에 유휴 30분 자동 로그아웃 기능을 추가했습니다.
미들웨어에서 마지막 활동 시각을 쿠키로 추적하고, 30분간 활동이 없으면 자동으로 세션을 종료하도록 구현했습니다.
쿠키는 httpOnly, secure, sameSite 옵션을 적용해 보안을 강화했습니다.
2026. 07. 19.#AX케이스스터디
회고 스튜디오에 '일간' 옵션 추가.
이제 매일 하루치 작업을 바로 회고 초안으로 뽑을 수 있음.
실제로 오늘 작업한 내용을 AI가 잘된 것/문제/배운 것으로 정확하게 정리해줌.
2026. 07. 19.#공통컴포넌트
Badge, AdminPageHeader 공유 컴포넌트 도입.
9개, 4개 파일에 흩어져 있던 중복 코드를 한 곳으로 모으고 나니 앞으로 같은 버그가 또 생길 일이 줄어듦.
공통 컴포넌트를 먼저 만들고 시작했으면 더 좋았을 것.
2026. 07. 19.#모바일반응형
관리자 화면 모바일 대응 전면 점검.
배지 텍스트 줄바꿈, 헤더 버튼 어긋남, 테이블 잘림 등 총 5가지 유형의 반응형 버그를 발견하고 전부 수정.
데스크톱에서만 보고 넘어가면 안 보이는 문제였음.
2026. 07. 19.#GA4연동
GA4(Google Analytics 4) 연동 완료.
브런치·커리어리 등 콘텐츠 발행 채널의 실제 유입 효과를 이제 추적할 수 있음.
초기 페이지 로드 시 이벤트가 두 번 잡히는 버그를 발견해서 send_page_view: false로 잡음.
2026. 07. 19.#기능 개발
카드뉴스 스튜디오에 "브런치/블로그" 포맷 추가 완료.
같은 인프라로 장문 콘텐츠까지 생성하도록 확장.
개발 중 카드뉴스 ↔ 블로그 전환 시 데이터가 서로 덮어써지는 버그를 스스로 발견.
DB 스키마에 format 컬럼 추가해 포맷별 완전 독립 저장으로 수정.
카드뉴스 슬라이드 8번째 템플릿 "이미지형" 추가.
실제 이미지 업로드 없이, 사진 삽입 자리를 안내하는 레이아웃.
초안에서 필드 역할이 어색했던 부분도 한 번 더 다듬어서 완성도 올림.
dev → prod 배포 및 클릭 테스트까지 완결.