Skip to content

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

Merged
Arachneee merged 43 commits intowoowacourse:soohyun1904from
soohyun1904:step2
Apr 12, 2026

Conversation

@soohyun1904
Copy link
Copy Markdown

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

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

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

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

์žฅ๊ธฐ ํ”„๋กœ์ ํŠธ ์˜์†์„ฑ ๊ณ„์ธต ๋ฐ ๋„๋ฉ”์ธ ์„ค๊ณ„ ๋ฆฌ๋ทฐ ์š”์ฒญ


1. ๊ฐ์ฒด ์„ค๊ณ„ ๋ฐ ๋„๋ฉ”์ธ ๋ชจ๋ธ๋ง (Domain & Object Design)

Q. Score๋ฅผ ํ•„๋“œ(State)๋กœ ์œ ์ง€ํ• ์ง€ ๋ฉ”์„œ๋“œ(Behavior)๋กœ ๊ณ„์‚ฐํ• ์ง€ ์—ฌ๋ถ€

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

Q. ๊ธฐ๋ฌผ ์ด๋™ ๊ฐ์ฒด์˜ ์ง€์‹ ๋ฒ”์œ„ (๊ถ์„ฑ ์œ„์น˜ ์ธ์ง€)

  • ์งˆ๋ฌธ: ๊ธฐ๋ฌผ์˜ ์ด๋™ ๋กœ์ง์„ ๋‹ด๋‹นํ•˜๋Š” ๊ฐ์ฒด๊ฐ€ '๊ถ์„ฑ(Palace)'์˜ ์œ„์น˜ ์ •๋ณด๋ฅผ ์ง์ ‘ ์•Œ๊ณ  ์žˆ์–ด๋„ ๋ ๊นŒ์š”?
  • ์„ธ๋ถ€ ๋‚ด์šฉ: Position ์ž์ฒด๊ฐ€ '๊ถ์„ฑ ์—ฌ๋ถ€'๋ฅผ ์†์„ฑ์œผ๋กœ ๊ฐ€์ง€๋Š” ๊ฒƒ๊ณผ, ์ด๋™ ๋กœ์ง ๊ฐ์ฒด๊ฐ€ ๊ถ์„ฑ ์ขŒํ‘œ ๋ฒ”์œ„๋ฅผ ์ƒ์ˆ˜๋กœ ๋“ค๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ ์ค‘ ์–ด๋А ์ชฝ์ด ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ณ  ์‘์ง‘๋„๋ฅผ ๋†’์ด๋Š” ๋ฐ ์œ ๋ฆฌํ• ๊นŒ์š”?

2. ํŒจํ„ด ์ ์šฉ ๋ฐ ์„ค๊ณ„ ์›์น™ (Design Patterns)

Q. ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํŒจํ„ด ๋„์ž… ๋ณด๋ฅ˜์™€ ํด๋ž˜์Šค ํญ๋ฐœ ๋ฌธ์ œ

  • ์งˆ๋ฌธ: ๊ธฐ๋ฌผ ์ด๋™ ๊ทœ์น™ ํ™•์žฅ์„ ์œ„ํ•ด ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํŒจํ„ด์„ ๊ฒ€ํ† ํ–ˆ์œผ๋‚˜, ๋ชจ๋“  ํŒจํ„ด๋งˆ๋‹ค ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•˜๋Š” 'ํด๋ž˜์Šค ํญ๋ฐœ' ์šฐ๋ ค๋กœ ๋ณด๋ฅ˜ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์„ธ๋ถ€ ๋‚ด์šฉ: ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํŒจํ„ด์ด ์ „๋žต ํŒจํ„ด(Strategy)์ด๋‚˜ ์ƒ์†๋ณด๋‹ค ์‹ค์งˆ์ ์ธ ์ด๋“์„ ์ฃผ๋Š” ์‹œ์ ์ด ๊ตฌ์ฒด์ ์œผ๋กœ ์–ธ์ œ์ผ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

3. ์˜์†์„ฑ ๊ณ„์ธต ๋ฐ ์ €์žฅ ์ „๋žต (Persistence & Infrastructure)

Q. ์ „์ฒด ์‚ญ์ œ ํ›„ ์‚ฝ์ž… ์—…๋ฐ์ดํŠธ ์ „๋žต

  • ์งˆ๋ฌธ: ๊ธฐ๋ฌผ ์ด๋™ ์‹œ ๊ฐœ๋ณ„ id๋ฅผ ์ถ”์ ํ•ด UPDATE ํ•˜์ง€ ์•Š๊ณ , ํ•ด๋‹น ๊ฒŒ์ž„์˜ ๊ธฐ๋ฌผ์„ ๋ชจ๋‘ ์ง€์šด ๋’ค(DELETE) ํ˜„์žฌ ๋„๋ฉ”์ธ ์ƒํƒœ๋ฅผ ๋‹ค์‹œ ๋„ฃ๋Š”(INSERT) ๋ฐฉ์‹์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์„ธ๋ถ€ ๋‚ด์šฉ: ๋„๋ฉ”์ธ ๋ชจ๋ธ์ด DB ์‹๋ณ„์ž(id)๋ฅผ ๋ชฐ๋ผ๋„ ๋˜๊ฒŒ๋” ํ•˜์—ฌ '๋„๋ฉ”์ธ ์ˆœ์ˆ˜์„ฑ'์„ ์ง€์ผฐ์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ, ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์ด ์‹ค๋ฌด ํ™˜๊ฒฝ์˜ ์„ฑ๋Šฅ์ด๋‚˜ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ์ธก๋ฉด์—์„œ ์–ด๋А ์ •๋„๊นŒ์ง€ ํ—ˆ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ์„ค๊ณ„์ธ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

