Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
73 commits
Select commit Hold shift + click to select a range
6fd8623
refactor: PieceType์˜ movablePaths๋ฅผ private์œผ๋กœ ๋ณ€๊ฒฝ
HyoYoonNam Apr 4, 2026
da4b0e8
refactor: ๋นˆ ๊ธฐ๋ฌผ์€ ๋งค๋ฒˆ ์ƒ์„ฑํ•˜์ง€ ์•Š๋Š”๋‹ค
HyoYoonNam Apr 4, 2026
a1bc8f7
refactor: ๋นˆ ๊ธฐ๋ฌผ ์ƒ์„ฑ์€ ๊ฐ™์€ ์ธ์Šคํ„ด์Šค๋งŒ ๋ฆฌํ„ดํ•œ๋‹ค
HyoYoonNam Apr 4, 2026
4cc6cbc
docs: ๊ตฌํ˜„ํ•  ๊ธฐ๋Šฅ ๋ชฉ๋ก ์ถ”๊ฐ€
HyoYoonNam Apr 4, 2026
dbc111f
refactor: '์ง€์ (์žฅ์†Œ)'์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ณ€์ˆ˜๋ช… ์šฉ์–ด ๋ณ€๊ฒฝ
HyoYoonNam Apr 4, 2026
9720727
docs: ์ง„์˜๋ณ„ ๋ณด๋„ˆ์Šค ์ ์ˆ˜ ์š”๊ตฌ์‚ฌํ•ญ ์ถ”๊ฐ€
HyoYoonNam Apr 4, 2026
4dba09b
feat: ์ง„์˜๋ณ„ ๊ธฐ๋ฌผ ์ ์ˆ˜ ๊ณ„์‚ฐ ๊ตฌํ˜„
HyoYoonNam Apr 4, 2026
9f53d46
docs: ์‹คํ–‰ ์˜ˆ์‹œ์— ์Šน์ž ๋ฐ ์ ์ˆ˜ ์ถœ๋ ฅ ์ถ”๊ฐ€
HyoYoonNam Apr 4, 2026
e9d93af
feat: ์Šน์ž ์ถœ๋ ฅ ์‹œ ์ ์ˆ˜๋„ ํ•จ๊ป˜ ์ถœ๋ ฅ
HyoYoonNam Apr 4, 2026
5be597e
refactor: ๊ฒŒ์ž„ ์ข…๋ฃŒ ๋ฐ ์ŠนํŒจ ํŒ์ • ๋กœ์ง ๊ฐœ์„ 
HyoYoonNam Apr 4, 2026
10e08b1
docs: ์ถ”๊ฐ€๋‚˜ ์™„๋ฃŒ ์ฒดํฌ๋ฅผ ๋ˆ„๋ฝํ•œ ๊ธฐ๋Šฅ ์š”๊ตฌ์‚ฌํ•ญ ๋ฐ˜์˜
HyoYoonNam Apr 4, 2026
382bad7
refactor: Board์˜ getter๋ฅผ ์ œ๊ฑฐ
HyoYoonNam Apr 5, 2026
adb0058
feat: ๊ถ๊ณผ ์‚ฌ๋Š” ๊ถ์„ฑ ๋ฐ–์œผ๋กœ ์ด๋™ํ•  ์ˆ˜ ์—†๋‹ค
HyoYoonNam Apr 5, 2026
86a5ca5
feat: ๊ถ๊ณผ ์‚ฌ์˜ ๊ถ์„ฑ ๋‚ด ๋Œ€๊ฐ์„  ์ด๋™ ๊ตฌํ˜„
HyoYoonNam Apr 5, 2026
5f80c18
feat: ์กธ/๋ณ‘์˜ ๊ถ์„ฑ ๋‚ด ๋Œ€๊ฐ์„  ์ด๋™ ๊ตฌํ˜„
HyoYoonNam Apr 5, 2026
8976b5e
refactor: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์—์„œ์˜ ์ถœ๋ ฅ ์ œ๊ฑฐ
HyoYoonNam Apr 5, 2026
09ffe4d
refactor: PalaceMovement.toPalaceCenter private ๋ณ€๊ฒฝ
HyoYoonNam Apr 5, 2026
9a4f79c
refactor: ๋ฏธ์‚ฌ์šฉ import ์ œ๊ฑฐ
HyoYoonNam Apr 5, 2026
c243bde
feat: ์ฐจ์™€ ํฌ์˜ ๊ถ์„ฑ ๋‚ด ๋Œ€๊ฐ์„  ์ด๋™ ๊ตฌํ˜„
HyoYoonNam Apr 5, 2026
eefd8cc
docs: ๋ˆ„๋ฝํ•œ ์ฒดํฌ๋ฆฌ์ŠคํŠธ ๋ฐ˜์˜
HyoYoonNam Apr 6, 2026
15261ba
docs: ์šฉ์–ด์‚ฌ์ „ ์—…๋ฐ์ดํŠธ
HyoYoonNam Apr 6, 2026
05f78a3
docs: DB ์š”๊ตฌ์‚ฌํ•ญ ๋ช…์„ธ์„œ ์ถ”๊ฐ€
HyoYoonNam Apr 6, 2026
46cd87b
build: add sqlite-jdbcdriver dependency
HyoYoonNam Apr 6, 2026
634ae5b
docs: ๊ฒŒ์ž„ ์ข…๋ฃŒ ์š”๊ตฌ์‚ฌํ•ญ ์ถ”๊ฐ€
HyoYoonNam Apr 6, 2026
2d7f803
docs: ๊ฒŒ์ž„ ์ข…๋ฃŒ ์š”๊ตฌ์‚ฌํ•ญ ์ถ”๊ฐ€
HyoYoonNam Apr 6, 2026
80ec9a5
feat: ์‚ฌ์šฉ์ž ์ž…๋ ฅ์— ์˜ํ•œ ์ข…๋ฃŒ ๊ตฌํ˜„
HyoYoonNam Apr 6, 2026
e1599ce
docs: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์š”๊ตฌ์‚ฌํ•ญ ์ถ”๊ฐ€
HyoYoonNam Apr 6, 2026
d41253f
temp: DB ์ €์žฅ ๋ฐ ๋กœ๋“œ ๊ตฌํ˜„. ์ปจํŠธ๋กค๋Ÿฌ ์กฐ๋ฆฝ ํ•„์š”.
HyoYoonNam Apr 6, 2026
ccd43f0
feat: DB๋ฅผ ํ™œ์šฉํ•œ ๊ฒŒ์ž„ ์ €์žฅ ๋ฐ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ๊ตฌํ˜„
HyoYoonNam Apr 7, 2026
feaf682
build: add mockito dependency
HyoYoonNam Apr 7, 2026
2dc715e
test: ํŠธ๋žœ์žญ์…˜ ์›์ž์„ฑ ์ปค๋ฐ‹/๋กค๋ฐฑ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
HyoYoonNam Apr 7, 2026
ad34015
refactor: ๋ฉ”๋‰ด ์ถœ๋ ฅ ์‹œ ๋ฆฌํ„ฐ๋Ÿด ๋Œ€์‹  dto๋ฅผ ์‚ฌ์šฉ
HyoYoonNam Apr 7, 2026
b9dee67
refactor: printBoardWithMovable ํŒŒ๋ผ๋ฏธํ„ฐ ๊ตฌ์กฐ ๊ฐœ์„ 
HyoYoonNam Apr 7, 2026
f65e1a8
refactor: startGame ๋ฉ”์„œ๋“œ ๋ฐ”๋””์˜ ํฌ๊ธฐ ๊ฐœ์„ 
HyoYoonNam Apr 7, 2026
8666ef8
test: ๋ˆ„๋ฝํ•œ ๊ถ์„ฑ ๋‚ด ๋Œ€๊ฐ์„  ์ด๋™ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
HyoYoonNam Apr 7, 2026
d76c8c0
refactor: ์ŠคํŠธ๋ฆผ ์‚ฌ์šฉ ํ…Œ์ŠคํŠธ๋ฅผ extracting์œผ๋กœ ๋ณ€๊ฒฝ
HyoYoonNam Apr 7, 2026
7873002
refactor: loadGameFlow์˜ ๋ถ„๊ธฐ ์ฒ˜๋ฆฌ ๊ฐœ์„ 
HyoYoonNam Apr 7, 2026
ffe648d
refactor: ์—†๋Š” ๋ฒˆํ˜ธ๋กœ loadGame ์‹œ๋„ ์‹œ ์žฌ์ž…๋ ฅ ์š”์ฒญ
HyoYoonNam Apr 7, 2026
f034bfb
refactor: ์ˆซ์ž ๋ณ€ํ™˜ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์ฑ…์ž„์„ view์— ์œ„์ž„
HyoYoonNam Apr 7, 2026
c2ca9f4
fix: String ์ขŒํ‘œ๊ฐ’ ํŒŒ์‹ฑ ๊ฒ€์ฆ์„ ์ถ”๊ฐ€
HyoYoonNam Apr 8, 2026
f11f2ea
refactor: remove unnecessary comments and imports
HyoYoonNam Apr 8, 2026
eb66e7f
docs: ์ €์žฅ ์‹œ ๋ฉ”์‹œ์ง€ ์•Œ๋ฆผ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ œ๊ฑฐ
HyoYoonNam Apr 8, 2026
0f7650a
refactor: ResultSet ์ž์› try-with-resources๋กœ ๋ฐ˜๋‚ฉ
HyoYoonNam Apr 8, 2026
07d4cdb
refactor: ๊ธฐ๋ฌผ DB ์‚ฝ์ž… ์ค‘๋ณต ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐ
HyoYoonNam Apr 8, 2026
c4c5002
fix: ํด๋ก  ํ›„ DB ๋””๋ ‰ํ† ๋ฆฌ ๋ถ€์žฌ๋กœ ์ธํ•œ ์‹คํ–‰ ์˜ค๋ฅ˜ ํ•ด๊ฒฐ
HyoYoonNam Apr 8, 2026
959c78b
refactor: ๊ฒŒ์ž„ ์ƒ์„ฑ ๋‚ ์งœ๋ฅผ LocalDateTime์œผ๋กœ ๊ด€๋ฆฌ
HyoYoonNam Apr 9, 2026
2ac518a
refactor: Transaction ๊ด€๋ฆฌ ์ฑ…์ž„ Service๋กœ ๋ณ€๊ฒฝ
HyoYoonNam Apr 9, 2026
14107c5
refactor: TransactionTemplate์œผ๋กœ ๊ด€๋ฆฌ ์ค‘๋ณต ํ•ด๊ฒฐ
HyoYoonNam Apr 9, 2026
fc08aa8
refactor: RuntimeException ๋Œ€์‹  ์ปค์Šคํ…€ ์˜ˆ์™ธ๋กœ ๋ณ€ํ™˜
HyoYoonNam Apr 9, 2026
eab92a3
refactor: ํŒจํ‚ค์ง€ ๊ตฌ์กฐ ๋ณ€๊ฒฝ
HyoYoonNam Apr 9, 2026
9ce4f8b
refactor: Side.from()์„ Enum.valueOf()๋กœ ๋Œ€์ฒด
HyoYoonNam Apr 10, 2026
965bf39
refactor: ์ง„์˜๋ณ„ ์ ์ˆ˜ ๊ณ„์‚ฐ ์ฑ…์ž„์„ Game์œผ๋กœ ์ด๋™
HyoYoonNam Apr 10, 2026
20c8105
refactor: ์ง„์˜ ๋ณด๋„ˆ์Šค ์ ์ˆ˜ ์ฑ…์ž„์„ ๋ณ„๋„ ๊ฐ์ฒด๋กœ ๋ถ„๋ฆฌ
HyoYoonNam Apr 10, 2026
3de9802
refactor: ์ถœ๋ ฅ ๊ฐœํ–‰ ์ถ”๊ฐ€
HyoYoonNam Apr 10, 2026
fc06a76
refactor: Repository์—์„œ SQLException์„ ๋ฐ”๊ฟ”์„œ ๋˜์ง„๋‹ค
HyoYoonNam Apr 10, 2026
0ed3a7c
refactor: ๋ถˆํ•„์š”ํ•œ ์ฃผ์„ ์ œ๊ฑฐ
HyoYoonNam Apr 10, 2026
0f06c98
refactor: ํ…Œ์ŠคํŠธ ๋…๋ฆฝ์„ฑ์„ ์œ„ํ•œ clear 1ํšŒ๋งŒ ํ˜ธ์ถœ
HyoYoonNam Apr 11, 2026
73d0bc4
refactor: MoveCommand๊ฐ€ null ๋Œ€์‹  Optional ๋ฆฌํ„ด
HyoYoonNam Apr 11, 2026
2dac0e5
fix: ๋‹ค๋ฅธ ์ง„์˜ ๊ธฐ๋ฌผ ์„ ํƒ์‹œ ๊ฒŒ์ž„ ์ข…๋ฃŒ๋ฌธ์ œ ํ•ด๊ฒฐ
HyoYoonNam Apr 11, 2026
51993df
refactor: ์ปจํŠธ๋กค๋Ÿฌ์˜ ๊ณผ๋„ํ•œ ๋ถ„๊ธฐ ์ถ”์ƒํ™”๋ฅผ ์ œ๊ฑฐ
HyoYoonNam Apr 11, 2026
4df628e
fix: ์„œ๋น„์Šค ๊ณ„์ธต ํ…Œ์ŠคํŠธ์˜ ๋‹จ์œ„ ๋…๋ฆฝ์„ฑ ๋ณด์žฅ
HyoYoonNam Apr 11, 2026
857ddff
refactor: ํŠธ๋žœ์žญ์…˜ ํ…Œ์ŠคํŠธ๋ฅผ ํ…œํ”Œ๋ฆฟ์œผ๋กœ ์ด๋™
HyoYoonNam Apr 12, 2026
c46d916
refactor: ๊ธฐ๋ฌผ ์ด๋™์— ๋Œ€ํ•œ ์˜์†์„ฑ ์ฆ‰์‹œ ๋ฐ˜์˜
HyoYoonNam Apr 12, 2026
51dcb04
fix: ๋„๋ฉ”์ธ ๋กœ์ง ์˜ˆ์™ธ ๋ฐœ์ƒ ์‹œ ํŠธ๋žœ์žญ์…˜ ๋กค๋ฐฑ ๋ˆ„๋ฝ ํ•ด๊ฒฐ
HyoYoonNam Apr 12, 2026
09acb09
refactor: ๊ถ์„ฑ ๊ด€๋ จ ๋งค์ง๋„˜๋ฒ„๋ฅผ ๋ณ„๋„ ํด๋ž˜์Šค์™€ ์ƒ์ˆ˜๋กœ ๋ถ„๋ฆฌ
HyoYoonNam Apr 12, 2026
c86894b
refactor: repository ๊ณ„์ธต๊ณผ ๋„๋ฉ”์ธ์„ mapper๋กœ ์—ฐ๊ฒฐ
HyoYoonNam Apr 12, 2026
be2a904
refactor: ๊ฒฉ์ž์  ํŒŒ์‹ฑ ๋งค์ง๋„˜๋ฒ„ ์ƒ์ˆ˜ํ™”
HyoYoonNam Apr 12, 2026
b2ef91b
refactor: GameRule ๋ณด๋„ˆ์Šค ํฌ์ธํŠธ ์ƒ์ˆ˜ํ™”
HyoYoonNam Apr 12, 2026
db2a006
refactor: ๋ฏธ์‚ฌ์šฉ import ์ œ๊ฑฐ
HyoYoonNam Apr 12, 2026
eb25725
refactor: ์ขŒํ‘œ ๊ด€๋ จ ๋งค์ง๋„˜๋ฒ„ ์ƒ์ˆ˜ํ™”
HyoYoonNam Apr 12, 2026
1410cab
refactor: DB ์ดˆ๊ธฐํ™” ์ฑ…์ž„์„ ๋ณ„๋„ ๊ฐ์ฒด๋กœ ๋ถ„๋ฆฌ
HyoYoonNam Apr 12, 2026
43dcc80
refactor: LoadCommand์˜ ์ƒˆ ๊ฒŒ์ž„ ๊ฐ’ ์ƒ์ˆ˜ํ™”
HyoYoonNam Apr 12, 2026
9328d22
refactor: IntegrationTestSupport ํŒจํ‚ค์ง€ ๋ณ€๊ฒฝ
HyoYoonNam Apr 12, 2026
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
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -33,3 +33,9 @@ out/

