Skip to content

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

Open
MODUGGAGI wants to merge 36 commits intowoowacourse:moduggagifrom
MODUGGAGI:step2

Conversation

@MODUGGAGI
Copy link
Copy Markdown

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

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

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

์•ˆ๋…•ํ•˜์„ธ์š”!! ์•„๋ฃจ!! ์‚ฌ์ดํด1์—์„œ๋ถ€ํ„ฐ ์‚ฌ์ดํด2๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ๊นŒ์ง€ ์ƒ๋‹นํžˆ ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๊ฒƒ ๊ฐ™๋„ค์š”.. ใ… ใ… 
์—ฌ๋Ÿฌ ๊ณ ๋ฏผ๋“ค์ด ๋งŽ์ด ๋“ค์–ด์„œ ๋Šฆ์–ด์กŒ์Šต๋‹ˆ๋‹ค ใ… ใ… 

๋จผ์ € ์•„๋ฃจ๊ฐ€ ์‚ฌ์ดํด1์—์„œ ๋งˆ์ง€๋ง‰ ๋ฆฌ๋ทฐ๋กœ ๋‚จ๊ฒจ์ฃผ์‹  ๋ถ€๋ถ„๋“ค์— ๋Œ€ํ•ด์„œ ์ ์šฉํ•ด๋ณธ ๊ฒƒ์œผ๋กœ ์‹œ์ž‘ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค!!