Q. ์ €์žฅ ์‹œ์ : ๋งค ์ˆ˜๋งˆ๋‹ค ์ €์žฅ vs ์ผ๊ด„ ์ €์žฅ

  • ์งˆ๋ฌธ: ํ˜„์žฌ๋Š” ๋งค ํšŒ์ฐจ(play)๋งˆ๋‹ค DB์— ๋™๊ธฐํ™”ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์„ธ๋ถ€ ๋‚ด์šฉ: ์žฅ์•  ๋ณต๊ตฌ์—๋Š” ์œ ๋ฆฌํ•˜์ง€๋งŒ DB I/O๊ฐ€ ๋นˆ๋ฒˆํ•ฉ๋‹ˆ๋‹ค. ์„œ๋น„์Šค ๊ทœ๋ชจ์™€ ์žฅ๊ธฐ ๊ฒŒ์ž„์˜ ํŠน์„ฑ์„ ๊ณ ๋ คํ–ˆ์„ ๋•Œ ์ด ๋ฐฉ์‹์ด ํ•ฉ๋ฆฌ์ ์ธ์ง€, ์•„๋‹ˆ๋ฉด ๋ฉ”๋ชจ๋ฆฌ ์บ์‹ฑ ํ›„ ํŠน์ • ์‹œ์ ์— ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์ด ๊ถŒ์žฅ๋˜๋Š”์ง€ ์˜๊ฒฌ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

4. ์„œ๋น„์Šค ๋ ˆ์ด์–ด ๋ฐ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ (Architecture & Flow)

Q. ์กฐ์ธ(Join) ๋Œ€์‹  ๋‹ค์ค‘ ์ฟผ๋ฆฌ ์‹คํ–‰์˜ ์ ์ ˆ์„ฑ

  • ์งˆ๋ฌธ: ๊ฒŒ์ž„ ๋ฉ”ํƒ€ ์ •๋ณด์™€ ๊ธฐ๋ฌผ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ JOIN์„ ์“ฐ์ง€ ์•Š๊ณ  ๊ฐ๊ฐ์˜ DAO๋ฅผ ํ˜ธ์ถœํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์„ธ๋ถ€ ๋‚ด์šฉ: DAO ๊ฐ„์˜ ์ฑ…์ž„์„ ๋ช…ํ™•ํžˆ ๋ถ„๋ฆฌํ•˜๊ณ  ์ฟผ๋ฆฌ๋ฅผ ๋‹จ์ˆœํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•จ์ž…๋‹ˆ๋‹ค. ์„ฑ๋Šฅ์ƒ ํฐ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ด ๊ตฌ์กฐ๋ฅผ ์œ ์ง€ํ•ด๋„ ๊ดœ์ฐฎ์„๊นŒ์š”?

Q. ์„œ๋น„์Šค์™€ ๋„๋ฉ”์ธ ๊ฐ„์˜ ์ •๋ณด ์ „๋‹ฌ ๋ฒ”์œ„ ๋ฐ Mapper์˜ ์œ„์น˜

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

5. ํ…Œ์ŠคํŠธ ๋ฐ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ (Testing & Exception)

Q. TDD ์ง„ํ–‰ ์ˆœ์„œ์™€ ์ „๋žต

  • ์งˆ๋ฌธ: DB์™€ ์—ฐ๋™๋˜๋Š” ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•  ๋•Œ, ๋ฐ์ดํ„ฐ ๊ฒฐ๊ณผ๋ฌผ์„ ๊ฒ€์ฆํ•˜๋Š” DB ํ…Œ์ŠคํŠธ๋ฅผ ๋จผ์ € ์งœ์•ผ ํ•˜๋Š”์ง€, ์•„๋‹ˆ๋ฉด ์„œ๋น„์Šค ๋กœ์ง์„ ๋จผ์ € ์งœ์•ผ ํ•˜๋Š”์ง€ ๊ธฐ์ค€์ด ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.
  • ์„ธ๋ถ€ ๋‚ด์šฉ: ์„œ๋น„์Šค ๋ ˆ์ด์–ด์˜ ํ…Œ์ŠคํŠธ๋Š” ์‹ค์ œ DB๋ฅผ ์—ฐ๋™ํ•˜์—ฌ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๋กœ ์ง„ํ–‰ํ•ด์•ผ ํ•˜๋Š”์ง€, ํ˜น์€ ๋ชจํ‚น์„ ํ†ตํ•ด ๋„๋ฉ”์ธ ๋กœ์ง๋งŒ ๊ฒ€์ฆํ•˜๋Š” ๊ฒƒ์ด ๋งž๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

Q. JDBC ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ฐ ์„ค์ • ํŒŒ์ผ ์œ„์น˜

  • ์งˆ๋ฌธ: DAO์—์„œ ๋ฐœ์ƒํ•˜๋Š” SQLException์„ ์„œ๋น„์Šค ๊ณ„์ธต์—์„œ ์ปค์Šคํ…€ ์˜ˆ์™ธ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ์ˆ ์  ์˜ˆ์™ธ๋ฅผ ์–ด๋””๊นŒ์ง€ ์ˆจ๊ฒจ์•ผ ํ•˜๋ฉฐ, ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ฐ€์žฅ ์ ์ ˆํ•œ ๋ฐฉ์‹์€ ๋ฌด์—‡์ผ๊นŒ์š”?

Q. DB ์„ค์ • ํด๋ž˜์Šค ์œ„์น˜

์งˆ๋ฌธ : ์ถ”๊ฐ€๋กœ DB ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•˜๋Š” Config ํด๋ž˜์Šค๋Š” ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ์ƒ ์–ด๋А ์œ„์น˜(ํŒจํ‚ค์ง€)์— ๋‘๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ๊ด€๋ฆฌํ•˜๊ธฐ ํŽธํ• ๊นŒ์š”?

- ์ ์ˆ˜ ์ƒ์„ฑ ์‹œ ์˜ˆ์™ธ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
- ์ ์ˆ˜ ๋น„๊ต ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
- ์ ์ˆ˜ ํ•ฉ์‚ฐ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
- ์ ์ˆ˜ ๋น„๊ต, ํ•ฉ์‚ฐ ์ถ”๋ผ
- Piece ๋‚ด๋ถ€ ๊ธฐ๋ฌผ ์ด๋ฆ„ ์ถ”์ƒ ๋ฉ”์„œ๋“œ ์‚ญ์ œ
- PieceName ๊ฐ์ฒด ์ถ”๊ฐ€ ํ›„ ์ด๋ฆ„ ํŒ๋‹จ ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€
- Score ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜, ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€
- Position Map ์บ์‹œ ์‚ญ์ œ
- Row, Column List ์บ์‹œ ์ถ”๊ฐ€
- Row, Column ์กฐํ•ฉ์œผ๋กœ Position ์ƒ์„ฑ
- ๋ฐฉํ–ฅ ํ™•์ธ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
- ์œ„, ์•„๋ž˜ ๋ฐฉํ–ฅ ํ™•์ธ ๋ฉ”์†Œ๋“œ ์ถ”๊ฐ€
- ๋Œ€๊ฐ๋ฐฉํ–ฅ ๋ฆฌ์ŠคํŠธ ์ถ”๊ฐ€
- ํฌ์ง€์…˜์ด ๊ถ์„ฑ์— ์กด์žฌํ•˜๋Š”์ง€ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
- ๊ถ์„ฑ ์œ„์น˜์— ๋”ฐ๋ฅธ ๋ฐ˜ํ™˜๊ฐ’ ํ…Œ์ŠคํŠธ์ถ”๊ฐ€
- ํฌ์ง€์…˜์ด ๊ถ์„ฑ์— ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
- ํฌ์ง€์…˜ ์œ„์น˜์— ๋”ฐ๋ฅธ ๋ฐฉํ–ฅ ๊ฐ’ ๋ฐ˜ํ™˜ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
- ๊ธฐ๋ฌผ์ด ์ฃผ์š”ํ•œ ๊ธฐ๋ฌผ์ธ์ง€ ํ…Œ์ŠคํŠธ
- ๊ธฐ๋ฌผ์ด ์ฃผ์š”ํ•œ ๊ธฐ๋ฌผ์ธ์ง€ ํ™•์ธ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
- ์™•์ธ์ง€ ํ™•์ธ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
- ์ ์ˆ˜ * ๋ฐฐ์œจ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
- ์ ์ˆ˜ ํŒ๋‹จ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
Copy link
Copy Markdown
Member

@Arachneee Arachneee left a comment

Choose a reason for hiding this comment

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

์•ˆ๋…•ํ•˜์„ธ์š” ๋‹ฌ์ˆ˜๋‹˜!

๋ฆฌ๋ทฐ์–ด ๋ฐฑํ˜ธ์ž…๋‹ˆ๋‹ค. ๐Ÿ˜„

์‚ฌ์ดํด 2๋„ ์ž˜ ํ•ด์ฃผ์…จ๋„ค์š”. ๊น”๋”ํ•˜๊ฒŒ ์ž˜ ํ•˜์‹  ๊ฒƒ ๊ฐ™์•„์š”. ๊ณ ์ƒํ•˜์…จ์Šต๋‹ˆ๋‹ค.

์ฝ”๋ฉ˜ํŠธ ๋‚จ๊ฒผ์œผ๋‹ˆ ํ™•์ธํ•ด์ฃผ์„ธ์š”~

  1. ๊ฐ์ฒด ์„ค๊ณ„ ๋ฐ ๋„๋ฉ”์ธ ๋ชจ๋ธ๋ง (Domain & Object Design)
    Q. Score๋ฅผ ํ•„๋“œ(State)๋กœ ์œ ์ง€ํ• ์ง€ ๋ฉ”์„œ๋“œ(Behavior)๋กœ ๊ณ„์‚ฐํ• ์ง€ ์—ฌ๋ถ€
    ์งˆ๋ฌธ: ํ˜„์žฌ ๊ธฐ๋ฌผ ๊ฐ์ฒด ๋‚ด๋ถ€์— ์ ์ˆ˜๋ฅผ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋กœ ๊ฐ€์ง€๋„๋ก ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ ์ˆ˜๋Š” ๊ฒŒ์ž„ ์ข…๋ฃŒ ์‹œ์ ์ด๋‚˜ ์ ์ˆ˜ ํ™•์ธ ์‹œ์ ์—๋งŒ ์‚ฌ์šฉ๋˜๋Š”๋ฐ, ์ด๋ฅผ ์ƒ์‹œ ๋ณ€์ˆ˜๋กœ ๋“ค๊ณ  ์žˆ๋Š” ๊ฒƒ์ด ๋งž์„๊นŒ์š”?
    ์„ธ๋ถ€ ๋‚ด์šฉ: ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋ฅผ ์ค„์—ฌ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ณ๊ฒŒ ์œ ์ง€ํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. ์ ์ˆ˜ ์ถœ๋ ฅ ์‹œ์ ์—๋งŒ ํ˜ธ์ถœ๋˜์–ด ์ƒ์ˆ˜๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ ๋ฐฉ์‹์ด ๊ฐ์ฒด์˜ ์ž์œจ์„ฑ๊ณผ ๋ฉ”๋ชจ๋ฆฌ ์ธก๋ฉด์—์„œ ๋” ๋‚˜์€ ์„ค๊ณ„๊ฐ€ ๋  ์ˆ˜ ์žˆ์„์ง€ ๋ฆฌ๋ทฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

score๋ฅผ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋กœ ๊ฐ€์ง€์ง€ ์•Š์œผ๋ฉด Piece์˜ score ๋ฉ”์†Œ๋“œ๋ฅผ ์ถ”์ƒ ๋ฉ”์†Œ๋“œ๋กœ ๋งŒ๋“ค๊ณ  ๋ชจ๋“  Piece ๊ตฌํ˜„์ฒด์—์„œ ํ•ด๋‹น ๋ฉ”์†Œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๊ฒŒ ํ•ด์•ผํ•  ๊ฒƒ ๊ฐ™๋„ค์š”. ์ด๊ฑฐ๋Š” Piece์˜ ์ ์ˆ˜๊ฐ€ ๊ตฌํ˜„์ฒด๋งˆ๋‹ค ๊ณ ์ •์ธ์ง€ ์•„๋‹Œ์ง€์— ๋”ฐ๋ผ์„œ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ์ธก๋ฉด์—์„œ๋Š” ๋ณ„ ์ฐจ์ด๊ฐ€ ์—†์„ ๊ฒƒ ๊ฐ™์•„์š”.

