** ๐Ÿ“Œ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค(MyBatis) ์™„์ „ ์‹ค์Šตํ˜• ํ•™์Šต ๋ชฉ์ฐจ (ํŒŒ์ผ ๊ธฐ๋ฐ˜) **


โœ… 0๋‹จ๊ณ„: ์‹ค์Šต ํ™˜๊ฒฝ ์ค€๋น„

๋‹จ๊ณ„ ํ•™์Šต ํ•ญ๋ชฉ ์„ค๋ช…
0.1 ๊ฐœ๋ฐœ ๋„๊ตฌ ์„ค์น˜ Eclipse, JDK, Apache Tomcat, MariaDB ์„ค์น˜
0.2 ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ ๋ถ„์„ ์—…๋กœ๋“œํ•œ mybatisstudy.zip ๊ตฌ์กฐ ๋ถ„์„ ๋ฐ ์„ธํŒ…
0.3 JDBC ์—ฐ๋™ ํ™•์ธ test JDBC โ†’ DB ์—ฐ๊ฒฐ ํ™•์ธ ์‹ค์Šต
0.4 lib ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์„ฑ MyBatis + JDBC + Log4J JAR ์ถ”๊ฐ€ ๋ฐ Build Path ๋“ฑ๋ก

๐Ÿ“— 1๋‹จ๊ณ„: MyBatis ๊ธฐ์ดˆ ์ตํžˆ๊ธฐ

๋‹จ๊ณ„ ํ•™์Šต ํ•ญ๋ชฉ ์‹ค์Šต ์˜ˆ์ œ
1.1 MyBatis๋ž€? & ๋™์ž‘ ํ๋ฆ„ XML ๊ธฐ๋ฐ˜ ORM ๊ตฌ์กฐ ์„ค๋ช… + StudentMapper1.xml ์˜ˆ์ œ ๋ถ„์„
1.2 SqlSessionFactoryBuilder ์ดํ•ด Resources.getResourceAsReader() โ†’ ์„ธ์…˜ ์ƒ์„ฑ ํ๋ฆ„ ์‹ค์Šต
1.3 selectOne / selectList ์‚ฌ์šฉ๋ฒ• ํ•™์ƒ ์ˆ˜, ์ „์ฒด ํ•™์ƒ ์กฐํšŒ, 1ํ•™๋…„ ํ•™์ƒ ์กฐํšŒ ์‹ค์Šต
1.4 ๋งคํผ ํŒŒ์ผ ๊ตฌ์„ฑ StudentMapper1.xml์˜ ๊ตฌ์กฐ (namespace, resultType, parameterType ๋“ฑ)
1.5 resultMap vs resultType ๋น„๊ต ๊ฐ์ฒด ์ž๋™ ๋งคํ•‘ vs ์ˆ˜๋™ ์„ค์ • ์‹ค์Šต ๋น„๊ต

๐Ÿ“˜ 2๋‹จ๊ณ„: ํŒŒ๋ผ๋ฏธํ„ฐ ๋งคํ•‘ ๊ณ ๊ธ‰ ์ดํ•ด

๋‹จ๊ณ„ ํ•™์Šต ํ•ญ๋ชฉ ์‹ค์Šต ์˜ˆ์ œ
2.1 parameterType์˜ ์ž‘๋™ ์›๋ฆฌ ๋‹จ์ผ ๊ฐ’ vs Map vs ๊ฐ์ฒด ์ „๋‹ฌ ์‹ค์Šต
2.2 SQL ์กฐ๊ฑด์ ˆ๊ณผ ๋งคํ•‘ ์„ฑ์ด โ€˜๊น€โ€™์”จ์ธ ํ•™์ƒ, ์ฃผ๋ฏผ๋ฒˆํ˜ธ โ†’ ์—ฌํ•™์ƒ ํŒ๋ณ„
2.3 MyBatis SQL ๋กœ๊น… log4j.properties ์„ค์ •์œผ๋กœ ์ฟผ๋ฆฌ ์ถœ๋ ฅ ์‹ค์Šต
2.4 ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค #{} vs ${} ์ฐจ์ด SQL Injection ๋ฐฉ์ง€ ์‹ค์Šต ํฌํ•จ

๐Ÿ“— 3๋‹จ๊ณ„: INSERT / UPDATE / DELETE ์‹ค์Šต

๋‹จ๊ณ„ ํ•™์Šต ํ•ญ๋ชฉ ์‹ค์Šต ์˜ˆ์ œ
3.1 INSERT ๊ตฌ๋ฌธ ์ž‘์„ฑ ํ•™์ƒ ๋“ฑ๋ก ๊ธฐ๋Šฅ ์‹ค์Šต
3.2 UPDATE ๊ตฌ๋ฌธ ํ•™๋…„ ์ˆ˜์ •, ์ „ํ™”๋ฒˆํ˜ธ ์ˆ˜์ •
3.3 DELETE ๊ตฌ๋ฌธ ํŠน์ • ID ํ•™์ƒ ์‚ญ์ œ
3.4 ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ commit, rollback ๊ฐœ๋… ์‹ค์Šต

๐Ÿ“˜ 4๋‹จ๊ณ„: ๋™์  SQL ์‹ฌํ™”

๋‹จ๊ณ„ ํ•™์Šต ํ•ญ๋ชฉ ์‹ค์Šต ์˜ˆ์ œ
4.1 if, choose, where, trim ์กฐ๊ฑด๋ณ„ ์กฐํšŒ (์„ฑ, ํ•™๋…„, ์ „ํ™”๋ฒˆํ˜ธ ๋“ฑ ์กฐํ•ฉ)
4.2 foreach ์‚ฌ์šฉ ๋‹ค์ค‘ ํ•™๋ฒˆ ์กฐํšŒ (๋ฐฐ์—ด/๋ฆฌ์ŠคํŠธ๋กœ ์ „๋‹ฌ)
4.3 ๋™์  INSERT ๋นˆ๊ฐ’ ์ œ์™ธ INSERT
4.4 SQL ์žฌ์‚ฌ์šฉ - include ๊ณตํ†ต WHERE์ ˆ/SELECT์ ˆ ์žฌ์‚ฌ์šฉ

๐Ÿ“— 5๋‹จ๊ณ„: DAO ๊ตฌ์กฐ ์„ค๊ณ„ ๋ฐ ๋ถ„๋ฆฌ

๋‹จ๊ณ„ ํ•™์Šต ํ•ญ๋ชฉ ์‹ค์Šต ์˜ˆ์ œ
5.1 DAO ํด๋ž˜์Šค ์„ค๊ณ„ StudentDao ๋ถ„๋ฆฌ ๊ตฌ์กฐ๋กœ ๋ณ€๊ฒฝ
5.2 DTO ํด๋ž˜์Šค ์„ค๊ณ„ Student.java ํ•„๋“œ ๊ตฌ์กฐ ์ •๋ฆฌ
5.3 DAO + DTO + Mapper ์™„์ „ ๋ถ„๋ฆฌ ์‹ค์Šต ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ํ™•์žฅ์„ฑ ๊ณ ๋ ค ์„ค๊ณ„ ์‹ค์Šต

๐Ÿ“˜ 6๋‹จ๊ณ„: ์ธํ„ฐํŽ˜์ด์Šค ๊ธฐ๋ฐ˜ ๋งคํผ ๊ตฌ์กฐ

๋‹จ๊ณ„ ํ•™์Šต ํ•ญ๋ชฉ ์‹ค์Šต ์˜ˆ์ œ
6.1 ์ธํ„ฐํŽ˜์ด์Šค ๊ธฐ๋ฐ˜ ๋งคํผ ๊ตฌ์กฐ๋ž€? StudentMapper.java + StudentMapper.xml ์—ฐ๊ฒฐ ์‹ค์Šต
6.2 MyBatis Config ์„ค์ • ํ™•์žฅ <mappers> ํƒœ๊ทธ ์„ค์ •๋ฒ•
6.3 ์ž๋™ ๋งคํผ ์Šค์บ” (@Mapper) Annotation ํ™œ์šฉ ๋ฐฉ์‹๋„ ๋น„๊ต ์†Œ๊ฐœ (๊ธฐ์ดˆ๋งŒ)

๐Ÿ“— 7๋‹จ๊ณ„: ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ฐ ๊ณ ๊ธ‰ ์—๋Ÿฌ ๋””๋ฒ„๊น…

๋‹จ๊ณ„ ํ•™์Šต ํ•ญ๋ชฉ ์‹ค์Šต ์˜ˆ์ œ
7.1 try-catch, finally ๊ตฌ์กฐ DB ์—ฐ๊ฒฐ ์‹คํŒจ, ์ฟผ๋ฆฌ ์‹คํŒจ ์ฒ˜๋ฆฌ ์‹ค์Šต
7.2 SQL ์˜ˆ์™ธ ๋ฉ”์‹œ์ง€ ๋ถ„์„๋ฒ• ์˜ค๋ฅ˜ ๋กœ๊ทธ ๋ถ„์„ ์‹ค์ „
7.3 NullPointerException ๋ฐฉ์ง€ ํŒจํ„ด select ๊ฒฐ๊ณผ null ๋Œ€์‘ ์‹ค์Šต
7.4 XML ๋งคํผ ๋ฌธ๋ฒ• ์˜ค๋ฅ˜ ๋””๋ฒ„๊น… common error checklist ์ •๋ฆฌ ์ œ๊ณต

๐Ÿ“˜ 8๋‹จ๊ณ„: ์‹ค์ „ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ ์„ค๊ณ„

๋‹จ๊ณ„ ๊ตฌ์„ฑ ์š”์†Œ ์„ค๋ช…
8.1 ๋„๋ฉ”์ธ ์˜ˆ์‹œ ์„ ์ • ํ•™์ƒ๊ด€๋ฆฌ, ๊ฒŒ์‹œํŒ, ๋กœ๊ทธ์ธ ์‹œ์Šคํ…œ ์ค‘ 1๊ฐœ ์„ ํƒ
8.2 ์š”๊ตฌ์‚ฌํ•ญ ๋„์ถœ ๊ธฐ๋Šฅ ์ •๋ฆฌ, ์ž…๋ ฅ/์ถœ๋ ฅ ์ •์˜, DB ์„ค๊ณ„
8.3 Controller โ†’ Service โ†’ DAO โ†’ MyBatis ํ๋ฆ„ ์„ค๊ณ„ MVC ๊ตฌ์กฐ + Mapper ์—ฐ๋™ ์‹ค์Šต
8.4 JSP + JSTL ์—ฐ๋™ View ์ถœ๋ ฅ ๋ฐ ์ž…๋ ฅํผ ์ฒ˜๋ฆฌ๊นŒ์ง€ ์—ฐ๊ณ„
8.5 ํ”„๋กœ์ ํŠธ ๋ฐฐํฌ WAR ํŒŒ์ผ ์ƒ์„ฑ โ†’ Tomcat ๋ฐฐํฌ ํ…Œ์ŠคํŠธ

๐Ÿ“• 9๋‹จ๊ณ„: ๊ธฐ์ˆ ๋ฉด์ ‘ & ์ตœ์ข…์ •๋ฆฌ

ํ•ญ๋ชฉ ๋‚ด์šฉ
๐Ÿ” ๋ฉด์ ‘ ์˜ˆ์ƒ ์งˆ๋ฌธ 20์„  resultType vs resultMap ์ฐจ์ด, MyBatis vs JPA ๋น„๊ต ๋“ฑ
๐Ÿ’ก ์‹ค์ „ ํŒ 20 ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ์‹ค์ˆ˜ ์ •๋ฆฌ, DAO/DTO ๊ตฌ์กฐ ์„ค๊ณ„ ์ „๋žต
โœ… ์ ๊ฒ€ ์ฒดํฌ๋ฆฌ์ŠคํŠธ ์‹ค์Šต ์™„๋ฃŒ ์ ๊ฒ€ํ‘œ, SQL ์˜ˆ์™ธ ๋Œ€์‘ ์ „๋žต