๐ Spring/Spring Security
์ด๋ฒ์๋ ๋ค์ด๋ฒ ์์ด๋๋ก ๋ก๊ทธ์ธ(๋ค์๋ก) ๋ฅผ ๊ตฌํํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ์ฐธ๊ณ : ๊ตฌ๊ธ ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธ์ ์ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ์๊ธฐ ๋ฐ๋๋๋ค. ์นด์นด์ค ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธ์ ์ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ์๊ธฐ ๋ฐ๋๋๋ค. ์์
๋ก๊ทธ์ธ์ ํ๊ธฐ์ํด ํ์ํ API ํค ๋ฐ๊ธ์ ์ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ์๊ธฐ ๋ฐ๋๋๋ค. 1. ๋ค์๋ก ์ฐ๋ URL ์์ฒญ ์๋์ฒ๋ผ ์ํ๋ ํ๊ทธ์ ์์ฒญ URL์ ์์ฑ ์์ผ์ ๋ฃ์ด์ฃผ๋๋ก ํฉ๋๋ค. (state๋ ์๋ ๊ณ์ ๋๋ค์ผ๋ก ์์ฑํด์ฃผ์ด์ผ ํ๋๋ฐ, ์ฌ๊ธฐ์๋ ํ
์คํธ๋ฅผ ์ํด "state"๋ผ๋ ๊ฐ์ผ๋ก ํ๊ฒ ์ต๋๋ค.) ๋ค์ด๋ฒ๋ก ๋ก๊ทธ์ธ ํ๊ธฐ 2. Redirect URI ์ฒ๋ฆฌํ๋ ์ปจํธ๋กค๋ฌ ์์ฑ ์ ๋ ์ ํ๋ฆฌ์ผ์ด์
์์ Redirect URI๋ฅผ "/login/oauth/code/naver"๋ก ์ค์ ํ์ต๋๋ค. @Controller @RequestMapping(..
๐ Spring/Spring Security
์ด๋ฒ ์๊ฐ์๋ ๊ตฌ๊ธ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ๊ตฌํํด๋ณด๊ฒ ์ต๋๋ค. ์ฐธ๊ณ : ๋ค์ด๋ฒ ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธ์ ์ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ์๊ธฐ ๋ฐ๋๋๋ค. ์นด์นด์ค ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธ์ ์ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ์๊ธฐ ๋ฐ๋๋๋ค. ์์
๋ก๊ทธ์ธ์ ํ๊ธฐ์ํด ํ์ํ API ํค ๋ฐ๊ธ์ ์ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ์๊ธฐ ๋ฐ๋๋๋ค. 1. ์ธ์ฆ ์ฝ๋ ๋ฐ๊ธฐ ์ํ๋ ํ๊ทธ์ ๋งํฌ๋ฅผ ์ถ๊ฐํด์ค๋๋ค. ๊ตฌ๊ธ ๋ก๊ทธ์ธ ํด๋น ํ๊ทธ๋ฅผ ํด๋ฆญํ๊ฒ ๋๋ฉด, ๊ตฌ๊ธ ๋ฆฌ์์ค ์๋ฒ๋ก ์์ฒญ์ ๋ณด๋ด๊ฒ ๋๊ณ , ์ฐ๋ฆฌ๊ฐ ์ค์ ํ ๋ฆฌ๋ค์ด๋ ์
URI๋ก ์ฝ๋๋ฅผ ๋ฐ์ ์ ์์ต๋๋ค. ๋งํฌ๋ฅผ ํ์ธํด๋ณด๋ฉด, ์๋์ ๊ฐ์ด ์ฟผ๋ฆฌ ์คํธ๋ง ํ๋ผ๋ฏธํฐ์ code๊ฐ์ด ๋ด๊ฒจ์์ ๊ฒ์
๋๋ค. http://localhost:8080/login/oauth2/code/google?code=4%2F0AY0e-g6cMCFbgwTV.........AFZl50QB77171E..
๐ Spring/Spring Security
์ด๋ฒ ์๊ฐ์๋ ์นด์นด์ค ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ์์๋ณด๊ฒ ์ต๋๋ค. :D ์ฐธ๊ณ : ๊ตฌ๊ธ ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธ์ ์ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ์๊ธฐ ๋ฐ๋๋๋ค. ๋ค์ด๋ฒ ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธ์ ์ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ์๊ธฐ ๋ฐ๋๋๋ค. ์์
๋ก๊ทธ์ธ์ ํ๊ธฐ์ํด ํ์ํ API ํค ๋ฐ๊ธ์ ์ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ์๊ธฐ ๋ฐ๋๋๋ค. ์นด์นด์ค ๋ก๊ทธ์ธ ๋ฒํผ ๊ตฌํํ๊ธฐ ์ผ๋จ ์นด์นด์ค์์ ์ ๊ณตํ๋ ๋ก๊ทธ์ธ ๋ฒํผ์ ๋ฐ์์ ์ฌ์ฉํ๊ฒ ์ต๋๋ค. ์ด๋ฏธ์ง๋ฅผ ๋ค์ด ๋ฐ์์ผ๋ฉด, ์ด์ ๋ฒํผ์ ๋งํฌ๋ฅผ ๋ฌ๋ฉด ๋ฉ๋๋ค. Request ์์ฒญ ๋งํฌ {REST_API_KEY} ๋ถ๋ถ์๋ ์ฑ ์์ฑ ์ ๋ฐ๊ธ๋ฐ์ REST API ํค๋ฅผ ๋ฃ์ด์ฃผ๋ฉด ๋๊ณ , ๋๋จธ์ง๋ ์๋ ํ๋ฅผ ๋ณด๊ณ ์๋ง๊ฒ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค. URL์ ์๊น ๋ฐ์ ์ด๋ฏธ์ง์ ํจ๊ป ๋ฃ์ด์ค๋๋ค. (๋ฐ๊ธ ๋ฐ์ผ์ client_id๋ uri๋ ์ง์ ๋ฃ์ผ์
์ผํฉ๋๋ค.) ๊ทธ๋ฆฌ๊ณ ์คํํด..
๐ Spring/Spring Security
๊ตฌ๊ธ, ๋ค์ด๋ฒ, ์นด์นด์ค ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธํ๊ธฐ ์ํด ํ์ํ ํ ํฐ๋ค์ ๋ฐ๊ธ ๋ฐ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ์์๋ณด๊ฒ ์ต๋๋ค. :D ๊ตฌ๊ธ(Google) Google Cloud Platform ํ๋์ ๊ณ์ ์ผ๋ก ๋ชจ๋ Google ์๋น์ค๋ฅผ Google Cloud Platform์ ์ฌ์ฉํ๋ ค๋ฉด ๋ก๊ทธ์ธํ์ธ์. accounts.google.com 1. ๋จผ์ ์ ๋งํฌ๋ก ์ ์ํด์ ์ ํ๋ก์ ํธ๋ฅผ ์์ฑํฉ๋๋ค. 2. ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด - OAuth ํด๋ผ์ด์ธํธ ID ๋ฅผ ํด๋ฆญํฉ๋๋ค. 3. ๋์ ํ๋ฉด ๊ตฌ์ฑ์ ํด๋ฆญํ๊ณ - User Type์ ์ธ๋ถ๋ก ์ค์ ํด์ค๋ค. 4. [์ฑ ์ด๋ฆ], [์ฌ์ฉ์ ์ง์ ์ด๋ฉ์ผ], [๊ฐ๋ฐ์ ์ฐ๋ฝ์ฒ ์ ๋ณด] ๋ง ์
๋ ฅํ๊ณ ๋์ด๊ฐ๋ค. (2) ๋ฒ์, (3) ํ
์คํธ ์ฌ์ฉ์๋ ๋์ด๊ฐ๊ณ ๋์ 5๋ฒ์ ์งํํ๋ฉด ๋ฉ๋๋ค. 5. ๋ค์ [์ฌ์ฉ์ ์ธ์ฆ ์ ..
๐ Spring/Spring REST API
์ค๊ฐ ์๋ต... POST ์์ฒญ์ผ๋ก ๋ณด๋ด๋ฉด,, POST http://localhost:8080/boards/1/pockets requestBody : { "title" : "pocket title" } ์๋ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค. ๋์ถฉ ๋ณด๋๊น, PocketController์ addPocket ๋ฉ์๋์ linkTo๋ฅผ ์คํํ๋ค๊ฐ ์๋ฌ๊ฐ ๋ ๊ฒ๊ฐ๋ค. boardId๊ฐ์ ํ์ฅํ๊ธฐ ์ํ ๋ณ์๊ฐ์ด ์ถฉ๋ถํ์ง ์๋ค..? ๋ผ๊ณ ๋จ๋๋ฐ ๋ญ ๋ง์ด์ง.. @PostMapping public ResponseEntity addPocket(@PathVariable Long boardId, @RequestBody PocketDto pocketDto) throws NotFoundException { System.out.println("boar..
๐ Spring
JUnit์ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ ๋ชจ๋ฅด์ ๋ค๋ฉด [JUnit] - JUnit5 ์์ํ๊ธฐ ๋ฅผ ์ฐธ๊ณ ํ์๊ธธ ๋ฐ๋๋๋ค. [JUnit] - JUnit5 ์์ํ๊ธฐ JUnit์ด๋? ์๋ฐ์ฉ ๋จ์ ํ
์คํธ(Unit Test) ๋๊ตฌ ์ฅ์ ํ
์คํธ๋ฅผ ํ๊ธฐ ์ํด ์ผ์ผํ System.out.prinlnt ๋ก ์ฐ์ด๋ณผ ํ์๊ฐ ์๋ค. @Test ๋ฉ์๋๊ฐ ํธ์ถ๋ ๋ ๋ง๋ค ์๋ก์ด ์ธ์คํด์ค๊ฐ ์์ฑ๋์ด ๋
๋ฆฝ์ ์ธ ํ
์คํธ iseunghan.tistory.com JUnit ๊ธฐ๋ณธ Annotation @BeforeAll ํด๋น annotation์ด ๋ฌ๋ฆฐ ๋ฉ์๋๋ ๋ชจ๋ ๋ฉ์๋๊ฐ ์คํ๋๊ธฐ ์ ์ ๊ฐ์ฅ ๋จผ์ ์คํ๋๋ค. ๋ฐ๋์ static ์ผ๋ก ์ ์ธ ๋์ด์ผ ํ๋ค. ์ด์ ์ @BeforeClass ์ ๋์ผ @BeforeAll static void before() { // ..