Q. ๊ธฐ๋ฌผ ์ด๋™ ๊ฐ์ฒด์˜ ์ง€์‹ ๋ฒ”์œ„ (๊ถ์„ฑ ์œ„์น˜ ์ธ์ง€)
์งˆ๋ฌธ: ๊ธฐ๋ฌผ์˜ ์ด๋™ ๋กœ์ง์„ ๋‹ด๋‹นํ•˜๋Š” ๊ฐ์ฒด๊ฐ€ '๊ถ์„ฑ(Palace)'์˜ ์œ„์น˜ ์ •๋ณด๋ฅผ ์ง์ ‘ ์•Œ๊ณ  ์žˆ์–ด๋„ ๋ ๊นŒ์š”?
์„ธ๋ถ€ ๋‚ด์šฉ: Position ์ž์ฒด๊ฐ€ '๊ถ์„ฑ ์—ฌ๋ถ€'๋ฅผ ์†์„ฑ์œผ๋กœ ๊ฐ€์ง€๋Š” ๊ฒƒ๊ณผ, ์ด๋™ ๋กœ์ง ๊ฐ์ฒด๊ฐ€ ๊ถ์„ฑ ์ขŒํ‘œ ๋ฒ”์œ„๋ฅผ ์ƒ์ˆ˜๋กœ ๋“ค๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ ์ค‘ ์–ด๋А ์ชฝ์ด ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ณ  ์‘์ง‘๋„๋ฅผ ๋†’์ด๋Š” ๋ฐ ์œ ๋ฆฌํ• ๊นŒ์š”?

๊ถ์„ฑ ๋‚ด๋ถ€์—์„œ์˜ ์›€์ง์ž„์ด๋‹ˆ๊นŒ ์ง€๊ธˆ์ฒ˜๋Ÿผ ๊ถ์„ฑ ๋‚ด๋ถ€ ์›€์ง์ด๋Š” ์ „๋žต์„ ์ถ”์ƒํ™”ํ•˜๋Š” ๊ฒƒ ์ข‹์€ ๊ฒƒ ๊ฐ™์•„์š”! ๐Ÿ‘ Palace -> Position์— ๋Œ€ํ•œ ์˜์กด์€ ๋ถˆ๊ฐ€ํ”ผํ•œ ๊ฒƒ ๊ฐ™์•„์š”. ๊ทธ๋Ÿฐ๋ฐ Position์— '๊ถ์„ฑ ์—ฌ๋ถ€' ์†์„ฑ์ด ๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ์€ Position -> Palace์— ๋Œ€ํ•œ ๊ฐ„์ ‘ ์˜์กด์ด ์ƒ๊ธฐ๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ด์š”. ๊ทธ๋ž˜์„œ ์ง€๊ธˆ ๊ตฌ์กฐ๊ฐ€ ์ข‹์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค!

  1. ํŒจํ„ด ์ ์šฉ ๋ฐ ์„ค๊ณ„ ์›์น™ (Design Patterns)
    Q. ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํŒจํ„ด ๋„์ž… ๋ณด๋ฅ˜์™€ ํด๋ž˜์Šค ํญ๋ฐœ ๋ฌธ์ œ
    ์งˆ๋ฌธ: ๊ธฐ๋ฌผ ์ด๋™ ๊ทœ์น™ ํ™•์žฅ์„ ์œ„ํ•ด ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํŒจํ„ด์„ ๊ฒ€ํ† ํ–ˆ์œผ๋‚˜, ๋ชจ๋“  ํŒจํ„ด๋งˆ๋‹ค ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•˜๋Š” 'ํด๋ž˜์Šค ํญ๋ฐœ' ์šฐ๋ ค๋กœ ๋ณด๋ฅ˜ํ–ˆ์Šต๋‹ˆ๋‹ค.
    ์„ธ๋ถ€ ๋‚ด์šฉ: ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํŒจํ„ด์ด ์ „๋žต ํŒจํ„ด(Strategy)์ด๋‚˜ ์ƒ์†๋ณด๋‹ค ์‹ค์งˆ์ ์ธ ์ด๋“์„ ์ฃผ๋Š” ์‹œ์ ์ด ๊ตฌ์ฒด์ ์œผ๋กœ ์–ธ์ œ์ผ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

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

  1. ์˜์†์„ฑ ๊ณ„์ธต ๋ฐ ์ €์žฅ ์ „๋žต (Persistence & Infrastructure)
    Q. ์ „์ฒด ์‚ญ์ œ ํ›„ ์‚ฝ์ž… ์—…๋ฐ์ดํŠธ ์ „๋žต
    ์งˆ๋ฌธ: ๊ธฐ๋ฌผ ์ด๋™ ์‹œ ๊ฐœ๋ณ„ id๋ฅผ ์ถ”์ ํ•ด UPDATE ํ•˜์ง€ ์•Š๊ณ , ํ•ด๋‹น ๊ฒŒ์ž„์˜ ๊ธฐ๋ฌผ์„ ๋ชจ๋‘ ์ง€์šด ๋’ค(DELETE) ํ˜„์žฌ ๋„๋ฉ”์ธ ์ƒํƒœ๋ฅผ ๋‹ค์‹œ ๋„ฃ๋Š”(INSERT) ๋ฐฉ์‹์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.
    ์„ธ๋ถ€ ๋‚ด์šฉ: ๋„๋ฉ”์ธ ๋ชจ๋ธ์ด DB ์‹๋ณ„์ž(id)๋ฅผ ๋ชฐ๋ผ๋„ ๋˜๊ฒŒ๋” ํ•˜์—ฌ '๋„๋ฉ”์ธ ์ˆœ์ˆ˜์„ฑ'์„ ์ง€์ผฐ์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ, ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์ด ์‹ค๋ฌด ํ™˜๊ฒฝ์˜ ์„ฑ๋Šฅ์ด๋‚˜ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ์ธก๋ฉด์—์„œ ์–ด๋А ์ •๋„๊นŒ์ง€ ํ—ˆ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ์„ค๊ณ„์ธ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

