Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,17 @@
## ์ž‘์—…์‚ฌํ•ญ
- [x] <!-- ์ž‘์—… ์‚ฌํ•ญ ์ž‘์„ฑ -->

## TDD ์ฒดํฌ
- [ ] failing test๋ถ€ํ„ฐ ์‹œ์ž‘ํ–ˆ๋‹ค
- [ ] ์ตœ์†Œ ๊ตฌํ˜„์œผ๋กœ Green์„ ๋งŒ๋“ค์—ˆ๋‹ค
- [ ] Refactor๋Š” Green ์ดํ›„์—๋งŒ ์ˆ˜ํ–‰ํ–ˆ๋‹ค

## Tidy First ์ฒดํฌ
- [ ] ๊ตฌ์กฐ ๋ณ€๊ฒฝ๊ณผ ๋™์ž‘ ๋ณ€๊ฒฝ์„ ๋ถ„๋ฆฌํ–ˆ๋‹ค
- [ ] ๊ตฌ์กฐ ๋ณ€๊ฒฝ๋งŒ ์žˆ๋Š” ์ปค๋ฐ‹์€ ๋™์ž‘์„ ๋ฐ”๊พธ์ง€ ์•Š์•˜๋‹ค

## Test plan
- [ ] <!-- ์‹คํ–‰ํ•œ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ -->

## UI
<img src="<!-- ์ด๋ฏธ์ง€ ๋งํฌ ์ž‘์„ฑ -->" width="150px"></img>
4 changes: 2 additions & 2 deletions Projects/App/Support/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,9 @@
<key>CFBundlePackageType</key>
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
<key>CFBundleShortVersionString</key>
<string>2.4.0</string>
<string>2.5.1</string>
<key>CFBundleVersion</key>
<string>99</string>
<string>101</string>
<key>FirebaseAppDelegateProxyEnabled</key>
<false/>
<key>ITSAppUsesNonExemptEncryption</key>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
public enum CompanyDetailPreviousViewType {
case searchCompany
case recruitmentDetail
case home
}

This file was deleted.

78 changes: 78 additions & 0 deletions plan.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
# TDD / Tidy First Plan

์ด ์ €์žฅ์†Œ์—์„œ๋Š” ์•ž์œผ๋กœ ๋ชจ๋“  ์ž‘์—…์„ Kent Beck์˜ TDD / Tidy First ์›์น™์œผ๋กœ ์ง„ํ–‰ํ•œ๋‹ค.
`go` ๋ผ๊ณ  ํ•˜๋ฉด ์ด ๋ฌธ์„œ๋ฅผ ํ˜„์žฌ ์ž‘์—…์˜ ๋‹จ์ผ ์‹คํ–‰ ๊ธฐ์ค€์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

## Always Follow
- ํ•ญ์ƒ **Red โ†’ Green โ†’ Refactor** ์ˆœ์„œ๋ฅผ ์ง€ํ‚จ๋‹ค.
- ํ•œ ๋ฒˆ์— ํ…Œ์ŠคํŠธ **ํ•˜๋‚˜๋งŒ** ์ถ”๊ฐ€ํ•œ๋‹ค.
- ํ…Œ์ŠคํŠธ๊ฐ€ **์‹คํŒจํ•˜๋Š” ๊ฒƒ์„ ๋จผ์ € ํ™•์ธ**ํ•œ ๋’ค์—๋งŒ ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•œ๋‹ค.
- ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผ์‹œํ‚ค๋Š” **์ตœ์†Œํ•œ์˜ ์ฝ”๋“œ๋งŒ** ์ž‘์„ฑํ•œ๋‹ค.
- **๊ตฌ์กฐ ๋ณ€๊ฒฝ(Structural change)** ๊ณผ **๋™์ž‘ ๋ณ€๊ฒฝ(Behavioral change)** ์„ ๊ฐ™์€ ์ปค๋ฐ‹์— ์„ž์ง€ ์•Š๋Š”๋‹ค.
- ๊ตฌ์กฐ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•˜๋ฉด **๋จผ์ € ๊ตฌ์กฐ๋งŒ** ๋ฐ”๊พธ๊ณ  ํ…Œ์ŠคํŠธ๋กœ ์•ˆ์ „์„ฑ์„ ํ™•์ธํ•œ๋‹ค.
- ๋ฆฌํŒฉํ„ฐ๋ง์€ **ํ…Œ์ŠคํŠธ๊ฐ€ ๋ชจ๋‘ ์ดˆ๋ก๋ถˆ์ผ ๋•Œ๋งŒ** ์ˆ˜ํ–‰ํ•œ๋‹ค.
- ๊ฐ ๋‹จ๊ณ„๊ฐ€ ๋๋‚  ๋•Œ๋งˆ๋‹ค **๊ด€๋ จ ํ…Œ์ŠคํŠธ๋ฅผ ๋‹ค์‹œ ์‹คํ–‰**ํ•œ๋‹ค.