์‚ฌ์ดํด1์—์„œ์˜ ๋ฆฌ๋ทฐ ๋ฐ˜์˜

  1. switch-case ๋ณด๋‹ค ์ƒ์ฐจ๋ฆผํฌ๋งท์—์„œ ์‚ฌ์šฉํ•œ ๊ฒƒ์ฒ˜๋Ÿผ enum ์ƒ์ˆ˜๋“ค์—๊ฒŒ ์—ญํ• ์„ ๋ถ€์—ฌํ•ด๋ณด๋Š” ๊ฑด ์–ด๋•Œ์š”?
  • PieceFormat ํด๋ž˜์Šค์— enum ์ƒ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ์—ญํ• ์„ ๋ถ€์—ฌํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค..!!
  1. ๊ฐœ์ธ์ ์ธ ์ƒ๊ฐ์œผ๋กœ๋Š” ์•„์ง ์ด ๋‹จ๊ณ„๋Š” ๋ถˆํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ด์š”. new JanggiGame(new InputView(), new OutputView())๋กœ ์ ๋Š” ๊ฒƒ๋ณด๋‹ค ํŒŒ์ผ๋„ ๋งŽ๊ณ  ์‚ฌ์šฉํ•  ๋ฉ”์„œ๋“œ๋„ ๋งŽ์€๋ฐ ๊ตฌํ˜„ํ•œ ์ด์œ ๋Š” ๋ฌด์—‡์ธ์ง€ ๋“ค์–ด๋ณผ๊นŒ์š”?
  • ์˜์กด์„ฑ์„ ์ง์ ‘ ์ฃผ์ž…ํ•ด์ฃผ๋Š” ๊ฒƒ๋ณด๋‹ค ์„ค์ • ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด์„œ ํ•œ๊ตฐ๋ฐ์—์„œ ๊ด€๋ฆฌํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด ๋” ์ข‹์•„๋ณด์—ฌ์„œ ๋‹ค๋ฅธ ํฌ๋ฃจ๋ถ„์˜ ์ฝ”๋“œ๋ฅผ ๋ณด๊ณ  ์ ์šฉํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค...
    ์•„๋ฃจ์˜ ๋ฆฌ๋ทฐ๋ฅผ ๋ณด๊ณ  ์‚ฌ์ดํด2๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— AppConfig๋ฅผ ์ œ๊ฑฐํ•ด์„œ ๋ถˆํ•„์š”ํ•œ ๊ณ„์ธต์„ ์—†์•ด์Šต๋‹ˆ๋‹ค.
    ๊ทธ๋Ÿฐ๋ฐ ์‚ฌ์ดํด2๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ๊ณผ์ •์—์„œ DB ์„ค์ •์„ ์œ„ํ•œ ๊ฐ์ฒด๋“ค์„ ์ƒ์„ฑํ•˜๊ณ  Service์— ์ฃผ์ž…ํ•ด์ฃผ๋Š” ๊ณผ์ •์— main ๋ฉ”์„œ๋“œ์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    ์ง€๊ธˆ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ์—๋„ ์—ฌ์ „ํžˆ ์˜์กด์„ฑ ์ฃผ์ž… ํด๋ž˜์Šค๋ฅผ ๋‘์–ด์„œ ์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ•ด์ฃผ๋Š”๊ฒŒ ๋„ˆ๋ฌด ๊ณผํ•œ ๋‹จ๊ณ„์ผ๊นŒ์š”...??
  1. ํŒ€๋ณ„ ์ƒ์ฐจ๋ฆผ์„ ๋ฐ›๊ธฐ ์œ„ํ•ด์„œ Dto๋ฅผ ์—ฌ๊ธฐ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ์–ด์ƒ‰ํ•ด์š”. Map์œผ๋กœ Team, ElephantSetUp์„ ๋ฌถ๋Š” ๋ฐฉํ–ฅ์€ ์–ด๋•Œ์š”? dto ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹น
  • 2๊ฐœ์˜ ๊ฐ ์ง„์˜ ์ •๋ณด๋ฅผ ๋‹ด์€ DTO๋ฅผ ๋ณด๋‚ด์„œ ๊ฐ™์€ ์ง„์˜์ธ์ง€ ๊ฒ€์ฆํ•˜๋Š” ๊ณผ์ •์„ ํ†ตํ•ด์„œ ์ค‘๋ณต๋œ ์ง„์˜ ์ •๋ณด๋ฅผ ๋ฐ›๋Š” ๊ฒƒ์„ ๋ง‰๊ฒŒ ํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ €๋Š” ์žฅ๊ธฐ ํŠน์„ฑ ์ƒ ์ง„์˜์ด 2๊ฐœ๋งŒ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ ์ด์ƒ์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋‹ด๊ธธ ์ˆ˜ ์žˆ๋Š” Map์ด ๊ณผํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์—ˆ๋Š”๋ฐ... ์ด๋Ÿฐ ๊ฒฝ์šฐ๋„ Map์ด ๋” ๋‚˜์€ ๊ฑธ๊นŒ์š”???
    Dto๋ฅผ ์ œ๊ฐ€ ํ•ญ์ƒ ๋„ˆ๋ฌด ์‰ฝ๊ฒŒ ์ƒ๊ฐํ•˜๊ณ  ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๊ฑธ๊นŒ์šฅ... ใ… ใ… 
  • ์–ธ์ œ Dto๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š”์ง€ ์•„๋ฃจ์˜ ์ƒ๊ฐ์ด ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค!!
  1. ์ง„์˜ ํด๋ž˜์Šค๊ฐ€ ์ ์  ๋น„๋Œ€ํ•ด์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฆฌํŒฉํ† ๋ง ๊ณผ์ •์—์„œ๋Š” ๋ณธ๋ž˜ ์–ด๋–ค ์ฑ…์ž„์ด์—ˆ๋Š”์ง€๋„ ์ง‘์ค‘ํ•ฉ์‹œ๋‹ค!
    ์ƒ์ฐจ๋ฆผ ๊ด€๋ จ์€ initializer์—์„œ ์ฑ™๊ธธ ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ์š”?
  • Camp ํด๋ž˜์Šค๋Š” ๊ธฐ์กด์— ์•„๊ตฐ ์ง„์˜์˜ ๊ฐ€์žฅ ๋ฐ‘๋‹จ ์‹œ์ž‘ ํ–‰, ์•„๊ตฐ ์ง„์˜์˜ ์ „์ง„ ๋ฐฉํ–ฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํด๋ž˜์Šค์˜€์Šต๋‹ˆ๋‹ค.
    Camp ํด๋ž˜์Šค ๋ฆฌํŒฉํ† ๋ง ์ „
public enum ElephantSetUp {

    public Map<Position, Piece> settingUp(Camp camp) {
        List<Integer> settingColumns = SETTING_COLUMNS;
        if(camp == Camp.CHO) {
            settingColumns = settingColumns.reversed();
        }
        
        //... (๋กœ์ง ์ƒ๋žต)
}

Camp ํด๋ž˜์Šค ๋ฆฌํŒฉํ† ๋ง ํ›„

public enum ElephantSetUp {

