| name | reverse-doc |
| description | Document current code behavior as an As-Is baseline before refactor, spec drift checks, or cleanup. |
Reverse Documentation: ์ฝ๋ โ As-Is ๋ฌธ์ ์์ฑ
Overview
์ฝ๋๋ฅผ ์ฝ๊ณ , ๊ทธ ์ฝ๋๊ฐ ์ค์ ๋ก ํ๋ ๊ฒ์ ๋ฌธ์ํํ๋ค. ์ค๊ณ ์๋๋ ์ฃผ์์ด ์๋๋ผ, ์ฝ๋์ ์ค์ ์คํ ํ๋ฆ ๊ธฐ์ค.
When to Use
- ๋ฐ์ด๋ธ์ฝ๋ฉ์ด๋ ์์ด์ ํธ๊ฐ ์์ฑํ ์ฝ๋์ ์ค์ ๋์์ ํ์
ํ ๋
- ๋ฆฌํฉํ ๋ง ์ ํ์ฌ ์ํ๋ฅผ ๊ธฐ๋กํ ๋
- ์คํ drift๋ฅผ ๋ฐ๊ฒฌํ๊ธฐ ์ํ ๋น๊ต ๊ธฐ์ค์ ๋ง๋ค ๋
- "์ด ์ฝ๋๊ฐ ๋ญ ํ๋์ง ๋ฌธ์ํํด", "์ญ๋ฌธ์ํ", "ํ์ฌ ์ฝ๋ ์ํ ์ ๋ฆฌ" ์์ฒญ ์
When NOT to use:
- Tobe ์คํ์ ์์ฑํ ๋ (์ด ์คํฌ์ ์ฝ๋๋ง ๋ณธ๋ค)
- ์ฝ๋๋ฅผ ์คํํด์ ํ์ธํด์ผ ํ ๋ (์ ์ ๋ถ์๋ง ํ๋ค)
- ์ ์ฒด ์ฝ๋๋ฒ ์ด์ค๋ฅผ ํ ๋ฒ์ ๋ฌธ์ํํ ๋ (๋ชจ๋ ๋จ์๋ก ์คํ)
ํต์ฌ ์์น
- ์ฝ๋๊ฐ ์ง์ค์ด๋ค. ์ฃผ์์ด ์ฝ๋์ ๋ค๋ฅด๋ฉด ์ฝ๋๋ฅผ ๋ฐ๋ฅธ๋ค. ์ฃผ์์
[์ฃผ์๋ถ์ผ์น] ํ๊ทธ๋ก ํ์๋ง ํ๋ค.
- ํด์ํ์ง ์๋๋ค. "์ด๊ฑด ์๋ง ~ํ๋ ค๋ ๊ฒ ๊ฐ๋ค"๊ฐ ์๋๋ผ "์ด ์ฝ๋๋ ~ํ๋ค"๋ก ๊ธฐ์ . "X is broken", "silently fails", "accidentally works" ๊ฐ์ ํ๋จ์ ํ์ง ์๋๋ค. ๋์ "X๋ Y๋ฅผ ํ๋ค. ํ์
์ ์ธ์ Z์ด๋ค." ์ฒ๋ผ ์ฌ์ค๋ง ๊ธฐ์ .
- ๋๋ฝ๋ณด๋ค ๊ณผ์์ด ๋ซ๋ค. ํ์คํ์ง ์์ side effect๋ ๊ธฐ๋กํ๊ณ
[ํ์ธํ์] ํ๊ทธ๋ฅผ ๋ถ์ธ๋ค.
- ๋ชจ๋ ๊ฒฝ๊ณ๋ฅผ ์งํจ๋ค. ์ด ๋ชจ๋์ ์ฝ๋๋ง ๋ฌธ์ํํ๋ค. ํธ์ถ์(caller)๋ฅผ ๊ฒ์ํ๊ฑฐ๋ ์ธ๋ถ ๋ชจ๋์ ๋ด๋ถ ๊ตฌํ์ ์ฐธ์กฐํ์ง ์๋๋ค.
- ๊ตฌ์กฐ ํ์์ ์์ํ๊ณ ๋ฒ์๋ ์ ์งํ๋ค. ๋ชจ๋ ๋ด๋ถ์ ์ฌ๋ณผ ๋งตํ์ด๋ exact body ์ถ์ถ์ด ํ์ํ๋ฉด
probe-deep-search๋ฅผ ์ฌ์ฉํ๋, ํธ์ถ์ ์ถ์ ์ด๋ ์ธ๋ถ ๋ชจ๋ ๋ด๋ถ ์ฝ๊ธฐ๋ก ๋ฒ์๋ฅผ ๋ํ์ง ์๋๋ค.
๋ถ์ ๋์ ํญ๋ชฉ
๋ชจ๋ ํ๋์ ๋ํด ๋ค์์ ํ์
ํ๋ค:
1. ์
๋ ฅ (Inputs)
- ํจ์ ํ๋ผ๋ฏธํฐ: ์ด๋ฆ, ํ์
(annotation ์์ผ๋ฉด), ๊ธฐ๋ณธ๊ฐ
- ์ธ๋ถ์์ ์ฝ๋ ๊ฒ: ์ ์ญ๋ณ์, ํ๊ฒฝ๋ณ์, ํ์ผ, DB
- ์์์ ์์กด: import๋ ๋ชจ๋์ ์ํ์ ์์กดํ๋ ๊ฒฝ์ฐ
2. ์ถ๋ ฅ (Outputs)
- return ๊ฐ: ํ์
๊ณผ ๊ตฌ์กฐ
- Side effects: ํ์ผ ์ฐ๊ธฐ, ์ ์ญ๋ณ์ ๋ณ๊ฒฝ, ์ธ๋ถ API ํธ์ถ, ๋ก๊น
- ์์ธ: ์ด๋ค ์กฐ๊ฑด์์ ์ด๋ค ์์ธ๋ฅผ raiseํ๋์ง
3. ๋ด๋ถ ํ๋ฆ (Internal Flow)
- ์ฃผ์ ๋ถ๊ธฐ ๋ก์ง (if/else, early return)
- ๋ฃจํ ๊ตฌ์กฐ์ ์ข
๋ฃ ์กฐ๊ฑด
- ๋ค๋ฅธ ๋ชจ๋/ํจ์ ํธ์ถ ์์
4. ์ธ๋ถ ์์กด์ฑ (Dependencies)
- importํ๋ ์ธ๋ถ ํจํค์ง
- ํธ์ถํ๋ ๋ค๋ฅธ ๋ด๋ถ ๋ชจ๋/ํจ์ (ํธ์ถ ๊ทธ๋ํ)
- ๊ณต์ ์๋ฃ๊ตฌ์กฐ (๋ค๋ฅธ ๋ชจ๋๊ณผ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ ๊ฒฝ์ฐ)
5. ์ด์ ์งํ (Anomalies)
- dead code (๋๋ฌ ๋ถ๊ฐ๋ฅํ ๋ถ๊ธฐ)
- ์ฌ์ฉ๋์ง ์๋ ํ๋ผ๋ฏธํฐ
- ์ฃผ์๊ณผ ์ฝ๋์ ๋ถ์ผ์น
- ํ๋์ฝ๋ฉ๋ ๋งค์ง ๋๋ฒ
- ๊ฐ์ ๋ก์ง์ ์ค๋ณต ๊ตฌํ
ํ๊ทธ ๊ท์ฝ
๋ฐ๋์ ๋ค์ ํ๊ทธ๋ฅผ ์ฌ์ฉํ๋ค. ์ฐ๋ฌธ์ผ๋ก ํ์ด์ฐ์ง ์๋๋ค:
| ํ๊ทธ | ์ฉ๋ | ์์ |
|---|
[์ฃผ์๋ถ์ผ์น] | ์ฃผ์๊ณผ ์ฝ๋ ๋์์ด ๋ค๋ฅผ ๋ | [์ฃผ์๋ถ์ผ์น] L45: ์ฃผ์์ "SGG6 level 1"์ด๋ผ ํ์ง๋ง ์ฝ๋๋ (4, 2) ์ฆ SGG4 level 2 |
[Dead Code] | ๋๋ฌ ๋ถ๊ฐ๋ฅํ ๋ถ๊ธฐ | [Dead Code] L120-125: else ๋ถ๊ธฐ๊ฐ ์คํ ๋ถ๊ฐ |
[๋งค์ง๋๋ฒ] | ํ๋์ฝ๋ฉ๋ ์์ | [๋งค์ง๋๋ฒ] L30: threshold 0.85์ ์ถ์ฒ ๋ถ๋ช
|
[์ค๋ณต] | ์ ์ฌ ๋ก์ง ๋ฐ๋ณต | [์ค๋ณต] L50, L120: ๋์ผํ ์ ๊ทํ ๋ก์ง |
[ํ์ธํ์] | ์ฝ๋๋ง์ผ๋ก ํ๋จ ๋ถ๊ฐ | [ํ์ธํ์] NaNโ0 ๋ณํ์ด ์๋๋ ๋์์ธ์ง |
[ํ์
์ถ๋ก ] | annotation ์์ด ์ฌ์ฉ ํจํด์์ ์ถ๋ก | [ํ์
์ถ๋ก ] param1์ str๋ก ์ฌ์ฉ๋จ |
[๋ฏธ์ฌ์ฉ] | import ๋๋ ํ๋ผ๋ฏธํฐ๊ฐ ์ฌ์ฉ๋์ง ์์ | [๋ฏธ์ฌ์ฉ] L5: import os โ ๋ชจ๋ ๋ด ์ฌ์ฉ์ฒ ์์ |
์ถ๋ ฅ ํ์
ํ์ผ: {module_name}_ASIS.md
# {๋ชจ๋๋ช
} - As-Is (์ฝ๋ ๊ธฐ์ค)
> ์์ฑ์ผ: {๋ ์ง}
> ๋์ ํ์ผ: {ํ์ผ๊ฒฝ๋ก}
> ์ฝ๋ ๊ธฐ์ค: ์ฝ๋์ ์ค์ ๋์๋ง ๊ธฐ์ . ์ค๊ณ ์๋ ์๋.
## ๋ชจ๋ ๊ฐ์
(์ด ๋ชจ๋์ด ์ค์ ๋ก ํ๋ ๊ฒ 1-2๋ฌธ์ฅ)
## Public Interface
### `function_name(param1: type, param2: type) -> return_type`
- **์ค์ ๋์**: (์ด ํจ์๊ฐ ํ๋ ๊ฒ)
- **์
๋ ฅ**:
- `param1`: (์ค์ ์ฌ์ฉ ๋ฐฉ์)
- `param2`: (์ค์ ์ฌ์ฉ ๋ฐฉ์)
- **์ถ๋ ฅ**: (์ค์ return ๊ตฌ์กฐ)
- **Side Effects**: (์์ผ๋ฉด ๊ธฐ์ )
- **ํธ์ถํ๋ ํจ์**: [`other_func_1`, `other_func_2`]
- **์์ธ**: (raise ์กฐ๊ฑด)
(๋ชจ๋ public ํจ์/ํด๋์ค์ ๋ํด ๋ฐ๋ณต)
## ๋ด๋ถ ํจ์ (Private)
(์ฃผ์ ๋ด๋ถ ํจ์๋ง. ์ฌ์ํ ์ ํธ์ ์ด๋ฆ๋ง ๋์ด)
## ์์กด์ฑ ๊ทธ๋ํ
์ด ๋ชจ๋ โ ํธ์ถํ๋ ๋ชจ๋1 โ ...
์ด ๋ชจ๋ โ ํธ์ถํ๋ ๋ชจ๋2
์ธ๋ถ: numpy, ortools, ...
## ๋ฐ์ดํฐ ํ๋ฆ
(์ฃผ์ ์๋ฃ๊ตฌ์กฐ๊ฐ ์ด๋ป๊ฒ ๋ณํ๋๋์ง. ์
๋ ฅ โ ์ค๊ฐ์ํ โ ์ถ๋ ฅ)
## ์ด์ ์งํ
- [์ฃผ์๋ถ์ผ์น] {์์น}: ์ฃผ์์ ~๋ผ๊ณ ํ์ง๋ง ์ฝ๋๋ ~ํจ
- [Dead Code] {์์น}: ๋๋ฌ ๋ถ๊ฐ๋ฅ
- [๋งค์ง๋๋ฒ] {์์น}: ํ๋์ฝ๋ฉ๋ ๊ฐ {๊ฐ}
- [์ค๋ณต] {์์น1}, {์์น2}: ์ ์ฌ ๋ก์ง ์ค๋ณต
## [ํ์ธํ์] ํญ๋ชฉ
(์ฝ๋๋ง์ผ๋ก ํ๋จ ๋ถ๊ฐํ ๊ฒ. ์ฌ๋์๊ฒ ํ์ธ ์์ฒญ)
์ํฌํ๋ก์ฐ
- ๋์ ๋ชจ๋์ ๋ชจ๋ ํ์ผ์ ์ฝ๋๋ค.
- Public interface๋ถํฐ ํ์
(์ธ๋ถ์์ ์ด๋ป๊ฒ ํธ์ถ๋๋์ง).
- ๊ฐ public ํจ์์ ๋ด๋ถ ํ๋ฆ์ ์ถ์ .
- ์์กด์ฑ ๊ทธ๋ํ ์์ฑ (์ด ๋ชจ๋์ด importํ๋ ๊ฒ๋ง. ํธ์ถ์๋ ์ถ์ ํ์ง ์๋๋ค).
- ์ด์ ์งํ๋ฅผ ํ๊ทธ ๊ท์ฝ์ ๋ฐ๋ผ ์์ง.
- ์ ์ถ๋ ฅ ํ์์ ๋ง์ถฐ ๋ฌธ์ ์์ฑ.
๋ชจ๋ ํฌ๊ธฐ ๊ฐ์ด๋
- ํ์ผ 1๊ฐ, ํจ์ 10๊ฐ ์ดํ: ์ ๋ถ ์์ธ ๋ฌธ์ํ
- ํ์ผ 1๊ฐ, ํจ์ 10๊ฐ ์ด๊ณผ: public๋ง ์์ธ, private๋ ์ฃผ์ ๊ฒ๋ง
- ํ์ผ ์ฌ๋ฌ ๊ฐ (๋๋ ํ ๋ฆฌ): ํ์ผ๋ณ๋ก ๋๋ ์ ๊ฐ๊ฐ ๋ฌธ์ํ. ๋๋ ํ ๋ฆฌ ์์ค ๊ฐ์ ๋ฌธ์ ๋ณ๋ ์์ฑ.
Common Mistakes
| ์ค์ | ์ฌ๋ฐ๋ฅธ ๋ฐฉ๋ฒ |
|---|
| "์ด ๋ก์ง์ broken์ด๋ค" (ํ๋จ) | "์ด ์ฝ๋๋ X๋ฅผ ํ๋ค. ํ์
์ ์ธ์ Y์ด๋ค." (์ฌ์ค) |
| ํธ์ถ์(caller)๋ฅผ ๊ฒ์ํด์ ๋ฌธ์์ ํฌํจ | ์ด ๋ชจ๋์ import์ ํธ์ถ๋ง ๊ธฐ์ . ๋๊ฐ ์ด ๋ชจ๋์ ํธ์ถํ๋์ง๋ ๋ฒ์ ๋ฐ |
| ์ด์ ์งํ๋ฅผ ์ฐ๋ฌธ์ผ๋ก ์ค๋ช
| ํ๊ทธ ๊ท์ฝ ํ์ ํ๊ทธ๋ฅผ ์ฌ์ฉ. [์ฃผ์๋ถ์ผ์น] L45: ... ํ์ |
| ํ
์ด๋ธ/๋ถ๋ฆฟ ํ์์ ์์ ๋กญ๊ฒ ์ ํ | ์ถ๋ ฅ ํ์ ํ
ํ๋ฆฟ์ ๊ทธ๋๋ก ๋ฐ๋ฅธ๋ค |
| ์ค๊ณ ์๋๋ฅผ ์ถ์ธก ("์๋ง ~ํ๋ ค๋ ๊ฒ") | ์ฝ๋๊ฐ ํ๋ ๊ฒ๋ง ๊ธฐ์ . ์๋ ์ถ์ธก์ด ํ์ํ๋ฉด [ํ์ธํ์] ํ๊ทธ |
| ์ ์ฒด ์ฝ๋๋ฒ ์ด์ค๋ฅผ ํ ๋ฒ์ ๋ฌธ์ํ | ๋ชจ๋ ๋จ์๋ก ์คํ. ๋๋ ํ ๋ฆฌ๋ ํ์ผ๋ณ + ๊ฐ์ |
์ฃผ์์ฌํญ
- ์คํํ์ง ์๋๋ค. ์ ์ ๋ถ์๋ง ํ๋ค.
- Tobe ์คํ์ ์ฐธ์กฐํ์ง ์๋๋ค. ์ฝ๋๋ง ๋ณธ๋ค. ์คํ ๋น๊ต๋ ๋ณ๋ ์คํฌ.
- ํ
์คํธ ์ฝ๋๊ฐ ์์ผ๋ฉด ํ์ฉํ๋ค. ํ
์คํธ๊ฐ ์ค์ ์ฌ์ฉ ํจํด์ ๋ณด์ฌ์ฃผ๋ฏ๋ก, ์
์ถ๋ ฅ ํ์
์ ์ฐธ๊ณ .
- ํ์
annotation์ด ์์ผ๋ฉด ์ค์ ์ฌ์ฉ ํจํด์์ ์ถ๋ก ํ๋
[ํ์
์ถ๋ก ] ํ๊ทธ๋ฅผ ๋ถ์ธ๋ค.