JavaRush /Java Blog /Random-KO /์ž๋ฐ”์˜ ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด์–ด ์ฝ˜์†” ๊ฒŒ์ž„
timurnav
๋ ˆ๋ฒจ 21

์ž๋ฐ”์˜ ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด์–ด ์ฝ˜์†” ๊ฒŒ์ž„

Random-KO ๊ทธ๋ฃน์— ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค
์•ˆ๋…•ํ•˜์„ธ์š” ์—ฌ๋Ÿฌ๋ถ„, ์ €๋Š” ์ด๋ฏธ ์˜ค๋ž˜ ์ „์— ๊ฒŒ์ž„ ์ž‘์„ฑ์„ ๋งˆ์ณค์œผ๋‚˜ ์•„์ง ๊ธ€์„ ์ž‘์„ฑํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ด ๊ธ€์˜ ๋…ผ๋ฆฌ์  ์—ฐ์†์ž…๋‹ˆ๋‹ค . ์•„์ง ๋‹ค๋ฅธ ์‹œ๋„๋ฅผ ํ•˜์ง€ ์•Š์œผ์…จ๋‹ค๋ฉด JavaRush ์ž‘์—…๋ณด๋‹ค ๊ฒŒ์ž„์— ์ต์ˆ™ํ•ด์ง€๋Š” ๊ฒƒ์ด ์ •ํ™•ํžˆ ์‹œ์ž‘ํ•˜๊ณ  ์‹ถ์€ ๊ณณ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‹ค์ œ ํ”„๋กœ์ ํŠธ์˜ ํ…Œ์ŠคํŠธ ์ž‘์—… ์ค€๋น„๋ฅผ ์‹œ์ž‘ํ•ด์•ผ ํ•˜๋ฉฐ, ๋ชจ๋“  ์‚ฌ๋žŒ์ด ์ฐธ์—ฌํ•  ๊ฒƒ์„ ๊ฐ•๋ ฅํžˆ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ผ๋ฐ˜์ ์œผ๋กœ ์ด์ œ๋Š” ์ง„๊ณต ์ƒํƒœ์˜ ๊ตฌํ˜• ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋˜๋Š” ๊ฒƒ์„ ๊ทธ๋งŒ๋‘๊ณ  Java ์ฝ”์–ด ์™ธ๋ถ€์˜ ๋ฌด์–ธ๊ฐ€๋ฅผ ๋ฐฐ์šฐ๊ธฐ ์‹œ์ž‘ํ•  ๋•Œ์ž…๋‹ˆ๋‹ค. ๋‹จ์ˆœํžˆ ๊ฒŒ์ž„์„ ๋ณด๋ ค๋ฉด MySQL์ด ์„ค์น˜๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์•„์ง ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด ์ฃผ์ €ํ•˜์ง€ ๋ง๊ณ  ์„ค์น˜ํ•˜์‹ญ์‹œ์˜ค. ์ด๊ฒƒ์€ ์—…๋ฌด ๋ฐ ๊ฐœ์ธ ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค! ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค์น˜ ๋ฐ ์ž‘์—…์— ๋Œ€ํ•œ ์„ค๋ช…์€ ์ œ๊ณตํ•˜์ง€ ์•Š๊ฒ ์Šต๋‹ˆ๋‹ค. ์ธํ„ฐ๋„ท์—๋Š” ์ˆ˜๋งŽ์€ ํŠœํ† ๋ฆฌ์–ผ๊ณผ ๋น„๋””์˜ค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์„ ์Šค์Šค๋กœ ์•Œ์•„๋‚ด๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋˜ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ธฐ์ˆ  ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ์Šค์Šค๋กœ ๊บผ๋‚ด์„ธ์š” :) ์ธ์ƒ์—์„œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ SQL์—์„œ ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  JDBC, ์ตœ๋Œ€ ์ ˆ์ „ ๋ชจ๋“œ , ์Šคํ”„๋ง, ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ด ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ๋ชฉ๋ก์ด ๊ณ„์†๋  ์ˆ˜ ์žˆ์ง€๋งŒ ๋‚ด ์ง€์‹์€ ๊ฑฐ๊ธฐ์„œ ๋๋‚ฉ๋‹ˆ๋‹ค. ์ด์ œ ์ด ๊ธฐ์‚ฌ๋ฅผ ์ฝ์ง€ ๋ง๊ณ  MySQL์„ ์•Œ์•„๋ณด์„ธ์š”. ์‹ค์ œ๋กœ๋Š” ์ „ํ˜€ ์–ด๋ ต์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„ ์ž์ฒด๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•˜๋ฉฐ ์œ ์ผํ•œ ์„ค์ •์€ ๋กœ๊ทธ์ธ๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฟ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ž‘์—…ํ•  ๋•Œ ์–ด๋–ค ๋ช…๋ น์ด ์‚ฌ์šฉ๋˜๋Š”์ง€ ์ฝ์–ด๋ณด์„ธ์š”. ์„œ๋ฒ„ ์ž‘์—…์„ ์œ„ํ•œ ๋ช…๋ น: create , show, use๋ฐ ๊ธฐํƒ€ ๋ช…๋ น help- ์ „์ฒด ๋ช…๋ น ๋ชฉ๋ก์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ํŠน์ • ํ…Œ์ด๋ธ” ์ž‘์—…์„ ์œ„ํ•œ ์ฟผ๋ฆฌ: select , insert๋ฐ delete๊ธฐํƒ€. ๋„ˆ๋ฌด ๊นŠ์ด ๋“ค์–ด๊ฐ€์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ๋‹จ์ˆœํžˆ ๋ช…๋ น์„ ์ฝ๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋Š” ์•„์ฃผ ์ž‘์€ ๋ถ€๋ถ„๋งŒ ๊ธฐ์–ตํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ๋ชจ๋“  ๊ฒƒ์„ ๋ฐฐ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. MySQL ํ„ฐ๋ฏธ๋„์—์„œ ํ”Œ๋ ˆ์ดํ•˜๊ณ , ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•˜๊ณ , ์ฑ„์šฐ๊ณ , ๋ฐ์ดํ„ฐ ํ‘œ์‹œ๋ฅผ ์š”์ฒญํ•˜๊ณ , ์ฟผ๋ฆฌ ๊ธฐ์ค€์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„ 2~3์‹œ๊ฐ„์ด ์ฑ„ ๊ฑธ๋ฆฌ์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‹œ๊ฐ„์ด ๋” ๊ธธ๋”๋ผ๋„ ๊ฑฑ์ •ํ•˜์ง€ ๋งˆ์„ธ์š”. ๊ฒฝํ—˜์„ ์Œ“์œผ๋ฉด ์ƒˆ๋กœ์šด ์ž๋ฃŒ๋ฅผ ๋” ๋นจ๋ฆฌ ์ตํž ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฒ ์ด์Šค์— ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค๋ฉด ์ œ๊ฐ€ ์ด๋ฏธ tic-tac-toe ์— ๋Œ€ํ•ด ์ž‘์„ฑํ•œ ๊ฒŒ์ž„์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฒŒ์ž„ ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.. ์˜ค๋žซ๋™์•ˆ ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด์–ด๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ์ง€ ๋ชปํ–ˆ๊ณ , ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. ๊ฒŒ์ž„ ํ”„๋กœ์„ธ์Šค์—์„œ๋Š” ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ฐจ๋ก€๋Œ€๋กœ ์ง„ํ–‰ํ•˜๋ฉฐ ๊ฒŒ์ž„์˜ ๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๊ธฐ๋ก๋œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์šฐ๋ฆฌ๋Š” ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์žˆ๊ณ  ํ”Œ๋ ˆ์ด์–ด์— ๋Œ€ํ•œ ๋งํฌ๊ฐ€ ํฌํ•จ๋œ ๊ฒฝ๊ธฐ์žฅ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ํ•œ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋‘ ๋ฒˆ์งธ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์›€์ง์ผ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋…ผ๋ฆฌ๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด์•ผ ํ•˜๋Š” ๊ณณ์€ ๊ฒฝ๊ธฐ์žฅ์— ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ํ›„ ์—ญํ• ์ด ๋ฐ”๋€Œ๊ณ  ์ฒซ ๋ฒˆ์งธ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์›€์ง์ด๊ณ  ๋‘ ๋ฒˆ์งธ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ณต์ œ๋˜์–ด์•ผ ํ•˜๋ฏ€๋กœ ์ด๋™ํ•  ๋•Œ๋งˆ๋‹ค ํ•„๋“œ๋ฅผ ์ €์žฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ํ”Œ๋ ˆ์ด ํ•„๋“œ๊ฐ€ ์žˆ์–ด์•ผ ํ•˜๋ฉฐ ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด์–ด์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ๊ฑฐ๊ธฐ์— ํ”Œ๋ ˆ์ด์–ด๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ฒซ ๋ฒˆ์งธ ๊ฒฐ๋ก ์— ๋„๋‹ฌํ–ˆ์Šต๋‹ˆ๋‹ค. MySQL์—์„œ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ €๋Š” mysql ํ„ฐ๋ฏธ๋„ ์ฐฝ์„ ํ†ตํ•ด ๊ธฐ๋ณธ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฒฝ๊ธฐ์žฅ์—๋Š” ํ”Œ๋ ˆ์ด์–ด์— ๋Œ€ํ•œ ๋งํฌ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ๋จผ์ € ํ”Œ๋ ˆ์ด์–ด์™€ ํ•จ๊ป˜ ํ…Œ์ด๋ธ”์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๋…ผ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ ํ”Œ๋ ˆ์ด์–ด๋“ค์€:
  • idโ€“ ์‹œํ€€์Šค ๋ฒˆํ˜ธ, ์ด๋ฅผ ๊ธฐ๋ณธ ํ‚ค๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  • nameโ€“ ์ผ๋ฐ˜ ์ด๋ฆ„, ๋ฌธ์ž์—ด;
  • winsโ€“ ์Šน๋ฆฌ ํšŸ์ˆ˜
  • losesโ€“ ๋ณ‘๋ณ€์˜ ์ˆ˜;
  • gamesโ€“ ํ”Œ๋ ˆ์ดํ•œ ์ด ๊ฒŒ์ž„ ์ˆ˜.
๊ฒŒ์ž„ ํ…Œ์ด๋ธ”:
  • idโ€“ ์‹œํ€€์Šค ๋ฒˆํ˜ธ, ์ด๋ฅผ ๊ธฐ๋ณธ ํ‚ค๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  • xโ€“ ํ”Œ๋ ˆ์ดํ•˜๋Š” ํ”Œ๋ ˆ์ด์–ด์˜ ID ั…โ€“ ๋ณด์กฐ ํ‚ค;
  • oโ€“ ํ”Œ๋ ˆ์ดํ•˜๋Š” ํ”Œ๋ ˆ์ด์–ด์˜ ID oโ€“ ๋ณด์กฐ ํ‚ค;
  • fieldโ€“ ํ•„๋“œ ์ž์ฒด, ํ•ด๋‹น ํ˜•์‹์€ ์•„๋ž˜์— ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • statusโ€“ ์ด๋Š” ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•˜๋ฉฐ ์ƒํƒœ๋Š” ๊ฒŒ์ž„ ์ƒํƒœ(
    ์ƒ์„ฑ, ํ”Œ๋ ˆ์ด ์ค‘, ๊ฒŒ์ž„ ์ข…๋ฃŒ)๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

  • currentโ€“ ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด์–ด์˜ ๊ฒฝ์šฐ์—๋„, ํŠนํžˆ ๊ฒŒ์ž„ ์ค‘์— ์ด ํ•„๋“œ๋Š” ํ˜„์žฌ ์ฐจ๋ก€๊ฐ€ ๋ˆ„๊ตฌ์ธ์ง€ ์ œ์–ดํ•˜๊ณ ,
    ์ข…๋ฃŒ ํ›„์—๋Š” ์Šน์ž ๋˜๋Š” ๋ฌด์Šน๋ถ€๋ฅผ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค.

ํ…Œ์ด๋ธ”์„ ์ •๋ ฌํ–ˆ์œผ๋ฏ€๋กœ ์ด์ œ ํ•ด๋‹น ํ•„๋“œ Game๋ฐ ์„ ์‚ฌ์šฉํ•˜์—ฌ Java ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค User.
public class Game {
    private Integer id;
    private Integer x;
    private Integer y;
    private Integer field;
    private String status;
    private String current;
}
public class User {
    private Integer id;
    private String name;
    private Integer wins;
    private Integer loses;
    private Integer games;
    private Boolean busy;
}
๋งค๊ฐœ ๋ณ€์ˆ˜ ์—†์ด ๋นˆ ์ƒ์„ฑ์ž๋ฅผ ์ถ”๊ฐ€ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์„ ์œ„ํ•œ ์ƒ์„ฑ์ž์™€ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ๋˜ ๋‹ค๋ฅธ ์ƒ์„ฑ์ž๋ฅผ ์ถ”๊ฐ€ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ํ•„๋“œ์— ๋Œ€ํ•ด setter์™€ getter๋ฅผ ์ถ”๊ฐ€ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด์ œ ์ตœ๋Œ€ ์ ˆ์ „ ๋ชจ๋“œ๋ฅผ ๋‹ค๋ฃจ๊ฒ ์Šต๋‹ˆ๋‹ค :) ์‹œ๊ฐ„์ด ์ง€๋‚ ์ˆ˜๋ก ๋” ์‰ฌ์›Œ์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค. MySQL๋ณด๋‹ค ์กฐ๊ธˆ ๋” ๋ณต์žกํ•˜๋ฏ€๋กœ ์ผ๋ฐ˜์ ์ธ ๊ตฌ์กฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ, ๋ชจ๋“  ๊ฒƒ์ด ๊ทธ๋ ‡๊ฒŒ ๋ณต์žกํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์‚ฌํ•ญ์€ ํŠœํ† ๋ฆฌ์–ผ์„ ํ†ตํ•ด ๋ช‡ ์‹œ๊ฐ„ ์•ˆ์— ๋ฐฐ์šธ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ”„๋กœ์ ํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋™์•ˆ ๊นŠ์ด ๊ณต๋ถ€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. JAVA์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์—๋Š” JDBC ์‚ฌ์šฉ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ๋‚ด์šฉ์€ wiki ์—์„œ ์ฝ์–ด๋ณด์„ธ์š” . ๊ทธ๋Ÿฌ๋‚˜ ์ฝ”๋“œ ์ž‘์„ฑ์— ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•ญ๋ฌธ์— ๋งŽ์€ ๊ณ ํ†ต์ด ์ƒ๊ธฐ๊ณ  DAO ํด๋ž˜์Šค( ์œ„ํ‚ค๋„ ๊ฐ€๋Šฅ ) ์ž‘์„ฑ์ด ์•ฝ๊ฐ„ ๋ณต์žกํ•ด์ง€๋ฉฐ ์ตœ๋Œ€ ์ ˆ์ „ ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ƒํ™ฉ์ด ์•ฝ๊ฐ„ ๊ฐœ์„ ๋˜๊ณ  ๋ฐ˜๋ณต์„ฑ์ด ํ›จ์”ฌ ์ค„์–ด๋“ญ๋‹ˆ๋‹ค(ํ…œํ”Œ๋ฆฟ ) ์ฝ”๋“œ. ์ตœ๋Œ€ ์ ˆ์ „ ๋ชจ๋“œ๊ฐ€ ์ž‘๋™ํ•˜๋ ค๋ฉด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ”„๋กœ์ ํŠธ์— ์—ฐ๊ฒฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ž‘์—…์€ ๋งค์šฐ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. Ctrl+Alt+Shift+S(ํŒŒ์ผ-ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ), ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํƒญ์œผ๋กœ ์ด๋™ํ•˜์—ฌ "+"๋ฅผ ํด๋ฆญํ•˜๊ณ  ์‚ฌ์ „ ๋‹ค์šด๋กœ๋“œ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ( ์—ฌ๊ธฐ์—์„œ ์˜ต์…˜์œผ๋กœ ). ํด๋ž˜์Šค๋ฅผ ์—ฐ๊ฒฐํ•˜๋ ค๋ฉด ์ฃผ์„์„ ์‚ฌ์šฉํ•ด์•ผ Userํ•ฉ๋‹ˆ๋‹ค Game. ์ฃผ์„์€ ์‚ฌ์šฉํ•˜๊ธฐ ๋งค์šฐ ์‰ฝ๊ณ  ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
@Entity
@Table(name="games")
public class Game {
    private Integer id;
    private Integer x;

    @Id
    @GeneratedValue
    @Column(name = "id")
    public Integer getId() {
        return id;
    }

    @Column(name = "x")
    public Integer getX() {
        return x;
    }
}
์—ฌ๊ธฐ๋Š” ๊ฐ„๋‹จํ•ด์š”
  • @Entityโ€“ ํด๋ž˜์Šค๋Š” ๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ…Œ์ด๋ธ”์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” "์—”ํ‹ฐํ‹ฐ"๋ผ๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค.
  • @Table(name="games")โ€“ ์–ด๋–ค ํ…Œ์ด๋ธ”์ธ์ง€ ์•Œ๋ ค์ค๋‹ˆ๋‹ค. gamesโ€“ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์žˆ๋Š” ํ…Œ์ด๋ธ”์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • @Id, @GeneratedValue, @Column(name = "id")โ€“ ์ด ์„ธ ๊ฐ€์ง€ ์ฃผ์„์„ ์‚ฌ์šฉํ•˜๋ฉด ์ด ํ•„๋“œ๊ฐ€ ์‹๋ณ„ ํ•„๋“œ์ด๊ณ  ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜๋ฉฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์—ด์ด id๋ผ๋Š” ๊ฒƒ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • @Column(name = "x")โ€“ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์žˆ๋Š” ์—ด์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
