๋ ˆ๊ฑฐ์‹œ

2022.02.28์˜ ๊ธฐ๋ก

GroovyArea 2022. 2. 28. 20:38

โ–ถ ํ•˜๋ฃจ 

=>  ๊ณต๋ถ€ ๊ด€๋ จ

1) ์Šคํ”„๋ง ๊ฐœ๊ตฌ๋ฆฌ์ฑ… CH3

2) MVC ๊ฐ์ฒด์ง€ํ–ฅ ๋ฆฌํŒฉํ† ๋ง

3) ๊ธˆ์ผ ๊ฐ•์˜ ๋ณต์Šต

 

=> ํŒŒ์ด๋„ ํ”„๋กœ์ ํŠธ ๊ด€๋ จ

1) UI ์—…๋ฌด ๋ถ„๋‹ด ํšŒ์˜


โ–ถ ๋ฌธ์ œ ์ •๋ฆฌ


โ–ถ ๊ฐœ์ธ ๊ณต๋ถ€


โ–ถ ์ˆ˜์—… ๋‚ด์šฉ

MyBatis

DB

⇒ DB ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ” Join ์‹œ ์ค‘๋ณต ์ปฌ๋Ÿผ๋ช…์€ aliasname์œผ๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค.

  • ํ…Œ์ด๋ธ” ์กฐ์ธ ์‹œ ๋™์ผํ•œ ์ปฌ๋Ÿผ๋ช…์„ ๊ฐ€์ง„ ๊ฒฝ์šฐ ๋‘๋ฒˆ ์งธ ์ด์ƒ์˜ ์ปฌ๋Ÿผ๋ช…์€ ์ž๋™์œผ๋กœ ๋ณ€๊ฒฝ

DTO

  • ๊ฐ์ฒด ์ง๋ ฌํ™” ํด๋ž˜์Šค : Serializable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†๋ฐ›์€ ํด๋ž˜์Šค
  • ⇒ ๊ฐ์ฒด ๋‹จ์œ„๋กœ ์ž…๋ ฅ ๋˜๋Š” ์ถœ๋ ฅ์„ ์œ„ํ•œ ํด๋ž˜์Šค ์„ ์–ธ ๋ฐฉ๋ฒ•

mapper.xml

resultMap ์—˜๋ฆฌ๋จผํŠธ์˜ ํ•˜์œ„ ์—˜๋ฆฌ๋จผํŠธ ์„ ์–ธ ์ˆœ์„œ

  • constructor >> id >> result >> association >> collection >> discriminator
  • ⇒ ์ˆœ์„œ๋ฅผ ์•ˆ ์ง€ํ‚ค๋ฉด ์—๋Ÿฌ ๋–จ์–ด์ง
  • association ์—˜๋ฆฌ๋จผํŠธ๋กœ ๋งคํ•‘ ์„ค์ •์„ ์‹œ์ž‘ํ•œ ๊ฒฝ์šฐ ๋‚ด๋ถ€์ ์œผ๋กœ ๋ชจ๋“  ๋งคํ•‘์€ selectOne() ๋ฉ”์„œ๋“œ๋กœ ๋‹จ์ผํ–‰์— ๋Œ€ํ•œ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณต๋ฐ›์•„ ๋งคํ•‘ ์ฒ˜๋ฆฌ

⇒ ๋ฌธ์ œ์  )

  • resultMap ์—˜๋ฆฌ๋จผํŠธ์—์„œ association ์—˜๋ฆฌ๋จผํŠธ๋กœ ๋งคํ•‘ ์„ค์ •์„ ์‹œ์ž‘ํ•œ ๊ฒฝ์šฐ์— Collection ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์„ ์–ธํ•˜๋ฉด ๋‹ค์ˆ˜ํ–‰์˜ ๊ฒ€์ƒ‰๊ฒฐ๊ณผ์— ๋Œ€ํ•œ ๋งคํ•‘ ์ฒ˜๋ฆฌ ๋ถˆ๊ฐ€๋Šฅ (TooManyResultsException ๋ฐœ์ƒ)

⇒ ํ•ด๊ฒฐ๋ฒ• )

  • resultMap ์—˜๋ฆฌ๋จผํŠธ๊ฐ€ association ์—˜๋ฆฌ๋จผํŠธ๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ์—˜๋ฆฌ๋จผํŠธ๋กœ ๋งคํ•‘์ด ์‹œ์ž‘๋˜๋„๋ก ์„ค์ •
    • resultMap ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•œ ์‹๋ณ„์ž๋ฅผ ์†์„ฑ๊ฐ’์œผ๋กœ ์„ค์ • ⇒ resultMap ์—˜๋ฆฌ๋จผํŠธ์˜ ๋งคํ•‘์ •๋ณด๋ฅผ ์ƒ์†๋ฐ›์•„ ์‚ฌ์šฉ (์ค‘๋ณต๋˜๋Š” ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ œ๊ฑฐ)
    discriminator ์—˜๋ฆฌ๋จผํŠธ
    • ๊ฒ€์ƒ‰ํ–‰์˜ ์ปฌ๋Ÿผ๊ฐ’์„ ๋น„๊ตํ•˜์—ฌ ๋‹ค๋ฅธ ๋งคํ•‘์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ ์ƒ์œ„ ์—˜๋ฆฌ๋จผํŠธ
    • ⇒ ํ•˜์œ„ ์—˜๋ฆฌ๋จผํŠธ : case ์—˜๋ฆฌ๋จผํŠธ
    • javaType ์†์„ฑ : ๋น„๊ต ์ปฌ๋Ÿผ๊ฐ’์— ๋Œ€ํ•œ Java ์ž๋ฃŒํ˜•์„ ์†์„ฑ๊ฐ’์œผ๋กœ ์„ค์ •
    • column ์†์„ฑ : ๋น„๊ต ์ปฌ๋Ÿผ๊ฐ’์ด ์ €์žฅ๋œ ์ปฌ๋Ÿผ๋ช…์„ ์†์„ฑ๊ฐ’์œผ๋กœ ์„ค์ •
      • case : ๊ฒ€์ƒ‰ํ–‰์˜ ์ปฌ๋Ÿผ๊ฐ’์„ ๋น„๊ตํ•˜์—ฌ ๊ฐ™์€ ๊ฒฝ์šฐ ๋งคํ•‘์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ ์—˜๋ฆฌ๋จผํŠธ
      • value ์†์„ฑ : ๊ฒ€์ƒ‰ํ–‰์˜ ์ปฌ๋Ÿผ๊ฐ’๊ณผ ๋น„๊ตํ•  ๊ฐ’์„ ์†์„ฑ๊ฐ’์œผ๋กœ ์„ค์ •
      • resultMap ์†์„ฑ : resultMap ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•œ ์‹๋ณ„์ž๋ฅผ ์†์„ฑ๊ฐ’์œผ๋กœ ์„ค์ • ⇒ resultMap ์—˜๋ฆฌ๋จผํŠธ์˜ ๋งคํ•‘์ •๋ณด๋ฅผ ์ œ๊ณต๋ฐ›์•„ ์‚ฌ์šฉ
      ์ด ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ด์šฉํ•˜๋ฉด ๊ณต๊ฐœ๋ฒ”์œ„๋ฅผ ์„ค์ •ํ•ด์„œ ๊ถŒํ•œ์— ๋”ฐ๋ผ ์ถœ๋ ฅ ์‘์šฉ ๊ฐ€๋Šฅ (์ปค๋ฎค๋‹ˆํ‹ฐ ์‚ฌ์ดํŠธ ๊ฐ™์€ ๊ฒƒ)
    • ⇒ ์ž๋™ ๋งคํ•‘์ด ์•ˆ๋˜๊ฒŒ ์ปฌ๋Ÿผ๋ช…๊ณผ DTO ํ•„๋“œ ์ด๋ฆ„์„ ๋‹ฌ๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Œ
  • extends ์†์„ฑ (resultMap ์—˜๋ฆฌ๋จผํŠธ์˜ ์†์„ฑ)

๊ณตํ†ต์ ์ธ ๋งคํ•‘์ •๋ณด๋Š” discriminator ์—˜๋ฆฌ๋จผํŠธ๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋งคํ•‘ ์ฒ˜๋ฆฌ

⇒ ํฌํ•จ๊ณผ ์ƒ์†์„ ์ ์ ˆํžˆ ์ด์šฉํ•˜์—ฌ ์œ ์ง€๋ณด์ˆ˜์™€ ์ƒ์‚ฐ์„ฑ์„ ๋†’ํ˜€๋ผ!

cache

  • SELECT ๋ช…๋ น์˜ ๊ฒ€์ƒ‰๊ฒฐ๊ณผ๋ฅผ Cache ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜์—ฌ ๋น ๋ฅธ ๊ฒ€์ƒ‰๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณตํ•˜๋Š” ์—˜๋ฆฌ๋จผํŠธ
  • ⇒ INSERT, UPDATE, DELETE ๋ช…๋ น์ด ์‹คํ–‰๋˜๋ฉด Cache ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋œ ๊ฒ€์ƒ‰๊ฒฐ๊ณผ๋Š” ์ž๋™ ์ดˆ๊ธฐํ™” : AutoFlush
  • ⇒ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๋Š” ํด๋ž˜์Šค๋Š” ๋ฐ˜๋“œ์‹œ ๊ฐ์ฒด ์ง๋ ฌํ™” ํด๋ž˜์Šค๋กœ ์„ ์–ธ
  • ์ž„์‹œ ๋ฉ”๋ชจ๋ฆฌ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋จ

SQL ๋ช…๋ น ์ž‘์„ฑ์— ํ•„์š”ํ•œ ๊ฐ’์„ ์ „๋‹ฌ๋ฐ›๋Š” ๋ฐฉ๋ฒ•

  • ⇒ ์ „๋‹ฌ๊ฐ’์€ SQL ๋ช…๋ น์—์„œ #{๋ณ€์ˆ˜๋ช…|ํ•„๋“œ๋ช…|๋งตํ‚ค} ํ˜•์‹์œผ๋กœ ํ‘œํ˜„

1. XML ๋งตํผ์—์„œ SQL ๋ช…๋ น์ด ๋“ฑ๋ก๋œ ์—˜๋ฆฌ๋จผํŠธ์˜ parameterType ์†์„ฑ๊ฐ’์œผ๋กœ Java ์ž๋ฃŒํ˜•(๋ณ„์นญ)์„ ์„ค์ •ํ•˜์—ฌ ๊ฐ’์„ ์ „๋‹ฌ ๋ฐ›์•„ ์‚ฌ์šฉ

⇒ parameterType ์†์„ฑ๊ฐ’์œผ๋กœ ๊ธฐ๋ณธํ˜•(Wrapper) ๋˜๋Š” String ํด๋ž˜์Šค ์„ค์ • - ๋‹จ์ผ ๊ฐ’(๋ณ€์ˆ˜๋ช…)

⇒⇒ Interface ๋งตํผ์™€ ๋ฐ”์ธ๋”ฉ๋œ ๊ฒฝ์šฐ ์ „๋‹ฌ๊ฐ’์— ์ƒ๊ด€์—†์ด parameterType ์†์„ฑ ์ƒ๋žต ๊ฐ€๋Šฅ

⇒ parameterType ์†์„ฑ๊ฐ’์œผ๋กœ DTO ํด๋ž˜์Šค ์„ค์ • - ๋‹ค์ˆ˜๊ฐ’ (ํ•„๋“œ๋ช…)

⇒ parameterType ์†์„ฑ๊ฐ’์œผ๋กœ HashMap ํด๋ž˜์Šค(Map ์ธํ„ฐํŽ˜์ด์Šค) ์„ค์ • - ๋‹ค์ˆ˜ ๊ฐ’ (ํ•„๋“œ๋ช…)

2. Interface ๋งตํผ์—์„œ ์ถ”์ƒ๋ฉ”์„œ๋“œ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์— @Param ์–ด๋…ธํ…Œ์ด์…˜์„ ์„ค์ •ํ•˜์—ฌ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๊ฐ’์„ ์ „๋‹ฌ๋ฐ›์•„ XML ๋งตํผ์˜ ์—˜๋ฆฌ๋จผํŠธ์— ๋“ฑ๋ก๋œ SQL ๋ช…๋ น์—์„œ ์ „๋‹ฌ๊ฐ’์„ ์‚ฌ์šฉ

⇒ XML ๋งตํผ์˜ SQL ๋ช…๋ น์ด ๋“ฑ๋ก๋œ ์—˜๋ฆฌ๋จผํŠธ์—์„œ๋Š” parameterType ์†์„ฑ ์ƒ๋žต

ํ•˜๋‚˜์˜ ๊ฐ’์„ ์ „๋‹ฌ๋ฐ›์•„ SQL ๋ช…๋ น์—์„œ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ parameterType ์†์„ฑ๊ฐ’์œผ๋กœ ๊ธฐ๋ณธํ˜•(Wrapper) ๋˜๋Š” String ํด๋ž˜์Šค๋ฅผ ์„ค์ •ํ•˜๊ณ  SQL ๋ช…๋ น์—์„œ๋Š” ์ „๋‹ฌ๊ฐ’์„ #{๋ณ€์ˆ˜๋ช…} ํ˜•์‹์œผ๋กœ ํ‘œํ˜„

  • ๋ณ€์ˆ˜๋ช…์€ ์‹๋ณ„์ž ๊ทœ์น™์—๋งŒ ๋งž๊ฒŒ ์ž‘์„ฑ

๋‹ค์ˆ˜์˜ ๊ฐ’๋งŒ ์ „๋‹ฌ๋ฐ›์•„ SQL ๋ช…๋ น์—์„œ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ parameterType ์†์„ฑ๊ฐ’์œผ๋กœ DTOํด๋ž˜์Šค๋ฅผ ์„ค์ •ํ•˜๊ณ  SQL ๋ช…๋ น์—์„œ๋Š” ์ „๋‹ฌ๊ฐ’์„ #{ํ•„๋“œ๋ช…} ํ˜•์‹์œผ๋กœ ํ‘œํ˜„

  • DTO ์ธ์Šคํ„ด์Šค์˜ ํ•„๋“œ๊ฐ’์„ ์ œ๊ณต๋ฐ›์•„ ์‚ฌ์šฉ

๋‹ค์ˆ˜์˜ ๊ฐ’๋งŒ ์ „๋‹ฌ๋ฐ›์•„ SQL ๋ช…๋ น์—์„œ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ parameterType ์†์„ฑ๊ฐ’์œผ๋กœ HashMapํด๋ž˜์Šค(Map ์ธํ„ฐํŽ˜์ด์Šค)๋กœ ์„ค์ •ํ•˜๊ณ  SQL ๋ช…๋ น์—์„œ๋Š” ์ „๋‹ฌ๊ฐ’์„ #{๋งตํ‚ค} ํ˜•์‹์œผ๋กœ ํ‘œํ˜„

  • Map ์ธ์Šคํ„ด์Šค์˜ ๋งต๊ฐ’์„ ์ œ๊ณต๋ฐ›์•„ ์‚ฌ์šฉ (DTO ๋งŒ๋“ค์ง€ ์•Š๋Š” ๋Œ€์‹  Map์„ ์‚ฌ์šฉํ•จ)
  • select ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ Insert ์—๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•จ.

select ์—˜๋ฆฌ๋จผํŠธ์˜ resultType ์†์„ฑ๊ฐ’์„ HashMap ํด๋ž˜์Šค(Map ์ธํ„ฐํŽ˜์ด์Šค)๋กœ ์„ค์ •ํ•˜๋ฉด ๊ฒ€์ƒ‰ํ–‰์˜ ์ปฌ๋Ÿผ๋ช…์€ ๋งตํ‚ค๋กœ ์ปฌ๋Ÿผ๊ฐ’์€ ๋งต ๊ฐ’์œผ๋กœ ๋งคํ•‘ํ•˜์—ฌ ์—”ํŠธ๋ฆฌ๋กœ ์ €์žฅํ•˜์—ฌ ๊ฒ€์ƒ‰๊ฒฐ๊ณผ ์ œ๊ณต

⇒ ๊ฒ€์ƒ‰ํ–‰์˜ ์ปฌ๋Ÿผ๋ช…์€ ๋Œ€๋ฌธ์ž๋กœ ๊ฒ€์ƒ‰๋˜๋ฏ€๋กœ ๋งตํ‚ค๋ฅผ ํ‘œํ˜„ํ•  ๊ฒฝ์šฐ ๋Œ€๋ฌธ์ž๋กœ ํ‘œํ˜„

Interface ๋งตํผ์˜ ์ถ”์ƒ๋ฉ”์„œ๋“œ ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ „๋‹ฌ๋œ ๊ฐ’์„ @Param ์–ด๋…ธํ…Œ์ด์…˜์˜ value ์†์„ฑ๊ฐ’์„ #{์†์„ฑ๊ฐ’}์œผ๋กœ ํ‘œํ˜„

⇒ parameterType ์†์„ฑ ์ƒ๋žต

⇒ @Param : ์ถ”์ƒ ๋ฉ”์„œ๋“œ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ €์žฅ๋œ ๊ฐ’์„ XML ๋งตํผ์˜ ์—˜๋ฆฌ๋จผํŠธ์— ๋“ฑ๋ก๋œ SQL ๋ช…๋ น์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ œ๊ณตํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜

⇒ value ์†์„ฑ : SQL ๋ช…๋ น์—์„œ ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ €์žฅ๋œ ๊ฐ’์— ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์‹๋ณ„์ž๋ฅผ ์†์„ฑ๊ฐ’์œผ๋กœ ์„ค์ •

⇒ ์–ด๋…ธํ…Œ์ด์…˜์— ๋‹ค๋ฅธ ์†์„ฑ์ด ์—†๋Š” ๊ฒฝ์šฐ ์†์„ฑ๊ฐ’๋งŒ ์„ค์ • ๊ฐ€๋Šฅ

#{๋ณ€์ˆ˜๋ช…|ํ•„๋“œ๋ช…|๋งตํ‚ค} : ‘์ „๋‹ฌ๊ฐ’’

  • ์ „๋‹ฌ๊ฐ’์ด SQL ๋ช…๋ น์—์„œ ๋ฌธ์ž๊ฐ’์œผ๋กœ ํ‘œํ˜„ ๋จ(์ปฌ๋Ÿผ๋ช…์ด ์•„๋‹Œ ๊ฐ’์œผ๋กœ ํ‘œํ˜„๋˜๋Š”๊ฒƒ์ด๋‹ค.)

${๋ณ€์ˆ˜๋ช…|ํ•„๋“œ๋ช…|๋งตํ‚ค} : ์ „๋‹ฌ๊ฐ’

  • ์ „๋‹ฌ๊ฐ’์„ SQL ๋ฌธ์žฅ(ํ‚ค์›Œ๋“œ ๋˜๋Š” ์‹๋ณ„์ž)์œผ๋กœ ํ‘œํ˜„

⇒ ibatis์—์„œ๋Š” $๋ณ€์ˆ˜๋ช…|ํ•„๋“œ๋ช…|๋งตํ‚ค$ ํ˜•์‹์œผ๋กœ ํ‘œํ˜„

⇒ $ํ‘œํ˜„์‹์€ InSQL ๊ณต๊ฒฉ์— ์ทจ์•ฝํ•˜๋ฏ€๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋น„๊ถŒ์žฅ (์ปฌ๋Ÿผ๋ช… ํ‘œํ˜„ํ•  ๋•Œ๋งŒ ์ž ๊น ์“ฐ์ž)

bind (select ์—˜๋ฆฌ๋จผํŠธ ํ•˜์œ„ ์—˜๋ฆฌ๋จผํŠธ)

  • SQL ๋ช…๋ น์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ด๋ฆ„๊ณผ ๊ฐ’์„ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•œ ์—˜๋ฆฌ๋จผํŠธ - ์ „๋‹ฌ๊ฐ’ ๋ณ€๊ฒฝ
  • name ์†์„ฑ : SQL ๋ช…๋ น์—์„œ ์‚ฌ์šฉํ•  ๊ฐ’์„ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•œ ์‹๋ณ„์ž๋ฅผ ์†์„ฑ๊ฐ’์œผ๋กœ ์„ค์ •
  • value ์†์„ฑ : SQL ๋ช…๋ น์—์„œ ์‚ฌ์šฉํ•  ๊ฐ’์„ ์†์„ฑ๊ฐ’์œผ๋กœ ์„ค์ •
  • ⇒ value ์†์„ฑ๊ฐ’์œผ๋กœ ์ „๋‹ฌ๊ฐ’์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ฌธ์ž๊ฐ’ ๊ฒฐํ•ฉ ๊ฐ€๋Šฅ( + ์—ฐ์‚ฐ์ž) ์ œ๊ณต

์ œ์ผ ์ค‘์š”ํ•œ ๊ฒƒ์€ resultMap & ๋™์  SQL

๋‹จ์ผ ๊ฐ’ & ๋‹ค์ˆ˜ ๊ฐ’ ์ „๋‹ฌ


โ–ถ ํŒŒ์ด๋„ ํ”„๋กœ์ ํŠธ

> UI ๋ถ„๋‹ด ํšŒ์˜ ์˜ˆ์ • PPT ์ž‘์—…

> ๋‚ด์ผ ํšŒ์˜ ์ƒ์„ธ ์ผ์ • ๊ณ„ํš ์ˆ˜๋ฆฝ

๋ฐ˜์‘ํ˜•