๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์ „์ฒด ๊ธ€

(135)
ํ”„๋ ˆ์ž„์›Œํฌ๋ž€? ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ๋ž€? ํ”„๋ ˆ์ž„์›Œํฌ ๊ฐœ๋… ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๊ฐœ๋ฐœ์—์„œ ๊ธฐ๋ณธ์ด ๋˜๋Š” ๋ผˆ๋Œ€๋‚˜ ํ‹€์„ ์ œ๊ณตํ•œ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” ๋ผˆ๋Œ€์— ์‚ด์„ ๋ถ™์ด๋Š” ์ž‘์—…์„ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์žฅ์  ๋น ๋ฅธ ๊ตฌํ˜„ ์‹œ๊ฐ„ ์‰ฌ์šด ๊ด€๋ฆฌ ๊ฐœ๋ฐœ์ž๋“ค์˜ ์—ญ๋Ÿ‰ ํš์ผํ™” ๊ฒ€์ฆ๋œ ์•„ํ‚คํ…์ฒ˜์˜ ์žฌ์‚ฌ์šฉ๊ณผ ์ผ๊ด€์„œ ์œ ์ง€ ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๋กœ๋“œ ์กด์Šจ์ด 2004๋…„์— ๋งŒ๋“  ์˜คํ”ˆ์†Œ์Šค ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค. ์Šคํ”„๋ง์€ ํ•œ ์ค„๋กœ "IoC์™€ AOP๋ฅผ ์ง€์›ํ•˜๋Š” ๊ฒฝ๋Ÿ‰์˜ ์ปจํ…Œ์ด๋„ˆ ํ”„๋ ˆ์ž„์›Œํฌ"๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฒฝ๋Ÿ‰(Lightweight) ์Šคํ”„๋ง์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ชจ๋“ˆ๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ์œผ๋ฉฐ, ๊ฐ ๋ชจ๋“ˆ์€ ํ•˜๋‚˜ ์ด์ƒ์˜ JAR ํŒŒ์ผ๋กœ ๊ตฌ์„ฑ๋จ. ๋ช‡ ๊ฐœ์˜ JAR ํŒŒ์ผ๋งŒ ์žˆ์œผ๋ฉด ๊ฐœ๋ฐœ๊ณผ ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ POJO(Plain Old Java Object)ํ˜•ํƒœ์˜ ๊ฐ์ฒด๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค. (POJO๋Š” ํด๋ž˜์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ ํŠน๋ณ„ํ•œ ๊ทœ..
InTelliJ๋กœ ์Šคํ”„๋ง ํ”„๋กœ์ ํŠธ ์‹œ์ž‘ํ•˜๊ธฐ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๊ตฌ์ถ• ์ฑ…์—์„œ๋Š” Eclipse, Tomcat ์„œ๋ฒ„, H2 database๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ํ•˜์ง€๋งŒ ๋‚˜๋Š” ๊ธฐ์กด์— eclipse๋กœ Spring ๊ฐœ๋ฐœ์„ ํ–ˆ๋‹ค๊ฐ€ ๋„ˆ๋ฌด ํ™”๋‚˜๋Š” ์ผ์ด ๋งŽ์•˜๋‹ค... ๊ทธ๋ž˜์„œ jetbrains์‚ฌ์˜ intelliJ๋กœ ์‹ค์Šต์„ ์ง„ํ–‰ํ•  ์˜ˆ์ •์ด๋‹ค. ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ์—ญ์‹œ SQL๋ฌธ์„ ์ด๋ฏธ ์•Œ๊ณ  ์žˆ๋Š” MySQL๋กœ ๋ฐ”๊ฟ”์„œ ์ง„ํ–‰ํ•  ์˜ˆ์ •์ด๋‹ค. ๋‚˜์˜ ์‹ค์Šต ํ™˜๊ฒฝ์€ intelliJ + Tomcat ์„œ๋ฒ„ + MySQL์ด๋‹ค. Spring ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์€ ์ƒ๊ฐ๋ณด๋‹ค ๋ณต์žกํ–ˆ๋‹ค. ์ธํ”„๋Ÿฐ์˜ "์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ IntelliJ IDEA ์„ค์ •" ๋ฌด๋ฃŒ ๊ฐ•์˜๋ฅผ ํ†ตํ•ด ๋„์›€์„ ๋ฐ›์•˜๋‹ค. ๊ฐ•์˜์— ๋ง๋ถ™์ด์ž๋ฉด, ๋Œ€ํ•™์ƒ ์‹ ๋ถ„์ด๋ผ๋ฉด intelliJ์˜ ultimate(์œ ๋ฃŒํŒ)์„ ๋ฌด๋ฃŒ๋กœ ์‰ฝ๊ฒŒ ๋‹ค์šด ๋ฐ›์•„ ์“ธ ์ˆ˜ ์žˆ๋‹ค. ์‹ค์Šต ํ”„๋กœ..
๐Ÿ’ซ Spring Quick Start ๐Ÿ’ซ ์ฑ… ์ •๋ณด 2020.12.24-2020.12.28 ์™„๋… ๐Ÿ’ซ ์„œ๋ก  Spring์„ ๊ณต๋ถ€ํ•ด๋ณธ ์ด๋ ฅ์€ ์žˆ์œผ๋‚˜ ๊ทผ๋ณธ์ ์ธ ๊ฐœ๋…์„ ์—ฌ์ „ํžˆ ์ž˜ ๋ชจ๋ฅธ๋‹ค๊ณ  ํŒ๋‹จํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ Spring์— ๋Œ€ํ•œ ๋‘๋ ค์›€์ด ๋งŽ์•˜๋˜ ์ฐฐ๋‚˜, ์„ ๋ฐฐ๋‹˜์˜ ์ถ”์ฒœ์„ ํ†ตํ•ด ์ฑ…์„ ๊ตฌ๋งคํ•ด์„œ ๊ฐ€๋ณ๊ฒŒ ์ฝ์–ด๋ณด์•˜๋‹ค. ํ•ญ์ƒ ๊ฐ•์˜๋ฅผ ํ†ตํ•ด ๊ณต๋ถ€ํ–ˆ์—ˆ๋Š”๋ฐ, ๊ฐœ๋…๋“ค์ด ์ •๋ˆ๋œ ๋ง๋กœ ์ •๋ฆฌ๋˜์–ด ์žˆ์–ด์„œ ์ดํ•ด๊ฐ€ ํ›จ์”ฌ ์ž˜ ๋˜์—ˆ๋‹ค. ์•„๋Š” ๋ถ€๋ถ„์€ ๋น ๋ฅด๊ฒŒ ์ง€๋‚˜๊ฐ€๊ณ , ๋ชจ๋ฅด๋Š” ๋ถ€๋ถ„์€ ๊ฒ€์ƒ‰ํ•˜๋ฉด์„œ ์—ด์‹ฌํžˆ ์ฝ์—ˆ๋‹ค. ๋•๋ถ„์— ๋„ˆ๋ฌด ํšจ์œจ์ ์œผ๋กœ ๊ณต๋ถ€ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. java ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ ์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ, ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด์„œ ๊นŒ๋จน๋Š” ๊ฒŒ ์•„๊น๊ธฐ๋„ ํ•˜๊ณ  ๊ธฐ๋กํ•˜๋ฉด์„œ ๋น ๋ฅด๊ฒŒ 2ํšŒ๋… ํ•˜๋Š” ๊ฒƒ๋„ ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค๊ณ  ์ƒ๊ฐํ•ด์„œ ์ •๋ฆฌ ๋…ธํŠธ๋ฅผ ์ฝ”๋“œ์™€ ํ•จ๊ป˜ ์ž‘์„ฑํ•˜๋ ค ํ•œ๋‹ค. ์ฝ”๋“œ๋ฅผ ์ •๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ ์ด ๋ ˆํฌ์ง€ํ† ๋ฆฌ์˜ ๋ชฉ์ ์ด๋ผ ํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค. ์ •..
2020๋…„ 12์›”์˜ ์ผ๊ธฐ์žฅ โœ์ ˆ๊ตฌ์ ˆ๊ตฌ ๐Ÿ“12.05 2-2ํ•™๊ธฐ๊ฐ€ ๋‹ค ๋๋‚˜์ง„ ์•Š์•˜์ง€๋งŒ ์ €๋ฒˆ ํ•™๊ธฐ๋ณด๋‹ค ๋‘ ๋ฐฐ ์ด์ƒ ์‹œ๊ฐ„์ด ๋น ๋ฅด๊ฒŒ ํ๋ฅธ ๊ฒƒ ๊ฐ™๋‹ค. ์ €๋ฒˆ ํ•™๊ธฐ ๋‚ด๋‚ด ๋Œ€2๋ณ‘์„ ์‹ฌํ•˜๊ฒŒ ์•“์•˜๋Š”๋ฐ ์ฝ”๋กœ๋‚˜ ๋•Œ๋ฌธ์— ๋”๋”์šฑ ์ •์‹ ์ ์œผ๋กœ ํž˜๋“ค๊ณ  ์šฐ์šธํ–ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค. ์ด๋ฒˆ ํ•™๊ธฐ๋Š” ์ €๋ฒˆ ํ•™๊ธฐ์— ๋น„ํ•ด ๊ณต๋ถ€๋Ÿ‰์€ ์ตœ์†Œ 2๋ฐฐ ์ด์ƒ์œผ๋กœ ๋Š˜์—ˆ๊ณ  ๊ฑฐ์˜ ๋†€์ง€๋„ ๋ชปํ•œ ๊ฒƒ ๊ฐ™์€๋ฐ ์ŠคํŠธ๋ ˆ์Šค๋ฅผ ๋งŽ์ด ๋ฐ›์ง„ ์•Š์•˜๋˜ ๊ฒƒ ๊ฐ™๋‹ค. ์ข€ ์•„์ด๋Ÿฌ๋‹ˆํ•œ๋ฐ, ๊ฐœ๋ฐœ ์ฝ”๋”ฉ์„ ์ž˜ ํ•˜์ง„ ๋ชปํ•˜์ง€๋งŒ ๊ฐœ๋ฐœ ๊ณต๋ถ€๋ฅผ ํ•˜๋Š” ๊ฒƒ ์ž์ฒด๋Š” ์ ์„ฑ์— ๊ต‰์žฅํžˆ ์ž˜ ๋งž๋Š” ๋“ฏํ•˜๋‹ค. ๊ธฐ๋ง๊ณ ์‚ฌ ๊ณต๋ถ€ํ•˜๋‹ค๊ฐ€ ๋„ˆ๋ฌด ํ•˜๊ธฐ ์‹ซ์–ด์„œ ์ผ๊ธฐ๋ฅผ ์“ฐ๊ณ  ์žˆ๋‹ค. ํ•™์ ์€ ์ค‘์š”ํ•˜๊ฒŒ ์ƒ๊ฐํ•˜๊ณ  ๋ณดํ†ต์€ ์—ด์‹ฌํžˆ ๊ณต๋ถ€ํ–ˆ๋Š”๋ฐ ์ด๋ฒˆ ํ•™๊ธฐ๋Š” ์•„๋ฌด ์˜ˆ์ƒ์ด ์•ˆ๊ฐ„๋‹ค. ๋‘๋ ต๋‹ค. ํ•˜์•„... ๋‹ค์Œ ํ•™๊ธฐ๋ถ€ํ„ด ์ ˆ๋Œ€ 18ํ•™์  ์ด์ƒ ๋‹ด์ง€ ๋ง์ž^^; ๊ณ„์‚ฐํ•ด๋ณด๋‹ˆ ๋ณต์ „๋„ ์•ˆํ•˜๊ณ  ์žฌ์ˆ˜๊ฐ•ํ•  ๊ณผ๋ชฉ๋„ ์—†์œผ..
2020๋…„ 11์›”์˜ ์ผ๊ธฐ์žฅ ์ ˆ๊ตฌ์ ˆ๊ตฌ ์š”์ฆ˜์€ ์ง„์งœ๋กœ ๊ณต๋ถ€๋กœ ๊ฐˆ๋ฆฌ๋Š” ์‚ถ์ด๋‹ค. ์žฌ๋ฏธ๋Š” ์žˆ๋Š”๋ฐ ์ง„์งœ ์‰ผ์—†์ด ๋‹ฌ๋ ค์•ผํ•˜๋Š” ๋ถ€๋ถ„์—์„œ ์ง€์นœ๋‹ค. ๊ทธ๋ž˜๋„ ํฌ๊ฒŒ ์ซ“๊ธฐ๊ฑฐ๋‚˜ ๋งˆ์Œ ์“ธ ์ผ๋„ ์—†๊ณ  ๋ถˆ์•ˆํ•œ ์ƒ๊ฐ๋„ ์ „ํ˜€ ์—†์–ด์„œ ์ข‹๋‹ค. ๋งˆ์Œ ํŽธํ•˜๊ฒŒ ๋จน๊ณ  ํ•  ์ˆ˜ ์žˆ๋Š” ๋งŒํผ, ํž˜์ด ๋‹ฟ๋Š” ๊ณณ๊นŒ์ง€ ํ•ด๋ณด๋ ค ํ•œ๋‹ค. ๋‚ด๊ฐ€ ์ œ์ผ ์‹ซ์–ดํ•˜๋Š” ๊ฒŒ ์ด๋„์ €๋„ ์•„๋‹ˆ๊ฒŒ, ์–ด์ค‘๊ฐ„ํ•˜๊ฒŒ ํ•œ ์ฒ™ ํ•˜๋Š” ๊ฑฐ๋‹ค. ๐Ÿ˜‘ ์ ๋‹นํžˆ ์š•์‹ฌ๋ถ€๋ฆฌ๋ฉด์„œ ์ฃผ์–ด์ง„ ์ผ๋“ค ๋งˆ๋ฌด๋ฆฌํ•ด๋ณด๊ธฐ๋ฅผ ๋ฐ”๋ž€๋‹ค. ์ฝ”๋กœ๋‚˜๊ฐ€ ๋„ˆ๋ฌด ์‹ฌํ•ด์ ธ์„œ ๋„ˆ๋ฌด ์Šฌํ”„๋‹ค. ๋™๊ธฐ๋“ค๊ณผ ์ฒซ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•ด๋ณด๋Š” ์ค‘์ธ๋ฐ ๋งŒ๋‚˜์„œ ๋ชจ๊ฐ์ฝ”ํ•˜๋ฉด ์ข‹์•˜์„ํ…๋ฐ ์š”์ฆ˜ ์‹ ์ดŒ๋„, ํ•™๊ต๋„ ๋„ˆ๋ฌด ์œ„ํ—˜ํ•˜๋‹ค ใ… ,ใ…  ๋‚˜๋Š” ์ง„์‹ฌ์œผ๋กœ ๊ฐœ๋ฐœ์ž๋“ค์ด ์–ด๋–ค ์‚ถ์„ ์‚ฌ๋Š”์ง€ ๊ถ๊ธˆํ•˜๋‹ค. ๊ฐœ๋ฐœ์ž์™€ ์ผ์ƒ ์ด์•ผ๊ธฐ๋“  ๊ณต๋ถ€ํ•˜๋Š” ์ด์•ผ๊ธฐ๋“  ์ด๊ฒƒ ์ €๊ฒƒ ๋“ค์–ด๋ณด๊ณ  ์‹ถ๋‹ค. ๊ฐ•์—ฐ ๊ฐ™์€ ๊ฑด ์–‘๋ฐฉํ–ฅ์˜ ์†Œํ†ต์ด ์•„๋‹ˆ๋ผ ๊ทธ๋Ÿฐ์ง€, ๋Œ€๋ถ€๋ถ„ ์˜จ๋ผ์ธ ํ™œ๋™์ด..
5.1 ์ƒํƒœ์œ ์ง€๊ธฐ์ˆ  - Cookie & Session 1) ์ƒํƒœ์ •๋ณด๋ž€? ์›น์—์„œ์˜ ์ƒํƒœ ์œ ์ง€ ๊ธฐ์ˆ  HTTPํ”„๋กœํ† ์ฝœ์€ ์ƒํƒœ ์œ ์ง€๊ฐ€ ์•ˆ๋˜๋Š” ํ”„๋กœํ† ์ฝœ์ž…๋‹ˆ๋‹ค. - ์ด์ „์— ๋ฌด์—‡์„ ํ–ˆ๊ณ , ์ง€๊ธˆ ๋ฌด์—‡์„ ํ–ˆ๋Š”์ง€์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๊ฐ–๊ณ  ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. - ์›น ๋ธŒ๋ผ์šฐ์ €(ํด๋ผ์ด์–ธํŠธ)์˜ ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์„ ํ•˜๊ณ  ๋‚˜๋ฉด ํ•ด๋‹น ํด๋ผ์ด์–ธํŠธ์™€์˜ ์—ฐ๊ฒฐ์„ ์ง€์†ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ƒํƒœ ์œ ์ง€๋ฅผ ์œ„ํ•ด Cookie์™€ Session๊ธฐ์ˆ ์ด ๋“ฑ์žฅํ•ฉ๋‹ˆ๋‹ค. ์ฟ ํ‚ค(Cookie)์™€ ์„ธ์…˜(Session) ์ฟ ํ‚ค - ์‚ฌ์šฉ์ž ์ปดํ“จํ„ฐ์— ์ €์žฅ - ์ €์žฅ๋œ ์ •๋ณด๋ฅผ ๋‹ค๋ฅธ ์‚ฌ๋žŒ ๋˜๋Š” ์‹œ์Šคํ…œ์ด ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋‹จ์  - ์œ ํšจ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ์‚ฌ๋ผ์ง ์„ธ์…˜ - ์„œ๋ฒ„์— ์ €์žฅ - ์„œ๋ฒ„๊ฐ€ ์ข…๋ฃŒ๋˜๊ฑฐ๋‚˜ ์œ ํšจ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ์ฟ ํ‚ค(Cookie) ๋™์ž‘ ์ดํ•ด ์„ธ์…˜์˜ ๋™์ž‘ ์ดํ•ด HttpSession์ด๋ผ๋Š” ๊ฐ์ฒด: ์„ธ์…˜์˜ ์ •๋ณด๋ฅผ ๋‹ด๊ธฐ ์œ„ํ•ด ์ƒ์„ฑ๋˜๋Š” ๊ฐ์ฒด 2) ..
4.5 Swagger 1) Swagger ๊ฐœ์š” 1. ์Šค์›จ๊ฑฐ(Swagger)๋ž€? ์Šค์›จ๊ฑฐ๋Š” Web API ๋ฌธ์„œํ™”๋ฅผ ์œ„ํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์Šค์›จ๊ฑฐ ํ™ˆํŽ˜์ด์ง€(https://swagger.io)์—์„œ๋Š” ์Šค์›จ๊ฑฐ๋ฅผ OAS(Open API Specification)์ด๋ผ๊ณ  ์†Œ๊ฐœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ง๊ทธ๋Œ€๋กœ API๋“ค์ด ๊ฐ€์ง€๋Š” ๋ช…์„ธ(Spec)์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœ์ ํŠธ๋ผ๊ณ  ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Web API๋ฅผ ์ˆ˜๋™์œผ๋กœ ๋ฌธ์„œํ™” ํ•˜๋Š” ๊ฒƒ์€ ๊ต‰์žฅํžˆ ํž˜๋“  ์ž‘์—…์ž…๋‹ˆ๋‹ค. Web API์˜ ์ŠคํŽ™์ด ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๋•Œ ๋ฌธ์„œ ์—ญ์‹œ ๋ณ€๊ฒฝ์ด ๋˜์•ผ ํ•˜๋Š”๋ฐ ์ด๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์‰ฝ์ง€๊ฐ€ ์•Š์Šต๋‹ˆ๋‹ค. Swagger๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Web API๊ฐ€ ์ˆ˜์ •๋˜๋”๋ผ๋„ ์ƒ๊ด€ ์—†์Šต๋‹ˆ๋‹ค. ๋ฌธ์„œ๊ฐ€ ์ž๋™์œผ๋กœ ๊ฐฑ์‹ ์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. 2. ์Šค์›จ๊ฑฐ์˜ ๊ธฐ๋Šฅ ์Šค์›จ๊ฑฐ ํ™ˆํŽ˜์ด์ง€๋ฅผ ๊ฐ€๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. 1) API ..
4.4 Controller 1) RestController๋ž€? Spring MVC์—์„œ ์ œ๊ณตํ•˜๋Š” RestController @RestController Spring 4 ์—์„œ Rest API ๋˜๋Š” Web API๋ฅผ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•ด ๋“ฑ์žฅํ•œ ์–ด๋…ธํ…Œ์ด์…˜ ํ•ฉ๋‹ˆ๋‹ค. ์ด์ „ ๋ฒ„์ „์˜ @Controller์™€ @ResponseBody๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. MessageConvertor ์ž๋ฐ” ๊ฐ์ฒด์™€ HTTP ์š”์ฒญ / ์‘๋‹ต ๋ฐ”๋””๋ฅผ ๋ณ€ํ™˜ํ•˜๋Š” ์—ญํ•  @ResponseBody, @RequestBody @EnableWebMvc ๋กœ ์ธํ•œ ๊ธฐ๋ณธ ์„ค์ • WebMvcConfigurationSupport ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Spring MVC ๊ตฌํ˜„ Default MessageConvertor ๋ฅผ ์ œ๊ณต ๋งํฌ ๋ฐ”๋กœ๊ฐ€๊ธฐ์˜ addDefaultHttpMessageConverters๋ฉ”์†Œ๋“œ ํ•ญ๋ชฉ ์ฐธ์กฐ M..
4.3 WEB API 1) Rest API๋ž€? HTTP ํ”„๋กœํ† ์ฝœ์„ ์ด์šฉํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ €๋Š” ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์•„ ๋žœ๋”๋งํ•˜์—ฌ ํ™”๋ฉด์— ๋ณด์—ฌ์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. HTTP์˜ ์ด๋Ÿฐ ํŠน์ง•์„ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ํด๋ผ์ด์–ธํŠธ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์„๊นŒ? ๋ผ๋Š” ๊ณ ๋ฏผ์„ ๊ฐœ๋ฐœ์ž๋“ค์€ ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์•ˆ๋“œ๋กœ์ด๋“œ ์•ฑ, ๋ชจ๋ฐ”์ผ ์•ฑ, Javascript ๋“ฑ์—์„œ HTTP๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์—†์„๊นŒ? ํ•˜๋Š” ์ƒ๊ฐ์„ ํ•˜๊ฒŒ ๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ •๋ถ€์—์„œ ๋ฒ„์Šค ์šดํ–‰ ์‹œ๊ฐ„ํ‘œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ •๋ถ€์—์„œ๋Š” 300๋ฒˆ ๋ฒ„์Šค์— ๋Œ€ํ•œ ์‹œ๊ฐ„ํ‘œ๋ฅผ ์ œ๊ณตํ•˜๋Š” URL์„ ์•„๋ž˜์™€ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. http://ip์ฃผ์†Œ/api/buses/300 ์œ„์™€ ๊ฐ™์€ URL์„ ํ˜ธ์ถœ ํ•˜๊ฒŒ ๋˜์—ˆ์„ ๋•Œ ์‹œ๊ฐ„ํ‘œ ์ •๋ณด๋ฅผ ํŠน์ •ํ•œ ํ˜•ํƒœ๋กœ ์ œ๊ณตํ•œ๋‹ค๋ฉด, ๊ทธ ์ •๋ณด๋ฅผ ๋‹ค์–‘ํ•œ..
4.2 Layered Architecture 1) ๋ ˆ์ด์–ด๋“œ ์•„ํ‚คํ…์ฒ˜๋ž€? Controller์—์„œ ์ค‘๋ณต๋˜๋Š” ๋ถ€๋ถ„์„ ์ฒ˜๋ฆฌํ•˜๋ ค๋ฉด? ๋ณ„๋„์˜ ๊ฐ์ฒด๋กœ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋ณ„๋„์˜ ๋ฉ”์†Œ๋“œ๋กœ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์‡ผํ•‘๋ชฐ์—์„œ ๊ฒŒ์‹œํŒ์—์„œ๋„ ํšŒ์› ์ •๋ณด๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ , ์ƒํ’ˆ ๋ชฉ๋ก ๋ณด๊ธฐ์—์„œ๋„ ํšŒ์› ์ •๋ณด๋ฅผ ๋ณด์—ฌ์ค˜์•ผ ํ•œ๋‹ค๋ฉด ํšŒ์› ์ •๋ณด๋ฅผ ์ฝ์–ด์˜ค๋Š” ์ฝ”๋“œ๋Š” ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ์š”? ์ปจํŠธ๋กค๋Ÿฌ์™€ ์„œ๋น„์Šค ๋น„์ง€๋‹ˆ์Šค ๋ฉ”์†Œ๋“œ๋ฅผ ๋ณ„๋„์˜ Service๊ฐ์ฒด์—์„œ ๊ตฌํ˜„ํ•˜๋„๋ก ํ•˜๊ณ  ์ปจํŠธ๋กค๋Ÿฌ๋Š” Service๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋น„์Šค(Service)๊ฐ์ฒด๋ž€? ๋น„์ง€๋‹ˆ์Šค ๋กœ์ง(Business logic)์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ์„œ๋น„์Šค ๊ฐ์ฒด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋ณดํ†ต ํ•˜๋‚˜์˜ ๋น„์ง€๋‹ˆ์Šค ๋กœ์ง์€ ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ํŠธ๋žœ์žญ์…˜(Transaction)์ด๋ž€? ํŠธ๋žœ์žญ์…˜์˜ ํŠน์ง•์€ ํฌ๊ฒŒ 4๊ฐ€์ง€๋กœ ๊ตฌ๋ถ„๋ฉ๋‹ˆ๋‹ค. ์›์ž์„ฑ (..