๋‹ค์Œ์œผ๋กœ, DAO ๋ ˆ๋ฒจ๊ณผ ์„œ๋น„์Šค ๋ ˆ๋ฒจ์ด๋ผ๋Š” ๋ ˆ๋ฒจ์„ ๊ตฌ์ถ•ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ง„๊ณต ์ƒํƒœ๋กœ ๋ชจ๋“  ๊ฒƒ์„ ๋‹จ์ˆœํ™”ํ•œ ๋‹ค์Œ ๋ฐ์ดํ„ฐ ์ž‘์—…์ด ์„œ๋น„์Šค ์ˆ˜์ค€์„ ํ†ต๊ณผํ•˜๋ฉด ์ด๋Š” ์ถ”์ƒํ™” ์ˆ˜์ค€ ์ค‘ ํ•˜๋‚˜์ด๋ฉฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ณด๋‹ค ๋…๋ฆฝ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋„๋ก ํ•˜์—ฌ ๊ฒŒ์ž„ ๋กœ์ง ๊ฐœ๋ฐœ์ž๊ฐ€ ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ๋‹ค๋ฃจ์ง€ ์•Š๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒฝ์šฐ ๋˜๋Š” ์˜ˆ๋ฅผ ๋“ค์–ด ๊ฐ‘์ž๊ธฐ ๊ฐ„๋‹จํ•œ ์ตœ๋Œ€ ์ ˆ์ „ ๋ชจ๋“œ ๋Œ€์‹  spring์„ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•œ ๊ฒฝ์šฐ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์„œ๋น„์Šค ๊ณ„์ธต์„ ๋ฒ—์–ด๋‚˜์ง€ ์•Š๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ ˆ๋ฐ˜์„ ๋‹ค์‹œ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค! ์ด๊ฒƒ์€ ๋””์ž์ธ ํŒจํ„ด ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. DAO ๋ ˆ๋ฒจ ์ž‘์„ฑ์„ ์‹œ์ž‘ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
public class UserDAO {

