마지막 레슨이니까 큰 그림을 보자. 이 퀘스트의 조각들이 진짜 솔로 개발자 stack 의 어디에 놓이는지.
Layered stack (외부 → 내부)
| Layer | 하는 일 | 퀘스트 참조 |
|---|---|---|
| 1. 네트워크 perimeter | listening 포트에 닿을 수 있는 사람을 제한 | Track 3 (bind 주소), Track 4 (Tailscale) |
| 2. Edge 방어 | WAF, fail2ban, rate limit, geo-block | Track 6 (rate limit, blacklist) |
| 3. Per-request auth 게이트 | PIN middleware (또는 passkey, 또는 OAuth) | Track 5 (PIN), Track 10 (passkey/OAuth) |
| 4. Session 관리 | 쿠키, 만료, revocation | Track 5 + Track 7 (killswitch) |
| 5. Authorization 체크 | "이 인증된 사용자가 이거 할 수 있음" | Track 2 (AuthN vs AuthZ) |
| 6. Data-at-rest 암호화 | 1–5 가 전부 실패했을 때의 방어 | Track 10 (이 레슨) |
| 7. 가시성 & 응답 | 대시보드, audit, killswitch | Track 8, Track 7 |
| 8. 시크릿 위생 | LLM 과 repo 에서 자격증명을 떼어놓기 | Track 9 |
너한테 맞는 조합
모든 layer 가 필요한 건 아니야. threat model 에 맞는 layer 가 필요한 거지.
- 혼자 쓰는 내부 앱, Tailscale, 걸린 게 적은 데이터: Layer 1, 3 (PIN), 4, 7. 나머지는 건너뛰어.
- 파트너와 공유하는 솔로: Layer 5 (per-user authZ) 와 layer 8 (전부 placeholder 로) 을 추가.
- Public 인터넷 노출: Layer 2 (WAF, rate limit) 를 추가하고, layer 3 을 passkey 로 올리고, layer 6 (민감한 field 암호화) 을 붙여.
- 유료 사용자: Layer 3 → hosted IdP, layer 7 → 진짜 audit 보존, 공식 incident response runbook.
이제 네가 아는 것
- "내가 뭐라고" 가 위험한 마인드셋인 이유.
- 인증과 authorization 의 정확한 차이.
0.0.0.0이 config 에서 가장 결과 큰 줄인 이유.- Tailscale 의 강점과 분실 폰 윈도우.
- 실제로 방어 가능한 100줄 PIN layer 빌드 법.
- bcrypt 와 lockout 이 4자리 PIN 을 인터넷에 닿고도 살아남게 하는 이유.
- 정작 중요한 순간에 15초 만에 전부 revoke 하는 법.
- 실제로 볼 대시보드로 보안을 보이게 하는 법.
- AI 에디터가 개발 루프에서 시크릿이 새는 가장 큰 통로인 이유.
- PIN 으로 부족해지는 순간, 그리고 그다음에 뭘 더할지.