    public Map<Position, Piece> settingUp(Camp camp) {
        List<Integer> settingColumns = camp.convertElephantColumns(SETTING_COLUMNS);
        
        //... (๋กœ์ง ์ƒ๋žต)
    }

}

์œ„ ์ฒ˜๋Ÿผ Camp์— convertElephantColumns() ๋ฉ”์„œ๋“œ ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋กœ ๋‘์–ด ์ตœ๋Œ€ํ•œ ๋ถ„๊ธฐ๋ฅผ ์ค„์—ฌ๋ณด๊ณ ์ž ํ–ˆ์Šต๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ถ„๊ธฐ๋Š” ์ค„์ผ ์ˆ˜ ์žˆ์ง€๋งŒ Camp์˜ ์—ญํ• ์ด ๋” ๋Š˜์–ด๋‚˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
Camp๊ฐ€ ์ดˆ๊ธฐ ์ƒ์ฐจ๋ฆผ์— ๊ด€์—ฌํ•ด์„œ ์–ด๋–ค ์—ด ์ •๋ณด๋ฅผ ์„ ํƒํ• ์ง€์˜ ์ฑ…์ž„์ด ์ถ”๊ฐ€๋˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
์•„๋ฃจ์˜ ๋ง์”€์„ ๋“ฃ๊ณ  ๊ณฐ๊ณฐํžˆ Camp์˜ ์ฑ…์ž„์— ๋Œ€ํ•ด์„œ ์ƒ๊ฐํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.
Camp์˜ ์ฑ…์ž„์€ ์•„๊ตฐ ๊ธฐ๋ฌผ๋“ค์˜ ์ง„์˜ ๊ทœ์น™์„ ๋‹ด๋‹นํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
์ด๋Ÿฌํ•œ ์ง„์˜ ๊ทœ์น™์—๋Š” ์•„๊ตฐ ๊ธฐ๋ฌผ๋“ค์ด ์–ด๋–ค ๋ฐฉํ–ฅ์œผ๋กœ ์ „์ง„ํ•˜๋Š”์ง€, ์–ด๋А ํ–‰์—์„œ ์‹œ์ž‘ํ•˜๋Š”์ง€, ์–ด๋–ค ์˜์—ญ์„ ์ž๊ธฐ ๊ถ์„ฑ์œผ๋กœ ๋ณด๋Š”์ง€์ฒ˜๋Ÿผ ์ง„์˜ ์ž์ฒด์˜ ๊ทœ์น™์ด๋ผ๊ณ  ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๊ทธ ์ „๊ณผ ๊ฐ™์ด convertElephantColumns(); ๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋˜๋ฉด ์ง„์˜ ๋ณ„ ๊ทœ์น™์„ ๋„˜์–ด์„œ ์ดˆ๊ธฐ ์ƒ์ฐจ๋ฆผ ๋ฐฐ์น˜ ์ „๋žต๊นŒ์ง€ ๊ด€์—ฌํ•˜๊ฒŒ ๋˜์–ด ๊ทธ ์—ญํ•  ๋ฒ”์œ„๋ฅผ ๋„˜์–ด์„œ๊ฒŒ ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋‹จ์ˆœ ๋ถ„๊ธฐ๋ฅผ ์ค„์ผ ์ˆ˜๋Š” ์žˆ์ง€๋งŒ ์ฑ…์ž„์„ ๋„˜์–ด์„œ๊ฒŒ ๋˜๋Š” ๊ตฌ์กฐ๊ฐ€ ๋œ๋‹ค๊ณ  ์—ฌ๊ฒจ ๋‹ค์‹œ ์›๋ž˜๋Œ€๋กœ ๋˜๋Œ๋ ธ์Šต๋‹ˆ๋‹ค.

์‚ฌ์ดํด2 ์งˆ๋ฌธ

๋จผ์ € ์ด๋ฒˆ์— ์‚ฌ์ดํด2๋ฅผ ์ ์šฉํ•˜๋ฉด์„œ ์š”๊ตฌ ์‚ฌํ•ญ ์ค‘ ์ง€ํ‚ค์ง€ ๋ชปํ•œ ๋ถ€๋ถ„์ด ์žˆ์Šต๋‹ˆ๋‹ค ๐Ÿ˜ญ