## Tidy First Rules

### Structural Change
๋‹ค์Œ์€ ๊ตฌ์กฐ ๋ณ€๊ฒฝ์œผ๋กœ ์ทจ๊ธ‰ํ•œ๋‹ค.
- ์ด๋ฆ„ ๋ณ€๊ฒฝ
- ํŒŒ์ผ ์ด๋™
- ํƒ€์ž…/๋ฉ”์„œ๋“œ ์ถ”์ถœ
- ์ค‘๋ณต ์ œ๊ฑฐ๋ฅผ ์œ„ํ•œ ์žฌ๋ฐฐ์น˜
- ์˜์กด์„ฑ ๋ฐฉํ–ฅ์€ ์œ ์ง€ํ•œ ์ฑ„ ํ‘œํ˜„๋งŒ ์ •๋ฆฌํ•˜๋Š” ๋ณ€๊ฒฝ

๊ตฌ์กฐ ๋ณ€๊ฒฝ ๋‹จ๊ณ„์—์„œ๋Š”:
- ๋™์ž‘์„ ๋ฐ”๊พธ์ง€ ์•Š๋Š”๋‹ค.
- ๊ฐ€๋Šฅํ•œ ํ•œ ์ž‘์€ ๋‹จ์œ„๋กœ ๋‚˜๋ˆˆ๋‹ค.
- ๋ณ€๊ฒฝ ์ „/ํ›„ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๊ฐ€ ๊ฐ™์•„์•ผ ํ•œ๋‹ค.
- ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€์™€ PR ์„ค๋ช…์— ๊ตฌ์กฐ ๋ณ€๊ฒฝ์ž„์„ ๋“œ๋Ÿฌ๋‚ธ๋‹ค.

### Behavioral Change
๋‹ค์Œ์€ ๋™์ž‘ ๋ณ€๊ฒฝ์œผ๋กœ ์ทจ๊ธ‰ํ•œ๋‹ค.
- ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€
- ๋ถ„๊ธฐ/์ƒํƒœ/ํ™”๋ฉด ํ๋ฆ„ ๋ณ€๊ฒฝ
- ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์ด๋Š” ๊ฒฐ๊ณผ ๋ณ€๊ฒฝ
- ๋ฒ„๊ทธ ์ˆ˜์ •

๋™์ž‘ ๋ณ€๊ฒฝ ๋‹จ๊ณ„์—์„œ๋Š”:
- ๋ฐ˜๋“œ์‹œ ์‹คํŒจํ•˜๋Š” ํ…Œ์ŠคํŠธ๋กœ ์‹œ์ž‘ํ•œ๋‹ค.
- ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผ์‹œํ‚ค๋Š” ์ตœ์†Œ ๊ตฌํ˜„๋งŒ ํ•œ๋‹ค.
- ์ดˆ๋ก๋ถˆ ์ดํ›„์—๋งŒ ๊ตฌ์กฐ๋ฅผ ๊ฐœ์„ ํ•œ๋‹ค.

## `go` Execution Contract
`go` ๋ผ๊ณ  ํ•˜๋ฉด ์•„๋ž˜ ์ˆœ์„œ๋กœ ์ •ํ™•ํžˆ ์ˆ˜ํ–‰ํ•œ๋‹ค.
1. `Test Queue` ์—์„œ ์ฒดํฌ๋˜์ง€ ์•Š์€ ์ฒซ ๋ฒˆ์งธ ํ•ญ๋ชฉ์„ ์ฐพ๋Š”๋‹ค.
2. ํ•ด๋‹น ํ•ญ๋ชฉ์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ๋ฅผ **ํ•˜๋‚˜๋งŒ** ์ž‘์„ฑํ•œ๋‹ค.
3. ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. (**Red**)
4. ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผ์‹œํ‚ค๋Š” ์ตœ์†Œ ๊ตฌํ˜„๋งŒ ์ถ”๊ฐ€ํ•œ๋‹ค. (**Green**)
5. ๋ชจ๋“  ๊ด€๋ จ ํ…Œ์ŠคํŠธ๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ•œ๋‹ค.
6. ๊ตฌ์กฐ ๊ฐœ์„ ์ด ํ•„์š”ํ•˜๋ฉด ๋ณ„๋„ ๊ตฌ์กฐ ๋ณ€๊ฒฝ์œผ๋กœ๋งŒ ์ •๋ฆฌํ•œ๋‹ค. (**Refactor / Tidy First**)
7. `Test Queue` ์ƒํƒœ๋ฅผ ๊ฐฑ์‹ ํ•œ๋‹ค.

## Definition of Done for One Step
ํ•˜๋‚˜์˜ `go` ๋‹จ๊ณ„๋Š” ์•„๋ž˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•  ๋•Œ๋งŒ ๋๋‚œ๋‹ค.
- ์ด๋ฒˆ ๋‹จ๊ณ„์—์„œ ์ถ”๊ฐ€ํ•œ ํ…Œ์ŠคํŠธ๊ฐ€ ์กด์žฌํ•œ๋‹ค.
- ์ƒˆ ํ…Œ์ŠคํŠธ๊ฐ€ ์ฒ˜์Œ์—๋Š” ์‹คํŒจํ–ˆ๋‹ค.
- ํ˜„์žฌ๋Š” ํ…Œ์ŠคํŠธ๊ฐ€ ํ†ต๊ณผํ•œ๋‹ค.
- ๊ตฌ์กฐ ๋ณ€๊ฒฝ๊ณผ ๋™์ž‘ ๋ณ€๊ฒฝ์˜ ๊ฒฝ๊ณ„๊ฐ€ ์„ค๋ช… ๊ฐ€๋Šฅํ•˜๋‹ค.
- ๋‹ค์Œ์— ์ง„ํ–‰ํ•  ํ…Œ์ŠคํŠธ๊ฐ€ `Test Queue` ์— ๋ช…ํ™•ํžˆ ๋‚จ์•„ ์žˆ๋‹ค.

## Swift Rules
- Swift์—์„œ๋Š” ์˜๋ฏธ๊ฐ€ ๋ถ„๋ช…ํ•œ ํƒ€์ž…/๋ฉ”์„œ๋“œ ์ด๋ฆ„์„ ์šฐ์„ ํ•œ๋‹ค.
- `mutate()` ๋Š” ๋น„๋™๊ธฐ ๊ฐ€๋Šฅ, `reduce()` ๋Š” ์ˆœ์ˆ˜ ํ•จ์ˆ˜๋งŒ ์œ ์ง€ํ•œ๋‹ค.
- `Flow.rootViewController` ๋Š” `init` ์—์„œ resolve ํ•œ๋‹ค.
- ๋ ˆ์ด์–ด ์—ญ๋ฐฉํ–ฅ import ๊ธˆ์ง€.
- ๋ชจ๋“  ์˜์กด์„ฑ์€ Assembly๋ฅผ ํ†ตํ•ด ๋“ฑ๋กํ•œ๋‹ค.

## PR / Commit Rules
- ํ•œ PR ์•ˆ์—์„œ๋„ ๊ตฌ์กฐ ๋ณ€๊ฒฝ ์ปค๋ฐ‹๊ณผ ๋™์ž‘ ๋ณ€๊ฒฝ ์ปค๋ฐ‹์„ ๋ถ„๋ฆฌํ•œ๋‹ค.
- PR ์„ค๋ช…์—๋Š” ์•„๋ž˜๋ฅผ ํฌํ•จํ•œ๋‹ค.
- ์–ด๋–ค ํ…Œ์ŠคํŠธ๊ฐ€ ๋จผ์ € ์‹คํŒจํ–ˆ๋Š”์ง€
- ์–ด๋–ค ์ตœ์†Œ ๊ตฌํ˜„์œผ๋กœ ์ดˆ๋ก๋ถˆ์„ ๋งŒ๋“ค์—ˆ๋Š”์ง€
- ์–ด๋–ค ๊ตฌ์กฐ ๊ฐœ์„ ์„ ๋‚˜์ค‘์— ํ–ˆ๋Š”์ง€
- ํ…Œ์ŠคํŠธ ์—†์ด ๊ธฐ๋Šฅ ์ฝ”๋“œ๋ฅผ ๋จผ์ € ๋„ฃ๋Š” ๋ณ€๊ฒฝ์€ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

## Test Queue
- [ ] ๋‹ค์Œ ๊ธฐ๋Šฅ ์ž‘์—…์ด ์ •ํ•ด์ง€๋ฉด ์ฒซ failing test ๋ฅผ ์—ฌ๊ธฐ์— ์ถ”๊ฐ€ํ•œ๋‹ค.
Loading