<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/">
  <channel>
    <title>Documentation · 인재덕</title>
    <link>https://jared.lynskey.co.nz/ko/tags/documentation/</link>
    <description>소프트웨어 엔지니어링과 개발 조직 리더십에 대한 이야기. 성과 리뷰, 채용과 팀 확장, CI/CD, 데브옵스 모니터링, 에이전틱 AI. 서울에서 씁니다.</description>
    <generator>Hugo</generator>
    <language>ko</language>
    <copyright>© 2026 인재덕</copyright>
    <lastBuildDate>Wed, 28 Oct 2026 00:00:00 +1300</lastBuildDate>
    <atom:link href="https://jared.lynskey.co.nz/ko/tags/documentation/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>의사결정 문서란? 템플릿과 함께 보는 실전 가이드</title>
      <link>https://jared.lynskey.co.nz/ko/posts/2024/2024-12-03-decision-docs/</link>
      <guid isPermaLink="true">https://jared.lynskey.co.nz/ko/posts/2024/2024-12-03-decision-docs/</guid>
      <pubDate>Tue, 03 Dec 2024 00:00:00 +0000</pubDate>
      <dc:creator>Jared Lynskey</dc:creator>
      <category>decision-making</category>
      <category>documentation</category>
      <category>ADR</category>
      <category>architecture</category>
      <category>team alignment</category>
      <description>의사결정 문서란 결정을 내리는 그 순간의 배경, 검토한 선택지, 그중 하나를 고른 이유를 기록한 문서입니다. 6개월 뒤 같은 논쟁을 반복하지 않게 해 주죠. 실제로 쓰이는 ADR과 RFC 작성법을, ADR 예시와 가져다 쓸 수 있는 템플릿과 함께 정리했습니다.</description>
      <content:encoded><![CDATA[<p>모든 팀은 결정을 내립니다. 그리고 대부분의 팀은 왜 그렇게 결정했는지를 잊어버립니다. 6개월 뒤 누군가 &ldquo;우리 왜 MongoDB 말고 PostgreSQL을 골랐죠?&ldquo;라고 묻고, 당시의 제약을 기억하는 사람은 아무도 없고, 같은 논쟁이 처음부터 다시 벌어집니다. 보통은 지난번보다 적은 인원으로요.</p>
<p>의사결정 문서가 이걸 해결합니다. ADR이든 RFC든 결정 로그든 이름은 중요하지 않습니다. 중요한 건 선택하는 그 순간에 배경과 선택지와 근거를 적어두는 일입니다. 올해 개발팀을 맡게 되면서 그 가치를 어느 때보다 실감하고 있습니다. 조직의 기억이 되느냐, 조직의 구전 설화가 되느냐의 갈림길이거든요.</p>
<hr>

<h3 class="relative group">공들일 가치가 있는 이유
    <div id="공들일-가치가-있는-이유" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ea%b3%b5%eb%93%a4%ec%9d%bc-%ea%b0%80%ec%b9%98%ea%b0%80-%ec%9e%88%eb%8a%94-%ec%9d%b4%ec%9c%a0" aria-label="앵커">#</a>
    </span>
    
</h3>
<p>가장 뻔한 보상은 같은 논쟁을 두 번 하지 않아도 된다는 겁니다. &ldquo;API 버저닝 전략, 이미 정하지 않았나요?&rdquo; 무엇을 왜 결정했는지 기록이 명확히 남아 있으면 결론 난 문제는 결론 난 채로 있고, 팀은 왔던 길을 되짚는 대신 실행에 에너지를 씁니다.</p>
<p>더 조용한 보상은 시간이 지나면서 드러납니다. 프로젝트는 몇 달, 몇 년씩 이어지고 사람은 들어오고 나가는데, 끝까지 남는 건 코드입니다. 문제는 코드가 &ldquo;무엇을&rdquo; 결정했는지는 알려줘도 &ldquo;왜&quot;는 절대 말해주지 않는다는 점이죠. 의사결정 문서는 그 추론을 보존합니다. 당시 존재했던 제약, 기각된 대안, 최종 판단을 내린 사람까지요. 새 팀원은 구전 설화 대신 맥락을 얻습니다. 팀을 넘나드는 결정은 결론만이 아니라 저울에 올랐던 요소까지 모두에게 보이니 진짜 동의를 얻기 쉬워집니다. 그리고 의사결정자와 기여자의 이름이 박히면, 후속 실행에도 확실한 주인이 생깁니다.</p>
<hr>

<h3 class="relative group">언제 쓰는가
    <div id="언제-쓰는가" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%96%b8%ec%a0%9c-%ec%93%b0%eb%8a%94%ea%b0%80" aria-label="앵커">#</a>
    </span>
    
</h3>
<p>모든 결정에 문서가 필요하진 않습니다. 저는 결정이 다음에 해당할 때 문서를 씁니다.</p>
<ul>
<li><strong>되돌리기 비싼 결정</strong> — 기술 스택 선택(프레임워크, 데이터베이스, 클라우드 제공업체), 아키텍처 패턴(마이크로서비스 vs 모놀리스, 이벤트 기반 vs 요청-응답), 서드파티 벤더 선정, 보안·규정 준수 접근 방식</li>
<li><strong>오래 남는 결정</strong> — 외부 시스템이 의존하는 API 계약, 여러 서비스에 걸치는 데이터 모델, 확립된 패턴에 대한 파괴적 변경</li>
<li><strong>팀을 가로지르는 결정</strong> — 여러 팀이나 비기술 이해관계자의 동의가 필요한 것, 리소스 배분과 우선순위 판단</li>
<li><strong><a href="https://jared.lynskey.co.nz/ko/posts/2023/2023-10-18-spike/" >스파이크</a>의 결론</strong> — 타임박스 조사가 끝났다면, 발견과 결정이 증발하기 전에 문서로 남기기</li>
</ul>
<p>반대로 쉽게 되돌릴 수 있는 결정, 팀 내부 구현 세부사항, 내 범위 밖에는 거의 영향이 없는 선택이라면 형식을 갖춘 문서는 건너뛰세요. 아무도 필요로 하지 않는 문서는 그냥 숙제일 뿐입니다.</p>
<hr>

<h3 class="relative group">라이프사이클
    <div id="라이프사이클" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%eb%9d%bc%ec%9d%b4%ed%94%84%ec%82%ac%ec%9d%b4%ed%81%b4" aria-label="앵커">#</a>
    </span>
    
</h3>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">┌─────────────┐     ┌─────────────┐     ┌─────────────┐     ┌─────────────┐
</span></span><span class="line"><span class="cl">│   초안      │ ──► │   리뷰      │ ──► │   승인      │ ──► │   구현      │
</span></span><span class="line"><span class="cl">│   제안      │     │  피드백     │     │   수락      │     │   완료      │
</span></span><span class="line"><span class="cl">└─────────────┘     └─────────────┘     └─────────────┘     └─────────────┘
</span></span><span class="line"><span class="cl">                           │
</span></span><span class="line"><span class="cl">                           ▼
</span></span><span class="line"><span class="cl">                    ┌─────────────┐
</span></span><span class="line"><span class="cl">                    │   거부/     │
</span></span><span class="line"><span class="cl">                    │   대체      │
</span></span><span class="line"><span class="cl">                    └─────────────┘</span></span></code></pre></div></div>
<p>작성자가 문제와 후보 솔루션을 초안으로 정리하고, 이해관계자들이 리뷰합니다. 이 과정의 본전을 뽑는 곳이 리뷰 단계입니다. 가정을 따져 묻고 맹점이 드러나는 지점이니까요. 그다음 의사결정자(보통 기술 리드, 아키텍트, 프로덕트 오너)가 최종 판단을 내리고, 팀이 구현하며, 구현 중 현실 때문에 바뀐 부분이 있으면 문서도 갱신합니다. 리뷰에서 죽는 문서도 있고, 상황이 변해 나중에 대체되는 문서도 있습니다. 둘 다 분명하게 표시하세요. &ldquo;승인됨&rdquo; 상태로 낡아버린 문서는 다음에 그걸 발견할 사람에게 함정이 됩니다.</p>
<hr>

<h3 class="relative group">읽을 만한 문서를 만드는 것들
    <div id="읽을-만한-문서를-만드는-것들" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%9d%bd%ec%9d%84-%eb%a7%8c%ed%95%9c-%eb%ac%b8%ec%84%9c%eb%a5%bc-%eb%a7%8c%eb%93%9c%eb%8a%94-%ea%b2%83%eb%93%a4" aria-label="앵커">#</a>
    </span>
    
</h3>
<p>애착이 가는 솔루션이 아니라 문제에서 시작하세요. 무엇을 해결하려는지, 왜 지금 중요한지, 아무것도 안 하면 어떻게 되는지. 문제에 대한 합의가 없는 상태에서 솔루션을 논쟁하는 건 연극일 뿐입니다.</p>
<p>그다음 진짜 선택지를 제시합니다. 강한 선호가 있어도 최소 2~3개의 대안을요. 각 옵션에는 간단한 설명, 장단점, 대략적인 공수 추정(티셔츠 사이즈면 충분합니다: S/M/L/XL), 그리고 리스크와 완화 방안을 답니다. 대안을 기록해 두는 것이야말로 미래의 독자가 &ldquo;왜 승자가 이겼는지&rdquo; 이해하는 방법입니다.</p>
<p>트레이드오프는 소리 내어 말하세요. &ldquo;아키텍처의 순수함보다 시장 출시 속도를 택합니다.&rdquo; &ldquo;더 나은 확장성을 위해 운영 복잡도 증가를 감수합니다.&rdquo; &ldquo;순수 성능보다 개발자 경험을 우선합니다.&rdquo; 이런 문장 하나가 분석 몇 페이지보다 미래의 독자에게 더 도움이 됩니다.</p>
<p>논의는 구체적인 것에 붙들어 매세요. 솔루션이 어떻게 구현될지 보여주는 코드 스니펫, 시스템 상호작용 다이어그램, <a href="https://jared.lynskey.co.nz/ko/posts/2023/2023-10-18-spike/" >스파이크</a>에서 만든 개념 증명 링크. 추상적인 논의에서는 추상적인 결정밖에 안 나옵니다.</p>
<p>마지막으로 기한입니다. 언제까지 결정해야 하는지, 누가 언제까지 의견을 내야 하는지, 결정이 미뤄지면 무엇이 막히는지. 기한 없는 결정은 영원히 떠다닙니다.</p>
<hr>

<h3 class="relative group">예시: 아키텍처 결정 기록(ADR)
    <div id="예시-아키텍처-결정-기록adr" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%98%88%ec%8b%9c-%ec%95%84%ed%82%a4%ed%85%8d%ec%b2%98-%ea%b2%b0%ec%a0%95-%ea%b8%b0%eb%a1%9dadr" aria-label="앵커">#</a>
    </span>
    
</h3>
<p>의사결정 문서의 실전 예시입니다:</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="cl"><span class="gh"># ADR-001: API Authentication Strategy
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gs">**Status:**</span> Accepted
</span></span><span class="line"><span class="cl"><span class="gs">**Date:**</span> 2024-11-15
</span></span><span class="line"><span class="cl"><span class="gs">**Decision Maker:**</span> Sarah Chen (Platform Architect)
</span></span><span class="line"><span class="cl"><span class="gs">**Contributors:**</span> Backend Team, Security Team, Mobile Team
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## Context
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Our public API currently uses API keys for authentication. As we expand to
</span></span><span class="line"><span class="cl">support third-party integrations and mobile apps, we need a more robust
</span></span><span class="line"><span class="cl">authentication mechanism that supports:
</span></span><span class="line"><span class="cl"><span class="k">-</span> Token expiration and refresh
</span></span><span class="line"><span class="cl"><span class="k">-</span> Scoped permissions
</span></span><span class="line"><span class="cl"><span class="k">-</span> User-level authentication (not just service-level)
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## Decision
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">We will implement OAuth 2.0 with JWT tokens for API authentication.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## Options Considered
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">### Option 1: OAuth 2.0 with JWT (Recommended)
</span></span></span><span class="line"><span class="cl">**Description:** Industry-standard protocol with self-contained tokens
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">| Pros | Cons |
</span></span><span class="line"><span class="cl">|------|------|
</span></span><span class="line"><span class="cl">| Industry standard, well-documented | More complex initial implementation |
</span></span><span class="line"><span class="cl">| Self-contained tokens reduce database lookups | Tokens cannot be revoked instantly |
</span></span><span class="line"><span class="cl">| Broad library support | Requires refresh token management |
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gs">**Effort:**</span> Medium (2-3 sprints)
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">### Option 2: Session-based Authentication
</span></span></span><span class="line"><span class="cl">**Description:** Traditional server-side sessions with cookies
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">| Pros | Cons |
</span></span><span class="line"><span class="cl">|------|------|
</span></span><span class="line"><span class="cl">| Simple to implement | Not suitable for mobile apps |
</span></span><span class="line"><span class="cl">| Easy to revoke sessions | Requires sticky sessions or shared session store |
</span></span><span class="line"><span class="cl">| Familiar to most developers | Doesn&#39;t scale as well |
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gs">**Effort:**</span> Small (1 sprint)
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">### Option 3: Custom Token System
</span></span></span><span class="line"><span class="cl">**Description:** Build our own token-based authentication
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">| Pros | Cons |
</span></span><span class="line"><span class="cl">|------|------|
</span></span><span class="line"><span class="cl">| Fully customizable | Reinventing the wheel |
</span></span><span class="line"><span class="cl">| No external dependencies | Security risks from custom implementation |
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gs">**Effort:**</span> Large (4+ sprints)
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## Consequences
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">-</span> Mobile team can implement standard OAuth flows
</span></span><span class="line"><span class="cl"><span class="k">-</span> We&#39;ll need to set up a token refresh mechanism
</span></span><span class="line"><span class="cl"><span class="k">-</span> API documentation will need updates for OAuth flows
</span></span><span class="line"><span class="cl"><span class="k">-</span> Existing API key users will need a migration path (6-month deprecation)
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## References
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">-</span> [<span class="nt">OAuth 2.0 RFC 6749</span>](<span class="na">https://tools.ietf.org/html/rfc6749</span>)
</span></span><span class="line"><span class="cl"><span class="k">-</span> Internal spike document: [<span class="nt">Authentication Options Spike</span>](<span class="na">/spikes/auth-spike-2024</span>)
</span></span><span class="line"><span class="cl">- Security team review: SEC-2024-042</span></span></code></pre></div></div>
<hr>

<h3 class="relative group">훔쳐 써도 되는 템플릿
    <div id="훔쳐-써도-되는-템플릿" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ed%9b%94%ec%b3%90-%ec%8d%a8%eb%8f%84-%eb%90%98%eb%8a%94-%ed%85%9c%ed%94%8c%eb%a6%bf" aria-label="앵커">#</a>
    </span>
    
</h3>
<p>이걸 출발점으로 삼고 팀에 맞게 덜어내세요.</p>
<table>
	<thead>
			<tr>
					<th><strong>속성</strong></th>
					<th><strong>세부사항</strong></th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td><strong>결정/이슈 이름</strong></td>
					<td>[명확하고 설명적인 제목]</td>
			</tr>
			<tr>
					<td><strong>상태</strong></td>
					<td>[초안 / 검토 중 / 승인됨 / 거부됨 / 대체됨]</td>
			</tr>
			<tr>
					<td><strong>영향도</strong></td>
					<td>[높음 / 중간 / 낮음]</td>
			</tr>
			<tr>
					<td><strong>오너</strong></td>
					<td>[결정을 추진하는 사람 이름]</td>
			</tr>
			<tr>
					<td><strong>의사결정자</strong></td>
					<td>[최종 권한을 가진 사람]</td>
			</tr>
			<tr>
					<td><strong>기한</strong></td>
					<td>[결정을 내려야 하는 기한]</td>
			</tr>
	</tbody>
</table>

<h4 class="relative group">문제 설명
    <div id="문제-설명" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%eb%ac%b8%ec%a0%9c-%ec%84%a4%eb%aa%85" aria-label="앵커">#</a>
    </span>
    
</h4>
<p><em>어떤 문제를 해결하려고 하는가? 왜 중요한가? 아무것도 하지 않을 때의 비용은?</em></p>

<h4 class="relative group">배경
    <div id="배경" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%eb%b0%b0%ea%b2%bd" aria-label="앵커">#</a>
    </span>
    
</h4>
<p><em>맥락, 이력, 관련 세부사항을 제공합니다. 관련 문서, 이전 결정, 스파이크 결과에 대한 링크를 포함합니다.</em></p>

<h4 class="relative group">제약사항
    <div id="제약사항" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%a0%9c%ec%95%bd%ec%82%ac%ed%95%ad" aria-label="앵커">#</a>
    </span>
    
</h4>
<p><em>모든 솔루션이 준수해야 하는 제한이나 요구사항은 무엇인가?</em></p>
<ul>
<li>예산 제약</li>
<li>타임라인 요구사항</li>
<li>기술적 제약 (기존 시스템, 스킬셋)</li>
<li>규정 준수 또는 보안 요구사항</li>
</ul>

<h4 class="relative group">검토한 솔루션
    <div id="검토한-솔루션" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ea%b2%80%ed%86%a0%ed%95%9c-%ec%86%94%eb%a3%a8%ec%85%98" aria-label="앵커">#</a>
    </span>
    
</h4>
<table>
	<thead>
			<tr>
					<th><strong>옵션</strong></th>
					<th><strong>설명</strong></th>
					<th><strong>장점</strong></th>
					<th><strong>단점</strong></th>
					<th><strong>공수</strong></th>
					<th><strong>리스크</strong></th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td><strong>옵션 1</strong></td>
					<td><em>설명</em></td>
					<td><em>장점A, 장점B</em></td>
					<td><em>단점A, 단점B</em></td>
					<td><em>S/M/L/XL</em></td>
					<td><em>낮음/중간/높음</em></td>
			</tr>
			<tr>
					<td><strong>옵션 2</strong></td>
					<td><em>설명</em></td>
					<td><em>장점A, 장점B</em></td>
					<td><em>단점A, 단점B</em></td>
					<td><em>S/M/L/XL</em></td>
					<td><em>낮음/중간/높음</em></td>
			</tr>
			<tr>
					<td><strong>옵션 3</strong></td>
					<td><em>설명</em></td>
					<td><em>장점A, 장점B</em></td>
					<td><em>단점A, 단점B</em></td>
					<td><em>S/M/L/XL</em></td>
					<td><em>낮음/중간/높음</em></td>
			</tr>
	</tbody>
</table>

<h4 class="relative group">권장사항
    <div id="권장사항" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ea%b6%8c%ec%9e%a5%ec%82%ac%ed%95%ad" aria-label="앵커">#</a>
    </span>
    
</h4>
<p><em>권장하는 옵션을 명시하고 제약과 트레이드오프를 고려할 때 왜 최선의 선택인지 요약합니다.</em></p>

<h4 class="relative group">결정
    <div id="결정" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ea%b2%b0%ec%a0%95" aria-label="앵커">#</a>
    </span>
    
</h4>
<p><em>결정이 내려지면 최종 결정을 문서화합니다. 권장사항과 다르면 이유를 설명합니다.</em></p>

<h4 class="relative group">결과
    <div id="결과" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ea%b2%b0%ea%b3%bc" aria-label="앵커">#</a>
    </span>
    
</h4>
<p><em>이 결정의 영향은 무엇인가? 필요한 후속 작업은 무엇인가?</em></p>

<h4 class="relative group">액션 아이템
    <div id="액션-아이템" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%95%a1%ec%85%98-%ec%95%84%ec%9d%b4%ed%85%9c" aria-label="앵커">#</a>
    </span>
    
</h4>
<table>
	<thead>
			<tr>
					<th><strong>액션</strong></th>
					<th><strong>담당자</strong></th>
					<th><strong>기한</strong></th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td><em>액션 1</em></td>
					<td><em>이름</em></td>
					<td><em>날짜</em></td>
			</tr>
			<tr>
					<td><em>액션 2</em></td>
					<td><em>이름</em></td>
					<td><em>날짜</em></td>
			</tr>
	</tbody>
</table>

<h4 class="relative group">참조
    <div id="참조" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%b0%b8%ec%a1%b0" aria-label="앵커">#</a>
    </span>
    
</h4>
<p><em>관련 문서, 외부 리소스, 스파이크 결과, 이전 결정에 대한 링크.</em></p>
<hr>

<h3 class="relative group">습관으로 정착시키기
    <div id="습관으로-정착시키기" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%8a%b5%ea%b4%80%ec%9c%bc%eb%a1%9c-%ec%a0%95%ec%b0%a9%ec%8b%9c%ed%82%a4%ea%b8%b0" aria-label="앵커">#</a>
    </span>
    
</h3>
<p>문서는 일관된 곳에 두세요. 저장소의 전용 폴더든 위키 공간이든 상관없지만, 찾을 수 없는 결정은 존재하지 않는 것과 같습니다. 그리고 가볍게 유지하세요. 쓰는 데 며칠 걸리는 문서는 애초에 쓰이지 않습니다. 코드 주석, 커밋 메시지, 풀 리퀘스트에서 문서를 참조해서 &ldquo;왜&quot;가 &ldquo;무엇&rdquo; 곁에 붙어 있게 하세요. 결정이 대체되면 옛 문서를 지우지 말고 대체됨으로 표시한 뒤 새 결정으로 링크를 겁니다. 역사가 곧 핵심이니까요. 그리고 <a href="https://jared.lynskey.co.nz/ko/posts/2023/2023-09-01-retrospecs/" >회고</a>에서 가끔 과거 결정을 돌아보세요. 어떤 결정이 버텨냈고, 어떤 건 지금이라면 다르게 할지.</p>
<p>실패 패턴도 그만큼 예측 가능합니다. 분석 마비에는 기한을 정하고 가진 정보로 결정하는 것이 답입니다. 대부분의 결정은 나중에 다시 볼 수 있으니까요. 의미 있는 비평이 한 번도 안 나오는 도장 찍기 리뷰는 가치 없이 절차만 더합니다. 쓰였는데 실행되지 않는 고아 문서는 문서가 없는 것보다 나쁩니다. 과한 디테일도 조심하세요. 문서가 다룰 것은 &ldquo;왜&quot;와 &ldquo;무엇&quot;이지 &ldquo;어떻게&quot;가 아닙니다. 구현 세부사항은 기술 명세서의 몫입니다. 그리고 이해관계자가 반대하면 그 반대도 기록하세요. 결정은 그대로 갈 수 있지만, 그 반론이야말로 1년 뒤 누군가에게 꼭 필요한 맥락입니다.</p>
<p>다음번 중요한 결정부터 시작해 보세요. 거칠어도 일단 쓰고, 프로세스는 굴리면서 다듬으면 됩니다. 누군가 ADR을 읽는 것만으로 &ldquo;우리 왜 X를 골랐죠?&rdquo; 회의가 사라질 때마다, 그만큼의 시간이 팀에게 돌아옵니다.</p>
<hr>

<h3 class="relative group">참고 자료
    <div id="참고-자료" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%b0%b8%ea%b3%a0-%ec%9e%90%eb%a3%8c" aria-label="앵커">#</a>
    </span>
    
</h3>
<p><strong>이 사이트의 관련 글:</strong></p>
<ul>
<li><a href="https://jared.lynskey.co.nz/ko/posts/2023/2023-10-18-spike/" >애자일 소프트웨어 개발에서 스파이크 이해하기</a> - 큰 결정 전에 스파이크로 정보 모으기</li>
<li><a href="https://jared.lynskey.co.nz/ko/posts/2023/2023-09-01-retrospecs/" >회고: 피드백 루프의 힘</a> - 지속적 개선의 일부로 과거 결정 돌아보기</li>
<li><a href="https://jared.lynskey.co.nz/ko/posts/2023/2023-10-08-planning-an-api/" >API 계획</a> - 의사결정 문서의 사고방식을 API 설계에 적용하기</li>
<li><a href="https://jared.lynskey.co.nz/ko/posts/2024/2024-01-04-githubforprojectmanagement/" >프로젝트 관리를 위한 GitHub</a> - 의사결정 문서를 코드 옆에 두고 관리하기</li>
</ul>
<p><strong>외부 리소스:</strong></p>
<ul>
<li><a href="https://cognitect.com/blog/2011/11/15/documenting-architecture-decisions"  target="_blank" rel="noreferrer">Documenting Architecture Decisions - Michael Nygard</a> - ADR을 대중화한 원본 글</li>
<li><a href="https://adr.github.io/"  target="_blank" rel="noreferrer">ADR GitHub Organization</a> - ADR을 위한 도구, 템플릿, 예시</li>
<li><a href="https://www.industrialempathy.com/posts/design-docs-at-google/"  target="_blank" rel="noreferrer">Design Docs at Google</a> - Google의 설계 문서 접근법</li>
<li><a href="https://rust-lang.github.io/rfcs/"  target="_blank" rel="noreferrer">RFC Process at Rust</a> - Rust 언어의 잘 정비된 RFC 프로세스</li>
<li><a href="https://engineering.atspotify.com/2020/04/when-should-i-write-an-architecture-decision-record/"  target="_blank" rel="noreferrer">Spotify&rsquo;s Decision Record Template</a> - Spotify가 ADR을 쓰는 시점에 대한 글</li>
</ul>
]]></content:encoded>
      <media:content url="https://jared.lynskey.co.nz/en/posts/2024/2024-12-03-decision-docs/featured.jpg" medium="image" type="image/jpeg" />
    </item>
  </channel>
</rss>
