TM.md는 기술 메모(Technical Memo) 다. 성공한 경로뿐 아니라 실패한 시도와 그 이유까지 모두 담아, 나중에 같은 시도를 반복하지 않도록 한다. TODO.md가 "어떻게 하면 되는가"라면, TM.md는 "왜 그렇게 됐는가"다.
- 모든 시도를 기록한다. 성공한 것, 실패한 것, 건너뛴 것 모두 포함.
- 각 작업마다 세 가지를 기술한다:
- 이유(Why): 왜 이 작업을 했는가
- 작업(What): 구체적으로 무엇을 했는가
- 결과(Result): 어떤 결과가 나왔고, 그래서 다음에 무엇을 했는가
- 기술 발견사항을 별도 섹션으로 정리한다. 조사하며 알게 된 사실, 오해, 버전 정보 등.
- 명령어, 파일 경로, 버전 번호는 실제 값으로 기재한다.
- 실패한 시도에는 → 화살표로 원인 분석과 다음 전략을 명시한다.
# [프로젝트명] 기술 메모
**작성일**: YYYY-MM-DD
**환경**: OS / Python 버전 / GPU 등
**최종 결과**: 한 문장 요약
---
## 1. 배경
왜 이 작업을 하게 됐는지, 어떤 문제를 해결하려 했는지.
---
## 2. 입력 파일
실제 확인된 파일 목록과 구조.
(당초 예상과 달랐던 경우 → 예상과 실제를 모두 기재)
---
## 3. 작업 전체 흐름 (성공/실패 모두 포함)
### 3-N. [작업명] — [성공 / 실패 / 건너뜀]
**이유**: 왜 이 작업을 시도했는가
**작업**: 구체적으로 무엇을 했는가 (명령어, 코드 수정 내용 등)
**결과**: 어떤 결과가 나왔는가
- 성공이면: 산출물, 검증 내용
- 실패이면: 오류 메시지, 원인 분석, 다음 전략
---
## 4. 핵심 기술 발견사항
작업 중 알게 된 사실들을 항목별로 정리.
(버전 호환성, 스키마 표준화 시점, 도구 제약 등)
---
## 5. 최종 파일 구조
실제 사용하는 파일과 중간 산출물을 구분하여 정리.
---
## 6. 환경 구성 참고
재현에 필요한 Docker 명령, 실행 스크립트 등.### 3-N. [작업명] — 성공
**이유**: ...
**작업**: ...
```bash
실행 명령어결과: [산출물명] 생성 (크기). [검증 항목] 확인.
### 실패한 작업
```markdown
### 3-N. [작업명] — 실패
**이유(계획)**: 처음에 왜 이 방법을 선택했는가
**작업**: 시도한 내용
**결과**:
- **오류**: 오류 메시지 또는 증상
- **원인**: 왜 실패했는가 (분석)
→ 이 방식 포기. [다음 전략]으로 전환.
### 3-N. [작업명] — 건너뜀
**이유(계획)**: 원래 왜 필요하다고 생각했는가
**결과**: [확인한 사실] 때문에 불필요함. → **건너뜀**.### [주제명]
- **사실**: 확인된 내용
- **영향**: 이것이 작업에 어떤 영향을 줬는가
- **출처/근거**: 버전 문서, 공식 발표 등
버전 호환 표:
| 버전 | 조건 | 지원 여부 |
|------|------|---------|| 상황 | 표현 |
|---|---|
| 예상과 다른 발견 | > ⚠️ 당초 X로 예상했으나 실제로는 Y였다. |
| 실패 원인 | **원인**: ... + → 포기. [대안]으로 전환. |
| 버전 제약 | Isaac Sim 4.x: ❌ / 5.x: 🔶 / 6.x: ✅ |
| 주의사항 | > ⚠️ [마운트 경로가 /workspace이면 ...와 같은 함정] |
| 항목 | TODO.md | TM.md |
|---|---|---|
| 대상 독자 | 재현하려는 사람 | 이해하려는 사람 |
| 내용 범위 | 성공한 경로만 | 성공 + 실패 + 우회 모두 |
| 분량 | 간결 | 상세 |
| 주요 형식 | 체크리스트 + 명령어 | 이유-작업-결과 서술 |
| 발견사항 | 핵심만 주석으로 | 별도 섹션으로 상세 기술 |