๋„๋ฉ”์ธ์ด DB ์‹๋ณ„์ž๋ฅผ ์•Œ์ง€ ๋ชปํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ DELETE, INSERT ์ „๋žต์„ ์„ ํƒํ•˜์‹ ๊ฑธ๊นŒ์š”? ๋„๋ฉ”์ธ์ด id๋ฅผ ๊ฐ€์ง€๋ฉด ๋„๋ฉ”์ธ ์ˆœ์ˆ˜์„ฑ์ด ๊นจ์ง€๋Š” ๊ฑธ๊นŒ์š”?

Q. ์ €์žฅ ์‹œ์ : ๋งค ์ˆ˜๋งˆ๋‹ค ์ €์žฅ vs ์ผ๊ด„ ์ €์žฅ
์งˆ๋ฌธ: ํ˜„์žฌ๋Š” ๋งค ํšŒ์ฐจ(play)๋งˆ๋‹ค DB์— ๋™๊ธฐํ™”ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์„ธ๋ถ€ ๋‚ด์šฉ: ์žฅ์•  ๋ณต๊ตฌ์—๋Š” ์œ ๋ฆฌํ•˜์ง€๋งŒ DB I/O๊ฐ€ ๋นˆ๋ฒˆํ•ฉ๋‹ˆ๋‹ค. ์„œ๋น„์Šค ๊ทœ๋ชจ์™€ ์žฅ๊ธฐ ๊ฒŒ์ž„์˜ ํŠน์„ฑ์„ ๊ณ ๋ คํ–ˆ์„ ๋•Œ ์ด ๋ฐฉ์‹์ด ํ•ฉ๋ฆฌ์ ์ธ์ง€, ์•„๋‹ˆ๋ฉด ๋ฉ”๋ชจ๋ฆฌ ์บ์‹ฑ ํ›„ ํŠน์ • ์‹œ์ ์— ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์ด ๊ถŒ์žฅ๋˜๋Š”์ง€ ์˜๊ฒฌ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

๋งค ํšŒ์ฐจ๊ฐ€ ๋ช‡์ดˆ ๋‹จ์œ„๋กœ ์ง„ํ–‰ ๋ ํ…๋ฐ DB I/O ์—๋Œ€ํ•œ ์„ฑ๋Šฅ์€ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š์•„๋„ ๋˜์ง€ ์•Š์„๊นŒ์š”?

  1. ์„œ๋น„์Šค ๋ ˆ์ด์–ด ๋ฐ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ (Architecture & Flow)
    Q. ์กฐ์ธ(Join) ๋Œ€์‹  ๋‹ค์ค‘ ์ฟผ๋ฆฌ ์‹คํ–‰์˜ ์ ์ ˆ์„ฑ
    ์งˆ๋ฌธ: ๊ฒŒ์ž„ ๋ฉ”ํƒ€ ์ •๋ณด์™€ ๊ธฐ๋ฌผ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ JOIN์„ ์“ฐ์ง€ ์•Š๊ณ  ๊ฐ๊ฐ์˜ DAO๋ฅผ ํ˜ธ์ถœํ–ˆ์Šต๋‹ˆ๋‹ค.
    ์„ธ๋ถ€ ๋‚ด์šฉ: DAO ๊ฐ„์˜ ์ฑ…์ž„์„ ๋ช…ํ™•ํžˆ ๋ถ„๋ฆฌํ•˜๊ณ  ์ฟผ๋ฆฌ๋ฅผ ๋‹จ์ˆœํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•จ์ž…๋‹ˆ๋‹ค. ์„ฑ๋Šฅ์ƒ ํฐ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ด ๊ตฌ์กฐ๋ฅผ ์œ ์ง€ํ•ด๋„ ๊ดœ์ฐฎ์„๊นŒ์š”?

์„ฑ๋Šฅ ์ƒ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๊ดœ์ฐฎ๋‹ค๊ณ  ์ƒ๊ฐํ•ด์š”.

Q. ์„œ๋น„์Šค์™€ ๋„๋ฉ”์ธ ๊ฐ„์˜ ์ •๋ณด ์ „๋‹ฌ ๋ฒ”์œ„ ๋ฐ Mapper์˜ ์œ„์น˜
์งˆ๋ฌธ: ์„œ๋น„์Šค๊ฐ€ DAO๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ์ •๋ณด๋ฅผ ๋„๋ฉ”์ธ์—๊ฒŒ ์–ด๋А ์ •๋„๊นŒ์ง€ ์ „๋‹ฌํ•ด์•ผ ํ• ๊นŒ์š”? ๋˜ํ•œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๊ฐ€ ๋งคํผ๋ฅผ ์†Œ์œ ํ•˜๊ณ  ๋ณ€ํ™˜ํ•˜๋Š” ๊ตฌ์กฐ๊ฐ€ ์ ์ ˆํ• ๊นŒ์š”?
์„ธ๋ถ€ ๋‚ด์šฉ: ํ˜„์žฌ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ๋งคํผ๋ฅผ ํ†ตํ•ด ์—”ํ‹ฐํ‹ฐ๋“ค์„ ํ•ฉ์น˜๊ณ  ๋„๋ฉ”์ธ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์„œ๋น„์Šค์— ๋„˜๊ฒจ์ค๋‹ˆ๋‹ค. ๋„๋ฉ”์ธ์ด id๋ฅผ ์ „ํ˜€ ๋ชจ๋ฅด๋Š” ํ˜„์žฌ์˜ ๊ตฌ์กฐ๊ฐ€ ์žฅ๊ธฐ์ ์œผ๋กœ ํ™•์žฅ์„ฑ์— ๋„์›€์ด ๋ ์ง€ ๋ฆฌ๋ทฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

