Skip to content

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

Open
koomingu wants to merge 20 commits intowoowacourse:koomingufrom
koomingu:step2

Conversation

@koomingu
Copy link
Copy Markdown

@koomingu koomingu commented Apr 17, 2026

์•ˆ๋…•ํ•˜์„ธ์š” ๋‘๋‘ , ๋ฐ๊ตฌ์ž…๋‹ˆ๋‹ค.

PR์ด ๋Šฆ์–ด์ ธ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค.

๋งˆ๊ฐ ์ดํ›„ ์š”์ฒญํ•œ PR์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ์€ ๋ฆฌ๋ทฐ์–ด์˜ ์„ ํƒ์‚ฌํ•ญ์ž„์„ ์ธ์ง€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฒˆ ์žฅ๊ธฐ ๋ฏธ์…˜์—์„œ๋Š” depth1์„ ์ง€ํ‚ค๊ณ  ๊ฐ€๋…์„ฑ์„ ๋†’์ด๋Š” ๋ฐ์— ์ง‘์ค‘ํ•˜์˜€๊ณ , ๊ธฐ๋Šฅ ๊ตฌํ˜„์ด๋ผ๋„ ํ•ด์„œ ์ œ์ถœํ•ด์•ผ๊ฒ ๋‹ค๋Š” ๋งˆ์Œ์— ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

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

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

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

๊ธฐ์กด ์ฝ”๋“œ์—์„œ ๋ณ€๊ฒฝ ๋ฐ ์ถ”๊ฐ€๋œ ๋ถ€๋ถ„


  • ๊ถ์„ฑ ์˜์—ญ: ๊ธฐ๋ฌผ๋งˆ๋‹ค ๊ถ์„ฑ ๋‚ด ํ–‰๋งˆ๋ฒ•์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์—, ๊ฐ ๊ธฐ๋ฌผ์˜ ์ด๋™ ์ „๋žต ๋‚ด๋ถ€์—์„œ ๊ถ์„ฑ ์•ˆ์— ์žˆ๋Š”์ง€์™€ ๊ถ์„ฑ ๋‚ด ๋Œ€๊ฐ์„  ์ด๋™ ๊ฐ€๋Šฅ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•˜๋„๋ก ํ•˜์—ฌ์„œ ์‘์ง‘๋„๋ฅผ ๋†’์˜€์Šต๋‹ˆ๋‹ค.
  • ์ ์ˆ˜ ๊ณ„์‚ฐ: ๊ฐ ๊ธฐ๋ฌผ ๊ฐ์ฒด๊ฐ€ ์ž์‹ ์˜ ์ ์ˆ˜๋ฅผ ํ•„๋“œ๋กœ ๊ฐ€์ง€๋ฉฐ ํ›„๊ณต์ธ ํ•œ๋‚˜๋ผ์—๊ฒŒ๋Š” 1.5์ ์˜ ๋ณด์ •์น˜๋ฅผ ๋ถ€์—ฌํ•˜๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋งค ํ„ด๋งˆ๋‹ค ์ด ์ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฒŒ์ž„ ์ข…๋ฃŒ: ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ณด๋“œ ๋‚ด์˜ ์™•์˜ ๊ฐœ์ˆ˜๋ฅผ ์นด์šดํŠธํ•ฉ๋‹ˆ๋‹ค. ์–ด๋А ํ•œ ์ชฝ์˜ ์™•์ด ์žกํ˜€ ๊ฐœ์ˆ˜๊ฐ€ 2๊ฐœ ๋ฏธ๋งŒ์ด ๋˜๋Š” ์ฆ‰์‹œ isKingCaptured()๊ฐ€ true๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ ๊ฒŒ์ž„์ด ์ข…๋ฃŒ๋˜๊ฒŒ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