  1. ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜ ์ตœ๋Œ€ 2๊ฐœ ์ œํ•œ
  2. depth ์ตœ๋Œ€ 1๋‹จ๊ณ„ ์ œํ•œ

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

1. ์ƒ์ˆ˜ ์ฒ˜๋ฆฌ

๊ฐ€์žฅ ๋จผ์ € ๊ถ๊ธˆํ•œ ๋ถ€๋ถ„์€ ์ƒ์ˆ˜ ์ฒ˜๋ฆฌ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.
ํ˜„์žฌ ์ €๋Š” ์ตœ๋Œ€ํ•œ ๋ชจ๋“  ๋งค์ง ๋„˜๋ฒ„์™€ ๋งค์ง ์ŠคํŠธ๋ง์„ ํด๋ž˜์Šค ์ƒ๋‹จ์— ์ƒ์ˆ˜๋กœ ์„ ์–ธํ•ด์„œ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฐ๋ฐ ์ด๋ ‡๊ฒŒ ํ•˜๋‹ค๋ณด๋‹ˆ ํŠน์ • ํด๋ž˜์Šค๋Š” ์ƒ์ˆ˜ ๊ฐœ์ˆ˜๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์•„์ ธ์„œ ์ œ ๊ฐœ์ธ์ ์ธ ์ž…์žฅ์—์„œ๋Š” ์˜คํžˆ๋ ค ์ดํ•ดํ•˜๊ธฐ๊ฐ€ ํž˜๋“ค๊ฒŒ ๋А๊ปด์กŒ์Šต๋‹ˆ๋‹ค.

์ œ๊ฐ€ ์ด๋ ‡๊ฒŒ ๋ชจ๋“  ๋งค์ง ๋„˜๋ฒ„์™€ ์ŠคํŠธ๋ง์„ ์ƒ์ˆ˜ ์ฒ˜๋ฆฌ ํ•˜๋Š” ๊ฒฝํ—˜์ด ์•„์ง ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ๋ฅผ ๋ณผ ๋•Œ ๋‚ฏ์„ค์Œ ๋А๋ผ๋Š” ๊ฒƒ์ธ์ง€, ์•„๋‹ˆ๋ฉด ์‹ค์ œ๋กœ ์ œ๊ฐ€ ๋„ˆ๋ฌด ๊ณผํ•˜๊ฒŒ ์ƒ์ˆ˜ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ธ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค..!!

2. ํ–‰๋งˆ๋ฒ•์˜ ์ฑ…์ž„ ๋ถ„๋ฆฌ

์ €๋Š” ํ–‰๋งˆ๋ฒ•์„ 2๊ฐ€์ง€๋กœ ๋‚˜๋ˆ„์–ด์„œ ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