DAO, ๋„๋ฉ”์ธ, ์—”ํ‹ฐํ‹ฐ, ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์ „๋ถ€ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅธ ์—ญํ• ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  ์™œ ์กด์žฌํ•˜๋‚˜์š”? ๋„๋ฉ”์ธ์ด id๋ฅผ ๋ชฐ๋ผ์•ผํ•˜๋Š” ์ด์œ ๋Š” ๋ญ˜๊นŒ์š”?

  1. ํ…Œ์ŠคํŠธ ๋ฐ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ (Testing & Exception)
    Q. TDD ์ง„ํ–‰ ์ˆœ์„œ์™€ ์ „๋žต
    ์งˆ๋ฌธ: DB์™€ ์—ฐ๋™๋˜๋Š” ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•  ๋•Œ, ๋ฐ์ดํ„ฐ ๊ฒฐ๊ณผ๋ฌผ์„ ๊ฒ€์ฆํ•˜๋Š” DB ํ…Œ์ŠคํŠธ๋ฅผ ๋จผ์ € ์งœ์•ผ ํ•˜๋Š”์ง€, ์•„๋‹ˆ๋ฉด ์„œ๋น„์Šค ๋กœ์ง์„ ๋จผ์ € ์งœ์•ผ ํ•˜๋Š”์ง€ ๊ธฐ์ค€์ด ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.
    ์„ธ๋ถ€ ๋‚ด์šฉ: ์„œ๋น„์Šค ๋ ˆ์ด์–ด์˜ ํ…Œ์ŠคํŠธ๋Š” ์‹ค์ œ DB๋ฅผ ์—ฐ๋™ํ•˜์—ฌ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๋กœ ์ง„ํ–‰ํ•ด์•ผ ํ•˜๋Š”์ง€, ํ˜น์€ ๋ชจํ‚น์„ ํ†ตํ•ด ๋„๋ฉ”์ธ ๋กœ์ง๋งŒ ๊ฒ€์ฆํ•˜๋Š” ๊ฒƒ์ด ๋งž๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

๋ฌด์—‡์„ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์‹ถ์€์ง€์— ๋”ฐ๋ผ ๋‹ค๋ฅผ ๊ฒƒ ๊ฐ™์•„์š”. ๋„๋ฉ”์ธ ๋กœ์ง์„ ๊ฒ€์ฆํ•˜๊ณ  ์‹ถ์œผ๋ฉด ๋ชจํ‚น์„ ํ•˜๋ฉด ๋˜๊ณ  DB ์—ฐ๋™๊นŒ์ง€ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์‹ถ์œผ๋ฉด ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ €๋ผ๋ฉด DB ๊ด€๋ จ ๋กœ์ง์ด ๋ณต์žกํ•˜๋‹ˆ๊นŒ DB ํ…Œ์ŠคํŠธ ๋จผ์ € ์ง„ํ–‰ํ–ˆ์„ ๊ฒƒ ๊ฐ™์•„์š”. ์•„๋‹ˆ๋ฉด ์„œ๋น„์Šค ๋ ˆ์ด์–ด๋Š” ๋‹จ์ˆœํ•˜๋‹ˆ๊นŒ DB๋ฅผ ๋ชจํ‚นํ•˜๋Š” ๊ฒƒ์€ ์˜๋ฏธ๊ฐ€ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ  ํ†ตํ•ฉํ…Œ์ŠคํŠธ๋ฅผ ํ–ˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Q. JDBC ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ฐ ์„ค์ • ํŒŒ์ผ ์œ„์น˜
์งˆ๋ฌธ: DAO์—์„œ ๋ฐœ์ƒํ•˜๋Š” SQLException์„ ์„œ๋น„์Šค ๊ณ„์ธต์—์„œ ์ปค์Šคํ…€ ์˜ˆ์™ธ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ์ˆ ์  ์˜ˆ์™ธ๋ฅผ ์–ด๋””๊นŒ์ง€ ์ˆจ๊ฒจ์•ผ ํ•˜๋ฉฐ, ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ฐ€์žฅ ์ ์ ˆํ•œ ๋ฐฉ์‹์€ ๋ฌด์—‡์ผ๊นŒ์š”?

์˜ˆ์™ธ๋ฅผ catchํ•  ์ˆ˜ ๋„ ์žˆ๊ณ  ๊ทธ๋Œ€๋กœ ์ „ํŒŒ ํ•  ์ˆ˜ ๋„ ์žˆ๋Š”๋ฐ ์–ธ์ œ catchํ•˜๊ณ  ์–ธ์ œ ์ „ํŒŒํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„์ง€ ์ƒ๊ฐํ•ด๋ณด๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์•„์š”.

Q. DB ์„ค์ • ํด๋ž˜์Šค ์œ„์น˜
์งˆ๋ฌธ : ์ถ”๊ฐ€๋กœ DB ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•˜๋Š” Config ํด๋ž˜์Šค๋Š” ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ์ƒ ์–ด๋А ์œ„์น˜(ํŒจํ‚ค์ง€)์— ๋‘๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ๊ด€๋ฆฌํ•˜๊ธฐ ํŽธํ• ๊นŒ์š”?

์„ค์ • ํŒŒ์ผ์ด๋‹ˆ๊นŒ config ํŒจํ‚ค์ง€๊ฐ€ ์–ด์šธ๋ฆฌ๋Š” ๊ฒƒ ๊ฐ™์•„์š”.

- ์„œ๋น„์Šค, ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ์ฒ˜๋ฆฌํ•˜๋„๋ก ์ฟผ๋ฆฌ๋ฌธ ์ถ”๊ฐ€
- ํ’€ ์‚ฌ์ด์ฆˆ: 5
- ์กฐํšŒ์™€ ์ˆ˜์ •,์ถ”๊ฐ€,์‚ญ์ œ๊ฐ€ ๋‹ค๋ฅด๊ฒŒ ์ž‘๋™
- FakeDao๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
- Dao ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
- H2 ๋ฉ”๋ชจ๋ฆฌ db ์‚ฌ์šฉ
@soohyun1904
Copy link
Copy Markdown
Author

soohyun1904 commented Apr 12, 2026