    public void addUser(User user) throws SQLException {
        Session session = null;
        try{
            session = HibernateUtil.getSessionFactory().openSession();
            session.beginTransaction();
            session.save(user);
            session.getTransaction().commit();
        } catch (Exception e){
            e.printStackTrace();
        } finally {
            if (session != null && session.isOpen()) {
                session.close();
            }
        }
    }
}
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ƒˆ ์‚ฌ์šฉ์ž๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ์ž‘์—…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์—”ํ„ฐํ‹ฐ ํด๋ž˜์Šค์˜ ๊ฐœ์ฒด๋งŒ ๋ฉ”์„œ๋“œ์— ์ „๋‹ฌ๋˜๋ฏ€๋กœ ์—ฌ๊ธฐ์—๋Š” ์ถ”๊ฐ€ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์šฐ๋ฆฌ๊ฐ€ HibernateUtil ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด์ง„ ํ†ต์‹  ์„ธ์…˜์„ ์ˆ˜์‹ ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์— ์˜ํ•ด ๋ณด์žฅ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์„ ๊ณ ๋ คํ•ด ๋ด…์‹œ๋‹ค.
public class HibernateUtil {
    private static SessionFactory sessionFactory = null;

    static {
        try {

            sessionFactory = new Configuration().configure().buildSessionFactory();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }
}
๋ณด์‹œ๋‹ค์‹œํ”ผ ์—ฌ๊ธฐ์— ์žˆ๋Š” ๋ชจ๋“  ๊ฒƒ๋„ ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค SessionFactory. ์ด๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ํ”„๋กœ์ ํŠธ์— ์—ฐ๊ฒฐํ•œ ์ตœ๋Œ€ ์ ˆ์ „ ๋ชจ๋“œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ธํ„ฐํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค. ์˜ฌ๋ฐ”๋ฅธ ์ž‘๋™์„ ์œ„ํ•ด ๋‚จ์€ ๊ฒƒ์€ hibernate.cfg.xml ๊ตฌ์„ฑ ํŒŒ์ผ์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ๋ฟ์ž…๋‹ˆ๋‹ค.
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/tictactoe</property>
        <property name="connection.username">root</property>
        <property name="connection.password">root</property>
        <property name="connection.pool_size">100</property>
        <property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
        <property name="show_sql">false</property>
        <property name="hbm2ddl.auto">update</property>
        <property name="hibernate.connection.autocommit">false</property>
        <property name="current_session_context_class">thread</property>
        <property name="hibernate.enable_lazy_load_no_trans">true</property>
        <mapping class="entity.User" />
        <mapping class="entity.Game" />
    </session-factory>
</hibernate-configuration>
ํƒœ๊ทธ๋ฅผ ๋ณด๋ฉด ์—ฌ๊ธฐ์„œ ๋ฌด์—‡์„ ์–ด๋–ป๊ฒŒ ์„ค์ •ํ•˜๊ณ  ์žˆ๋Š”์ง€ ๋ช…ํ™•ํ•ด์ง‘๋‹ˆ๋‹ค. ์ตœ๋Œ€ ์ ˆ์ „ ๋ชจ๋“œ์˜ ๋˜ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์€ ๊ฐ‘์ž๊ธฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ MySQL์—์„œ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ๋ณ€๊ฒฝํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•œ ๊ฒฝ์šฐ property name="connection.driver_class" DAO ๋ ˆ์ด์–ด๊ฐ€ ์ค€๋น„๋œ ํƒœ๊ทธ ๋‚ด๋ถ€์˜ ๋“œ๋ผ์ด๋ฒ„๋งŒ ๋ณ€๊ฒฝํ•˜๋ฉด ์„œ๋น„์Šค ๋ ˆ์ด์–ด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์„œ๋น„์Šค ๊ณ„์ธต์—์„œ DAO ๊ฐ์ฒด ์ƒ์„ฑ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ํŒฉํ† ๋ฆฌ ํŒจํ„ด์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
public class Factory {
    private static UserDAO userDAO = null;
    private static Factory instance = null;
    private Factory() {
    }

