kitemir.jp(AIファッション診断+バーチャル試着)。shop.kitemir.jp(アパレルEC「Maison Kite」)。asp.kitemir.jp(VTO-EC Suite B2B ASPサービス)。vto.kitemir.jp(このサイト)。そしてiOSアプリが4つ。すべて、設計は自分、実装はAI。
During my active career, I always wrote design documents before building a new system. Screen flow diagrams, data flow diagrams, state transition diagrams, table definitions. Clarify the specs, then start coding. That was my development style.
What I realized when I started developing with AI was that this "ability to write design docs" directly translates to "ability to write prompts."
For example, when designing user authentication for kitemir.jp, I communicated with AI like this:
【Requirements】
- Implement user auth system in PHP
- JWT (JSON Web Token) based
- Tokens managed via HTTP-only cookies (XSS prevention)
- Refresh token support (24h / 30-day expiry)
- Passwords hashed with bcrypt
【Table Design】
users (
id INT AUTO_INCREMENT PRIMARY KEY,
email VARCHAR(255) UNIQUE NOT NULL,
password_hash VARCHAR(255) NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
)
【API Design】
POST /api/auth/register → Sign up
POST /api/auth/login → Login (issue JWT)
POST /api/auth/logout → Logout (clear cookie)
This is a design document. At the same time, it's a prompt. For AI, structured specifications yield far more accurate code than vague instructions. The design documentation skills I'd honed over 40 years became my communication method with AI.
Prompt engineering is, at the end of the day, requirements definition.
Division of Roles — Human as Architect, AI as Coder
As development progressed, roles naturally settled into place.
> ROLE ASSIGNMENT:
> Human = Architect + Reviewer + QA
> AI = Coder + Documentor + Debugger
> STATUS = In perfect sync
My responsibilities: Define the overall architecture. Design database schemas. Specify API endpoints. Set security requirements. Review AI-generated code.
AI's responsibilities: Generate code based on designs. Implement functions and classes. Add error handling. Write comments and documentation.
This is the same structure as when I was a project manager working with junior engineers. The only differences are that AI is available 24/7 and doesn't complain about the requirements.
Review Is the Human's Job
AI-written code is roughly 80% correct. The remaining 20% has issues. Type mismatches, missing edge case handling, security holes. Security in particular absolutely requires human review.
For instance, when I reviewed an AI-generated image upload handler, it checked file extensions but not MIME types. A malicious file with a spoofed extension would slip through. This is something you only catch with decades of infrastructure engineering security awareness.
AI knows the patterns. But knowing "what to be suspicious of" — that comes from years of experience.
AI isn't perfect. Humans aren't perfect either. But together, we're pretty close.
CLAUDE.md — The Handover Document for AI
As development progressed, I needed an efficient way to convey the project's "state" to AI. Explaining everything from scratch each session was wasteful.
So I created a file called CLAUDE.md. A comprehensive "handover document for AI" containing the entire project: tech stack, directory structure, API list, DB design, coding conventions, prohibited actions. At the start of each new session, AI reads this file to understand the current situation.
Currently, my projects have three CLAUDE.md files: kitemir.jp, shop.kitemir.jp, and asp.kitemir.jp. Each file contains the complete information for that project.
> $ wc -l CLAUDE.md
> 487 CLAUDE.md
>
> // 487 lines of specification. This is our shared language with AI.
This is the same as a communication protocol spec. Between the sender (human) and the receiver (AI), you agree on data formats and meanings. Eliminate ambiguity. Prevent misunderstandings. What I'm doing is the same thing I did 40 years ago. The only change is that the other end of the protocol is AI instead of hardware.
Eight Products Were Born
Using this development style, I launched four web services and four iOS apps.
kitemir.jp (AI fashion diagnosis + virtual try-on). shop.kitemir.jp (apparel EC "Maison Kite"). asp.kitemir.jp (VTO-EC Suite B2B ASP service). vto.kitemir.jp (this site). Plus four iOS apps. All designed by me, implemented by AI.
A man who couldn't write a single line of HTML, CSS, PHP, or JavaScript made it this far.
To be precise, "can't write" is still true today. I can't start from a blank screen and write code from scratch. But I can design. I can review. I can spot where bugs are and why certain code is dangerous.
That was enough.
$ git log --oneline --all | wc -l
347
// 347 commits.
// All designed by human, implemented by AI, reviewed by human.
// This is our development style.
설계서가 프롬프트가 된 날
현역 시절, 새로운 시스템을 개발할 때는 반드시 설계서를 작성했다. 화면 전이도, 데이터 플로 다이어그램, 상태 전이도, 테이블 정의서. 사양을 명확히 한 다음에 코딩에 들어간다. 이것이 나의 개발 스타일이었다.
AI와 개발을 시작하면서 깨달은 것은, 이 "설계서를 쓰는 능력"이 그대로 "프롬프트를 쓰는 능력"으로 변환된다는 것이었다.
예를 들어, kitemir.jp의 사용자 인증을 설계할 때 나는 이렇게 AI에게 전달했다:
【요구사항】
- PHP로 사용자 인증 시스템 구현
- JWT (JSON Web Token) 방식
- 토큰은 HTTP Only 쿠키로 관리 (XSS 대책)
- 리프레시 토큰 대응 (유효기간 24시간 / 30일)
- 비밀번호는 bcrypt 해시
【테이블 설계】
users (
id INT AUTO_INCREMENT PRIMARY KEY,
email VARCHAR(255) UNIQUE NOT NULL,
password_hash VARCHAR(255) NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
)
【API 설계】
POST /api/auth/register → 회원가입
POST /api/auth/login → 로그인 (JWT 발행)
POST /api/auth/logout → 로그아웃 (쿠키 삭제)
이것은 설계서다. 동시에 프롬프트이기도 하다. AI에게 있어 애매한 지시보다 구조화된 사양이 훨씬 정확한 코드를 돌려준다. 40년간 써온 설계서 작성법이 그대로 AI와의 커뮤니케이션 방법이 되었다.
프롬프트 엔지니어링이란, 결국 "요구사항 정의"다.
역할 분담 — 인간은 아키텍트, AI는 코더
개발을 거듭하면서 자연스럽게 역할 분담이 정해져 갔다.
> ROLE ASSIGNMENT:
> Human = Architect + Reviewer + QA
> AI = Coder + Documentor + Debugger
> STATUS = In perfect sync
나의 담당: 전체 아키텍처를 결정한다. 데이터베이스 스키마를 설계한다. API 엔드포인트를 정의한다. 보안 요구사항을 지정한다. 그리고 AI가 출력한 코드를 리뷰한다.
AI의 담당: 설계에 기반하여 코드를 생성한다. 필요한 함수나 클래스를 구현한다. 에러 핸들링을 추가한다. 코멘트와 문서를 작성한다.
이것은 프로젝트 매니저로서 주니어 엔지니어와 함께 일하던 때와 같은 구조다. 다른 점이라면, AI는 24시간 언제든 대응해준다는 것과, 지시에 대해 불만을 말하지 않는다는 것 정도다.
리뷰는 인간의 일
AI가 쓰는 코드는 대략 80%는 정확하다. 나머지 20%에 문제가 있다. 타입 불일치, 엣지 케이스 고려 누락, 보안 허점. 특히 보안에 관해서는 인간의 리뷰가 필수적이다.
예를 들어, AI가 생성한 이미지 업로드 처리를 봤을 때, 확장자 체크는 있었지만 MIME 타입 검증이 없었다. 확장자를 위장한 악의적인 파일이 통과해버린다. 이것은 인프라 엔지니어로서 수십 년간 쌓아온 보안 의식이 없으면 눈치채지 못할 포인트다.
// AI가 처음 쓴 코드 (불충분)
$ext = pathinfo($file['name'], PATHINFO_EXTENSION);
if (!in_array($ext, ['jpg', 'png'])) {
return Response::error('Invalid file type');
}
// 리뷰 후 추가한 검증 (필수)
$finfo = new finfo(FILEINFO_MIME_TYPE);
$mime = $finfo->file($file['tmp_name']);
if (!in_array($mime, ['image/jpeg', 'image/png', 'image/webp'])) {
return Response::error('Invalid file type');
}
AI는 패턴을 알고 있다. 하지만 "무엇을 의심해야 하는지"를 아는 것은 오랜 경험을 가진 인간이다.
AI는 완벽하지 않다. 인간도 완벽하지 않다. 하지만 둘이 합치면, 꽤 좋은 선을 간다.
CLAUDE.md — AI에게 보내는 인수인계서
개발이 진행되면서, 프로젝트의 "상태"를 AI에게 효율적으로 전달할 필요가 생겼다. 매번 제로부터 설명하는 것은 비효율적이다.
그래서 만든 것이 CLAUDE.md라는 파일이다. 프로젝트의 전모 — 기술 스택, 디렉토리 구성, API 목록, DB 설계, 코딩 규약, 금지사항 — 을 모두 정리한 "AI에게 보내는 인수인계서". 새로운 세션을 시작할 때마다 AI는 이 파일을 읽고 현재 상황을 파악한다.
지금 내 프로젝트에는 3개의 CLAUDE.md가 있다. kitemir.jp, shop.kitemir.jp, asp.kitemir.jp. 각 프로젝트의 모든 정보가 이 1개의 파일에 담겨 있다.
> $ wc -l CLAUDE.md
> 487 CLAUDE.md
>
> // 487줄의 설계서. 이것이 AI와의 공통 언어.
이것은 통신 프로토콜 사양서와 같다. 송신측(인간)과 수신측(AI) 사이에서 데이터의 형식과 의미를 합의한다. 애매함을 없애고 오해를 방지한다. 결국 내가 하고 있는 일은 40년 전과 다르지 않다. 프로토콜의 상대가 하드웨어에서 AI로 바뀌었을 뿐이다.
8개의 프로덕트가 탄생했다
이 개발 스타일로 4개의 웹 서비스와 4개의 iOS 앱을 런칭했다.
kitemir.jp (AI 패션 진단 + 가상 피팅). shop.kitemir.jp (의류 EC "Maison Kite"). asp.kitemir.jp (VTO-EC Suite B2B ASP 서비스). vto.kitemir.jp (이 사이트). 그리고 iOS 앱 4개. 전부, 설계는 내가, 구현은 AI가.
HTML도 CSS도 PHP도 JavaScript도, 한 줄도 쓰지 못했던 남자가 여기까지 왔다.
정확히 말하면, "쓰지 못한다"는 것은 지금도 마찬가지다. 빈 화면 앞에서 제로부터 코드를 쓸 수는 없다. 하지만 설계는 할 수 있다. 리뷰는 할 수 있다. 어디에 버그가 있는지, 왜 그 코드가 위험한지, 간파할 수 있다.
그것으로 충분했다.
$ git log --oneline --all | wc -l
347
// 347 커밋.
// 모두 인간이 설계하고, AI가 구현하고, 인간이 리뷰했다.
// 이것이 우리의 개발 스타일이다.