Skip to content

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

Open
boyekim wants to merge 20 commits intowoowacourse:boyekimfrom
boyekim:step2

Conversation

@boyekim
Copy link
Copy Markdown

@boyekim boyekim commented Apr 8, 2026

์ฒดํฌ ๋ฆฌ์ŠคํŠธ

  • ๋ฏธ์…˜์˜ ํ•„์ˆ˜ ์š”๊ตฌ์‚ฌํ•ญ์„ ๋ชจ๋‘ ๊ตฌํ˜„ํ–ˆ๋‚˜์š”?
  • Gradle test๋ฅผ ์‹คํ–‰ํ–ˆ์„ ๋•Œ, ๋ชจ๋“  ํ…Œ์ŠคํŠธ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ํ†ต๊ณผํ–ˆ๋‚˜์š”?
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜๋‚˜์š”?

์–ด๋–ค ๋ถ€๋ถ„์— ์ง‘์ค‘ํ•˜์—ฌ ๋ฆฌ๋ทฐํ•ด์•ผ ํ• ๊นŒ์š”

๋ฆฌ๋ทฐ ์š”์ฒญ์ด ๋Šฆ์–ด์ง„ ์  ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค...

DB ์ ์šฉ

DB๋Š” SQLite๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์œ ๋Š” ์š”๊ตฌ์‚ฌํ•ญ์„ ์ถฉ์กฑ์‹œํ‚ค๋ ค๋ฉด ํŒŒ์ผ DB์—ฌ์•ผํ•˜๊ณ , H2๋Š” ์ด์ „์— ์˜ˆ์•ฝ์–ด ๋•Œ๋ฌธ์— ๊ท€์ฐฎ์•˜๋˜ ๊ฒฝํ—˜์ด ์žˆ์–ด ๋ฐ˜๊ฐ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ํ•œ๋ฒˆ๋„ ์•ˆ์จ๋ณธ SQLite๋ฅผ ์‚ฌ์šฉํ•ด๋ดค์Šต๋‹ˆ๋‹ค.
DB์— ์–ด๋–ค ์ •๋ณด๋ฅผ ์ €์žฅํ• ์ง€ ๊ณ ๋ฏผํ•œ ๋์—, ๋ณด๋“œ ์ƒํƒœ ์ „์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ ์ด๋™ ์ •๋ณด๋งŒ ์ €์žฅํ•˜๋„๋ก ๊ตฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ฒฐ๋ก ์€ ์ด์ „์— ์—์ฝ”๊ฐ€ ๋‚จ๊ฒจ์ฃผ์‹  ์ด๋™ ์ •๋ณด๋งŒ ๋‚จ๊ฒจ๋ณด์•˜์Šต๋‹ˆ๋‹ค! ์ด์œ ๋Š” ์–ด์ฐจํ”ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์žฌ์‹œ์ž‘ ์‹œ Turn ์ •๋ณด๋ฅผ ์žฌ๊ตฌ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด ๋ฐฉ์‹์€ ๋ณด๋“œ ์Šค๋ƒ…์ƒท์„ ์ง์ ‘ ์ €์žฅํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์ €์žฅ ๊ตฌ์กฐ๊ฐ€ ๋‹จ์ˆœํ•˜๊ณ , ๊ธฐ์กด doGame / move ํ๋ฆ„์„ ๊ทธ๋Œ€๋กœ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค๊ณ  ํŒ๋‹จํ–ˆ์–ด์š”.

์ด์ „ ์ฝ”๋ฉ˜ํŠธ ์ ์šฉ

Board๋ฅผ ์ธ์ž๋กœ ๋ฐ›์„ ๊ฒฝ์šฐ Board <-> Piece ์–‘๋ฐฉํ–ฅ ์˜์กด์„ฑ์ด ์ƒ๊น๋‹ˆ๋‹ค. Piece์˜ ๋ณ€๊ฒฝ์— Board๊ฐ€ ์˜ํ–ฅ์„ ๋ฐ›๊ณ , Board ๋ณ€๊ฒฝ์— Piece๊ฐ€ ์˜ํ–ฅ์„ ๋ฐ›๋Š”๋ฐ์š”, ์ด ๋ถ€๋ถ„ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”?

ํ•ด๋‹น ์ฝ”๋ฉ˜ํŠธ ์ ์šฉ ๋ฐฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
AS-IS

  • Piece๊ฐ€ Board๋ฅผ ์ง์ ‘ ๋ฐ›์•„ ์žฅ์• ๋ฌผ์„ ๊ฒ€์ฆํ•œ๋‹ค.
  • ์ด ๊ณผ์ •์—์„œ Board์™€ Piece ์‚ฌ์ด์— ์–‘๋ฐฉํ–ฅ ์˜์กด์„ฑ์ด ์ƒ๊ธด๋‹ค.

TO-BE

  • Board๊ฐ€ ์ด๋™ ๊ฒฝ๋กœ์˜ ์œ„์น˜ ์ •๋ณด๋ฅผ ์ˆ˜์ง‘ํ•ด DTO(MoveRoute)๋กœ ๋งŒ๋“ ๋‹ค.
  • Piece๋Š” Board ๋Œ€์‹  MoveRoute๋ฅผ ๋ฐ›์•„ ์ด๋™ ๊ฐ€๋Šฅ ์—ฌ๋ถ€๋ฅผ ๊ฒ€์ฆํ•œ๋‹ค.

์ด ๋ณ€๊ฒฝ์„ ํ†ตํ•ด Piece๊ฐ€ ๋ณด๋“œ ์ „์ฒด ๊ตฌ์กฐ๋ฅผ ์ง์ ‘ ์•Œ ํ•„์š”๊ฐ€ ์—†์–ด์กŒ๊ณ , Board์™€ Piece ์‚ฌ์ด์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

@echo724 echo724 self-requested a review April 8, 2026 12:59
Copy link
Copy Markdown

@echo724 echo724 left a comment

Choose a reason for hiding this comment

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

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

๊ทธ๋ฆฌ๊ณ  ์ด์ „ ์ปค๋ฉ˜ํŠธ๋„ ์ž˜ ๋ฐ˜์˜ํ•ด์ฃผ์‹  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค! ๊ตณ์ด ํ”ผ์Šค์—๊ฒŒ ์žˆ์–ด์„œ ๋ณด๋“œ์˜ ๊ตฌํ˜„ ๋‚ด์šฉ์„ ์•Œ ํ•„์š”๋Š” ์—†์œผ๋‹ˆ ์ข‹์€ ๋ฐฉํ–ฅ์œผ๋กœ ์„ค๊ณ„ ํ•ด์ฃผ์‹  ๊ฒƒ ๊ฐ™์•„์š”!

์ด๋ฒˆ ๋ฆฌํ€˜์ŠคํŠธ ์ฒด์ธ์ง€์—์„œ๋Š” 1. Service, Game ๊ฐ์ฒด๋“ค์˜ ๊ฒฐํ•ฉ ๊ณ ๋ฏผ 2. ์„œ๋น„์Šค, ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ ํ…Œ์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€๋กœ ํ•ด์ฃผ์…จ์œผ๋ฉด ํ•ฉ๋‹ˆ๋‹ค. 1๋ฒˆ์˜ ๊ฒฝ์šฐ ์ปค๋ฉ˜ํŠธ๋ฅผ ๋‚จ๊ฒผ๊ณ , 2๋ฒˆ์˜ ๊ฒฝ์šฐ์—๋Š” ๋””๋น„์˜ ๊ฒฝ์šฐ์—๋Š” ํŠนํžˆ ๋ฐฐํฌ ํ™˜๊ฒฝ, ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ DB๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๊ฑฐ๋‚˜ ํ•˜๋Š” ์‹์œผ๋กœ ์™ธ๋ถ€ ์˜ํ–ฅ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค. 1. ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ์ด ์˜์†ํ™” ๊ณ„์ธต๊ณผ ๊ณ„์ธต์„ ํฌํ•จํ•ด์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์งค ์ˆ˜ ์žˆ์„๊นŒ 2. ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ํ”„๋กœ๋•์…˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—†์ด ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์„์ง€์— ๋Œ€ํ•ด์„œ ๊ณ ๋ฏผํ•ด๋ณด์‹œ๊ณ  ์ง์ ‘ ํ…Œ์ŠคํŠธ ์ž‘์„ฑํ•ด๋ณด์‹œ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค! ํ˜น์‹œ ์• ๋งคํ•œ ๋ถ€๋ถ„์€ ์ปค๋ฉ˜ํŠธ ๋‹ฌ์•„์ฃผ์‹œ๊ฑฐ๋‚˜ DM ์ฃผ์„ธ์š” ํ™”์ดํŒ…์ž…๋‹ˆ๋‹ค!

package janggi.persistence.dto;

public record MoveHistory(
int turnNumber,
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

ํ„ด ์ •๋ณด๊ฐ€ ์ €์žฅ์€ ๋˜๋Š”๋ฐ ๋”ฐ๋กœ ์“ฐ์ด๋Š” ๊ณณ์€ ์—†๋Š” ๊ฒƒ ๊ฐ™๋„ค์š”. ํ˜น์‹œ ๋„ฃ์€ ์ด์œ ๊ฐ€ ์žˆ์„๊นŒ์š”?

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.

ํฌํ•จํ•ด๋‘๋ฉด ์œ ์šฉํ•  ๊ฒƒ ๊ฐ™์•„์„œ ์ถ”๊ฐ€ํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค!
๊ฐ€์žฅ ์ตœ๊ทผ ํ„ด์„ ๊ฐ€์ ธ์˜จ๋‹ค๊ฑฐ๋‚˜, ๋ช‡ ๋ฒˆ ๋งŒ์— ๊ฒŒ์ž„์ด ์ข…๋ฃŒ๋˜์—ˆ๋Š”์ง€ ๋“ฑ ๊ธฐ๋ณธ ๊ฒŒ์ž„ ์ •๋ณด์— ํ•ด๋‹นํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด์„œ ๋„ฃ์—ˆ์—ˆ๋Š”๋ฐ์š”, ์ฝ”๋“œ ์ƒ์—์„œ๋Š” ์‚ฌ์šฉ์ด ์•ˆ๋˜๋‹ˆ ์ œ๊ฑฐํ•˜๋Š”๊ฒŒ ๋‚˜์„๊นŒ์š”?

Comment on lines 89 to 91
private boolean isCancelCommand(String input) {
return CANCEL.equalsIgnoreCase(input.trim());
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

์˜ค ์ทจ์†Œ ์ปค๋ฉ˜๋“œ ์ข‹๋„ค์š”! ์‹ค์ œ ์‹คํ–‰ํ•ด๋ณด๋ฉด์„œ ์žˆ์œผ๋ฉด ์ข‹๊ฒ ๋‹ค ์ƒ๊ฐํ–ˆ์—ˆ๋Š”๋ฐ ์ž˜ ์ฒ˜๋ฆฌํ•˜์…จ๋„ค์š”!

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

๋‹ค๋งŒ CANCEL์ด JanggiRunner์— ์žˆ์–ด๋„ ๋˜๋Š”์ง€์— ๋Œ€ํ•ด์„œ๋Š” ๊ณ ๋ฏผํ•ด๋ณด์‹œ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. inputView์—์„œ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š”๊ฒŒ ๋งž์ง€ ์•Š์„๊นŒ์š”?

Copy link
Copy Markdown
Author

@boyekim boyekim Apr 12, 2026

Choose a reason for hiding this comment

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

์ œ๊ฐ€ ์ •์˜ํ•œ cancel์€

  1. ์ดํ›„ ์ขŒํ‘œ ๊ฒ€์ฆ์œผ๋กœ ๋“ค์–ด๊ฐ€๊ธฐ ์ „์— ์ทจ์†Œํ•ด์•ผํ•จ
  2. ์žฅ๊ธฐ ๊ฒŒ์ž„ ๊ทœ์น™์ด๋ผ๊ณ  ๋ณด๊ธฐ ์–ด๋ ค์›€
  3. ์ฝ˜์†”๊ณผ ์‚ฌ์šฉ์ž์˜ ์ƒํ˜ธ์ž‘์šฉ์ž„

์ด๋Ÿฐ ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ ๊ฒŒ์ž„๊ณผ ์‚ฌ์šฉ์ž์˜ ์ƒํ˜ธ์ž‘์šฉ๋ณด๋‹ค๋Š” ๊ทธ ์ด์ „๋‹จ๊ณ„์ธ ์ฝ˜์†”๊ณผ์˜ ์ƒํ˜ธ์ž‘์šฉ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ด์„œ Runner์— ์œ„์น˜์‹œ์ผฐ์—ˆ์Šต๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ๊ฒŒ์ž„๊ณผ ๊ด€๋ จ๋œ ๊ฒƒ์ด ์•„๋‹ˆ๋‹ˆ ์•„์˜ˆ InputView๊ฐ€ ์ฒ˜๋ฆฌํ•ด์ค˜๋„ ์ข‹์„ ๊ฒƒ ๊ฐ™๋„ค์š”. ์˜คํžˆ๋ ค Runner๊ฐ€ ๋ชฐ๋ผ๋„ ๋˜๋Š” ์ž…๋ ฅ ๊ทœ์น™์„ ์•Œ๊ณ ์žˆ๊ฒŒ ๋˜๋Š” ๊ฒƒ ๊ฐ™์•„์š”.
inputView์— readCancelableLine๋ผ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์ค˜๋ณด์•˜์Šต๋‹ˆ๋‹ค.
์–ด๋•Œ๋ณด์ด๋‚˜์š”?!

Comment on lines +47 to +50
private void play(JanggiGame janggiGame, Position startPosition, Optional<Position> endPosition) {
janggiGame.doGame(startPosition, endPosition.get());
janggiService.saveMove(janggiGame, startPosition, endPosition.get());
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

์žฅ๊ธฐ ๊ฒŒ์ž„๊ณผ ์žฅ๊ธฐ ์„œ๋น„์Šค ๋ผ์ดํ”„ ์‚ฌ์ดํด์ด ๋น„์Šทํ•˜๊ธฐ๋„ ํ•˜๊ณ , ์‚ฌ์‹ค janggiGame์ด Repository๋ฅผ ํ•„๋“œ๋กœ ๊ฐ–๊ณ  ์žˆ์œผ๋ฉด Service๊ฐ€ ๋”ฑํžˆ ํ•„์š”ํ•ด๋ณด์ด์ง€ ์•Š์„ ๊ฒƒ ๊ฐ™์€๋ฐ ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์‹œ๋‚˜์š”? ๊ฒŒ์ž„์ด ๊ฒŒ์ž„ ์‹คํ–‰ + ์ €์žฅ์„ ๋งก์•„์„œ ํ•˜๋Š” ์…ˆ์ธ๊ฑฐ์ฃ 

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

ํ•ด๋‹น ๊ตฌ์กฐ์˜ ์žฅ์ ์€ ๊ฒŒ์ž„์„ ์‹คํ–‰ํ•œ ๋‹ค์Œ ์ €์žฅํ•˜๋Š” ๊ฐ„๊ทน์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์žฅ๊ธฐ๋ง์€ ์ธ๋ฉ”๋ชจ๋ฆฌ ์ƒ์—์„œ ์„ฑ๊ณต์ ์œผ๋กœ ์›€์ง์—ฌ์กŒ๋Š”๋ฐ ๋ชจ์ข…์˜ ์ด์œ ๋กœ Service ์ชฝ์—์„œ ์ €์žฅ์ด ์•ˆ๋  ๊ฒฝ์šฐ๋„ ์žˆ์ž–์•„์š”? ๊ทธ๋Ÿฌ๋ฉด ์ธ๋ฉ”๋ชจ๋ฆฌ์™€ ์˜์† ์ƒํƒœ๋ฅผ ์–ด๋–ป๊ฒŒ ์ผ์น˜์‹œํ‚ฌ ์ˆ˜ ์žˆ์„๊นŒ์— ๋Œ€ํ•œ ๊ณ ๋ฏผ๋„ ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

Copy link
Copy Markdown
Author

@boyekim boyekim Apr 12, 2026

Choose a reason for hiding this comment

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

์˜์†์— ๋Œ€ํ•œ ์ฑ…์ž„์€ ๊ธฐ์กด ๊ฒŒ์ž„ ์‹คํ–‰๊ณผ ์‹œ์ ์ด ๋ถ„๋ฆฌ๋˜์–ด์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ด์„œ, ๊ฒŒ์ž„ ์‹คํ–‰ + ์ €์žฅ์„ ๋ถ„๋ฆฌํ•ด์ฃผ๋ ค ํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๊ฐ„๊ทน์„ ์ค„์ด๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•  ๊ฒƒ ๊ฐ™์•„์„œ ์ƒ๊ฐ์„ ์ „๊ฐœํ•ด๋ณด์•˜๋Š”๋ฐ์š”,
Service์—์„œ ๊ฒŒ์ž„ ์‹คํ–‰๊ณผ ์ €์žฅ์„ ๋“ค๊ณ  ์žˆ๋Š” ๊ฒƒ์€ ์–ด๋–จ๊นŒ์š”?
Input,Output์— ๋Œ€ํ•œ ์‚ฌ์šฉ์ž์™€์˜ ์ƒํ˜ธ์ž‘์šฉ์„ Runner๊ฐ€ ํ•˜๊ณ , ๊ฒŒ์ž„ ์ง„ํ–‰ ๋ฐ ์ €์žฅ์„ Service๊ฐ€ ํ•ด์ค€๋‹ค๋ฉด ๊ฐ„๊ทน์„ ์ค„์ผ ์ˆ˜ ์žˆ๊ณ  ์—ญํ• ๋„ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.
e95429f ํ•ด๋‹น ์ปค๋ฐ‹์—์„œ ๋ฐ˜์˜ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค!

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

class JanggiGameTest {
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
Author

@boyekim boyekim Apr 12, 2026

Choose a reason for hiding this comment

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

Fake๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ์„œ๋น„์Šค ํ…Œ์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.
๋‹ค์Œ ๋‘๊ฐ€์ง€์—์„œ ๊ณ ๋ฏผํ–ˆ์—ˆ๋Š”๋ฐ์š”,

  1. test์šฉ ํŒŒ์ผ db๋ฅผ ํŒ๋‹ค.
  2. fake ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ ๋‹ค.

ํ•˜์ง€๋งŒ ๊ด€๋ฆฌ์— ๋Œ€ํ•œ ๋น„์šฉ, ๊ทธ๋ฆฌ๊ณ  Service ๋กœ์ง๋งŒ์ด ์‹คํŒจ ์›์ธ์ด ์•„๋‹ ์ˆ˜๋„ ์žˆ๊ฒŒ ๋  ๊ฒƒ ๊ฐ™์•„์„œ....์šฐ์„  2๋ฒˆ์„ ํƒํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

Comment on lines +78 to +80
} catch (SQLException e) {
throw new IllegalStateException("์ˆ˜ ์ €์žฅ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.", e);
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

์ˆ˜ ์ €์žฅ ์‹คํŒจ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๊ฐ€ ์—†๊ณ  ์˜ˆ์™ธ๊ฐ€ ํ„ฐ์ง€๋ฉด ์ข…๋ฃŒ๋˜๋Š” ๊ตฌ์กฐ๋„ค์š”. ํ•ญ์ƒ ๋””๋น„ ๊ด€๋ จ์€ ์ƒํƒœ ๋ถˆ์ผ์น˜์— ๋Œ€ํ•œ ๊ณ ๋ฏผ์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š”๋ฐ ๊ฒŒ์ž„์„ ์ข…๋ฃŒํ•˜๋Š” ๊ฒƒ ๋Œ€์‹  ํ•ด๋ณผ ์ˆ˜ ์žˆ๋Š” ์‚ฌํ•ญ์ด ์—†์„๊นŒ์š”? ์žฌ์‹œ๋„๋ฅผ ํ•œ๋‹ค๋˜์ง€ ํ•˜๋Š”์‹์œผ๋กœ์š”. ๊ทธ๋ฆฌ๊ณ  executeUpdate ์ฃผ์„์—๋Š” SQLTimeoutException์ด ๋˜์ ธ์ง„๋‹ค๊ณ ๋„ ํ•˜๋Š”๋ฐ ํƒ€์ž„ ์•„์›ƒ์— ๋Œ€ํ•œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋„ ํ•„์š”ํ•˜์ง€ ์•Š์„๊นŒ์š”? ํ˜„์—…์—์„œ๋Š” ํŠนํžˆ ํƒ€์ž„์•„์›ƒ ๊ด€๋ จ ์˜ˆ์™ธ๊ฐ€ ๋งŽ์ด ๋ฐœ์ƒํ•˜๋Š”๋ฐ ์ด ๋ถ€๋ถ„๋„ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ• ์ง€ ๋˜ ์ƒํƒœ ๋ถˆ์ผ์น˜๋Š” ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์„์ง€ ๊ณ ๋ฏผํ•ด๋ณด๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Comment on lines +57 to +59
janggiGame.findWinner()
.orElseThrow(() -> new IllegalStateException("์Šน์ž๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.")),
winnerScore
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

์ด ๋ถ€๋ถ„ ์•ฝ๊ฐ„ ์–ด์ƒ‰ํ•œ๋ฐ, winnerScore๋Š” ๊ตฌํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ Winner๋ฅผ ๋ชป์ฐพ์•„์˜ค๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‚˜์š”? ์–ด์ฐจํ”ผ Turn์—๊ฒŒ์„œ ์Šน์ž ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ์‹์ด๋ผ๋ฉด ๋ฌถ์–ด์„œ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋Š”๋ฐฉ๋ฒ•์ด ์žˆ์ง€ ์•Š์„๊นŒ์š”?

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