Q. DELETE + INSERT ์ „๋žต

  • ๋‹น์‹œ ๋„๋ฉ”์ธ ๊ฐ์ฒด์— id๋ผ๋Š” ๊ฐœ๋… ์ž์ฒด๋ฅผ ๋„ฃ์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ฐœ๋ณ„ ๊ธฐ๋ฌผ์„ ์ถ”์ ํ•  ์ˆ˜ ์—†์–ด์„œ DELETE + INSERT ์ „๋žต์„ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ ๋Œ์ด์ผœ๋ณด๋ฉด, ๋„๋ฉ”์ธ ๊ฐ์ฒด๋„ Entity๋กœ์„œ ์‹๋ณ„์ž๋ฅผ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. Piece์— id๊ฐ€ ์žˆ์—ˆ๋‹ค๋ฉด ๋ณ€๊ฒฝ๋œ ๊ธฐ๋ฌผ๋งŒ UPDATEํ•˜๋Š” ๋ฐฉ์‹์ด ๊ฐ€๋Šฅํ–ˆ์„ ๊ฒƒ์ด๊ณ , ๋„๋ฉ”์ธ ์ˆœ์ˆ˜์„ฑ๊ณผ id๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์€ ์ถฉ๋Œํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

Q. ๋งค ์ˆ˜๋งˆ๋‹ค ์ €์žฅ vs ์ผ๊ด„ ์ €์žฅ

  • ๋ฌด์˜์‹์ ์œผ๋กœ 'DB I/O๋Š” ๋น„์‹ธ๋‹ˆ๊นŒ ์ค„์—ฌ์•ผ ํ•œ๋‹ค'๋Š” ์ƒ๊ฐ์— ๋งค๋ชฐ๋˜์–ด ์žˆ์—ˆ๋Š”๋ฐ, ๋„๋ฉ”์ธ์˜ ํŠน์„ฑ(์‚ฌ๋žŒ ๊ฐ„์˜ ํ”Œ๋ ˆ์ด)์„ ์ƒ๊ฐํ•ด๋ณด๋ฉด ๋งค ์ˆ˜๊ฐ€ ์ˆ˜ ์ดˆ~์ˆ˜ ๋ถ„ ๊ฐ„๊ฒฉ์œผ๋กœ ์ผ์–ด๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ํ˜„์žฌ ๊ทœ๋ชจ์—์„œ๋Š” ์ „ํ˜€ ์„ฑ๋Šฅ์— ๋ฌด๋ฆฌ๊ฐ€ ๊ฐ€์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค.
    ์˜คํžˆ๋ ค ์ผ๊ด„ ์ €์žฅ ๋ฐฉ์‹์„ ๋„์ž…ํ–ˆ์„ ๋•Œ ์„œ๋ฒ„ ์žฅ์•  ์‹œ ๋ณต๊ตฌ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์น˜๋ช…์ ์ธ ๋‹จ์ ๊ณผ, ์บ์‹œ-DB ๊ฐ„ ์ •ํ•ฉ์„ฑ์„ ๋งž์ถ”๊ธฐ ์œ„ํ•œ ๋กœ์ง์˜ ๋ณต์žก๋„๋ฅผ ๊ณ ๋ คํ•˜๋ฉด ๋ฐฐ๋ณด๋‹ค ๋ฐฐ๊ผฝ์ด ์ปค์ง€๋Š” ์˜ค๋ฒ„ ์—”์ง€๋‹ˆ์–ด๋ง์ด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
    ํ˜„์žฌ์˜ ํŠธ๋ž˜ํ”ฝ๊ณผ ๋„๋ฉ”์ธ ํŠน์„ฑ์ƒ ๋ฐ์ดํ„ฐ์˜ ์•ˆ์ •์„ฑ(์žฅ์•  ๋ณต๊ตฌ)์„ ์ฑ™๊ธฐ๋Š” ํ˜„์žฌ ๋ฐฉ์‹(๋งค ์ˆ˜๋งˆ๋‹ค ์ €์žฅ)์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ํ•ฉ๋ฆฌ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ข‹์€ ์‹œ๊ฐ์„ ์—ด์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

Q. JDBC ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

  • ๊ธฐ์ˆ ์  ์˜ˆ์™ธ๋Š” ๋ฐœ์ƒํ•œ ๋ ˆ์ด์–ด์—์„œ ์˜๋ฏธ ์žˆ๋Š” ์˜ˆ์™ธ๋กœ ๋ณ€ํ™˜ํ•ด์„œ ์ „ํŒŒํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์ค€์€ "ํ•ด๋‹น ๋ ˆ์ด์–ด์—์„œ ๋ณต๊ตฌํ•˜๊ณ  ์ •์ƒ ํ๋ฆ„์œผ๋กœ ๋Œ์•„๊ฐˆ ์ˆ˜ ์žˆ๋Š”๊ฐ€"์ž…๋‹ˆ๋‹ค. ๋ณต๊ตฌ ๊ฐ€๋Šฅํ•˜๋ฉด catchํ•˜๊ณ , ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฉด ์ „ํŒŒํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด DAO์—์„œ ์ค‘๋ณต ํ‚ค๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด DuplicateGameException์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ , Controller์—์„œ ์ด๋ฅผ catchํ•ด์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์•ˆ๋‚ด ํ›„ ์žฌ์ž…๋ ฅ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด ์ปค๋„ฅ์…˜ ์‹คํŒจ ๊ฐ™์€ ๊ธฐ์ˆ ์  ์˜ˆ์™ธ๋Š” ์–ด๋–ค ๋ ˆ์ด์–ด์—์„œ๋„ ๋ณต๊ตฌํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ RuntimeException์œผ๋กœ ๊ฐ์‹ธ์„œ ์ „ํŒŒํ•˜๊ณ , Controller์—์„œ ์ตœ์ข…์ ์œผ๋กœ catchํ•ด์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ๋Š” "์‹œ์Šคํ…œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค" ์ •๋„์˜ ๋ฉ”์‹œ์ง€๋งŒ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ด ์ ์ ˆํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

Q. ๊ฐ์ž ์˜ ์—ญํ• 

  • ๊ฐ์ž์˜ ์—ญํ• : ๋„๋ฉ”์ธ(ํ•ต์‹ฌ ๋กœ์ง), ์—”ํ‹ฐํ‹ฐ(DB์šฉ ๊ทธ๋ฆ‡), DAO(DB ์ ‘๊ทผ), ๋ ˆํฌ์ง€ํ† ๋ฆฌ(๋„๋ฉ”์ธ-DB ๊ฐ„ ๋ฒˆ์—ญ๊ธฐ)๋กœ ์—ญํ• ์„ ๋‚˜๋ˆ„์–ด, ์ˆœ์ˆ˜ํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด DB ๊ธฐ์ˆ ์— ์˜ค์—ผ๋˜๋Š” ๊ฒƒ์„ ๋ง‰๊ธฐ ์œ„ํ•ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.
  • ๋„๋ฉ”์ธ์ด ID๋ฅผ ๋ชฐ๋ผ์•ผ ํ•˜๋Š” ์ด์œ : DB ํ…Œ์ด๋ธ”์˜ PK(Auto Increment ๋“ฑ) ๊ฐ™์€ ํŠน์ • ์ธํ”„๋ผ ๊ธฐ์ˆ ์— ๋„๋ฉ”์ธ์ด ์ข…์†๋˜๋Š” ๊ฒƒ์„ ๋ง‰๊ธฐ ์œ„ํ•ด์„œ์ž…๋‹ˆ๋‹ค.
  • ๋‚˜์˜ ์ƒ๊ฐ: ํ•˜์ง€๋งŒ ์ƒํƒœ๊ฐ€ ๊ฐ™์•„๋„ ๊ฐ์ฒด๋ฅผ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๊ตฌ๋ณ„ํ•ด์•ผ ํ•œ๋‹ค๋ฉด, ๋„๋ฉ”์ธ๋„ '์ž์ฒด ๊ณ ์œ  ์‹๋ณ„์ž'๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋ด…๋‹ˆ๋‹ค. ์ด ๋„๋ฉ”์ธ์šฉ ID๋ฅผ DB ๊ธฐ์ˆ ์šฉ ID์™€ ์ฒ ์ €ํžˆ ๋ถ„๋ฆฌํ•ด์„œ ๋‹ค๋ฃจ๋ฉด ์ถฉ๋ถ„ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@soohyun1904
Copy link
Copy Markdown
Author

์ด๋ฒˆ์— ์ปค๋„ฅ์…˜ ํ’€, ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ, Fake ํ…Œ์ŠคํŠธ ๊ตฌ์กฐ๋ฅผ ์žก์œผ๋ฉด์„œ ๋ง‰ํžˆ๋Š” ๋ถ€๋ถ„์ด ๋งŽ์•„ AI์˜ ๋„์›€์„ ์ ๊ทน์ ์œผ๋กœ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค! ์•„์ง 100% ์ œ ์ง€์‹์œผ๋กœ ์ฒดํ™”ํ•˜์ง„ ๋ชปํ•ด์„œ ์•„์‰ฌ์›€์€ ๋‚จ์ง€๋งŒ, ํžŒํŠธ๋ฅผ ์–ป์–ด ๋ผˆ๋Œ€๋ฅผ ์žก์„ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ”ผ๋“œ๋ฐฑ ์ฃผ์‹  ๋ถ€๋ถ„๋“ค ๋ฐ”ํƒ•์œผ๋กœ ๊ณ„์† ๋‹ค๋“ฌ์–ด๊ฐ€ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค!

Copy link
Copy Markdown
Member

@Arachneee Arachneee left a comment

Choose a reason for hiding this comment

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

์•ˆ๋…•ํ•˜์„ธ์š” ๋‹ฌ์ˆ˜sla!

์ฝ”๋ฉ˜ํŠธ ์ž˜ ๋ฐ˜์˜ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ˜„

์ฝ”๋ฉ˜ํŠธ ์กฐ๊ธˆ ๋‚จ๊ฒจ๋†จ๋Š”๋ฐ ์š”๊ตฌ ์‚ฌํ•ญ ๋ชจ๋‘ ์ถฉ์กฑํ•ด์„œ ๋จธ์ง€ํ•ด๋„ ๋  ๊ฒƒ ๊ฐ™์•„์š”. ํ˜น์‹œ ์กฐ๊ธˆ ๋” ์ˆ˜์ •ํ•˜๊ณ  ์‹ถ์€ ๋ถ€๋ถ„์ด ์žˆ์„๊นŒ๋ด ํ•œ๋ฒˆ ๋” ๋ฆฌ๋ทฐ ์š”์ฒญ์ฃผ์‹œ๋ฉด ๋จธ์ง€ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

Turn enum ์ œ๊ฑฐ, Entity์—์„œ Camp ์ง์ ‘ ์‚ฌ์šฉ
PositionRequest์— toPosition() ๋ณ€ํ™˜ ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€
1:1๋กœ ๋Œ€์‘ํ•˜๋Š” ๋„๋ฉ”์ธ ๊ฐ์ฒด์™€์˜ ๋ถˆํ•„์š”ํ•œ ์ค‘๊ฐ„ ๋ณ€ํ™˜ ๊ฐ์ฒด ์ œ๊ฑฐ
@soohyun1904
Copy link
Copy Markdown
Author

soohyun1904 commented Apr 12, 2026

๋” ๊ฐœ์„ ํ•˜๊ณ  ์‹ถ์€ ๋ถ€๋ถ„์ด ์žˆ์ง€๋งŒ, ์—ฌ๊ธฐ์„œ ๋งˆ๋ฌด๋ฆฌํ•˜๊ณ  ๋‹ค๋ฅธ ๊ณต๋ถ€๋ฅผ ์ด์–ด๊ฐ€๊ฒ ์Šต๋‹ˆ๋‹ค. ํ˜น์‹œ ์ด๋ฒˆ ์ฝ”๋“œ์—์„œ ์ถ”๊ฐ€๋กœ ์•„์‰ฌ์› ๋˜ ๋ถ€๋ถ„์ด ์žˆ์œผ์‹œ๋ฉด ๋ง์”€ํ•ด์ฃผ์‹œ๋ฉด ๋‹ค์Œ์— ์ฐธ๊ณ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ๋ฆฌ๋ทฐ๋ฅผ ํ†ตํ•ด ๋งŽ์ด ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค. ์ข‹์€ ๋ฆฌ๋ทฐ ๊ฐ์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค.

@Arachneee Arachneee merged commit 8916b22 into woowacourse:soohyun1904 Apr 12, 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.

2 participants