    public static synchronized Factory getInstance() {
        if (instance == null) {
            instance = new Factory();
        }
        return instance;
    }

    public UserDAO getUserDAO() {
        if (userDAO == null) {
            userDAO = new UserDAO();
        }
        return userDAO;
    }
}
๋‹ค์Œ์€ ์„œ๋น„์Šค ์ˆ˜์ค€ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.
public class UserService {
    static void setUserBusy(User user){
        user.setBusy(true); //ะดะตะปะฐะตะผ ะตะณะพ ะทะฐะฝัั‚ั‹ะผ
        //ะธ ะพะฑะฝะพะฒะปัะตะผ ะตะณะพ ะฒ ะ‘ะ”
        Factory.getInstance().getUserDAO().updateUser(user);
    }

}
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์„ ์œ„ํ•œ ์ฝ”๋“œ๊ฐ€ ์™„์„ฑ๋˜์—ˆ์œผ๋ฉฐ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ณ ๋ คํ•˜์—ฌ ๊ฒŒ์ž„ ๋กœ์ง์„ ๋‹ค์‹œ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ๋จผ์ €, ์ฃผ์š” ์‹คํ–‰ ๋ฐฉ๋ฒ•์„ ๋ณ„๋„์˜ ํด๋ž˜์Šค๋กœ ๋ถ„๋ฆฌํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค Main. ์ด๋Š” ๊ฒŒ์ž„์„ ์‹œ์ž‘ํ•˜๊ฑฐ๋‚˜ ํ†ต๊ณ„๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ฒŒ์ž„ ๋ฉ”๋‰ด์ธ ์ œ์–ด ํด๋ž˜์Šค๋งŒ ๋ฉ๋‹ˆ๋‹ค. GameLogic๊ฒŒ์ž„์˜ ๋ชจ๋“  ๋…ผ๋ฆฌ๋ฅผ ์„ค๋ช…ํ•˜๊ณ  ๊ฒฝ๊ธฐ์žฅ์„ ํ™•์ธํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค . ๊ทธ๋Š” ๊ฒŒ์ž„์ด ๋๋‚œ ํ›„ ๊ฒฝ๊ธฐ์žฅ ๋ฐ ํ”Œ๋ ˆ์ด์–ด ํ†ต๊ณ„์— ๋Œ€ํ•œ ๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ €์žฅํ•˜๋Š” ๊ฒƒ์„ ์„œ๋น„์Šค ๋ ˆ์ด์–ด์— ์œ„์ž„ํ•ฉ๋‹ˆ๋‹ค. ํฅ๋ฏธ๋กœ์šด ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐฐ์—ด ํ˜•ํƒœ๋กœ ๊ฒฝ๊ธฐ์žฅ์„ ํฌํ•จํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ด ๋‹จ๊ณ„์—์„œ ๋‚˜๋Š” ๋ฐ”ํ€ด๋ฅผ ๋‹ค์‹œ ๋ฐœ๋ช…ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๊ณ  ๋‚ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—๋Š” ํ•„๋“œ๊ฐ€ int, ์ฆ‰ 9๋กœ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. -ํด๋ž˜์Šค ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‘ ๊ฐœ๋กœ ๊ตฌ๋ฌธ ๋ถ„์„๋˜๋Š” ์ˆซ์ž์ž…๋‹ˆ๋‹ค GameLogic. ์ด ๋ฐฉ๋ฒ•์€ ๊ถŒ์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฒŒ์ž„์˜ ๋‹ค์Œ ๋ฆด๋ฆฌ์Šค์—์„œ ๊ฐœ์„ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. :) ๋ชจ๋‘๊ฐ€ JAVA๋ฅผ ๋ฐฐ์šฐ๋Š” ๋ฐ ํ–‰์šด์„ ๋น•๋‹ˆ๋‹ค! ์—ฌ๊ธฐ์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค .
์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION