Skip to content

[๐Ÿš€ ์‚ฌ์ดํด2 - ๋ฏธ์…˜ (๊ธฐ๋ฌผ ํ™•์žฅ + DB ์ ์šฉ)] ์•„ํ‹ฐ ๋ฏธ์…˜ ์ œ์ถœํ•ฉ๋‹ˆ๋‹ค.#333

Open
ParkJiYeoung8297 wants to merge 25 commits intowoowacourse:parkjiyeoung8297from
ParkJiYeoung8297:step2

Conversation

@ParkJiYeoung8297
Copy link
Copy Markdown

@ParkJiYeoung8297 ParkJiYeoung8297 commented Apr 8, 2026

์‚ฌ์ดํด 2

2.1๋‹จ๊ณ„ - ๊ธฐ๋ฌผ์˜ ํ™•์žฅ

  • ๊ถ์„ฑ ์˜์—ญ์— ๋Œ€ํ•œ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
  • ์ฐจ์™€ ์ƒ์˜ ๊ถ์„ฑ ๊ตฌํ˜„
  • ์ ์ˆ˜ ๊ณ„์‚ฐ ๋ฐ ์ถœ๋ ฅ ๊ธฐ๋Šฅ ๊ตฌํ˜„
  • ๊ฒŒ์ž„ ์ข…๋ฃŒ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ (์™• ์žกํžˆ๋ฉด ์ข…๋ฃŒ)
  • ์ƒ๊ณผ ํฌ์˜ ๊ทœ์น™ ์ถ”๊ฐ€
  • ๊ธฐ๋ฌผ๋ณ„ ๊ฒฝ๋กœ ํƒ์ƒ‰ ๊ธฐ๋ฐ˜์œผ๋กœ ์ด๋™ ์ขŒํ‘œ ๊ณ„์‚ฐ ๊ตฌ์กฐ ๋ณ€๊ฒฝ
  • ๊ถ์„ฑ์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
  • ๋ณด๋“œ์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

1)๊ถ์„ฑ(ๅฎฎๅŸŽ) ์˜์—ญ์˜ ๊ทœ์น™์„ ํฌํ•จ

  • ๊ถ์„ฑ์˜์—ญ์ธ์ง€ ํŒ๋‹จํ•˜๋Š” ๋ฉ”์„œ๋“œ isInPalace()์„ ์ถ”๊ฐ€ (Postition.java)
  • ๊ถ์„ฑ์˜์—ญ์—์„œ ๋Œ€๊ฐ์ด๋™์ด ๊ฐ€๋Šฅํ•œ 10๊ฐœ์˜ ์ขŒํ‘œ์— ์œ„์น˜ํ•˜๋ฉด, ํƒ์ƒ‰ ๋ฐฉํ–ฅ์— ๋Œ€๊ฐ ๋ฐฉํ–ฅ ์ถ”๊ฐ€ํ•˜๋Š” addPalaceDirection() ์ถ”๊ฐ€ (Postition.java)
    (๋‹จ, ๊ธฐ๋ฌผ์ด ๋Œ€๊ฐ ์ด๋™ ์‹œ ๊ถ์„ฑ์„ ๋ฒ—์–ด๋‚˜์ง€ ์•Š๋Š”์ง€๋Š” piece ํ•œ์นธ์”ฉ ์ด๋™ํ•˜๋ฉด postion.isInPalace()๋ฅผ ํ˜ธ์ถœํ•ด์„œ ํŒ๋‹จ)

2)์™•์ด ์žกํ˜”์„ ๋•Œ ๊ฒŒ์ž„์„ ์ข…๋ฃŒ

  • ์™•์ด ์ฃฝ์—ˆ๋Š”์ง€ ํŒ๋‹จํ•˜๋Š” isKingAlive() ์ถ”๊ฐ€ (Board.java)
  • ์™•์ด ์ฃฝ์—ˆ๋‹ค๋ฉด state๋ฅผ ExitGame ์ƒํƒœ๋กœ ๋ณ€๊ฒฝ (JanggiGame.java)

3)๊ธฐ๋ฌผ์— ๋Œ€ํ•œ ์ ์ˆ˜

  • ๊ธฐ๋ฌผ ์ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” calculateScore() ์ถ”๊ฐ€ (Board.java)

4)์ด๋™ ํŒ๋‹จ ๋กœ์ง ๋ณ€๊ฒฝ

  • ๊ธฐ์กด์—๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ์ขŒํ‘œ๋ฅผ ์ž…๋ ฅ๋ฐ›์•„์„œ ์ด๋™๊ฐ€๋Šฅํ•œ์ง€๋ฅผ ํŒ๋‹จํ–ˆ์ง€๋งŒ,

    ํ˜„์žฌ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๊ธฐ๋ฌผ์„ ์„ ํƒํ•˜๋ฉด ์ด๋™ ๊ฐ€๋Šฅํ•œ ์ขŒํ‘œ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

2.2๋‹จ๊ณ„ - DB ์ ์šฉ

  • JDBC DB ์—ฐ๊ฒฐ ์„ค์ • ์ถ”๊ฐ€
  • ๊ฒŒ์ž„ ์ดˆ๊ธฐํ™”
  • ๋ณด๋“œ ์ดˆ๊ธฐ ์ƒํƒœ๋ฅผ DB์— ์ €์žฅ ๋ฐ ๊ธฐ์กด ๊ฒŒ์ž„ ์กฐํšŒ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
  • ๊ฒŒ์ž„ ์ด๋™ ๊ฒฐ๊ณผ DB ์ €์žฅ
  • h2์˜ ์„œ๋ฒ„ ๋‹ซ๋Š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€

1)DB ์„ ํƒ ์ด์œ 

H2๊ฐ€ ๊ธฐ๋ณธ์œผ๋กœ ๋‚ด์žฅ๋˜์–ด์žˆ์–ด์„œ, ์„ค์น˜์—†์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” H2๋ฅผ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.
Application์„ ์‹คํ–‰์‹œํ‚ค๋ฉด "janggiGame.mv.db"ํŒŒ์ผ์ด ๋กœ์ปฌ์— ์ €์žฅ๋˜๊ณ , H2 ์ฝ˜์†” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์—ด๋ฆฝ๋‹ˆ๋‹ค.
http://localhost:8082/ ๋ฅผ ํ†ตํ•ด H2 ์ฝ˜์†” ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ ‘์†ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2)DB ์ €์žฅ ์‹œ์ 

  • ์‚ฌ์šฉ์ž๊ฐ€ ์ดˆ๋‚˜๋ผ, ํ•œ๋‚˜๋ผ์˜ ๋งˆ์ƒ๋งˆ์ƒ์„ ์„ ํƒํ–ˆ์„ ๋•Œ โ†’ ๋ณด๋“œ ์ •๋ณด ์ดˆ๊ธฐํ™”ํ•˜์—ฌ DB์— INSERT
  • ํ•œ ํ„ด์ด ๋๋‚ฌ์„ ๋•Œ โ†’ ๋ฐ”๋€ ๋ณด๋“œ ์ •๋ณด์™€ ๋‹ค์Œ ์ˆœ์„œ๋ฅผ DB์— UPDATE

์งˆ๋ฌธ

