๐’๐ฉ๐ซ๐ข๐ง๐ 

1. ๋“ค์–ด๊ฐ€๊ธฐ์— ์•ž์„œ ๊ธ€์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์—, ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ ๋‹ค๋ฃฐ ์†Œ์…œ ๋กœ๊ทธ์ธ์˜ ์ธ์ฆ ํ”Œ๋กœ์šฐ์— ๋Œ€ํ•ด ๊ฐ„๋žตํ•˜๊ฒŒ ์งš์–ด๋ณด์ž. ์‚ฌ์šฉ์ž๋ฅผ ๊ตฌ๊ธ€ ๋กœ๊ทธ์ธ ์ฐฝ์œผ๋กœ ๋„˜๊ฒจ์ค€๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ๊ตฌ๊ธ€ ๋กœ๊ทธ์ธ์— ์„ฑ๊ณตํ•˜๋ฉด, ๊ตฌ๊ธ€ ์„œ๋ฒ„๋Š” ์šฐ๋ฆฌ์—๊ฒŒ ์Šน์ธ ์ฝ”๋“œ(Authorization code)๋ฅผ ๋„˜๊ฒจ์ค€๋‹ค. (2)์˜ ์Šน์ธ ์ฝ”๋“œ๋ฅผ ๊ตฌ๊ธ€ ์„œ๋ฒ„์—๊ฒŒ ๋„˜๊ธฐ๊ณ , ๊ตฌ๊ธ€ ์•ก์„ธ์Šค ํ† ํฐ์„ ๋ฐ›์•„์˜จ๋‹ค. ๊ตฌ๊ธ€ ์•ก์„ธ์Šค ํ† ํฐ์„ ์ด์šฉํ•ด ์‚ฌ์šฉ์ž ๋Œ€์‹  ๊ตฌ๊ธ€ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๋ฐ›์•„์˜จ๋‹ค. ์‚ฌ์šฉ์ž ์ •๋ณด์˜ ์œ ์ € ์‹๋ณ„์ž๋ฅผ ํ†ตํ•ด ๊ฐ€์ž… ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•œ๋‹ค. ์ƒˆ ํšŒ์›์ด๋ฉด DB์— ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๋“ฑ๋กํ•œ ๋’ค, ๋กœ๊ทธ์ธ์„ ์ง„ํ–‰ํ•œ๋‹ค. ๋น„์œ ๋ฅผ ๋“ค์–ด๋ณด์ž๋ฉด... ์ด๋Ÿฐ ๋Š๋‚Œ์ด๋‹ค. ์‚ฌ์šฉ์ž ์ •๋ณด: ๊ธˆ๊ณ ์— ๋ณด๊ด€ ์ค‘ ์•ก์„ธ์Šค ํ† ํฐ: ๊ธˆ๊ณ ์˜ ์—ด์‡ ์— ํ•ด๋‹น. ์„œ๋ž์— ๋ณด๊ด€ ์ค‘ ์Šน์ธ ์ฝ”๋“œ: ์„œ๋ž์˜ ์ž๋ฌผ์‡  ๋น„๋ฐ€๋ฒˆํ˜ธ ์•ก์„ธ์Šค ํ† ํฐ์„ ..
์†Œ์…œ ๋กœ๊ทธ์ธ ๊ตฌํ˜„์€ ์ฒ˜์Œ์ด๋ผ ์—„์ฒญ ๋ง‰๋ง‰ํ–ˆ์ง€๋งŒ... ์–ด์ฐŒ์ €์ฐŒ ์ž˜ ๋๋‚ด๊ณ  ์“ฐ๋Š” ํ›„๊ธฐ ์†Œ์…œ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•œ ๊ณผ์ •์„ ์ ์–ด๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค. ๋“ค์–ด๊ฐ€๊ธฐ์— ์•ž์„œ, ๊ตฌ๊ธ€์€ ์นด์นด์˜ค์— ๋น„ํ•ด ๋ฌธ์„œ๊ฐ€ ๋งค์šฐ ๋ถˆ์นœ์ ˆํ•˜๋‹ค. ํ•œ๊ตญ์–ด๋กœ ์ ํ˜€์žˆ๊ธด ํ•˜์ง€๋งŒ ์ •๋ง ํ•œ๊ธ€๋กœ ์˜ฎ๊ฒจ๋งŒ ๋†“์€ ์ˆ˜์ค€์ธ๋ฐ๋‹ค๊ฐ€, ๋ฌธ์„œ๋„ ์—ฌ๋Ÿฌ๊ฐœ๋ผ ๊ฝค ๊ณ ์ƒํ–ˆ๋‹ค๐Ÿฅฒ ์˜์–ด ์‹ค๋ ฅ์ด ๋˜๋Š” ๋ถ„์ด๋ผ๋ฉด ์˜์–ด ๋ฌธ์„œ๋ฅผ ๋ณด๊ณ  ์ง„ํ–‰ํ•˜๋Š”๊ฒŒ ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค. ์†Œ์…œ ๋กœ๊ทธ์ธ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์ „, ์†Œ์…œ ๋กœ๊ทธ์ธ์˜ ํ”Œ๋กœ์šฐ์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ๋งŒ์•ฝ ์†Œ์…œ ๋กœ๊ทธ์ธ์ด ์–ด๋–ป๊ฒŒ ์ง„ํ–‰๋˜๋Š”์ง€ ๋ชจ๋ฅด๋Š” ์ƒํƒœ๋ผ๋ฉด, ์ด์ „ ๊ธ€์„ ๋ณด๊ณ  ์˜ค๋Š” ๊ฑธ ์ถ”์ฒœ! 1. ๋จผ์ € ๊ตฌ๊ธ€ ํด๋ผ์šฐ๋“œ ํ”Œ๋žซํผ์œผ๋กœ ์ด๋™ํ•ด์„œ, ์ƒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•ด์ค€๋‹ค. 2. ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์ ์–ด์ฃผ๊ณ  ๋งŒ๋“ค๊ธฐ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•œ๋‹ค. 3. OAuth ๋™์˜ ํ™”๋ฉด - User Type์„ ์™ธ๋ถ€๋กœ ..
์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์ฒ˜์Œ์œผ๋กœ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด์•˜๋‹ค. ๊ทธ ์ „์—๋Š” ์ธ๊ฐ• ๊ฐ•์‚ฌ๋‹˜์ด ์น˜๋Š” ๊ฒƒ๋งŒ ๋”ฐ๋ผ์ณ๋ดค๋Š”๋ฐ, ์‹ค์ œ ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•˜๋ ค๋‹ˆ ์Šคํ”„๋ง๋ถ€ํŠธ๊ฐ€ ๋œจ๋Š” ๋ฐ ๋„ˆ๋ฌด ์˜ค๋ž˜ ๊ฑธ๋ ธ๋‹ค๐Ÿฅฒ ์ •ํ™•ํ•œ ์‹œ๊ฐ„์€ ์žฌ๋ณด์ง€ ์•Š์•˜์ง€๋งŒ ๋Œ€๋žต 3~5์ดˆ์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ ธ๊ณ , ์ด์— ๋Œ€ํ•œ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์„ ์ฐพ๋‹ค๊ฐ€ Mockito๋ผ๋Š” ๊ฑธ ์‚ฌ์šฉํ•ด๋ณด๊ฒŒ ๋˜์—ˆ๋‹ค. 1. Mockito๋ž€? Mockito๋Š” Mock, ์‰ฝ๊ฒŒ ๋งํ•ด ๊ฐ€์งœ ๊ฐ์ฒด๋ฅผ ์ง€์›ํ•ด์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค. ๊ฐ€์งœ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๊ฐ€ ํŽธํ•ด์ง„๋‹ค. ๊ธฐ์กด์˜ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๋Š” ๋ชจ๋“  ๋นˆ์„ ๋„์šฐ๊ธฐ ๋•Œ๋ฌธ์— ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค. ๋˜ํ•œ ๋‹ค๋ฅธ ํด๋ž˜์Šค์˜ ์ •์ƒ ๋™์ž‘ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๊ฐ€ ๋ฐ”๋€๋‹ค๋Š” ๋ฌธ์ œ์ ์ด ์žˆ์—ˆ๋‹ค. Service์˜ createTag()๊ฐ€ ์ •์ƒ ๋™์ž‘ํ•˜๋Š” ๊ฑธ ํ™•์ธํ•˜๊ณ  ์‹ถ์–ด๋„, Reposi..
์ธํ”„๋Ÿฐ ๊น€์˜ํ•œ๋‹˜์˜ ์Šคํ”„๋ง MVC 1ํŽธ ๊ฐ•์˜ ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ์ž‘์„ฑํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. 1. HttpServletResponse HttpServletResponse๋Š” HTTP ์‘๋‹ต ๋ฉ”์„ธ์ง€๋ฅผ ์ƒ์„ฑํ•ด์ฃผ๋Š” ํด๋ž˜์Šค์ด๋‹ค. ์‘๋‹ต ๋ฉ”์„ธ์ง€๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•˜๋Š”๊ฑด ๋ฒˆ๊ฑฐ๋กญ๊ธฐ ๋•Œ๋ฌธ์—, ์‘๋‹ต์ฝ”๋“œ์™€ ํ—ค๋”, ๋ฐ”๋””์— ๋„ฃ์„ ๊ฐ’๋“ค์„ ๋„ฃ์–ด์ฃผ๋ฉด HttpServletResponse ๊ฐ์ฒด๊ฐ€ ์‘๋‹ต ๋ฉ”์„ธ์ง€๋ฅผ ์ƒ์„ฑํ•ด์ค€๋‹ค. @WebServlet(name = "responseHeaderServlet", urlPatterns = "/response-header") public class ResponseHeaderServlet extends HttpServlet { @Override protected void service(HttpServletRequest reques..
์ธํ”„๋Ÿฐ ๊น€์˜ํ•œ๋‹˜์˜ ์Šคํ”„๋ง MVC 1ํŽธ ๊ฐ•์˜ ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ์ž‘์„ฑํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. 1. ์„œ๋ธ”๋ฆฟ ๋“ฑ๋กํ•˜๊ธฐ package hello.servlet; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.web.servlet.ServletComponentScan; @ServletComponentScan // ์„œ๋ธ”๋ฆฟ ์ž๋™ ๋“ฑ๋ก @SpringBootApplication public class ServletApplication { public static void main(String[] args) { S..
์ธํ”„๋Ÿฐ ๊น€์˜ํ•œ๋‹˜์˜ ์Šคํ”„๋ง MVC 1ํŽธ ๊ฐ•์˜ ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ์ž‘์„ฑํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. ์ด์ „ ๊ธ€์—์„œ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์— ๋Œ€ํ•ด ์•„์ฃผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์•Œ์•„๋ณด์•˜๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋Š” ๋ฌด์Šจ ์ผ์„ ํ• ๊นŒ? ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์•„๋ž˜์™€ ๊ฐ™์€ ์š”์ฒญ์„ ๋ณด๋‚ด์™”๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž. POST /save HTTP/1.1 Host: localhost:8080 Content-Type: application/x-www-form-urlencoded username=kim&age=20 ๋Œ€์ถฉ ์ด๋ฆ„์ด kim์ด๊ณ  ๋‚˜์ด๊ฐ€ 20์„ธ์ธ ํšŒ์›์˜ ์ •๋ณด๋ฅผ ๋“ฑ๋กํ•ด๋‹ฌ๋ผ๋Š” ์š”์ฒญ์ด๋‹ค. WAS๋Š” ์ด ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์•„๋ž˜์˜ ์—…๋ฌด๋“ค์„ ์ „๋ถ€ ์ฒ˜๋ฆฌํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. ํด๋ผ์ด์–ธํŠธ์™€์˜ ์†Œ์ผ“ ์—ฐ๊ฒฐ HTTP ์š”์ฒญ ๋ฉ”์„ธ์ง€ ํŒŒ์‹ฑํ•ด์„œ ์ฝ๊ธฐ ๋งคํ•‘ ์ •๋ณด ํ™•์ธ Cont..
gorapaduckoo
'๐’๐ฉ๐ซ๐ข๐ง๐ ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก