๐Ÿ’ Spring

๐Ÿ’ Spring/Spring Security

[Spring Security] ์Šคํ”„๋ง ๋ถ€ํŠธ OAuth2๋ฅผ ์ด์šฉํ•œ ๋„ค์ด๋ฒ„ ๊ณ„์ • ๋กœ๊ทธ์ธ (์ง์ ‘ ๊ตฌํ˜„)

์ด๋ฒˆ์—๋Š” ๋„ค์ด๋ฒ„ ์•„์ด๋””๋กœ ๋กœ๊ทธ์ธ(๋„ค์•„๋กœ) ๋ฅผ ๊ตฌํ˜„ํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ฐธ๊ณ  : ๊ตฌ๊ธ€ ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธ์€ ์—ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์นด์นด์˜ค ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธ์€ ์—ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์†Œ์…œ ๋กœ๊ทธ์ธ์„ ํ•˜๊ธฐ์œ„ํ•ด ํ•„์š”ํ•œ API ํ‚ค ๋ฐœ๊ธ‰์€ ์—ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. 1. ๋„ค์•„๋กœ ์—ฐ๋™ URL ์š”์ฒญ ์•„๋ž˜์ฒ˜๋Ÿผ ์›ํ•˜๋Š” ํƒœ๊ทธ์˜ ์š”์ฒญ URL์„ ์™„์„ฑ ์‹œ์ผœ์„œ ๋„ฃ์–ด์ฃผ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. (state๋Š” ์›๋ž˜ ๊ณ„์† ๋žœ๋ค์œผ๋กœ ์ƒ์„ฑํ•ด์ฃผ์–ด์•ผ ํ•˜๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด "state"๋ผ๋Š” ๊ฐ’์œผ๋กœ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.) ๋„ค์ด๋ฒ„๋กœ ๋กœ๊ทธ์ธ ํ•˜๊ธฐ 2. Redirect URI ์ฒ˜๋ฆฌํ•˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ ์ƒ์„ฑ ์ €๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ Redirect URI๋ฅผ "/login/oauth/code/naver"๋กœ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. @Controller @RequestMapping(..

๐Ÿ’ Spring/Spring Security

[Spring Security] ์Šคํ”„๋ง ๋ถ€ํŠธ OAuth2๋ฅผ ์ด์šฉํ•œ ๊ตฌ๊ธ€ ๊ณ„์ • ๋กœ๊ทธ์ธ (์ง์ ‘ ๊ตฌํ˜„)

์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” ๊ตฌ๊ธ€๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ฐธ๊ณ  : ๋„ค์ด๋ฒ„ ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธ์€ ์—ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์นด์นด์˜ค ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธ์€ ์—ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์†Œ์…œ ๋กœ๊ทธ์ธ์„ ํ•˜๊ธฐ์œ„ํ•ด ํ•„์š”ํ•œ API ํ‚ค ๋ฐœ๊ธ‰์€ ์—ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. 1. ์ธ์ฆ ์ฝ”๋“œ ๋ฐ›๊ธฐ ์›ํ•˜๋Š” ํƒœ๊ทธ์— ๋งํฌ๋ฅผ ์ถ”๊ฐ€ํ•ด์ค๋‹ˆ๋‹ค. ๊ตฌ๊ธ€ ๋กœ๊ทธ์ธ ํ•ด๋‹น ํƒœ๊ทธ๋ฅผ ํด๋ฆญํ•˜๊ฒŒ ๋˜๋ฉด, ๊ตฌ๊ธ€ ๋ฆฌ์†Œ์Šค ์„œ๋ฒ„๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด๊ฒŒ ๋˜๊ณ , ์šฐ๋ฆฌ๊ฐ€ ์„ค์ •ํ•œ ๋ฆฌ๋‹ค์ด๋ ‰์…˜ URI๋กœ ์ฝ”๋“œ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งํฌ๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด, ์•„๋ž˜์™€ ๊ฐ™์ด ์ฟผ๋ฆฌ ์ŠคํŠธ๋ง ํŒŒ๋ผ๋ฏธํ„ฐ์— code๊ฐ’์ด ๋‹ด๊ฒจ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. http://localhost:8080/login/oauth2/code/google?code=4%2F0AY0e-g6cMCFbgwTV.........AFZl50QB77171E..

๐Ÿ’ Spring/Spring Security

[Spring Security] ์Šคํ”„๋ง ๋ถ€ํŠธ OAuth2๋ฅผ ์ด์šฉํ•œ ์นด์นด์˜ค ๊ณ„์ • ๋กœ๊ทธ์ธ (์ง์ ‘ ๊ตฌํ˜„)

์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” ์นด์นด์˜ค ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. :D ์ฐธ๊ณ  : ๊ตฌ๊ธ€ ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธ์€ ์—ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๋„ค์ด๋ฒ„ ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธ์€ ์—ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์†Œ์…œ ๋กœ๊ทธ์ธ์„ ํ•˜๊ธฐ์œ„ํ•ด ํ•„์š”ํ•œ API ํ‚ค ๋ฐœ๊ธ‰์€ ์—ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์นด์นด์˜ค ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ ๊ตฌํ˜„ํ•˜๊ธฐ ์ผ๋‹จ ์นด์นด์˜ค์—์„œ ์ œ๊ณตํ•˜๋Š” ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ์„ ๋ฐ›์•„์„œ ์‚ฌ์šฉํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์šด ๋ฐ›์•˜์œผ๋ฉด, ์ด์ œ ๋ฒ„ํŠผ์— ๋งํฌ๋ฅผ ๋‹ฌ๋ฉด ๋ฉ๋‹ˆ๋‹ค. Request ์š”์ฒญ ๋งํฌ {REST_API_KEY} ๋ถ€๋ถ„์—๋Š” ์•ฑ ์ƒ์„ฑ ์‹œ ๋ฐœ๊ธ‰๋ฐ›์€ REST API ํ‚ค๋ฅผ ๋„ฃ์–ด์ฃผ๋ฉด ๋˜๊ณ , ๋‚˜๋จธ์ง€๋„ ์•„๋ž˜ ํ‘œ๋ฅผ ๋ณด๊ณ  ์•Œ๋งž๊ฒŒ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค. URL์„ ์•„๊นŒ ๋ฐ›์€ ์ด๋ฏธ์ง€์™€ ํ•จ๊ป˜ ๋„ฃ์–ด์ค๋‹ˆ๋‹ค. (๋ฐœ๊ธ‰ ๋ฐ›์œผ์‹  client_id๋ž‘ uri๋Š” ์ง์ ‘ ๋„ฃ์œผ์…”์•ผํ•ฉ๋‹ˆ๋‹ค.) ๊ทธ๋ฆฌ๊ณ  ์‹คํ–‰ํ•ด..

๐Ÿ’ Spring/Spring Security

[Spring Security] ์Šคํ”„๋ง ๋ถ€ํŠธ OAuth2 ๊ตฌ๊ธ€, ๋„ค์ด๋ฒ„, ์นด์นด์˜ค API ํ‚ค ๋ฐœ๊ธ‰ํ•˜๊ธฐ

๊ตฌ๊ธ€, ๋„ค์ด๋ฒ„, ์นด์นด์˜ค ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ํ† ํฐ๋“ค์„ ๋ฐœ๊ธ‰ ๋ฐ›๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. :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

[HAEOAS] linkTo ๋ฉ”์†Œ๋“œ exception ๋ฐœ์ƒ

์ค‘๊ฐ„ ์ƒ๋žต... 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] JUnit5 ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•

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() { // ..

iseunghan
'๐Ÿ’ Spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก (6 Page)