1. PieceFinder๋ฅผ ํ†ตํ•ด Piece์—์„œ Board ์ •๋ณด ์กฐํšŒํ•˜๊ธฐ
์‚ฌ์ดํด 2์— ๋“ค์–ด์™€์„œ, ๊ฐ ๊ธฐ๋ฌผ์—์„œ ์ด๋™ ๊ทœ์น™์— ๋”ฐ๋ผ ํ•œ์นธ์”ฉ ์ด๋™ํ•˜๋ฉฐ ์ด๋™ ๊ฐ€๋Šฅํ•œ์ง€ ๊ฒ€์ฆํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.
์ด์— ๋”ฐ๋ผ, Piece์—์„œ ๋‹ค๋ฅธ ๊ธฐ๋ฌผ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ํ•„์š”ํ–ˆ๋Š”๋ฐ, Piece๊ฐ€ Board์—๊ฒŒ ๋ฌผ์–ด๋ณด๋ฉด ์ˆœํ™˜ ์ฐธ์กฐ๊ฐ€ ๋ฐœ์ƒํ•ด์„œ ๋ถˆ๊ฐ€๋Šฅํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ž˜์„œ ๋ฐฉ๋ฒ•์„ ์ฐพ์•„๋ณด๋‹ˆ, PieceFinder ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ Board์—์„œ ๊ตฌํ˜„ํ•˜๊ณ , Piece์—๊ฒŒ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„˜๊ฒจ์ฃผ๋ฉด, Piece๊ฐ€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด Board์˜ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์ œ์–ด์˜ ์—ญ์ „(IoC)์ด ๋œ๋‹ค๋Š” ๋‹ต๋ณ€์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.
Piece์—์„œ PieceFinder๋กœ Board์˜ ์ •๋ณด๋ฅผ ์ผ๋ถ€๋งŒ ํƒ์ƒ‰ํ•˜๋Š” ๊ตฌ์กฐ๊ฐ€ ๊ดœ์ฐฎ์€์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

(๊ทผ๋ฐ ์ด๊ฒŒ ์ œ์–ด์˜ ์—ญ์ „ ๊ฐœ๋…์ด ๋งž์„๊นŒ์š”? Board๊ฐ€ Piece๋ฅผ ์ œ์–ดํ•˜๋Š”๋ฐ, ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด Piece๊ฐ€ Board ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ตฌ์กฐ์—ฌ์„œ ์ œ์–ด์˜ ์—ญ์ „์ด๋ผ๊ณ  ์ดํ•ดํ–ˆ๋Š”๋ฐ, ์ด๊ฒŒ ๋งž๋Š”์ง€๋„ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.)

(Board.java - findAvailablePositions() ์ฐธ๊ณ )

2. Service์—์„œ JanggiGame ๋„๋ฉ”์ธ ์ƒ์„ฑ
DB๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ณผ์ •์—์„œ ๊ธฐ์กด์— Controller์—์„œ ์‚ฌ์šฉํ•˜๋˜ JanggiGame ๋„๋ฉ”์ธ์„ ์ „๋ถ€ int gameId๋กœ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ , Service์˜ ๊ฐ ๋ฉ”์„œ๋“œ๋งˆ๋‹ค gameId๋กœ DB๋ฅผ ์กฐํšŒํ•ด์„œ JanggiGame์„ ์ƒ์„ฑํ•˜๊ณ , ์ด๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.
์ตœ๋Œ€ํ•œ ๊ธฐ์กด ์ฝ”๋“œ ๋ณ€๊ฒฝ์—†์ด DB ๊ธฐ๋Šฅ์„ ๋ถ™์ด๊ณ  ์‹ถ์–ด์„œ, ์œ„์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ ์ด๊ฒŒ ์ ์ ˆํ•œ ๋ฐฉ๋ฒ•์ธ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

(Service์—์„œ ๋งค๋ฒˆ JanggiGame์„ ์ƒˆ๋กœ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ๋งž๋Š”์ง€์— ๋Œ€ํ•ด ์˜๋ฌธ์ด ๋“ค์–ด์„œ ๋“œ๋ฆฌ๋Š” ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค.
Service์—์„œ ์žฅ๊ธฐ๊ฒŒ์ž„์„ ํ•œ๋ฒˆ ์ƒ์„ฑํ•˜๊ณ , ์ด๋ฅผ controller์— ๋„˜๊ธฐ๋Š” ๋ฐฉ์‹์€ ๊ณ„์ธต์˜ ๋ถ„๋ฆฌ๊ฐ€ ํ˜ผ์žฌ๋  ๊ฒƒ ๊ฐ™์•„์„œ ์ง€์–‘ํ•ด์•ผํ•  ๊ฑฐ ๊ฐ™์€๋ฐ ,
Service์˜ ๋ฉ”์„œ๋“œ๋งˆ๋‹ค JanggiGame์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ์‹์ด ์ ์ ˆํ•œ ๊ฑธ๊นŒ์š”?)

3. DB Connection pool
DB Connection์€ ํŠธ๋žœ์žญ์…˜ ๋‹จ์œ„๋กœ ์—ด๊ณ  ๋‹ซ์•„์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐ์„ ํ•ด์„œ, Service์˜ ๋ฉ”์„œ๋“œ์—์„œ ๋งค๋ฒˆ connection pool์„ ์—ด๊ณ  ๋‹ซ๋Š” ์ฝ”๋“œ๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค๋ณด๋‹ˆ ์ฝ”๋“œ์˜ ์ค‘๋ณต์ด ๋งŽ์•„์ง€๋Š” ๊ฒƒ ๊ฐ™์€๋ฐ, ์ด๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๋ฆฌํŒฉํ† ๋งํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์„์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

4. DB ๊ธฐ๋ฌผ ๋ฐ์ดํ„ฐ update ๋ฐฉ๋ฒ•
ํ˜„์žฌ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๊ธฐ๋ฌผ์„ ์ด๋™ํ–ˆ์„ ๋–„, piece_position ํ…Œ์ด๋ธ”์—์„œ ํ•ด๋‹น ๊ฒŒ์ž„๊ณผ ๊ด€๋ จ๋œ piece๋ฅผ ๋ชจ๋‘ ์‚ญ์ œํ•˜๊ณ , ์ƒˆ๋กœ insertํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. deleteํ•˜๊ณ  insertํ•˜๋Š”๊ฒŒ ๋น„ํšจ์œจ์ ์ด๋ผ๊ณ  ๋А๊ปด์ง€๊ธฐ๋„ ํ•˜์ง€๋งŒ, ์ž‘์€ ๊ทœ๋ชจ์—์„œ๋Š” ํ•ด๋‹น piece๋ฅผ ์ฐพ์•„์„œ updateํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค delete + insert๊ฐ€ ๊ฐ„๋‹จํ•˜๊ณ  ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ์„ ์ง€ํ‚ค๋Š”๋ฐ ๋” ๋‚˜์„ ๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐ์ด ๋“œ๋Š”๋ฐ ์ด์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์‹œ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

5. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ
๊ธฐ๋Šฅ์ด ๋งŽ์•„์ง€๊ณ , DB๊นŒ์ง€ ์ถ”๊ฐ€ํ•˜๊ณ  ๋‚˜๋‹ˆ๊นŒ ์–ด๋А ํ…Œ์ŠคํŠธ๋ฅผ ์šฐ์„  ์‹œ ํ•ด์•ผํ• ๊นŒ์— ๋Œ€ํ•ด ๊ณ ๋ฏผ์ด ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค.
์ €๋Š” ํ˜„์žฌ ๋„๋ฉ”์ธ ํ…Œ์ŠคํŠธ ์œ„์ฃผ๋กœ ์ž‘์„ฑ์„ ํ–ˆ๋Š”๋ฐ, ๋„๋ฉ”์ธ ์™ธ ๊ณ„์ธต์—์„œ๋„ DB๋ฅผ ๊ฑฐ์น˜๋Š” ๋“ฑ์˜ ๊ธฐ๋Šฅ๋“ค์ด ์ถ”๊ฐ€๋˜๋‹ˆ๊นŒ
"๋„๋ฉ”์ธ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€๋ณด๋‹ค ์ฐจ๋ผ๋ฆฌ service์—์„œ ํ•œ๊บผ๋ฒˆ์— ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ฒƒ์ด ๋‚˜์„๊นŒ?"๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
ํ…Œ์ŠคํŠธํ•ด์•ผํ•  ๊ธฐ๋Šฅ์ด ๋งŽ์„ ๋•Œ, ์šฐ์„ ์ˆœ์œ„๋กœ ๋‘์‹œ๋Š” ํ…Œ์ŠคํŠธ๊ฐ€ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

6. ๊ฐ ๊ธฐ๋ฌผ ๋ฆฌํŒฉํ† ๋ง
๊ฐ ๊ธฐ๋ฌผ ํด๋ž˜์Šค์—์„œ ๋น„์Šทํ•œ ๋กœ์ง์ด ์žˆ๋Š”๊ฑฐ ๊ฐ™์€๋ฐ ์ด ๋ถ€๋ถ„์„ ๋ฆฌํŒฉํ† ๋งํ•  ๋ฐฉ๋ฒ•์„ ๊ณ ๋ฏผํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
ํ˜น์‹œ ์ถ”์ฒœํ•ด์ฃผ์‹ค ๋ฐฉ๋ฒ•์ด ์žˆ์„์ง€ ์กฐ์–ธ์„ ๊ตฌํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

- ๋ธŒ๋ผ์šฐ์ € ์„œ๋ฒ„ ์—ฌ๋Š” ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€
- ๋ฐ์ดํ„ฐ ์ดˆ๊ธฐ ๋กœ๋“œ์™€ DB connection ๋ถ„๋ฆฌ
Copy link
Copy Markdown

@younghoondoodoom younghoondoodoom left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

์•ˆ๋…•ํ•˜์„ธ์š” ์•„ํ‹ฐ~! ์ด๋ฒˆ ์‚ฌ์ดํด2๋„ ์ž˜ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค ๐Ÿ™Œ

์‚ฌ์ดํด2๋„ ์ž˜ ๊ตฌํ˜„ํ•ด์ฃผ์…จ๊ตฐ์š”~! ๋‹ค๋งŒ, ์š”๊ตฌ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜์ง€ ๋ชปํ•œ ๋ถ€๋ถ„๊ณผ ๊ณ ๋ฏผ์ด ํ•„์š”ํ•œ ๋ถ€๋ถ„์ด ๋ณด์—ฌ์„œ ์ฝ”๋ฉ˜ํŠธ ๋‚จ๊ฒจ๋†จ์œผ๋‹ˆ ๋ฐ˜์˜ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

๋‹ค์Œ์€ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‹ต๋ณ€์ž…๋‹ˆ๋‹ค.

  1. PieceFinder๋ฅผ ํ†ตํ•ด Piece์—์„œ Board ์ •๋ณด ์กฐํšŒํ•˜๊ธฐ

๋ฆฌ๋ทฐ conversation์—์„œ ๋Œ€ํ™” ๋‚˜๋ˆ ๋ณด์‹œ์ฃ !

  1. Service์—์„œ JanggiGame ๋„๋ฉ”์ธ ์ƒ์„ฑ

๋ฆฌ๋ทฐ conversation์—์„œ ๋Œ€ํ™” ๋‚˜๋ˆ ๋ณด์‹œ์ฃ !

  1. DB Connection pool

๋ฆฌ๋ทฐ conversation์—์„œ ๋Œ€ํ™” ๋‚˜๋ˆ ๋ณด์‹œ์ฃ !

  1. DB ๊ธฐ๋ฌผ ๋ฐ์ดํ„ฐ update ๋ฐฉ๋ฒ•

๋งŒ์•ฝ ๊ธฐ๋ฌผ์„ ์ด๋™ํ• ๋•Œ๋งˆ๋‹ค update๋ฅผ ํ•˜๋Š”๊ฒŒ ์•„๋‹Œ ๊ฒŒ์ž„์ด ๋๋‚ฌ์„๋•Œ ๋งˆ์ง€๋ง‰ ์ƒํƒœ์— ๋Œ€ํ•ด์„œ db update๋ฅผ ํ•˜๋Š” ๊ตฌ์กฐ์˜€๋‹ค๋ฉด delete -> insertํ•˜๋Š”๊ฒŒ ๋” ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ์„๊ฑฐ ๊ฐ™์•„์š”. ํ•˜์ง€๋งŒ ์ง€๊ธˆ์€ ๊ธฐ๋ฌผ์„ ์ด๋™ํ• ๋•Œ๋งˆ๋‹ค ์œ„์น˜๋ฅผ updateํ•˜๋Š” ๊ตฌ์กฐ๋‹ค๋ณด๋‹ˆ ๋ชจ๋“  ๊ธฐ๋ฌผ์„ ์‚ญ์ œํ•˜๊ณ  ๋‹ค์‹œ insert๋ฅผ ํ•˜๋Š”๊ฒŒ ์ฟผ๋ฆฌ๋„ ํ›จ์”ฌ ๋งŽ์ด ๋‚˜๊ฐ€๊ณ  ์ˆ˜์ • ๋น„์šฉ์ด ๋” ๋งŽ์„ ๊ฒƒ ๊ฐ™๋„ค์—ฌ!

  1. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ

๊ธฐ๋Šฅ์ด ๋งŽ์•„์ง€๋‹ค๋ณด๋ฉด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์— ๋Œ€ํ•œ ๋ถ€๋‹ด์ด ์žˆ๋Š”๊ฑธ ์‚ฌ์‹ค์ž…๋‹ˆ๋‹ค. ๋‹ค๋งŒ, ๋ชจ๋“  ๋‹จ์œ„์— ๋Œ€ํ•ด์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋Š”๊ฒŒ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์•ˆ์ •์„ฑ์„ ๋†’ํžˆ๋Š” ๊ฒƒ๋„ ๋งž์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ ํ”„๋กœ๋•์…˜์„ ๊ตฌํ˜„ํ•˜๋Š” ํ›ˆ๋ จ๋„ ํ•˜์ง€๋งŒ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ์— ๋Œ€ํ•œ ํ›ˆ๋ จ๋„ ํ•˜๋Š” ๋ฏธ์…˜์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ๋‹จ์œ„์— ๋Œ€ํ•ด์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜์‹œ๋Š”๊ฑธ ์ถ”์ฒœ๋“œ๋ ค์š”. ์ง€๊ธˆ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๊ฐ€ ๋งŽ์ด ๋ถ€์กฑํ•ด๋ณด์ž…๋‹ˆ๋‹ค!

  1. ๊ฐ ๊ธฐ๋ฌผ ๋ฆฌํŒฉํ† ๋ง

์ถ”์ƒ ํด๋ž˜์Šค๋‚˜ util์„ฑ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ณ ๋ คํ•ด๋ณด์„ธ์š”~!

outputView.printChangeTurnMessage(janggiGame.getCountry().getName());
playTurn(janggiGame, board);
isGameContinue= isGameContinue();
private static void checkRetryLimit(int retry) {
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

์ด ๋ฉ”์†Œ๋“œ๋Š” ์•ˆ์—์„œ๋งŒ ๋‚ด๋ถ€ ๋ฉ”์†Œ๋“œ์ธ๋ฐ static์ผ ์ด์œ ๊ฐ€ ์—†์„๊ฑฐ ๊ฐ™์•„์š”. ๊ทธ๋ฆฌ๊ณ  ๋ฉ”์†Œ๋“œ ์ˆœ์„œ ์ •๋ฆฌ๋„ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

๋„ต static ์ œ๊ฑฐํ•˜๊ณ , ์ˆœ์„œ ์ •๋ฆฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!
ํ˜น์‹œ ๋‘๋‘ ์€ ์–ด๋–ค ๊ธฐ์ค€์œผ๋กœ ๋ฉ”์†Œ๋“œ ์ˆœ์„œ๋ฅผ ์ •๋ฆฌํ•˜์‹œ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค!

int choose = inputView.chooseGameStartNewOrAgain();
if (choose == 2) {
int num = inputView.requestGameId();
janggiService.validateExistGame(choose);
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

db์—์„œ ์žฅ๊ธฐ ๊ฒŒ์ž„์ด ์กด์žฌํ•˜๋Š”์ง€ ์ฒดํฌํ•˜๋Š”๊น€์— ์žฅ๊ธฐ ๊ฒŒ์ž„์„ ๊ฐ€์ ธ์˜ค๋Š”๊ฒŒ ๋””๋น„ ์ฟผ๋ฆฌ ํšจ์œจ ์ƒ ์ข‹์„๊ฒƒ ๊ฐ™์•„์š”

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

num์ด ์•„๋‹ˆ๋ผ choose๋ฅผ ๋„˜๊ธฐ๊ณ  ์žˆ๋Š”๋ฐ์š”?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. ์‚ฌ์šฉ์ž์—๊ฒŒ game_id๋ฅผ ์ž…๋ ฅ๋ฐ›๊ณ  ์ด id๊ฐ€ ์žˆ๋Š”์ง€๋งŒ ์ฒดํฌํ•˜๋ฉด, ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Controller์—์„œ๋Š” janggiGame ๋„๋ฉ”์ธ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , ๋ชจ๋‘ game_id๋กœ ์‚ฌ์šฉํ•˜๋„๋ก ๋ถ„๋ฆฌํ•ด๋‘์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฒ€์ฆ๋งŒ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค!

  2. num์„ ๋„˜๊ฒจ์•ผํ•˜๋Š”๋ฐ ์ž˜๋ชป ํ–ˆ๋„ค์š”.๐Ÿ˜… num์œผ๋กœ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

);
}

