Spring๐ŸŒธ 9

Spring Security - JWT๋ฅผ ์ด์šฉํ•œ ์ž๊ฒฉ ์ฆ๋ช… ๋ฐ ๊ฒ€์ฆ ๊ตฌํ˜„

์ด์ „ ํฌ์ŠคํŒ…์—์„œ ํšŒ์› ๊ฐ€์ž… ์‹œ ๋“ฑ๋กํ•œ ์ด๋ฉ”์ผ ์ฃผ์†Œ, ํŒจ์Šค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ๋กœ๊ทธ์ธ ์ธ์ฆ์„ ์„ฑ๊ณต์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋ฉด response header(Authorization, Refresh)๋ฅผ ํ†ตํ•ด JWT๋ฅผ ์ „๋‹ฌ๋ฐ›์„ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ JWT๋ฅผ ์ด์šฉํ•ด ์ž๊ฒฉ ์ฆ๋ช…์ด ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ request ์ „์†ก ์‹œ, request header๋ฅผ ํ†ตํ•ด ์ „๋‹ฌ๋ฐ›์€ JWT๋ฅผ ์„œ๋ฒ„ ์ธก์—์„œ ๊ฒ€์ฆํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด ๋ณด์ž. 1๏ธโƒฃ JWT ๊ฒ€์ฆ ํ•„ํ„ฐ ๊ตฌํ˜„ JWT๋ฅผ ๊ฒ€์ฆํ•˜๋Š” ์ „์šฉ Security Filter๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ. package com.codestates.todoapp.auth.filter; import com.codestates.todoapp.auth.jwt.JwtTokenizer; import com.co..

Spring๐ŸŒธ 2023.06.07

Spring Security - JWT ์ž๊ฒฉ ์ฆ๋ช…์„ ์œ„ํ•œ ๋กœ๊ทธ์ธ ์ธ์ฆ ๊ตฌํ˜„

JWT ์ž๊ฒฉ ์ฆ๋ช…์„ ์œ„ํ•ด ๋กœ๊ทธ์ธ ์ธ์ฆ ๊ธฐ๋Šฅ๋ถ€ํ„ฐ ๊ตฌํ˜„ํ•ด ๋ณด์ž. Username๊ณผ Password๋กœ ๋กœ๊ทธ์ธ ์ธ์ฆ์— ์„ฑ๊ณตํ•˜๋ฉด ๋กœ๊ทธ์ธ ์ธ์ฆ์— ์„ฑ๊ณตํ•œ ์‚ฌ์šฉ์ž์—๊ฒŒ JWT๋ฅผ ์ƒ์„ฑ ๋ฐ ๋ฐœ๊ธ‰ํ•˜๋Š” ๊ฒƒ๊นŒ์ง€๋ฅผ ๋จผ์ € ๊ตฌํ˜„ํ•ด๋ณธ๋‹ค. JWT ์ž๊ฒฉ ์ฆ๋ช…์„ ์œ„ํ•œ ๋กœ๊ทธ์ธ ์ธ์ฆ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ๋จผ์ € ๋กœ๊ทธ์ธ ์ธ์ฆ ํ๋ฆ„์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ™•์ธํ•ด๋ณด์ž. ์‚ฌ์šฉ์ž์˜ ๋กœ๊ทธ์ธ ์ธ์ฆ ์„ฑ๊ณต ํ›„, JWT๊ฐ€ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „๋‹ฌ๋˜๋Š” ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. 1. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„ ์ธก์— ๋กœ๊ทธ์ธ ์ธ์ฆ ์š”์ฒญ(Username / Password๋ฅผ ์„œ๋ฒ„ ์ธก์— ์ „์†ก) 2. ๋กœ๊ทธ์ธ ์ธ์ฆ์„ ๋‹ด๋‹นํ•˜๋Š” Security Filter(JwtAuthenticationFilter)๊ฐ€ ํด๋ผ์ด์–ธํŠธ์˜ ๋กœ๊ทธ์ธ ์ธ์ฆ ์ •๋ณด ์ˆ˜์‹  3. Security Filter๊ฐ€ ์ˆ˜์‹ ํ•œ ๋กœ๊ทธ์ธ ์ธ์ฆ ์ •๋ณด๋ฅผ Authen..

Spring๐ŸŒธ 2023.06.07

Spring Security - ๊ธฐ๋ณธ

์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ณต๊ฒฉํ•˜๋Š” ์„ธ์…˜ ๊ณ ์ • ๊ณต๊ฒฉ, ํด๋ฆญ์žฌํ‚น ๊ณต๊ฒฉ, CSRF ๋“ฑ์˜ ๋ณด์•ˆ ์ทจ์•ฝ์ ์„ ๊ณ ๋ คํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Spring Security๋ผ๋Š” ๋ณด์•ˆ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. *์„ธ์…˜ ๊ณ ์ • ๊ณต๊ฒฉ(Session Fixation) : ๊ณต๊ฒฉ์ž๊ฐ€ ์œ ํšจํ•œ ์‚ฌ์šฉ์ž์˜ ์„ธ์…˜์„ ๊ฐ€๋กœ์ฑ„๋„๋ก ํ—ˆ์šฉํ•˜๋Š” ๊ณต๊ฒฉ. ์ด ๊ณต๊ฒฉ์€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด session ID, ํŠนํžˆ ์ทจ์•ฝํ•œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์˜ ํ•œ๊ณ„๋ฅผ ํƒ์ƒ‰ํ•œ๋‹ค. ์‚ฌ์šฉ์ž ์ธ์ฆ ์‹œ ์ƒˆ๋กœ์šด session ID๋ฅผ ํ• ๋‹นํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ(๋กœ๊ทธ์ธ ์‹œ ๋ฐœ๊ธ‰๋ฐ›์€ ์„ธ์…˜ ID๊ฐ€ ๋กœ๊ทธ์ธ ์ „/ํ›„ ๋ชจ๋‘ ๋™์ผํ•˜๊ฒŒ ์‚ฌ์šฉ๋จ) ๊ธฐ์กด session ID๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ณต๊ฒฉ์€ ์œ ํšจํ•œ session ID๋ฅผ ์–ป์€ ํ›„ ํ•ด๋‹น ์„ธ์…˜ ID๋กœ ์‚ฌ์šฉ์ž๋ฅผ ์ธ์ฆํ•˜๋„๋ก ์œ ๋„ํ•˜๊ณ , ์‚ฌ์šฉ๋œ session ID ๋ฅผ ์•Œ์•„๋‚ด์–ด..

Spring๐ŸŒธ 2023.05.20

Spring Security - JWT ์ธ์ฆ(Authentication)

๐Ÿ’ก HTTP์˜ ํŠน์„ฑ์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ... HTTP ํ”„๋กœํ† ์ฝœ์€ request๋ฅผ ์ „์†กํ•œ ํ›„, response๋ฅผ ์ˆ˜์‹ ํ•˜๊ฒŒ ๋˜๋ฉด ์—ฐ๊ฒฐ์„ ๋Š๋Š” ๋น„์—ฐ๊ฒฐ์„ฑ(Connectionless)์˜ ํŠน์ง•๊ณผ request์™€ response์— ๋Œ€ํ•œ ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š๋Š” ๋น„์ƒํƒœ์„ฑ(Stateless)์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋กœ๊ทธ์ธ ์ธ์ฆ์ด ์ •์ƒ์ ์œผ๋กœ ์ˆ˜ํ–‰๋˜์—ˆ๋‹ค ํ•˜๋”๋ผ๊ณ  ์„œ๋ฒ„์ธก์—์„œ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ request๋ฅผ ์ˆ˜์‹ ํ•  ๋•Œ๋งˆ๋‹ค ์ธ์ฆ๋œ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด๋‚ธ ๊ฒƒ์ธ์ง€ ํ™•์ธํ•  ๋ฐฉ๋ฒ•์ด ์—†๋‹ค. ์ด๋Ÿฌํ•œ HTTP์˜ ํŠน์„ฑ์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ์•ˆ์œผ๋กœ ๋Œ€ํ‘œ์ ์ธ ๊ฒƒ์€ ์„ธ์…˜์ด๋‹ค. ๐Ÿ’ก์„ธ์…˜ ๊ธฐ๋ฐ˜ ์ž๊ฒฉ ์ฆ๋ช… ์„ธ์…˜ ๊ธฐ๋ฐ˜ ์ž๊ฒฉ ์ฆ๋ช… ๋ฐฉ์‹์€ ์„œ๋ฒ„ ์ธก์— ์ธ์ฆ๋œ ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๋ฅผ ์„ธ์…˜ ํ˜•ํƒœ๋กœ ์„ธ์…˜ ์ €์žฅ์†Œ์— ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์ฆ‰, ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ ์„œ๋ฒ„ ์ธก์˜ ๋ฆฌ์†Œ..

Spring๐ŸŒธ 2023.05.17

Spring MVC - JUnit์„ ์‚ฌ์šฉํ•œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ

๐Ÿ’ก๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ž€? ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ผ๋ฐ˜์ ์€ ํ…Œ์ŠคํŠธ ๋ถ„๋ฅ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. - ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ : ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ๊ฐ€ ํ…Œ์ŠคํŠธ์˜ ๋ฒ”์œ„๊ฐ€ ๊ฐ€์žฅ ํฌ๋‹ค. ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ๋Š” ์ฃผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ์šฉ์ž ์ž…์žฅ์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€๋ฅผ ํ…Œ์ŠคํŠธํ•œ๋‹ค. ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๋Š” ์ฃผ์ฒด๋Š” ์ฃผ๋กœ ํ•ด๋‹น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœํ‹‘ ํ…Œ์ŠคํŠธ ์ „๋ฌธ ๋ถ€์„œ (QA๋ถ€์„œ) ๋˜๋Š” ์™ธ๋ถ€ QA ์™ธ๋ถ€ ์—…์ฒด๊ฐ€ ๋จ. ์ข…์ข… FrontEnd ๊ฐœ๋ฐœ์ž๋„ ์„œ๋ฒ„ ์ธก ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ž˜ ๋™์ž‘ํ•˜๋Š”์ง€ ๊ฐ€๋ณ๊ฒŒ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๊ธฐ๋„ ํ•จ. ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ์˜ ๊ฒฝ์šฐ API ํˆด์ด๋‚˜, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊นŒ์ง€ ์—ฐ๊ด€๋˜์–ด ์žˆ์–ด์„œ HTTP ํ†ต์‹ ๋„ ํ•ด์•ผ ๋˜๊ณ , ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ๋„ ํ•ด์•ผ ๋˜๋Š” ๋“ฑ ์šฐ๋ฆฌ๊ฐ€ ๊ฐœ๋ฐœํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์—ฐ๊ด€๋œ ๋Œ€์ƒ์ด ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ๋‹จ์œ„ ํ…Œ์Šค..

Spring๐ŸŒธ 2023.04.30

Spring MVC - JDBC ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๊ณ„์ธต

๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๊ณ„์ธต์€ ์„œ๋น„์Šค ๊ณ„์ธต์—์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ํ†ตํ•ด ์ฒ˜๋ฆฌ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•˜๊ณ , ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋Š” ๋“ฑ์˜ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ๐Ÿ’กJDBC(Java Database Connectivity)๋ž€? Java ๊ธฐ๋ฐ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ฝ”๋“œ ๋ ˆ๋ฒจ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ ๋ฐ ์—…๋ฐ์ดํŠธ ํ•˜๊ฑฐ๋‚˜ ๋ฐ˜๋Œ€๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ Java ์ฝ”๋“œ ๋ ˆ๋ฒจ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” Java์—์„œ ์ œ๊ณตํ•˜๋Š” ํ‘œ์ค€ ์‚ฌ์–‘. Java ํ”„๋กœ๊ทธ๋žจ์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ƒํ˜ธ ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ํ‘œ์ค€ Java API. Spring์—์„œ๋Š” JDBC API๋ฅผ ์ง์ ‘์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ๋ณด๋‹ค๋Š” Spring Data JDBC๋‚˜ Spring Data JPA๊ฐ™์€ ๊ธฐ์ˆ ์„ ์ œ๊ณตํ•จ์œผ๋กœ์จ ๊ฐœ๋ฐœ์ž๋“ค..

Spring๐ŸŒธ 2023.04.18

Spring MVC - ์˜ˆ์™ธ ์ฒ˜๋ฆฌ(1)

์ƒ˜ํ”Œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌํ˜„ํ•ด๋ณด๋ฉด์„œ ๋งŒ๋‚  ์ˆ˜ ์žˆ๋Š” ์˜ˆ์™ธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์œ ํšจ์„ฑ ๊ฒ€์ฆ(Validation)์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ ์„œ๋น„์Šค ๊ณ„์ธต์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์—์„œ ๋˜์ ธ์ง€๋Š” ์˜๋„๋œ ์˜ˆ์™ธ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ์ค‘์— ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ(RuntimeException) DTO ์œ ํšจ์„ฑ ๊ฒ€์ฆ ์ธก์—์„œ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ ๋ฐ์ดํ„ฐ ์œ ํšจ์„ฑ ๊ฒ€์ฆ์— ์‹คํŒจํ•  ๊ฒฝ์šฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์‘๋‹ต ๋ฉ”์‹œ์ง€๋ฅผ ํ™•์ธ ๊ฐ€๋Šฅํ•˜๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ Response Body ๋‚ด์šฉ๋งŒ์œผ๋กœ๋Š” ์š”์ฒญ ๋ฐ์ดํ„ฐ ์ค‘์—์„œ ์–ด๋–ค ํ•ญ๋ชฉ์ด ์œ ํšจ์„ฑ ๊ฒ€์ฆ์— ์‹คํŒจํ–ˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์—†๋‹ค. ํด๋ผ์ด์–ธํŠธ ์ชฝ์—์„œ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ์กฐ๊ธˆ ๋” ๊ตฌ์ฒด์ ์œผ๋กœ ์นœ์ ˆํ•˜๊ฒŒ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ๋ฐ”๊พธ๋Š” ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค. ๐Ÿ’ก@ExceptionHandler๋ฅผ ์ด์šฉํ•œ Controller ๋ ˆ๋ฒจ์—์„œ์˜ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ํด๋ผ์ด..

Spring๐ŸŒธ 2023.04.17

Spring Core - DI

๐Ÿ’กDI(Dependency Injection) IoC๋ผ๋Š” ์›์น™์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋กœ, ์šฉ์–ด๋ฅผ ์žˆ๋Š” ๊ทธ๋Œ€๋กœ ๋ฒˆ์—ญํ•˜๋ฉด `์˜์กด์„ฑ ์ฃผ์ž…`์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ์˜ ์˜ˆ์‹œ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด ์‹ค์ œ MemberService๋ผ๋Š” ๊ฐ์ฒด์—์„œ MemberRepository๋ผ๋Š” ๊ฐ์ฒด์— ์˜์กด์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜, ์•„๋ž˜์— ๊ตฌํ˜„๋œ ์„ธ๊ฐ€์ง€ ๋ฉ”์„œ๋“œ๋“ค์€ ๋ชจ๋‘ MemberRepository๊ฐ์ฒด์—์„œ ๊ตฌํ˜„ํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์—์„œ MemberRepository๋ผ๋Š” ๊ฐ์ฒด๋ฅผ ๋‹ค๋ฅธ MockRepository ๊ฐ์ฒด๋กœ ๊ต์ฒดํ•ด์•ผ ํ•  ๊ฒฝ์šฐ ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚ ๊นŒ์š”? ์‹ค์ œ๋กœ private final MemberRepository memberRepository = new MockRepository();๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด ๋ ๊นŒ์š”? ์ด๋ ‡๊ฒŒ ..

Spring๐ŸŒธ 2023.04.10

Spring Framework ๊ธฐ๋ณธ, ํŠน์ง•, ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

๐Ÿ’กFramework vs Library Java Collection Framework์€ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๊ณต ๋ฐ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์‰ฝ๋„๋ก ํ‘œ์ค€ํ™”๋œ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜๋Š” ํด๋ž˜์Šค์˜ ์ง‘ํ•ฉ์ด๋‹ค. ์ฆ‰, Framework๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๊ธฐ ์œ„ํ•œ ์–ด๋– ํ•œ ํ‹€์ด๋‚˜ ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•œ๋‹ค. Framework๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํšจ์œจ์ ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์ •ํ•ด์ง„ ๊ทœ์•ฝ์ด ์žˆ์–ด์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌ ๊ฐ€๋Šฅํ•˜๋‹ค. ํ•˜์ง€๋งŒ, ์ž์œ ๋กญ๊ณ  ์œ ์—ฐํ•œ ๊ฐœ๋ฐœ์ด ์–ด๋ ต๊ณ , ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” Framework์— ๋Œ€ํ•œ ํ•™์Šต์ด ์„ ํ–‰๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ๋‹จ์ ๋„ ์žˆ๋‹ค. Library๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ์ผ๋ จ์˜ ๋ฐ์ดํ„ฐ ๋ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ฝ”๋“œ๋ฅผ ๋งํ•œ๋‹ค. ์ฆ‰, ๊ฐœ๋ฐœ์‹œ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ๋ฏธ๋ฆฌ ๊ตฌํ˜„ํ•ด ๋†’์€ ์ง‘ํ•ฉ์ฒด๋กœ์„œ, ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค..

Spring๐ŸŒธ 2023.04.02