페이지 목차
이 페이지에서 검색
AI 드리븐
이 페이지에 묻기
AI 드리븐 · 현재 차시와 목차 본문에서만 찾아 답합니다. 답을 지어내지 않고 해당하는 대목을 그대로 보여 주며, 여기에 없으면 없다고 알려 드립니다.
생성형 AI가 아니라 이 페이지 본문을 찾아 그대로 보여 주는 방식입니다. 외부로 나가는 요청이 없습니다.
AI · DEVELOPMENT
AI 드리븐
생성 수정
요구사항과 역할 정의부터 구현·검증·배포·운영까지, AI와 함께 개발하며 사람이 판단할 기준을 정리합니다.
26개 문서 · 1일차 · 9 / 26
8차시 · 아키텍처 결정과 근거 기록
지도 위치 : 1일차 · 설계 마무리 · 구조를 정하고 이유를 파일로 남기는 자리 | 이전: 7차시 디자인 ② 검증 역할의 분리 | 다음: 9차시 서비스 뼈대 세우기 키워드 : 서비스 계층 구조, 구성 방식 선택과 결정 기록(ADR), 클라우드 개요
이 차시를 다 읽으면
- 웹 서비스의 네 계층 을 말하고, 각 계층이 하지 않는 일 을 댈 수 있다.
- 모놀리스 · 모노레포 · 관계형 DB · 트랜잭션을 정의하고, AI와 함께 개발할 때의 선택 기준(널리 쓰이는가, 내가 운영할 수 있는가)을 말할 수 있다.
- 결정 기록(ADR) 을 유와 종차로 정의하고, 네 부분 중 "검토한 대안"이 왜 가장 쓸모 있는지 설명할 수 있다.
- ADR과 아키텍처 문서를 "왜" ↔ "무엇이 어디에" 로 가르고, 이해 부채를 줄이는 습관을 말할 수 있다.
- 클라우드 기본 용어(IaaS · PaaS · SaaS, 리전, 관리형 DB, 오브젝트 스토리지, CDN, 비밀값 관리 서비스)를 한 줄씩 말할 수 있다.
0. 이 차시의 판별 축
| # | 축 | 왼쪽 (0) | 오른쪽 (1) | 이 축으로 갈리는 것 | 큰 축 (README 5장) |
|---|---|---|---|---|---|
| 1 | ⭐ 디스크 ↔ 메모리 | 결정 이유를 파일(ADR)에 남김 | 결정 이유가 대화에만 있음 | 다음 세션의 에이전트가 같은 논의를 반복하는가 | ① |
| 2 | ⭐ 하나 ↔ 여럿 | 모놀리스, 모노레포 (하나로 뭉침) | 화면 · 서버 분리, 마이크로서비스, 여러 저장소 | 단순 · 빠름 ↔ 독립 · 확장, 대신 조율 비용 | ⑤ |
| 3 | 로컬 ↔ 원격 | 내 컴퓨터에서 돌림 | 클라우드(남의 데이터센터)에서 돌림 | 인터넷에 공개할 수 있는가 | ④ |
| 4 | 누가 관리하는가 | 내가 관리 (서버 직접 운영) | 클라우드가 관리 (관리형 · PaaS · SaaS) | 장애 때 내가 손댈 범위 | 이 차시의 축 |
이 차시가 답하는 질문은 "서비스를 어떤 덩어리로 나누고, 그 결정의 이유를 어떻게 남기는가" 입니다. 앞에서 배운 대로 에이전트는 대화가 끝나면 잊습니다(2차시 2절, 디스크 ↔ 메모리). 규칙을 지침 파일에 남겼듯, 결정의 이유 도 파일에 남깁니다. 기록이 없으면 에이전트는 새 세션마다 "더 좋은 방법"을 제안하며 같은 논의를 반복하거나, 결정을 슬그머니 뒤집습니다. 이 차시로 1일차 "결정" 단계가 끝나고, 2일차의 모든 역할이 여기서 만든 문서를 맥락 (5차시 3.1의 두 번째 축)으로 씁니다.
1. ⭐ 서비스 계층 구조
1.1 정의
계층 구조 — [서비스 구성 방식]인데, [ 화면 · 서버 · 데이터 · 외부 서비스를 역할별 층으로 나누고 각 층이 자기 일만 하게 한다 ]는 점에서 한 덩어리 코드가 보여 주기 · 판정 · 저장을 모두 하는 방식과 구별된다.
┌─────────────────────────────┐
│ 화면 (프론트엔드) │ 보여 주고 입력받음. 판정하지 않음 (11차시)
└──────────────┬──────────────┘
│ API (4차시의 약속)
┌──────────────▼──────────────┐
│ 서버 (백엔드) │ 판정 · 검증 · 비즈니스 규칙 (10차시)
└───────┬──────────────┬──────┘
│ │
┌───────▼──────┐ ┌─────▼───────────────┐
│ 데이터 (DB) │ │ 외부 서비스 │
│ (12차시) │ │ 결제(16), 이메일 등 │
└──────────────┘ └─────────────────────┘
🔍 읽는 포인트 : 상자 오른쪽의 한 줄 설명만 보면 됩니다. 특히 화면 상자의 "판정하지 않음" .
1.2 각 계층이 하지 않는 일
| 계층 | 하는 일 | 하지 않는 일 |
|---|---|---|
| 화면 | 보여 주기, 입력받기 | 금액 계산, 권한 판단, 재고 판단 (4차시 3.2) |
| 서버 | 판정, 검증, 규칙 적용 | 화면의 모양 결정 |
| 데이터 | 오래 보관, 규칙(제약조건) 지키기 | 화면 · 비즈니스 흐름 결정 |
| 외부 서비스 | 결제, 이메일 같은 전문 기능 | 우리 서비스의 판정 (결과를 서버가 다시 확인) |
⚠️ 경계가 무너지는 전형: 화면이 금액을 계산하거나, 서버가 HTML 모양을 정하는 것입니다. 경계가 무너지면 역할을 나눈 에이전트들(5차시)이 서로의 일을 침범 합니다.
💡 비유는 마지막에 — 식당입니다. 홀 직원(화면)은 주문을 받고 음식을 내지만 가격을 정하지 않고, 주방(서버)은 조리하고 판단하며, 창고(데이터)는 보관하고, 배달 대행(외부 서비스)은 맡은 일만 합니다.
2. 구성 방식 선택
2.1 먼저 용어
| 용어 | 정의 (유 + 종차) |
|---|---|
| 모놀리스 | [코드 구성 방식]인데, [ 서비스 전체를 한 덩어리 프로그램으로 실행 · 배포한다 ]는 점에서 기능별로 따로 배포하는 마이크로서비스와 구별된다 |
| 모노레포 | [저장소 구성 방식]인데, [ 화면 · 서버 등 여러 프로그램의 코드를 Git 저장소 하나에 둔다 ]는 점에서 프로그램마다 저장소를 따로 두는 방식과 구별된다 |
| 관계형 DB | [데이터베이스]인데, [ 데이터를 표(행과 열)로 저장하고 표 사이의 관계와 규칙을 DB가 지킨다 ]는 점에서 문서 단위로 자유롭게 저장하는 문서형 DB와 구별된다 |
| 트랜잭션 | [DB 작업 단위]인데, [ 여러 변경을 묶어 전부 성공하거나 전부 취소되게 한다 ]는 점에서 변경을 하나씩 따로 반영하는 방식과 구별된다 |
⚠️ 모놀리스( 실행 · 배포 단위)와 모노레포( 저장소 단위)는 다른 축입니다. 화면과 서버를 따로 배포하면서 저장소는 하나로 둘 수 있습니다.
2.2 결정 항목
| 결정 항목 | 선택지 예 | 판단 기준 |
|---|---|---|
| 코드 구성 | 모놀리스 / 화면 · 서버 분리 | 팀 규모, 따로 배포할 필요 |
| 저장소 | 모노레포 / 여러 개 | 에이전트가 전체를 한 번에 볼 수 있는가 |
| 서버 실행 방식 | 서버리스 함수 / 컨테이너 / PaaS (4.1) | 트래픽 패턴, 운영 부담, 비용 |
| 데이터베이스 | 관계형(PostgreSQL 등) / 문서형 | 데이터 관계, 정합성 요구 (예약 · 결제는 관계형이 유리) |
| 언어 · 프레임워크 | TypeScript, Python 등 | AI가 잘 다루는가, 타입이 있는가 |
2.3 AI와 함께 개발할 때 추가 기준
| 기준 | 이유 |
|---|---|
| 널리 쓰이는 기술 | AI가 학습한 예가 많아 잘 다룬다. 생소한 최신 프레임워크는 틀린 코드가 많이 나온다 |
| 타입이 있는 언어 | 값의 종류(숫자 · 글자)를 미리 적어 두어, AI의 실수를 실행 전에 잡아 준다 |
| 모노레포 | 에이전트가 화면과 서버 코드를 함께 보고 API 약속에 맞춰 일관성을 유지하기 좋다 |
| ⭐ 내가 운영할 수 있는가 | 코드를 읽지 않는 상태에서 장애가 나면(23차시) 손댈 범위가 좁다 |
⭐ 마지막 기준에서 코드를 읽지 않는 사람에게 유리한 선택이 나옵니다.
- 서버를 직접 관리하는 방식보다 관리형 서비스 · PaaS (백업 · 보안 패치 · 재시작을 플랫폼이 대신 함, 0절 축 4)
- 대시보드에서 로그와 상태를 눈으로 볼 수 있고, 되돌리기(롤백) 버튼이 있는 플랫폼
- AI가 잘 다루는 널리 쓰이는 기술
2.4 반례 — 지금 고르면 안 되는 구성
| 구성 | 왜 지금은 아닌가 |
|---|---|
| 처음부터 마이크로서비스 | 사람 한 명 + AI 팀에는 조율 · 운영 비용 이 이득보다 크다 (0절 축 2) |
| 쿠버네티스(컨테이너 여러 개를 직접 관리하는 시스템) | 운영할 수 있는 사람이 없으면 장애 때 손을 못 댄다 |
| AI가 추천한 스택을 이유를 묻지 않고 그대로 받기 | 결정이 아니라 위임된 추측 . ADR의 "검토한 대안"이 비어 있게 된다 |
3. ⭐ 결정 기록 — ADR
3.1 정의
결정 기록 (ADR, Architecture Decision Record) — [설계 문서]인데, [ 결정 하나를 맥락 · 결정 · 검토한 대안 · 결과로 짧게 남겨 "왜 그렇게 정했는가"를 보존한다 ]는 점에서 지금 구조가 어떻게 생겼는지만 보여 주는 아키텍처 문서와 구별된다.
결정 하나에 파일 하나, 짧게 씁니다.
# docs/adr/0002-database.md
# ADR-0002: 데이터베이스로 PostgreSQL을 쓴다
- 상태: 확정 (2026-10-20)
## 맥락
예약과 결제는 "남은 자리 감소"와 "예약 생성"이 함께 성공하거나 함께 실패해야 한다.
동시 예약이 발생할 수 있다.
## 결정
관계형 DB인 PostgreSQL을 쓴다. 클라우드의 관리형 DB를 사용한다.
## 검토한 대안
- 문서형 DB: 트랜잭션 · 제약조건 활용이 상대적으로 불편해서 기각
- SQLite: 로컬 개발은 편하지만 배포 환경의 동시 접속에 부적합해서 기각
## 결과
- 트랜잭션과 잠금(한 예약이 처리되는 동안 같은 자리를 다른 요청이 못 건드리게 함)으로 동시 예약 문제를 처리할 수 있다 (13차시)
- 관리형 DB 비용이 발생한다
- 운영 시 내가 할 수 있는 일: 대시보드에서 백업 복원, 접속 수 확인 / 없는 일: 느린 질의 원인 분석
🔍 읽는 포인트 : ## 검토한 대안과 ## 결과의 마지막 줄만 보면 됩니다.
| 부분 | 무엇을 적나 | 왜 필요한가 |
|---|---|---|
| 맥락 | 어떤 문제 · 조건 때문에 결정이 필요했나 | 조건이 바뀌면 결정도 다시 볼 수 있다 |
| 결정 | 무엇을 하기로 했나 | |
| ⭐ 검토한 대안 | 무엇을 왜 기각했나 | 에이전트가 새 세션에서 "문서형 DB가 더 좋습니다"라고 제안할 때 "이미 검토했고 이 이유로 기각했다" 고 답할 수 있다. 나중에 가장 쓸모 있는 부분 |
| 결과 | 얻는 것 · 잃는 것 · 운영 시 내가 할 수 있는 일 / 없는 일 | 대가를 미리 알고 고른다 |
지침 파일에 한 줄 추가합니다.
기술 선택을 바꾸자고 제안하기 전에 docs/adr/를 먼저 읽는다.
🔍 읽는 포인트 : "제안하기 전에 "입니다. 기록이 있어도 에이전트가 읽지 않으면 소용이 없으므로, 읽는 시점을 규칙으로 정합니다.
3.2 ADR과 아키텍처 문서
| ADR | 아키텍처 문서 (docs/architecture.md) | |
|---|---|---|
| 답하는 질문 | 왜 이렇게 정했나 | 무엇이 어디에 있나 |
| 바뀌는 방식 | 고치지 않고 새 ADR로 대체 (상태: 대체됨) | 구조가 바뀔 때마다 갱신 |
| 예 | "PostgreSQL을 쓴다. 문서형은 이 이유로 기각" | "예약 기능 = apps/api/reservations/, 화면 → 서버 → DB 흐름" |
⭐ 코드를 읽지 않으면 AI가 구현하면서 구조를 조금씩 바꾸는 것 을 알아채기 어렵습니다. 코드는 늘어나는데 이해하는 사람이 아무도 없는 상태가 쌓이는 것을 이해 부채 라고 부릅니다. 장애가 났을 때(23차시) 가장 크게 드러납니다. 아키텍처 문서는 이 부채를 줄이는 가장 쉬운 장치입니다.
docs/architecture.md를 만들어줘. 계층별로 어떤 기능이 어느 폴더에 있는지, 화면 → 서버 → DB 흐름을
글자 그림으로. 구조를 바꾸는 작업을 할 때마다 이 문서도 갱신하는 규칙을 CLAUDE.md에 추가해줘.
🔍 읽는 포인트 : 두 번째 문장 "갱신하는 규칙을 CLAUDE.md에"입니다. 문서를 한 번 만드는 것보다 계속 맞춰 두는 규칙 이 중요합니다.
그리고 주기적으로 "docs/architecture.md와 실제 코드 구조가 다른 곳이 있는지 점검해줘" 라고 시킵니다.
3.3 반례 — 이건 결정 기록이 아닙니다
| 대상 | 왜 아닌가 |
|---|---|
| "DB: PostgreSQL" 한 줄 | 결정만 있고 맥락 · 대안 · 결과가 없다 . 왜인지 모른다 |
| AI와 대화하며 정한 내용 | 대화는 메모리 (0절 축 1). 세션이 끝나면 사라진다 |
| 아키텍처 문서의 폴더 목록 | 현재 구조(무엇)일 뿐, 이유(왜)가 없다 |
4. 클라우드 기본 용어
4.1 정의와 용어표
클라우드 — [인프라 이용 방식]인데, [ 남의 데이터센터에 있는 컴퓨터 · 저장소를 인터넷 너머로 빌려 쓰고 쓴 만큼 낸다 ]는 점에서 내 건물에 장비를 두고 직접 운영하는 방식과 구별된다(0절 축 3).
| 개념 | 뜻 | 클래스온에서 |
|---|---|---|
| IaaS / PaaS / SaaS | 빌리는 범위: 서버 자체 / 실행 환경(코드만 올리면 돌려 줌) / 완성된 서비스 | 서버는 PaaS, 결제는 SaaS(결제 대행사) |
| 서버리스 함수 / 컨테이너 | 요청이 올 때만 잠깐 실행되는 코드 조각 / 프로그램과 실행 환경을 통째로 묶은 꾸러미 | (서버 실행 방식의 다른 선택지) |
| 리전 | 데이터센터가 있는 지역 | 사용자가 한국이므로 서울 리전 |
| 관리형 DB | 백업 · 보안 패치를 클라우드가 대신 하는 DB | PostgreSQL 관리형 |
| 오브젝트 스토리지 | 사진 · 파일을 통째로 보관하는 저장소 | 클래스 사진 |
| CDN | 화면 파일을 사용자 가까운 곳에 복사해 두고 빠르게 전달하는 망 | 화면 배포 (22차시) |
| 비밀값 관리 서비스 | API 키 같은 비밀값을 안전하게 보관하고 필요한 프로그램에만 건네는 서비스 | 결제 비밀키 (21차시) |
🔍 읽는 포인트 : IaaS → PaaS → SaaS로 갈수록 클라우드가 관리하는 범위가 넓어지고 내가 손댈 범위가 줄어듭니다 (0절 축 4). 코드를 읽지 않는 사람에게는 대체로 오른쪽이 유리합니다(2.3).
앞으로 다시 만납니다 — 15차시에서 이 구성을 설정 파일(코드) 로 적어 되돌릴 수 있게 만들고, 21 · 22차시에서 서버와 화면을 실제로 인터넷에 공개합니다.
5. 클래스온 — 1일차 산출물 묶음
docs/
├── requirements.md # 3차시 — 무엇이 맞는 상태인가
├── scope.md # 4차시 — Must / Should / Could / Won't
├── api.md # 4차시 — 화면 ↔ 서버의 약속
├── design.md # 6차시 — 디자인 토큰 · 상태 규칙
├── architecture.md # 8차시 — 무엇이 어디에
└── adr/ # 8차시 — 왜
├── 0001-monorepo.md
├── 0002-database.md
└── 0003-hosting.md
🔍 읽는 포인트 : 오른쪽 주석의 차시 번호만 보면 1일차 전체가 한눈에 들어옵니다.
⭐ 이 문서들이 2일차 모든 에이전트의 맥락 이 됩니다. 1일차는 코드를 한 줄도 쓰지 않았지만, 2일차에 AI가 빠르게 코드를 만들 때 무엇이 맞는지 판정할 기준 을 전부 여기서 만들었습니다(README 4장: 결정이 구현보다 먼저 온다).
6. 실습 — 맡기고 검수하기
이 차시는 내가 결정권을 쥐는 곳 입니다(README 9.2: 아키텍처 결정 승인). AI는 선택지와 근거를 정리하고, 결정은 내가 합니다.
지시
architect 역할로 클래스온의 서버 실행 방식(hosting)에 대한 ADR 초안을 써줘.
- 대안 최소 3개(예: PaaS, 서버리스 함수, 직접 관리하는 가상 서버)를 [대안 | 장점 | 단점 | 월 예상 비용 범위 | 운영 시 내가 할 수 있는 일 / 없는 일] 표로 비교
- 비용 · 기능은 각 서비스의 공식 문서 주소를 근거로 쓰고, 확인 못 한 칸은 "확인 필요"로 남길 것. 추측으로 채우지 마
- 결정 칸은 비워 두고 "사람 결정 필요"라고 쓸 것
- docs/adr/0003-hosting.md로 저장하고 원문을 보고에 붙여줘
받을 증거
- ADR 초안 원문
- 비교표의 각 칸에 붙은 공식 문서 주소
내가 직접 확인할 것
| 볼 것 | 이걸로 아는 것 / 왜 내가 보는가 |
|---|---|
| 공식 문서 주소 몇 개를 직접 열어 가격 · 기능이 표와 맞는지 | AI가 기억하는 가격 · 이름은 오래됐거나 지어낸 것일 수 있음 |
| "운영 시 내가 할 수 있는 일" 열에 대시보드 · 로그 보기 · 롤백 버튼 이 있는지 | 장애 때 코드 없이 손댈 수 있는 플랫폼인지 (2.3) |
| 결정 칸이 비어 있는지 | AI가 결정까지 해 버리지 않았는지. 결정은 내가 내리고 직접 적음 |
| 내 결정을 적은 뒤, 새 세션에서 "서버 실행 방식을 바꾸는 게 좋을까?"라고 물어보기 | 에이전트가 ADR을 읽고 "이미 검토해 기각했다"고 답하는지. 기억이 디스크에 있는지 확인 (0절 축 1) |
부록 A. 스스로 확인하기
| # | 질문 | 답이 있는 곳 |
|---|---|---|
| 1 | 네 계층과 각 계층이 하지 않는 일은? | 1.2 |
| 2 | 모놀리스와 모노레포는 같은 축인가? | 2.1 |
| 3 | 트랜잭션을 유와 종차로 정의하면? 예약에 왜 필요한가? | 2.1, 3.1 |
| 4 | AI와 함께 개발할 때 추가로 볼 기술 선택 기준은? | 2.3 |
| 5 | 처음부터 마이크로서비스를 고르면 안 되는 이유는? | 2.4 |
| 6 | ADR의 네 부분은? "검토한 대안"이 가장 쓸모 있는 이유는? | 3.1 |
| 7 | ADR과 아키텍처 문서의 차이는? | 3.2 |
| 8 | 이해 부채란 무엇이고, 무엇으로 줄이나? | 3.2 |
| 9 | IaaS · PaaS · SaaS를 "누가 관리하는가" 축으로 놓으면? | 4.1 |
| 10 | 1일차 산출물이 2일차에 하는 역할은? | 5 |
부록 B. 자주 하는 실수
| 실수 | 바로잡기 |
|---|---|
| AI가 추천한 스택을 이유를 묻지 않고 그대로 받는다 | ❌ 대안과 기각 이유를 요구합니다 (2.4) |
| 결정은 했지만 기록하지 않는다 | ❌ 다음 세션에서 에이전트가 다른 걸 제안합니다 (3.3) |
| 처음부터 마이크로서비스 · 쿠버네티스를 고른다 | ⚠️ 1인 + AI 팀에는 운영 부담이 너무 큽니다 (2.4) |
| ADR에 "검토한 대안"을 빼먹는다 | ❌ 나중에 가장 쓸모 있는 부분입니다 (3.1) |
| 기술 선택에 "내가 운영할 수 있는가"를 빼먹는다 | ⭕ 관리형 · 대시보드 · 롤백 버튼이 있는 쪽 (2.3) |
| 아키텍처 문서를 한 번 쓰고 갱신하지 않는다 | ⭕ 갱신 규칙을 지침 파일에, 주기적으로 대조 (3.2) |
| 클라우드 가격 · 기능을 AI 답변으로 확정한다 | ⚠️ 공식 문서 주소를 받아 직접 확인 (6) |
부록 C. NotebookLM 복습 프롬프트
이 8차시 노트만 근거로 6문제를 내줘. 코드를 모르는 사람 기준으로.
"네 계층과 하지 않는 일", "모놀리스와 모노레포", "ADR의 네 부분과 검토한 대안", "ADR과 아키텍처 문서", "IaaS · PaaS · SaaS"는 반드시 포함해줘.
답은 내가 답한 다음에 채점하고, 틀린 이유를 노트의 절 번호를 근거로 설명해줘.
LangTailor