Service ๊ณ„์ธต ๋„์ž… ๋ฐ ์—ญํ•  ๋ถ„๋ฆฌ

  • Domain: ์žฅ๊ธฐ ๊ทœ์น™๋งŒ ์•Œ๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  • Controller: ์‚ฌ์šฉ์ž์˜ ์ž…์ถœ๋ ฅ์„ ๊ด€๋ฆฌํ•˜๋ฉฐ, ์„œ๋น„์Šค์— ์š”์ฒญ์„ ์ „๋‹ฌํ•˜๊ณ  ์ „์ฒด์ ์ธ ๊ฒŒ์ž„์˜ ์‹คํ–‰ ํ๋ฆ„์„ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค.

  • DAO: SQL ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๋ฉฐ ๋ฐ ๋ฐ์ดํ„ฐ ์˜์†ํ™”๋ฅผ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

  • Service: ๋„๋ฉ”์ธ ๊ฐ์ฒด์˜๊ฒฐ๊ณผ๋ฅผ DAO๋ฅผ ํ†ตํ•ด DB์— ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค.

  • JanggiService ์‹œํ€€์Šค ๋‹ค์ด์–ด๊ทธ๋žจ

    1. User: ๊ธฐ๋ฌผ ์ด๋™ ์ž…๋ ฅ (play 1, 2)
    2. Controller: janggiService.movePiece() ํ˜ธ์ถœ
    3. Service: board.move() ํ˜ธ์ถœ (๋„๋ฉ”์ธ ๋กœ์ง์œผ๋กœ ๊ฒ€์ฆ ๋ฐ ์ด๋™)
    4. Board: ์ด๋™ ์„ฑ๊ณต ์—ฌ๋ถ€ ๋ฐ˜ํ™˜
    5. Service: pieceDao.updatePosition() ํ˜ธ์ถœ (DB ๊ธฐ๋ฌผ ์œ„์น˜ ๋ณ€๊ฒฝ)
    6. Service: gameDao.updateMetadata() ํ˜ธ์ถœ (ํ˜„์žฌ ํ„ด, ์ ์ˆ˜ DB ๋ฐ˜์˜)
    7. Controller: ์„ฑ๊ณต ๋ฉ”์‹œ์ง€ ๋ฐ ๋ณด๋“œ ์ถœ๋ ฅ

DB


  • DB๋Š” MySQL 8.0์„ ์‚ฌ์šฉํ•˜๋ฉฐ, Docker ์ปจํ…Œ์ด๋„ˆ๋กœ ๋„์› ์Šต๋‹ˆ๋‹ค.
  • ๊ธฐ์กด MySQL ๊ธฐ๋ณธ ํฌํŠธ(3306)์™€์˜ ์ถฉ๋Œ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด 3308 ํฌํŠธ๋ฅผ ์™ธ๋ถ€ ํฌํŠธ๋กœ ๋งคํ•‘ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ํ…Œ์ด๋ธ” ๊ตฌ์กฐ:
    • game_room: ๊ฒŒ์ž„์˜ ํ˜„์žฌ ํ„ด, ์ง„ํ–‰ ์ƒํƒœ, ์ ์ˆ˜, ์ƒ์„ฑ์ผ์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
    • piece_position: ๋ณด๋“œ ์œ„์˜ ๋ชจ๋“  ๊ธฐ๋ฌผ ์ขŒํ‘œ(row, col)์™€ ์ข…๋ฅ˜, ํŒ€ ์ •๋ณด๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. game_id๋ฅผ ์™ธ๋ž˜ํ‚ค๋กœ ๊ฐ€์ง€๋ฉฐ ๋ฐฉ ์‚ญ์ œ ์‹œ ๊ธฐ๋ฌผ ์ •๋ณด๋„ ์‚ญ์ œ๋˜๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ฌผ ์ €์žฅ ๋ฐฉ์‹

  • ๋ณด๋“œ ์ „์ฒด๋ฅผ ๋งค๋ฒˆ ์ €์žฅํ•˜์ง€ ์•Š๊ณ  ๊ธฐ๋ฌผ ๊ฐ๊ฐ์˜ ์ขŒํ‘œ๋ฅผ ๋งค๋ฒˆ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ด๋™(UPDATE): ์ด๋™ํ•˜๋Š” ๊ธฐ๋ฌผ์˜ row, col ์ •๋ณด๋งŒ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.
  • ํฌํš(DELETE): ํ–‰๋งˆ์˜ ๋ชฉ์ ์ง€์— ์ƒ๋Œ€ ๊ธฐ๋ฌผ์ด ์กด์žฌํ•  ๊ฒฝ์šฐ, ์ด๋™ ์ฟผ๋ฆฌ ์‹คํ–‰ ์ „ ํ•ด๋‹น ์ขŒํ‘œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•œ ๋’ค, ์ด๋™ํ•˜๋Š” ๊ธฐ๋ฌผ์˜ ์ขŒํ‘œ๋ฅผ ๋ชฉ์ ์ง€ ์ขŒํ‘œ๋กœ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.
  • ํŠน์ • ๊ฒŒ์ž„๋ฐฉ์ด ์‚ญ์ œ๋  ๋•Œ ์—ฐ๊ด€๋œ ๋ชจ๋“  ๊ธฐ๋ฌผ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ™์ด ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค.

ํŠธ๋žœ์žญ์…˜

๋ณ„๋„๋กœ ํŠธ๋žœ์žญ์…˜์„ ์„ค์ •ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์—, DAO์˜ ๊ฐ ๋ฉ”์„œ๋“œ(update, delete ๋“ฑ)๊ฐ€ ์‹คํ–‰๋  ๋•Œ๋งˆ๋‹ค DB์™€ Connection์„ ๋งบ๊ณ , ์ฟผ๋ฆฌ๊ฐ€ ์„ฑ๊ณตํ•˜๋ฉด DB์— ๋ฐ˜์˜ํ•˜๋Š” Auto-commit ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

JanggiService.movePiece() ๋ฉ”์„œ๋“œ ์•ˆ์—์„œ '๊ธฐ๋ฌผ ์‚ญ์ œ - ์œ„์น˜ ์ˆ˜์ • - ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธโ€™๋ผ๋Š” 3๋ฒˆ์˜ ์ฟผ๋ฆฌ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ”Œ๋ ˆ์ด ๋„์ค‘ ๊ฒŒ์ž„์ด ๊บผ์ง„๋‹ค๋ฉด ๋ฐ์ดํ„ฐ ๋ถˆ์ผ์น˜ ์ƒํƒœ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ์„  ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ์šฐ์„ ์ ์œผ๋กœ ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ์žก์•˜๊ธฐ ๋•Œ๋ฌธ์— ํ–ฅํ›„ ํŠธ๋žœ์žญ์…˜์„ ๋„์ž…ํ•  ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค.

์‹คํ–‰ ๊ฐ€์ด๋“œ


  1. Docker ํ™˜๊ฒฝ ๋„์šฐ๊ธฐ

    1. Docker๋ฅผ ์ผญ๋‹ˆ๋‹ค.

    2. ํ„ฐ๋ฏธ๋„์—์„œ ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ ๊ฒฝ๋กœ(java-janggi)๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

    3. ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜์—ฌ DB๋ฅผ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

      docker-compose up -d
  2. DB ์—ฐ๊ฒฐ ํ™•์ธ

    1. IntelliJ ์šฐ์ธก Database ์ฐฝ์—์„œ janggi ์ปค๋„ฅ์…˜์„ ์ƒˆ๋กœ๊ณ ์นจํ•˜์—ฌ ๋ฐ์ดํ„ฐ๊ฐ€ ์ž˜ ๋ณด์ด๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
    2. ํฌํŠธ๊ฐ€ 3308๋กœ ์„ค์ •๋˜์–ด ์žˆ๋Š”์ง€ ์ฒดํฌํ•ฉ๋‹ˆ๋‹ค.
  3. Java ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰

    1. Application.java๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์งˆ๋ฌธ


Q. ํ˜„์žฌ๋Š” ์—”ํ‹ฐํ‹ฐ์™€ DTO์˜ ์—ญํ• ์„ ํ•œ ํด๋ž˜์Šค์—์„œ ๋‹ด๋‹นํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ์–ด๋А ์ˆ˜์ค€๊นŒ์ง€ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„๊นŒ์š”?

ํ˜„์žฌ GameDao๋Š” ์˜์†์„ฑ ๊ณ„์ธต์˜ ์ ‘๊ทผ์„ ๋‹ด๋‹นํ•˜๋Š” DAO๋กœ ๊ตฌํ˜„ํ–ˆ๊ณ , GameRoomDto๋Š” DB ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋งคํ•‘ํ•˜๋ฉด์„œ ๋™์‹œ์— ๊ณ„์ธต ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ํ˜„์žฌ GameRoomDto๊ฐ€ ์‚ฌ์‹ค์ƒ ์—”ํ‹ฐํ‹ฐ์™€ DTO์˜ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š”๋ฐ, ์ด๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ GameRoomEntity๋ฅผ ๋”ฐ๋กœ ๋‘๋Š” ๊ฒƒ์ด ๋‚˜์„์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.
  2. ๋งŒ์•ฝ ๋ถ„๋ฆฌํ•œ๋‹ค๋ฉด, DB์—์„œ ๊ฐ€์ ธ์˜จ ์—”ํ‹ฐํ‹ฐ๋ฅผ ๋„๋ฉ”์ธ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜๊ณ , ๋‹ค์‹œ DTO๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์ฝ”๋“œ ๋ณต์žก๋„๋ฅผ ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„๊นŒ์š”?
  3. ์‹ค๋ฌด์—์„œ ๋„๋ฉ”์ธ๊ณผ DB ์Šคํ‚ค๋งˆ๊ฐ€ ๊ฑฐ์˜ ์ผ์น˜ํ•˜๋Š” ์ƒํ™ฉ์—์„œ๋„ ์ด ๊ณ„์ธต๋“ค์„ ํ•ญ์ƒ ๋ถ„๋ฆฌํ•˜์‹œ๋Š”์ง€, ์•„๋‹ˆ๋ฉด ๋ถ„๋ฆฌ๋ฅผ ์–ธ์ œ ๊ณ ๋ คํ•˜์‹œ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

Q. ์ ์ ˆํ•œ ์ถ”์ƒํ™” ์ˆ˜์ค€์ด ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ Application์—์„œ ์ƒ์„ฑ์ž ์ฃผ์ž…์„ ํ†ตํ•ด Controller โ†’ JanggiService โ†’ GameDao/PieceDao ์ˆœ์œผ๋กœ ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์„œ๋น„์Šค ๊ณ„์ธต์ด ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์•„๋‹Œ DAO์— ์ง์ ‘์ ์œผ๋กœ ์˜์กดํ•˜๊ณ  ์žˆ์–ด, ๊ฐ•ํ•œ ๊ฒฐํ•ฉ์ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ํ˜„์žฌ ๋‹จ๊ณ„์—์„œ GameRepository์™€ ๊ฐ™์€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋„์ž…ํ•˜์—ฌ ์ถ”์ƒํ™” ๊ณ„์ธต์„ ํ•œ ๋ฒˆ ๋” ๋‘๋Š” ๊ฒƒ์ด ๋‚˜์„๊นŒ์š”?
  2. ํ˜„์žฌ์ฒ˜๋Ÿผ Application์—์„œ ๋ชจ๋“  ๊ฐ์ฒด๋ฅผ ์กฐ๋ฆฝํ•˜์—ฌ ์ฃผ์ž…ํ•˜๋Š” ๋ฐฉ์‹์ด ์žฅ๊ธฐ ๋ฏธ์…˜์—์„œ ์ ์ ˆํ•œ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

koomingu added 20 commits April 17, 2026 09:52
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.

1 participant