// public static Board defaultBoard() {
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

์ฃผ์„์ฒ˜๋ฆฌ ํ•˜๋Š” ๋Œ€์‹  ๋ถˆํ•„์š”ํ•˜๋ฉด ์‚ญ์ œ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค

Comment on lines +30 to +48
for (Direction direction : directions) {
List<Piece> pieces = new ArrayList<>();
int i = Position.MAX_ROW;
Position now = start;
while (i-- > 0) {
Optional<Position> position = move(now, direction);
if (position.isEmpty()) {
break;
}
now = position.get();
if (Direction.getDiagonalDirections().contains(direction) && (!now.isInPalace())){
break;
}
Piece endPiece = finder.find(position.get());
if (isNotPo(endPiece) && isDifferentCountry(endPiece.getCountry()) && hasNotPoAmongPath(pieces) && hasOnePieceAmongPath(pieces)) {
availableRoute.add(position.get());
}
pieces.add(endPiece);
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

์ด ๋ถ€๋ถ„๋„ 10์ค„ ์œ ์ง€, depth ์œ ์ง€ 1๋กœ ์ˆ˜์ • ๋ถ€ํƒ๋“œ๋ ค์š”

public BoardDto buildBoardDto(Board board) {
public BoardDto buildBoardDto(int gameId) {
Connection conn = ConnectionManager.getConnection();
JanggiGameRepository janggiGameRepository = new JanggiGameRepository(conn);
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

JanggiGameRepository๋ฅผ ๋ฉ”์†Œ๋“œ ๋‚ด์—์„œ ์ƒ์„ฑํ•˜๋Š” ์ด์œ ๊ฐ€ ๋ญ”๊ฐ€์š”?

Connection conn = ConnectionManager.getConnection();
JanggiGameRepository janggiGameRepository = new JanggiGameRepository(conn);
JanggiGame janggiGame = janggiGameRepository.findByGameId(gameId);
ConnectionManager.closeConnection(conn);
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

db connection์— ๋Œ€ํ•œ ๊ด€๋ฆฌ๋Š” ๋ชจ๋‘ service์—์„œ ํ•˜๊ณ ์žˆ๋„ค์š”. ์™œ ์ด๋Ÿฐ ๊ฒฐ์ •์„ ํ•˜์…จ๋Š”์ง€ ์„ค๋ช… ๋ถ€ํƒ๋“œ๋ ค์š”!

Comment on lines +42 to +51
public List<Position> findAvailablePositions(Position start) {
Piece startPiece = board.getOrDefault(start, None.INSTANCE);
Piece endPiece = board.getOrDefault(end, None.INSTANCE);
PieceFinder finder = new PieceFinder() {
@Override
public Piece find(Position position) {
return board.getOrDefault(position, None.INSTANCE);
}
};
return startPiece.getAvailableRoute(start,finder);
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. PieceFinder๋ฅผ ํ†ตํ•ด Piece์—์„œ Board ์ •๋ณด ์กฐํšŒํ•˜๊ธฐ

Piece์—์„œ Board๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์˜์กด์„ฑ ๋ฐฉํ–ฅ์ด ๊นจ์ง€๊ธฐ ๋•Œ๋ฌธ์— PieceFinder๋ฅผ ์‚ฌ์šฉํ•˜์…จ๊ตฐ์š”. PieceFinder๋ฅผ ํ†ตํ•ด์„œ board์— ๋Œ€ํ•œ ์ง์ ‘ ์˜์กด์„ ๋Š์—ˆ์œผ๋‹ˆ ์ข‹์€ ๋ฐฉํ–ฅ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค~!
ํ•˜์ง€๋งŒ ๊ตณ์ด PieceFinder์„ ๋งŒ๋“ค ํ•„์š”๊ฐ€ ์žˆ์—ˆ๋‚˜ ์‹ถ์€ ์ƒ๊ฐ์€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ƒฅ getAvailableRoute์— ํ˜„์žฌ ๊ธฐ๋ฌผ์œ„์น˜๋ฅผ board์—์„œ ๋ณต์‚ฌํ•ด์„œ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌํ–ˆ์œผ๋ฉด ๊ฐ„๋‹จํ•˜๊ฒŒ ๋๋‚˜๋Š” ์ผ์ด ์•„๋‹Œ๊ฐ€ ์‹ถ์–ด์š”!
๊ทธ๋ฆฌ๊ณ  ์ด ๊ฒฝ์šฐ๋Š” ioc๋Š” ์•„๋‹ˆ๊ณ , ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๊ธฐ๋ฌผ ์œ„์น˜๋ฅผ ์กฐํšŒํ•œ๊ฑฐ์ž…๋‹ˆ๋‹ค. ioc์— ๋Œ€ํ•ด์„œ๋Š” ์ข€ ๋” ๊ณต๋ถ€ํ•˜์‹œ๋Š”๊ฑฐ ์ถ”์ฒœ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

}

public void run() {
int gameId = initOrGetGame();
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. Service์—์„œ JanggiGame ๋„๋ฉ”์ธ ์ƒ์„ฑ

controller์—์„œ JanggiGame ๊ฐ์ฒด์— ์ง์ ‘ ์˜์กดํ•˜์ง€ ์•Š๊ธฐ์œ„ํ•ด id๋ฅผ ํ†ตํ•ด ํ†ต์‹ ํ•˜๋Š”๊ตฐ์š”! ํ•˜์ง€๋งŒ ํ™•์‹คํžˆ ์ด ๋ฌธ์ œ๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด์„œ service๋งˆ๋‹ค id๋ฅผ ์ „๋‹ฌํ•ด์ฃผ๊ณ  service์—์„œ JanggiGame์„ ์ฐพ์•„์„œ ์“ฐ๋Š”๊ฒŒ ๋น„ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค. ํŠนํžˆ db ์ฟผ๋ฆฌ๊ฐ€ ๋งŽ์ด ๋‚˜๊ฐ€์š”.
controller์™€ service๊ฐ€ id๋ฅผ ํ†ตํ•ด ํ†ต์‹ ํ•˜๋Š”๊ฑด ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉํ–ฅ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. controller๊ฐ€ janggiGame์— ์˜์กดํ•˜๊ณ  ์žˆ์œผ๋ฉด ๋„๋ฉ”์ธ ์บก์Аํ™”๊ฐ€ ๊นจ์ง€๊ณ  ์˜ํ–ฅ๋ฒ”์œ„๊ฐ€ ๋Š˜์–ด๋‚˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
์ด๋Œ€๋กœ ์œ ์ง€ํ•˜๋ฉด์„œ db ์ฟผ๋ฆฌ๋ฅผ ๋œ ๋‚˜๊ฐ€๊ฒŒ ํ•˜๊ธฐ์œ„ํ•œ ๋ฐฉ๋ฒ•์„ ๊ณ ๋ฏผํ•ด๋ณด์„ธ์š”!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants