Skip to content

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

Open
armd482 wants to merge 29 commits intowoowacourse:armd482from
armd482:step2

Conversation

@armd482
Copy link
Copy Markdown

@armd482 armd482 commented Apr 3, 2026

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

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

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

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

  1. ๊ณ„์ธต๊ณผ ์—ญํ• 
    ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์šฉ์ด ์ฒ˜์Œ์ด๋ผ ๊ณ„์ธต์— ๋Œ€ํ•œ ๊ณ ๋ฏผ์„ ๋งŽ์ด ํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
    dto๋ผ๋Š” ๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ๋งž๋Š”์ง€, ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์–ด๋””์„œ ์ƒ์„ฑํ•˜์—ฌ ์–ด๋””๊นŒ์ง€ ์ „๋‹ฌํ•ด์•ผ ํ•˜๋Š”์ง€, ์ด ๋ถ€๋ถ„์ด ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.
    runner -> ์„œ๋น„์Šค -> dao์—์„œ, ์„œ๋น„์Šค๋ผ๋Š” ๊ณ„์ธต์—์„œ dto๋ฅผ ๋ฐ›๋Š”์ง€, vo๋ฅผ ๋ฐ›์•„์•ผ ํ•˜๋Š” ์ง€, dao์—๋Š” ์›์‹œ๊ฐ’์œผ๋กœ ์ „๋‹ฌํ•ด์•ผ ํ•˜๋Š”์ง€, ์•„๋‹˜ dto๋กœ ์ „๋‹ฌํ•ด์•ผ ํ•˜๋Š”์ง€
    ๋ฐ˜๋Œ€๋กœ dao -> service ->runner์—์„œ ์„œ๋น„์Šค๋Š” ๊ฐ’ ์ž์ฒด๋ฅผ ๋ฐ›์•„์„œ vo๋กœ ์ „๋‹ฌํ•  ์ง€, dto๋กœ ์ƒ์„ฑํ•ด์•ผ ํ• ์ง€ ๊ธฐ์ค€์„ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

  2. ํ…Œ์ŠคํŠธ ๋‹จ์œ„
    ์„œ๋น„์Šค, TransactionManger,SQL manager, dao์— ๋Œ€ํ•ด์„œ ์–ด๋””๊นŒ์ง€ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒŒ ๋งž์„ ์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.
    ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค๋ฉด, ์–ด๋А ๋ถ€๋ถ„์„ ํ…Œ์ŠคํŠธ ํ•ด์•ผํ•  ์ง€์— ๋Œ€ํ•œ ๊ณ ๋ฏผ์ด ์žˆ์Šต๋‹ˆ๋‹ค

armd482 added 29 commits March 31, 2026 23:23
Copy link
Copy Markdown

@Chocochip101 Chocochip101 left a comment

Choose a reason for hiding this comment

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

์•ˆ๋…•ํ•˜์„ธ์š”, ์šฐ๋””! โœ‹๐Ÿป ๋ฆฌ๋ทฐ์–ด ์ดˆ์ฝ”์นฉ์ž…๋‹ˆ๋‹ค ๐Ÿช
์‚ฌ์ดํด 1์— ์ด์–ด ์‚ฌ์ดํด 2๋„ ์ž˜ ๊ตฌํ˜„ํ•ด์ฃผ์…จ๋„ค์š”.
๋ฆฌ๋ทฐ ๋‚จ๊ฒผ์œผ๋‹ˆ ํ™•์ธํ•ด๋ณด์‹œ๊ณ , ์žฌ์š”์ฒญ์ฃผ์„ธ์š” ๐Ÿ˜„


Side winnerSide = game.getWinnerSide();

if(winnerSide == null) {
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. null์ด ๋  ์ˆ˜ ์žˆ๋‚˜์š”? Side.Empty๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๋‚˜์š”?
  2. null๋กœ ๋‹ค๋ฃจ๋Š”๊ฒŒ ๋งž๋‚˜์š”?
  3. ํ•ด๋‹น ๋กœ์ง์„ game์—์„œ ๋‹ค๋ฃฐ ์ˆ˜ ์—†๋‚˜์š”? (game.hasXXX()?๊ฐ™์€)
  4. ํ•ด๋‹น ๋กœ์ง์€ ํ…Œ์ŠคํŠธ๋กœ ์ปค๋ฒ„ ๋˜์—ˆ๋‚˜์š”?

- ์‹œ์ž‘ ์‹œ ์ดˆ/ํ•œ ์ง„์˜์˜ ๊ธฐ๋ณธ ๊ธฐ๋ฌผ ๋ฐฐ์น˜์™€ ๋งˆ์ƒ ๋ฐฐ์น˜๋ฅผ ๋ฐ˜์˜ํ•ด ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.
- ์žฅ๊ธฐํŒ์€ ํ˜„์žฌ ์œ„์น˜์˜ ๊ธฐ๋ฌผ ์กฐํšŒ, ๋นˆ ์นธ ์—ฌ๋ถ€, ์•„๊ตฐ/์ ๊ตฐ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•œ๋‹ค.
- ์žฅ๊ธฐํŒ์€ ๊ธฐ๋ฌผ ์ด๋™ ์š”์ฒญ์„ ๋ฐ›์•„ ์‹ค์ œ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค.
- ์žฅ๊ธฐํŒ์€ ์ƒ๋Œ€ ๊ธฐ๋ฌผ์„ ์žก์•˜์„ ๋•Œ ํ•ด๋‹น ์ง„์˜์˜ ์ ์ˆ˜๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ฐจ๊ฐํ•œ๋‹ค.
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

๊ธฐ๋Šฅ๋ชฉ๋ก ๐Ÿ’ฏ

return new TurnState(new FinishTurn(board, Side.HAN, turn), turnAttribute, pieceAttribute);
}

TurnAttribute turnAttribute = new TurnAttribute(Side.HAN, turn + 1);
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

HAN ๋‹ค์Œ์— CHO๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผํ•˜์ง€ ์•Š๋‚˜์š”?

Suggested change
TurnAttribute turnAttribute = new TurnAttribute(Side.HAN, turn + 1);
TurnAttribute turnAttribute = new TurnAttribute(Side.CHO, turn + 1);

ํ…Œ์ŠคํŠธ๋กœ ์ปค๋ฒ„๊ฐ€ ๋˜์—ˆ์„๊นŒ์š”?

PieceAttribute pieceAttribute = board.move(start, end, Side.HAN);

if(turn == MAX_TURN) {
TurnAttribute turnAttribute = new TurnAttribute(Side.EMPTY, turn + 1);
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

ChoTurn๊ณผ ๋„˜๊ธฐ๋Š” ์ธ์ž๊ฐ€ ๋‹ค๋ฅธ๋ฐ, ์–ด๋–ค๊ฒŒ ๋งž๋‚˜์š”?

Comment on lines +166 to +167
SideScore score = game.getCurrentSideScore();
if(score.cho() > score.han()) {
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

getter๋กœ ๊บผ๋‚ด์™€์„œ ๋น„๊ตํ•ด์•ผํ•˜๋‚˜์š”?

OutputView.printLine();

MoveResult moveResult = game.move(startPosition, endPosition);
TurnDto turnDto = new TurnDto(moveResult.turnAttribute().side().getName(), moveResult.turnAttribute().turn());
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

๋””๋ฏธํ„ฐ ๋ฒ•์น™ ์œ„๋ฐ˜์ด๋„ค์š”. ์–ด๋–ป๊ฒŒ ๊ฐœ์„ ํ•ด๋ณผ ์ˆ˜ ์žˆ์„๊นŒ์š”?

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์š”๊ตฌ์‚ฌํ•ญ: ํ•œ ์ค„์— ์ ์„ ํ•˜๋‚˜๋งŒ ์ฐ๋Š”๋‹ค.

game = new Game(choArrangement, hanArrangement);
}
List<PieceDto> pieceDtos = game.init(choArrangement, hanArrangement).stream()
.map(pieceInitInfo -> new PieceDto(pieceInitInfo.position().getX(), pieceInitInfo.position().getY(), pieceInitInfo.pieceType().getName(), pieceInitInfo.side().getName()))
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

PieceDto์—์„œ ์ •์  ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ค์–ด๋„ ์ข‹์„ ๊ฒƒ ๊ฐ™์€๋ฐ, ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์‹œ๋‚˜์š”?

Suggested change
.map(pieceInitInfo -> new PieceDto(pieceInitInfo.position().getX(), pieceInitInfo.position().getY(), pieceInitInfo.pieceType().getName(), pieceInitInfo.side().getName()))
.map(PieceDto::from)

}

private Optional<Integer> getPreviousBoard() {
GameInfos gameInfos = new GameInfos(janggiService.getEntireGame().stream()
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

์—ฌ๊ธฐ๋„ ๋น„์Šทํ•˜๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๊ฒ ๋„ค์š”.


GameInfo selectedGame = askUntilValid(() -> getSelectedGame(gameInfos));

List<PieceInitInfo> pieceInitInfos = janggiService.getPieceInitInfos(selectedGame.id()).stream().map(pieceDto -> new PieceInitInfo(new Position(pieceDto.x(), pieceDto.y()), Side.from(pieceDto.side()),
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

@@ -23,20 +25,27 @@
- ์ขŒํ‘œ๋Š” ์ž…๋ ฅ๊ฐ’์„ ๊ฒ€์ฆํ•˜์—ฌ ์ƒ์„ฑํ•œ๋‹ค.
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

๊ณ„์ธต๊ณผ ์—ญํ• 

๋‹น์—ฐํžˆ ์–ด๋– ํ•œ ์ •๋‹ต์€ ์žˆ๋Š”๊ฒŒ ์•„๋‹ˆ๊ธฐ์— ์ €์˜ ๊ธฐ์ค€์„ ์–˜๊ธฐํ• ๊ฒŒ์š”. ์ €๋Š” ํ•„์š”์— ์˜ํ•ด ์“ฐ๋Š” ๊ฒƒ ๊ฐ™์•„์š”. ์•„๋ฌด๋ž˜๋„ view์˜ ๋ณ€๊ฒฝ์ด ๋งŽ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— controller์—์„œ view๋กœ ๋„˜์–ด๊ฐˆ ๋•Œ๋Š” DTO๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, DAO์™€ ์„œ๋น„์Šค ์‚ฌ์ด์—๋Š” ์ฃผ๋กœ ์“ฐ์ง€ ์•Š์•„์š”. ์ƒ๊ฐ๋ณด๋‹ค DAO์˜ ๋ณ€๊ฒฝ์€ ์‹ ์ค‘์„ ๊ฐ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋น„์Šค์˜ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด DAO๊ฐ€ ๋ณ€ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ view-controller์— ๋น„ํ•ด ์ ๊ธฐ ๋•Œ๋ฌธ์ด์—์š”. ๋„˜๊ฒจ์•ผ ๋˜๋Š” ์ธ์ž๊ฐ€ ๋งŽ์œผ๋ฉด ํ•„์š”ํ•˜๋‹ค๊ณ  ๋А๊ปด์„œ ์“ฐ๊ธฐ๋„ ํ•˜๊ณ ์š”.

์ถ”๊ฐ€๋กœ, ๋ ˆ์ด์–ด ๊ฐ„ ์˜์กด ๋ฐฉํ–ฅ์„ ์ง€ํ‚ค๊ธฐ ์œ„ํ•ด DTO๋ฅผ ์“ฐ๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์–ด์š”. ๋„๋ฉ”์ธ ๊ฐ์ฒด๋ฅผ DAO๊นŒ์ง€ ๊ทธ๋Œ€๋กœ ์ „๋‹ฌํ•˜๋ฉด DAO๊ฐ€ ๋„๋ฉ”์ธ ๋ชจ๋ธ ๊ตฌ์กฐ๋ฅผ ์•Œ์•„์•ผ ํ•˜๊ณ , DB ์Šคํ‚ค๋งˆ๊ฐ€ ๋ฐ”๋€Œ์—ˆ์„ ๋•Œ ๋„๋ฉ”์ธ ๊ฐ์ฒด๊นŒ์ง€ ์˜ํ–ฅ์ด ์ „ํŒŒ๋  ์ˆ˜ ์žˆ๊ฑฐ๋“ ์š”. DTO๊ฐ€ ๋‘ ๋ ˆ์ด์–ด ์‚ฌ์ด์˜ ๊ฒฝ๊ณ„๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ๋งŒ๋“ค์–ด์„œ ์„œ๋กœ ๋…๋ฆฝ์ ์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค„ ์ˆ˜๋„ ์žˆ์–ด์š”.

ํ…Œ์ŠคํŠธ ๋‹จ์œ„

  • ์–ด๋””๊นŒ์ง€ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒŒ ๋งž์„ ์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค: ์ž‘์„ฑํ•œ ์ฝ”๋“œ์˜ ๋ชจ๋“  ๋ถ€๋ถ„์„ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์—†๋‚˜์š”? ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฑฐ๋‚˜ ํ•„์š”์—†๋Š” ๋ถ€๋ถ„์ด ์žˆ์„๊นŒ์š”?
  • ์–ด๋А ๋ถ€๋ถ„์„ ํ…Œ์ŠคํŠธ ํ•ด์•ผํ•  ์ง€์— ๋Œ€ํ•œ ๊ณ ๋ฏผ์ด ์žˆ์Šต๋‹ˆ๋‹ค: ์‚ฌ์šฉ์ž์˜ Use case๋ถ€ํ„ฐ ์ ‘๊ทผํ•ด๋ณด๋Š”๊ฑด ์–ด๋–ค๊ฐ€์š”? ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹œ์ž‘ ์‹œ, ๊ฒŒ์ž„์„ ์ƒ์„ฑํ•˜๋ฉด ์ €์žฅ์ด ๋˜๋‹ˆ๊นŒ '๊ฒŒ์ž„์ด ์ €์žฅ๋œ๋‹ค'๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด๋ณผ ์ˆ˜ ์žˆ๊ฒ ๋„ค์š”.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

์ „์ฒด์ ์œผ๋กœ ํ…Œ์ŠคํŠธ๊ฐ€ ๋ถ€์กฑํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค! ๋ชจ๋“  ์ผ€์ด์Šค์— ๋Œ€ํ•ด ํ…Œ์ŠคํŠธ๊ฐ€ ์ปค๋ฒ„๋˜์—ˆ๋Š”์ง€ ํ™•์ธ ๋ถ€ํƒ๋“œ๋ฆด๊ฒŒ์š”!

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