### Mac ###
**/.DS_Store

### DB - SQLite ###
/src/main/resources/db/*
!src/main/resources/db/.gitkeep
/src/test/resources/db/
:memory:?cache=shared
122 changes: 117 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@
์žฅ๊ธฐ ๋ฏธ์…˜ ์ €์žฅ์†Œ

## ์‹คํ–‰ ์˜ˆ์‹œ

### ์ผ๋ฐ˜์ ์ธ ๊ฒŒ์ž„ ์ง„ํ–‰ ํ๋ฆ„

```text
์žฅ๊ธฐ ๊ฒŒ์ž„์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

Expand Down Expand Up @@ -44,24 +47,92 @@
4,5

...

--- ๊ฒŒ์ž„์ด ์ข…๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค ---
์ ์ˆ˜) CHO 10์ , HAN 8.5์ 
CHO์˜ ์Šน๋ฆฌ!
```

### ์‹œ์ž‘ ๋ฉ”๋‰ด

```text
์•ˆ๋…•ํ•˜์„ธ์š”. ๋ฃจ๋“œ๋น„์ฝ”์˜ ์žฅ๊ธฐ ๋งˆ์„์ž…๋‹ˆ๋‹ค!

์•„๋ž˜ ๋ฉ”๋‰ด ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•ด ์ฃผ์„ธ์š”.
1. ์ƒˆ ๊ฒŒ์ž„
2. ์ด์ „ ๊ฒŒ์ž„ ์กฐํšŒ(์ด์–ดํ•˜๊ธฐ/๊ฒฐ๊ณผ ํ™•์ธ)
```

#### ์ด์ „ ๊ฒŒ์ž„ ์กฐํšŒ

```markdown
------------- ์ €์žฅ๋œ ๊ฒŒ์ž„ ๋ชฉ๋ก -------------
[ID: 1] ์‹œ์ž‘: 2026-04-07 12:53 / ์ฐจ๋ก€: CHO
[ID: 2] ์‹œ์ž‘: 2026-04-07 15:36 / ์ฐจ๋ก€: HAN
----------------------------------------
๋ถˆ๋Ÿฌ์˜ฌ ๊ฒŒ์ž„์˜ ID๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”: 1

์žฅ๊ธฐ ๊ฒŒ์ž„์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
...
```

### ์ €์žฅ ํ๋ฆ„

#### ์‚ฌ์šฉ์ž ์ž…๋ ฅ์œผ๋กœ ์ธํ•œ ์ข…๋ฃŒ

```text
์žฅ๊ธฐ ๊ฒŒ์ž„์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
...
์ดˆ(ํŒŒ๋ž€์ƒ‰) ์ฐจ๋ก€์ž…๋‹ˆ๋‹ค. ์ด๋™ํ•  ๊ธฐ๋ฌผ์˜ ์ขŒํ‘œ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š” ('exit'๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์ข…๋ฃŒ):
exit

--- ๊ฒŒ์ž„์„ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค ---

```

#### ๊ฒŒ์ž„ ์ŠนํŒจ ํŒ์ •์œผ๋กœ ์ธํ•œ ์ข…๋ฃŒ

```text
...
--- ๊ฒŒ์ž„์ด ์ข…๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค ---
์ ์ˆ˜) CHO 10์ , HAN 8.5์ 
CHO์˜ ์Šน๋ฆฌ!

```

#### ๋‚ด/์™ธ๋ถ€ ๋ฌธ์ œ๋กœ ์ธํ•œ ๊ฐ•์ œ ์ข…๋ฃŒ

```text
(๋‚ด/์™ธ๋ถ€ ๋ฌธ์ œ๋กœ ์ธํ•œ ๊ฐ•์ œ ์ข…๋ฃŒ๋ฅผ ๊ฐ€์ •)

```

## ๊ตฌํ˜„ํ•  ๊ธฐ๋Šฅ ๋ชฉ๋ก

### ์ž…๋ ฅ ๊ธฐ๋Šฅ

- [x] ์ œ๋Œ€๋กœ ๋œ ์ž…๋ ฅ๊ฐ’์ด ์•„๋‹ˆ๋ผ๋ฉด, ์žฌ์ž…๋ ฅ์„ ์š”์ฒญํ•œ๋‹ค.
- [x] ์ƒ์ฐจ๋ฆผ์„ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค.
- [x] ์ด๋™ํ•  ๊ธฐ๋ฌผ์˜ ์œ„์น˜๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค.
- [x] ๊ธฐ๋ฌผ์„ ์ด๋™์‹œํ‚ฌ ์œ„์น˜๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค.
ํŠน์ • ์ž…๋ ฅ ๊ธฐ๋Šฅ๊ณผ ์—ฐ๊ด€๋œ ๊ฒŒ์ž„์˜ ์ข…๋ฃŒ ๋“ฑ ์‹œ์Šคํ…œ ๋ช…๋ น์€ ๐Ÿ› ๏ธ ์ด๋ชจ์ง€๋ฅผ ๋ถ™์—ฌ ๊ตฌ๋ถ„ํ•œ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด, ๊ฒŒ์ž„ ์ข…๋ฃŒ(exit) ์‹œ์Šคํ…œ ๋ช…๋ น์€ ์ด๋™ํ•  ๊ธฐ๋ฌผ์˜ ์œ„์น˜๋ฅผ ์ž…๋ ฅ๋ฐ›์„ ๋•Œ๋งŒ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

- [x] ๊ณตํ†ต: ์ œ๋Œ€๋กœ ๋œ ์ž…๋ ฅ๊ฐ’์ด ์•„๋‹ˆ๋ผ๋ฉด, ์žฌ์ž…๋ ฅ์„ ์š”์ฒญํ•œ๋‹ค.

- [x] ์ƒ์ฐจ๋ฆผ์„ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค.
- [x] ์ด๋™ํ•  ๊ธฐ๋ฌผ์˜ ์œ„์น˜๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค.
- [x] `1,5` ํ˜•์‹์œผ๋กœ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค.
- [x] ๐Ÿ› ๏ธ `exit`๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๊ฒŒ์ž„์„ ์ข…๋ฃŒํ•œ๋‹ค.
- [x] ๊ธฐ๋ฌผ์„ ์ด๋™์‹œํ‚ฌ ์œ„์น˜๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค.
- ์ด๋™ํ•  ๊ธฐ๋ฌผ์„ ์„ ํƒํ•˜๋ฉด ๋ฌด๋ฅผ ์ˆ˜ ์—†๋‹ค. ์ฆ‰, ๊ฒŒ์ž„ ์ข…๋ฃŒ๋Š” ์ด๋™ํ•  ๊ธฐ๋ฌผ์˜ ์œ„์น˜๋ฅผ ์„ ํƒํ•˜๊ธฐ ์ „์—๋งŒ ๋ช…๋ นํ•  ์ˆ˜ ์žˆ๋‹ค.

### ์ถœ๋ ฅ ๊ธฐ๋Šฅ

- [x] ๊ฒŒ์ž„ ์‹œ์ž‘์„ ์•Œ๋ฆฐ๋‹ค.
- [x] ์ƒ์ฐจ๋ฆผ ์ดˆ๊ธฐํ™” ํ›„ ์žฅ๊ธฐํŒ์˜ ์ƒํ™ฉ์„ ์ถœ๋ ฅํ•œ๋‹ค.
- [x] ์„ ํƒํ•œ ๊ธฐ๋ฌผ์ด ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ์ง€์ ์„ ๋ชจ๋‘ ํ‘œ์‹œํ•œ๋‹ค.
- [x] ๊ธฐ๋ฌผ ์ด๋™ ํ›„ ์žฅ๊ธฐํŒ์˜ ์ƒํ™ฉ์„ ์ถœ๋ ฅํ•œ๋‹ค.
- [x] ๊ฒŒ์ž„์ด ์ข…๋ฃŒ์™€ ํ•จ๊ป˜ ์Šน๋ฆฌ ์ง„์˜์„ ์ถœ๋ ฅํ•œ๋‹ค.
- [x] ๊ฒŒ์ž„ ์ข…๋ฃŒ์‹œ
- [x] ์Šน๋ฆฌ ์ง„์˜์„ ์ถœ๋ ฅํ•œ๋‹ค.
- [x] ์Šน๋ฆฌ ์›์ธ์„ ์ถœ๋ ฅํ•œ๋‹ค.
- [x] ์ง„์˜๋ณ„ ์ ์ˆ˜๋Š” ์ ์ˆ˜ ์ฐจ์ด๋กœ ์ธํ•œ ์Šน๋ฆฌ์ผ ๋•Œ๋งŒ ์ถœ๋ ฅํ•œ๋‹ค.

### ๋„๋ฉ”์ธ ๊ธฐ๋Šฅ

Expand All @@ -71,19 +142,59 @@
- [x] ์ด๋™ํ•  ์ˆ˜ ์—†๋Š” ์ง€์ ์œผ๋กœ ์›€์ง์ด๋ คํ•˜๋ฉด ์˜ˆ์™ธ๋ฅผ ๋˜์ง„๋‹ค.
- [x] ๊ฐ ์ง„์˜์€ ๊ต๋Œ€๋กœ ๊ธฐ๋ฌผ์„ ์ด๋™ํ•œ๋‹ค.
- [x] ์™•์ด ์žกํžˆ๋ฉด ๊ฒŒ์ž„์ด ๋๋‚œ๋‹ค.
- [x] `๊ถ`๊ณผ `์‚ฌ`๋Š” ๊ถ์„ฑ์˜ ๋ฐ–์œผ๋กœ ์ด๋™ํ•  ์ˆ˜ ์—†๋‹ค.
- [x] `์ƒ`๊ณผ `๋งˆ`๋ฅผ ์ œ์™ธํ•œ ๊ธฐ๋ฌผ์€ (๋ณธ์ธ์˜ ํ–‰๋งˆ๋ฒ•์„ ์ค€์ˆ˜ํ•˜๋Š” ๊ฒƒ์„ ์ „์ œ๋กœ) ๊ถ์„ฑ์˜ ๋Œ€๊ฐ์„ ์„ ํƒ€๊ณ  ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค.
- ์˜ˆ๋ฅผ ๋“ค์–ด, `๋ณ‘/์กธ`์€ ๋Œ€๊ฐ์„  ๋ฐฉํ–ฅ์œผ๋กœ ์ „์ง„์€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ํ›„์ง„์€ ๋ถˆ๊ฐ€ํ•˜๋‹ค. `ํฌ`๋Š” ์ด๋™ํ•  ๋Œ€๊ฐ์„  ๋ฐฉํ–ฅ์— screen์ด ์กด์žฌํ•ด์•ผ ํ•œ๋‹ค. (...)
- [x] ์ ์ˆ˜ ๊ณ„์‚ฐ
- [x] ๊ฒŒ์ž„์ด ์ข…๋ฃŒ๋˜๋ฉด, ๋‚จ์•„ ์žˆ๋Š” ๊ธฐ๋ฌผ์— ๋Œ€ํ•œ ์ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค. ๊ฐ ๊ธฐ๋ฌผ์˜ ์ ์ˆ˜๋Š” [์žฅ๊ธฐ ๊ทœ์น™](https://arc.net/l/quote/isyrogth)์„ ์ฐธ๊ณ ํ•œ๋‹ค.
- [x] ํ•œ(HAN, ๆผข) ์ง„์˜์€ 1.5์ ์˜ ๋ณด๋„ˆ์Šค ์ ์ˆ˜๋ฅผ ๋ฐ›๋Š”๋‹ค.
- [x] ๊ฒŒ์ž„ ์ข…๋ฃŒ
- [x] ํ•œ ์ชฝ ์ง„์˜์˜ ์™•์ด ์žกํžˆ๋ฉด ๊ฒŒ์ž„์„ ์ข…๋ฃŒํ•œ๋‹ค.
- [x] ์–‘ ์ชฝ ์ง„์˜์˜ ์™•์ด ๋ชจ๋‘ ์žกํžˆ์ง€ ์•Š์•˜์–ด๋„, ์–‘ ์ชฝ ๋ชจ๋‘ ๊ธฐ๋ฌผ ์ ์ˆ˜์˜ ํ•ฉ์ด 30์  ๋ฏธ๋งŒ์ด๋ผ๋ฉด ๊ฒŒ์ž„์„ ์ข…๋ฃŒํ•œ๋‹ค. (์ง„์˜ ๋ณด๋„ˆ์Šค ์ ์ˆ˜๋Š” ํ•ฉ๊ณ„์—์„œ ์ œ์™ธ)
- [x] ์ŠนํŒจ ํŒ๋‹จ
- [x] ์™•์ด ์žกํž˜์œผ๋กœ์จ ๊ฒŒ์ž„์ด ์ข…๋ฃŒ๋˜์—ˆ๋‹ค๋ฉด, ์ ์ˆ˜์— ๊ด€๊ณ„์—†์ด ์žกํžˆ์ง€ ์•Š์€ ์ง„์˜์ด ์Šน๋ฆฌํ•œ๋‹ค.
- [x] ๊ธฐ๋ฌผ ์ ์ˆ˜ ํ•ฉ ๋ฏธ๋‹ฌ๋กœ์จ ๊ฒŒ์ž„์ด ์ข…๋ฃŒ๋˜์—ˆ๋‹ค๋ฉด, (์ง„์˜ ๋ณด๋„ˆ์Šค ์ ์ˆ˜๋ฅผ ํฌํ•จํ•˜์—ฌ) ์ ์ˆ˜๊ฐ€ ๋†’์€ ์ง„์˜์ด ์Šน๋ฆฌํ•œ๋‹ค.

#### ๊ธฐ๋ฌผ ์ดˆ๊ธฐ ์œ„์น˜

- [x] ์‹œ์ž‘ ์œ„์น˜๊ฐ€ ๊ณ ์ •๋œ ๊ธฐ๋ฌผ๋“ค์€ ๊ฒŒ์ž„ ์‹œ์ž‘ ์‹œ ์ •ํ•ด์ง„ ์œ„์น˜์— ๋ฐฐ์น˜๋˜์–ด์•ผ ํ•œ๋‹ค.
- [x] `์ƒ`๊ณผ `๋งˆ`๋Š” ์ง€์ •ํ•œ ์ˆœ์„œ์— ๋”ฐ๋ฅธ ์œ„์น˜์— ๋ฐฐ์น˜๋˜์–ด์•ผ ํ•œ๋‹ค.

### ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ธฐ๋Šฅ

- [ ] ๊ฒŒ์ž„์˜ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ์ €์žฅํ•œ๋‹ค.
- [x] ๊ฒŒ์ž„ํŒ ์œ„์˜ ๋ชจ๋“  ๊ธฐ๋ฌผ ์œ„์น˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•œ๋‹ค.
- [x] ํ˜„์žฌ ์ฐจ๋ก€(Side) ์ •๋ณด๋ฅผ ์ €์žฅํ•œ๋‹ค.
- [ ] ๋‹ค์Œ ๊ฒฝ์šฐ์— ์ €์žฅ๋œ๋‹ค.
- [x] ์‚ฌ์šฉ์ž ๋ช…๋ น์— ์˜ํ•œ ๋ช…์‹œ์  ์ข…๋ฃŒ
- [x] ๊ฒŒ์ž„ ์ŠนํŒจ ํŒ์ •์œผ๋กœ ์ธํ•œ ์ข…๋ฃŒ
- [ ] ๋‚ด/์™ธ๋ถ€ ๋ฌธ์ œ๋กœ ์ธํ•œ ๊ฐ•์ œ ์ข…๋ฃŒ
- [x] ์ €์žฅ๋œ ๊ฒŒ์ž„ ์•„์ด๋””๋ฅผ ํ†ตํ•ด ๊ฒŒ์ž„์„ ๋ถˆ๋Ÿฌ์˜จ๋‹ค.

#### DB - Requirements Specification

์•„๋ž˜ ์š”๊ตฌ์‚ฌํ•ญ ๋ช…์„ธ์„œ์—์„œ `์ฒ˜์Œ ๋“ฑ์žฅํ•˜๋Š” ์šฉ์–ด`๋Š” ์ด๋ ‡๊ฒŒ ํ‘œ์‹œํ•œ๋‹ค.

- `๊ธฐ๋ฌผ`์€ `์ข…๋ฅ˜`์™€ `์ง„์˜`์„ ๊ฐ€์ง„๋‹ค.
- ๊ธฐ๋ฌผ์€ ๋ฐ˜๋“œ์‹œ ํ•˜๋‚˜์˜ ์ง„์˜์— ์†ํ•ด์•ผ ํ•œ๋‹ค.
- ๊ธฐ๋ฌผ์€ ๋ฐ˜๋“œ์‹œ ํ•˜๋‚˜์˜ ์ข…๋ฅ˜๋ฅผ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค.
- ์ง„์˜์—๋Š” `์ดˆ(CHO)`์™€ `ํ•œ(HAN)`์ด ์กด์žฌํ•œ๋‹ค.
- ๊ธฐ๋ฌผ์˜ ์ข…๋ฅ˜์—๋Š” `์ฐจ`, `๋งˆ`, `์ƒ`, `์‚ฌ`, `๊ถ`, `ํฌ`, `๋ณ‘/์กธ`์ด ์žˆ๋‹ค.
- `์žฅ๊ธฐํŒ`์€ ๊ฐ€๋กœ 10๊ฐœ, ์„ธ๋กœ 9๊ฐœ์˜ `๊ฒฉ์ž์ `์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.
- ๊ธฐ๋ฌผ์€ ๊ฒฉ์ž์  ์œ„์— ๋†“์ธ๋‹ค.
- ๊ธฐ๋ฌผ์ด ๋†“์ด์ง€ ์•Š์€ ๊ฒฉ์ž์ ์ด ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.
- `๊ฒŒ์ž„`์€ ๊ฐ ๊ฒฉ์ž์ ์— ๋†“์ธ ๊ธฐ๋ฌผ๋“ค ์ •๋ณด๋ฅผ ๊ฐ€์ง„๋‹ค.
- ๊ฒŒ์ž„์€ ํ˜„์žฌ ๋ˆ„๊ตฌ์˜ `์ฐจ๋ก€`์ธ์ง€๋ฅผ ์•ˆ๋‹ค. ์ด ์ •๋ณด๋Š” ๊ฒŒ์ž„์„ ๋‹ค์‹œ ์‹œ์ž‘ํ–ˆ์„ ๋•Œ ์ฐจ๋ก€๊ฐ€ ๋’ค์„ž์ด์ง€ ์•Š๋„๋ก ํ•œ๋‹ค.

## ์šฉ์–ด ์‚ฌ์ „

| ์šฉ์–ด (์˜๋ฌธ) | ์„ค๋ช… |
|:-------------------------|:----------------------------------------------------|
| **Row** | ์žฅ๊ธฐํŒ์˜ ๊ฐ€๋กœ ์„  (ํ–‰) |
| **File** | ์žฅ๊ธฐํŒ์˜ ์„ธ๋กœ ์„  (์—ด) |
| **Intersection** | ๊ฐ€๋กœ์„ ๊ณผ ์„ธ๋กœ์„ ์ด ๋งŒ๋‚˜์„œ ์ƒ๊ธฐ๋Š” ๊ฒฉ์ž์ . ๊ธฐ๋ฌผ์ด ์œ„์น˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ณณ |
| **Straight, Orthogonal** | ์ง์„  ์ด๋™ ๋˜๋Š” ๊ฒฝ๋กœ |
| **Diagonal** | ๋Œ€๊ฐ์„  ์ด๋™ ๋˜๋Š” ๊ฒฝ๋กœ |
| **Side** | ์ง„์˜. ์ดˆ(CHO)์™€ ํ•œ(HAN)์œผ๋กœ ๋‚˜๋‰จ |
| **Piece** | ์žฅ๊ธฐํŒ ์œ„์— ๋†“์ด๋Š” ๋ชจ๋“  ๊ธฐ๋ฌผ์˜ ์ด์นญ |
| **Chariot** | ์ฐจ (่ปŠ). ์ „ํ›„์ขŒ์šฐ๋กœ ์žฅ์• ๋ฌผ์ด ์—†๋Š” ํ•œ ๋๊นŒ์ง€ ์ด๋™ ๊ฐ€๋Šฅ |
Expand All @@ -102,3 +213,4 @@
| **PassingIntersections** | `Path` ์ค‘ ๋ชฉ์ ์ง€๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€(= `๊ฒฝ์œ ์ง€`) |
| **MoveRule** | ์ด๋™ ๊ทœ์น™ |
| **Capture** | (์–ด๋–ค ๊ธฐ๋ฌผ์„) ์žก๋‹ค, ์ฃฝ์ด๋‹ค |
| **Point** | ๊ธฐ๋ฌผ์ด ๊ฐ€์ง€๋Š” ์ ์ˆ˜ |
2 changes: 2 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,12 @@ repositories {
}

dependencies {
implementation ('org.xerial:sqlite-jdbc:3.51.3.0')
testImplementation platform('org.junit:junit-bom:5.11.4')
testImplementation platform('org.assertj:assertj-bom:3.27.3')
testImplementation('org.junit.jupiter:junit-jupiter')
testImplementation('org.assertj:assertj-core')
testImplementation("org.mockito:mockito-core:5.23.0")
}

java {
Expand Down
15 changes: 15 additions & 0 deletions sql/ddl.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
CREATE TABLE IF NOT EXISTS game (
game_id INTEGER PRIMARY KEY AUTOINCREMENT,
current_turn VARCHAR(10) NOT NULL,
created_at DATETIME DEFAULT (CURRENT_TIMESTAMP)
);

CREATE TABLE IF NOT EXISTS piece (
game_id INTEGER NOT NULL,
position_row INTEGER,
position_file INTEGER,
side VARCHAR(10) NOT NULL,
piece_type VARCHAR(10) NOT NULL,
FOREIGN KEY (game_id) REFERENCES game(game_id),
PRIMARY KEY (game_id, position_row, position_file)
);
20 changes: 19 additions & 1 deletion src/main/java/Application.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,28 @@
import controller.JanggiController;
import java.nio.file.Path;
import javax.sql.DataSource;
import repository.DatabaseInitializer;
import support.DBConnectionUtil;
import repository.JanggiGameRepository;
import service.JanggiService;
import support.TransactionTemplate;
import view.InputView;
import view.OutputView;

public class Application {
public static void main(String[] args) {
JanggiController janggiController = new JanggiController(new InputView(), new OutputView());
DataSource dataSource = DBConnectionUtil.getDataSource();
DatabaseInitializer initializer = new DatabaseInitializer(dataSource);
initializer.init(Path.of(("sql/ddl.sql")));

JanggiController janggiController = new JanggiController(
new JanggiService(
new TransactionTemplate(dataSource),
new JanggiGameRepository()
),
new InputView(),
new OutputView()
);

janggiController.run();
}
Expand Down
Loading