  1. ํ•ด๋‹น ๊ธฐ๋ฌผ์ด ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ๋กœ(MoveStrategy)
  2. ํ•ด๋‹น ๊ธฐ๋ฌผ์ด ์ด๋™ํ•˜๊ธฐ ์œ„ํ•œ ์กฐ๊ฑด(MoveCondition)

์ด๋ ‡๊ฒŒ ๋‚˜๋ˆ„์–ด์„œ ์ €๋Š” Piece ๊ฐ์ฒด๊ฐ€ ๊ฐ๊ฐ 2๊ฐœ ์ด๋™ ๋‹ด๋‹น ๊ฐ์ฒด์—๊ฒŒ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๊ณ  ์‘๋‹ต์˜ ๊ฒฐ๊ณผ๋ฅผ ์ข…ํ•ฉํ•ด์„œ ์ž์‹ ์˜ ์™ธ๋ถ€๋กœ ์ „๋‹ฌํ•˜๋ฉฐ ๊ธฐ๋ฌผ ์ด๋™ ์—ฌ๋ถ€๋ฅผ ๊ฒ€์ฆํ•˜๋Š” ์ฑ…์ž„์„ ๋‹คํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ๋‹ค๋ฅธ ํฌ๋ฃจ๋ถ„๋“ค์˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋‹ˆ MoveCondition์„ ์ด๋ ‡๊ฒŒ ๋”ฐ๋กœ ์ „๋žต์œผ๋กœ ๋นผ๋‚ด์ง€ ์•Š๊ณ  MoveStrategy ์•ˆ์— ๋ฉ”์„œ๋“œ๋กœ ์•„์˜ˆ ๋ฐ•์•„๋†“์€ ๊ฒƒ์„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

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

์ด๋ ‡๊ฒŒ 2๊ฐœ๋กœ ๋‚˜๋ˆ ๋†“์€ ๊ฒƒ์ด ์˜คํžˆ๋ ค ๊ณผ๋„ํ•œ ์ถ”์ƒํ™”๋ฅผ ํ•œ ๊ฒƒ์ผ๊นŒ์š”..?

3. ๊ถ์„ฑ ๊ตฌํ˜„

์ œ๊ฐ€ ์ดˆ๊ธฐ์—๋Š” ๊ถ์„ฑ ๊ตฌํ˜„์— ์žˆ์–ด์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๋ฅผ ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.
image
ํ•˜์ง€๋งŒ, ๊ถ์„ฑ์€ ์ด๋™ ์ „๋žต์˜ ํ•œ ์ข…๋ฅ˜๋ผ๊ธฐ๋ณด๋‹ค ๋ณด๋“œ๊ฐ€ ๊ฐ€์ง€๋Š” ๊ทœ์น™์— ๊ฐ€๊น๋‹ค๊ณ  ํŒ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค.
์ด๋ฅผ ์ „๋žต ๊ณ„์ธต์˜ ์ƒ์œ„ ์ถ”์ƒํ™”๋กœ ๋‘๊ฒŒ ๋˜์ž "1์นธ ์ด๋™", "์—ฌ๋Ÿฌ ์นธ ์ด๋™"์ฒ˜๋Ÿผ ๊ธฐ๋ฌผ์˜ ํ–‰๋งˆ๋ฒ•(ํ•˜์œ„ ์ „๋žต)์ด ์ƒ์œ„ ๊ณ„์ธต์ธ ๊ถ์„ฑ ์ „๋žต์— ๋ฌถ์ด๋Š” ๊ตฌ์กฐ๊ฐ€ ๋˜๋Š” ๊ฒƒ ๊ฐ™์•˜์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์ด๋ฒˆ ๊ตฌํ˜„์—์„œ๋Š” ๊ถ์„ฑ ์ „๋žต์„ ์ „๋žต์œผ๋กœ ๋‘์ง€ ์•Š๊ณ  ๊ฐ ์ด๋™ ์ „๋žต์ด ์ž์‹ ์˜ ์ด๋™ ๊ทœ์น™์„ ์œ ์ง€ํ•œ ์ฑ„ ๊ถ์„ฑ ๊ด€๋ จ ํŒ๋‹จ๋งŒ ํ•„์š”ํ•œ ๊ณณ์—์„œ ์ง์ ‘ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉํ–ฅ์„ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ ๊ตฌํ˜„ํ•˜๊ณ  ๋‚˜๋‹ˆ, ์ƒˆ๋กœ์šด ์š”๊ตฌ์‚ฌํ•ญ์ธ "๊ถ์„ฑ ์˜์—ญ์˜ ์ถ”๊ฐ€"๊ฐ€ ๋“ค์–ด์™”์„ ๋•Œ ์ œ ์ฝ”๋“œ์—์„œ๋Š” ํ™•์žฅ์ด ์ผ์–ด๋‚˜์ง€ ์•Š๊ณ  ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚ฌ๋‹ค๊ณ  ๋А๊ปด์กŒ์Šต๋‹ˆ๋‹ค.
์ด ๊ฒฝ์šฐ ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™ ์ž์ฒด๊ฐ€ ๋ณ€๊ฒฝ๋œ ๊ฒƒ์ด๋ฏ€๋กœ ๊ธฐ์กด ์ฝ”๋“œ์˜ ์ˆ˜์ •์ด ์ž์—ฐ์Šค๋Ÿฌ์šด ๊ฒƒ์ธ์ง€, ์•„๋‹ˆ๋ฉด ๊ตฌ์กฐ๋ฅผ ๋” ์ž˜ ๋‚˜๋ˆ„์—ˆ๋‹ค๋ฉด ๊ถ์„ฑ ์˜์—ญ์˜ ์ฒ˜๋ฆฌ๋„ ํ™•์žฅ ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋Œ€์‘์ด ๊ฐ€๋Šฅํ–ˆ์„ ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

4. GameService์˜ ํ…Œ์ŠคํŠธ

์„œ๋น„์Šค ๊ณ„์ธต ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•ด๋ณธ ๊ฒฝํ—˜์ด ์—†์–ด์„œ, ํ˜„์žฌ ์ œ๊ฐ€ ์ž‘์„ฑํ•œ GameService ํ…Œ์ŠคํŠธ ๋ฐฉ์‹์ด ์ ์ ˆํ•œ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ๋Š” GameService๊ฐ€ ๋‹จ์ˆœ ๊ณ„์‚ฐ๋ณด๋‹ค๋Š” ํŠธ๋žœ์žญ์…˜๊ณผ Repository๋ฅผ ์กฐํ•ฉํ•ด ๊ฒŒ์ž„์„ ์ƒ์„ฑ/์กฐํšŒ/์ €์žฅํ•˜๋Š” ์—ญํ• ์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ…Œ์ŠคํŠธ db๋ฅผ ํ†ตํ•ด ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ๋“ค์„ ์ž˜ ์ˆ˜ํ–‰ํ•˜๋Š”์ง€๋ฅผ ํ…Œ์ŠคํŠธํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์ด๋Ÿฐ ํ…Œ์ŠคํŠธ๊ฐ€ GameService์˜ ์ฑ…์ž„์„ ๊ฒ€์ฆํ•˜๋Š” ๋ฐ ์ ์ ˆํ•œ์ง€ ์•„๋‹ˆ๋ฉด ์ด๋Ÿฐ ๊ฒฝ์šฐ ํ…Œ์ŠคํŠธ ํ•ด์•ผํ•˜๋Š” ๋ณ„๋„์˜ ๋ฐฉ์‹์ด ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค..

- ๊ถ์„ฑ ์™ธ๋ถ€ ์ด๋™์‹œ ์˜ˆ์™ธ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
- ๊ถ์„ฑ ๋‚ด 1์นธ ๋Œ€๊ฐ์„  ์ด๋™ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
- ๊ถ์„ฑ ๋‚ด ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์€ ๋Œ€๊ฐ์„  ์ด๋™ ์˜ˆ์™ธ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
- ์กธ/๋ณ‘์˜ ๊ถ์„ฑ ๋‚ด ๋Œ€๊ฐ์„  ์ด๋™ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
- ์‚ฌ์šฉํ•˜์ง€ ์•Š๋˜ MethodSource๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
- ์ฐจ/ํฌ ๊ถ์„ฑ ๋‚ด ๋Œ€๊ฐ์„  ์ด๋™ ํ…Œ์ŠคํŠธ ๋ฐ ์˜ˆ์™ธ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
- Camp์˜ ๋ฉ”์„œ๋“œ ํŒŒ๋ผ๋ฏธํ„ฐ ์ˆ˜์ •์œผ๋กœ ์ธํ•œ ๋ณ€๊ฒฝ
- ๊ถ ์žกํž ์‹œ ๊ฒŒ์ž„ ์ข…๋ฃŒ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
- ์ž…์ถœ๋ ฅ ์‹œ ๋‚˜๋ผ๋ณ„ ์ƒ‰ ์ถ”๊ฐ€
- ์ ์ˆ˜ ๊ณ„์‚ฐ ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
- dto ์ œ๊ฑฐ ํ›„ Map์œผ๋กœ ์ธ์ž ์ˆ˜์ •
- Camp์—์„œ ๊ถ์„ฑ ํŒ๋‹จ ์ฑ…์ž„์„ ๋ถ„๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค
- Turn ๊ฐ์ฒด ์‚ญ์ œ ํ›„ Game ๊ฐ์ฒด์˜ ๋‚ด๋ถ€ ํ•„๋“œ๋กœ Camp ์ž์ฒด๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
- Game ๊ฐ์ฒด๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ ์žฅ๊ธฐํŒ๊ณผ ํ˜„์žฌ ํ”Œ๋ ˆ์ดํ„ด์„ ๋‚ด๋ถ€ ์ƒํƒœ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๊ฒŒํ–ˆ์Šต๋‹ˆ๋‹ค.
@MODUGGAGI MODUGGAGI changed the title Step2 [๐Ÿš€ ์‚ฌ์ดํด2 - ๋ฏธ์…˜ (๊ธฐ๋ฌผ ํ™•์žฅ + DB ์ ์šฉ)] ์Šคํƒ€ํฌ ๋ฏธ์…˜ ์ œ์ถœํ•ฉ๋‹ˆ๋‹ค. Apr 3, 2026
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