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..