๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Thinks/TIL

TIL-220622

by ์„œ์ฝ”์ฝ” 2022. 11. 20.

๐Ÿ›Ž ํ•˜๋ฃจ ์ผ๊ณผ

10:00 ~ 10:30 ๋ฐ์ผ๋ฆฌ ์Šคํฌ๋Ÿผ
10:30 ~ 12:30 Issue Tracker ํ”„๋กœ์ ํŠธ
14:30 ~ 15:40 Dion ํŠน๊ฐ•
16:00 ~ 18:10 Issue Tracker ํ”„๋กœ์ ํŠธ

 

๐Ÿค Issue Tracker 8์ผ์ฐจ

์˜ค๋Š˜๋„ ์‚ฐํ† ๋ฆฌ์™€ ์ž‘์—…์„ ์ด์–ด๋‚˜๊ฐ”๋‹ค.
์˜ค๋Š˜์€ ์˜ค์ „์—๋Š” ๋„ค๋น„๊ฒŒ์ดํ„ฐ, ์˜คํ›„์—๋Š” ๋“œ๋ผ์ด๋ฒ„๋กœ ์ž‘์—…์„ ์ง„ํ–‰ํ–ˆ๋‹ค. ์ค‘๊ฐ„์—๋Š” ๋””์˜จ์˜ ํŠน๊ฐ•์ด ์žˆ์—ˆ๊ณ , ์ƒ๊ฐ์„ ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์ตํ•œ ์‹œ๊ฐ„์ด์—ˆ๋‹ค.

๐Ÿ“ ์ž‘์—…

  • ์œ ์ € ํšŒ์›๊ฐ€์ž… ์‹œ ๋น„๋ฐ€๋ฒˆํ˜ธ ์•”ํ˜ธํ™”
    • jbcrypt ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ
  • access ํ† ํฐ ๊ฐฑ์‹ ํ•˜๋Š” ๋กœ์ง ์ž‘์„ฑ

๐Ÿ’ญ ๊ณ ๋ฏผ์‚ฌํ•ญ

์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์˜ ๋‹จ์œ„๋Š”?

ํ˜„์žฌ ์„œ๋น„์Šค์—์„œ๋Š” jwt ํ† ํฐ์„ ์‚ฌ์šฉํ•ด์„œ ์‚ฌ์šฉ์ž ์ธ์ฆ์„ ๊ตฌํ˜„ํ–ˆ๋‹ค.
jwtํ† ํฐ์— ์œ ์ € ์‹๋ณ„ id๋ฅผ claim ๊ฐ’์œผ๋กœ ๋„ฃ๊ณ  ์žˆ์œผ๋ฉฐ ํ† ํฐ ๊ฒ€์ฆ ํ›„ userId๋ฅผ ์‚ฌ์šฉํ•ด์„œ user ๊ฐ์ฒด๋ฅผ ์กฐํšŒํ•ด์„œ ์ธํ„ฐ์…‰ํ„ฐ์—์„œ ์ปจํŠธ๋กค๋Ÿฌ์—๊ฒŒ ๋„˜๊ฒจ์ค€๋‹ค.

//AuthInterceptor์˜ preHandle ๋ฉ”์„œ๋“œ์˜ ์ผ๋ถ€

...

jwtProvider.verify(token);

User user = service.findById(userId);

request.setAttribute("user", user);

return true;

์ด์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•œ ์ด์œ ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์š”์ฒญ์—์„œ ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์œ ์ €๋ฅผ ์กฐํšŒํ•˜๋Š” ๋กœ์ง์˜ ์ค‘๋ณต์„ ์ค„์ด๊ธฐ ์œ„ํ•จ์ด๋‹ค.

ํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ ํ–ˆ์„ ๊ฒฝ์šฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

์ปจํŠธ๋กค๋Ÿฌ์— ๋„˜๊ฒจ์ค€ User ๊ฐ์ฒด๋Š” ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์—์„œ ๊ด€๋ฆฌ๋ฅผ ํ•ด์ฃผ์ง€ ์•Š๋Š”๋‹ค.
์ฆ‰, ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด์˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๋„ ๋”ํ‹ฐ์ฒดํ‚น์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ณ  DB์—๋„ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ ์šฉํ•˜๋Š” ์ฟผ๋ฆฌ๊ฐ€ ๋‚ ์•„๊ฐ€์ง€ ์•Š๋Š”๋‹ค.

๋‹จ์ˆœํžˆ ์ธํ„ฐ์…‰ํ„ฐ์—์„œ ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜์ด ๋๋‚ฌ์œผ๋‹ˆ ๋‹น์—ฐํžˆ ์•ˆ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ, ํ˜ธ๊ธฐ์‹ฌ์— ์ธํ„ฐ์…‰ํ„ฐ์—์„œ๋Š” userId๋งŒ ์„ธํŒ…ํ•ด์ฃผ๊ณ  ์–ด๋…ธํ…Œ์ด์…˜์„ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ArgumentResolver์—์„œ ์œ ์ €๋ฅผ ์กฐํšŒ ํ›„ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•ด๋ณด๋‹ˆ ์ปจํŠธ๋กค๋Ÿฌ๋กœ ๋„˜์–ด์˜จ ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์—์„œ ๊ด€๋ฆฌํ•ด์ฃผ๋Š”๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ๋‹ค.

//AuthArgumentResolver์˜ resolveArgument๋ฉ”์„œ๋“œ

  public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {

      HttpServletRequest request = (HttpServletRequest) webRequest.getNativeRequest();

      String authorization =(String) request.getAttribute("authorization");

      return authService.findUser(authorization);
  }

์–ด๋–ค ์ฐจ์ด๊ฐ€ ์žˆ๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์–ด์„œ ๋ชจ๊ฐ์ฝ”๋ฐฉ์— ๊ณ„์‹œ๋˜ ๋กœ์น˜์—๊ฒŒ ์งˆ๋ฌธํ•ด๋ณธ ๊ฒฐ๊ณผ

  • ์ธํ„ฐ์…‰ํ„ฐ์—์„œ ์กฐํšŒํ•ด์˜ค๋Š” ๊ฒฝ์šฐ๋Š” ์ €๊ธฐ์„œ ํŠธ๋žœ์žญ์…˜์ด ๋‹ซํžˆ๊ณ  ์ดํ›„์— ๋‹ค์‹œ ์—ด๋ฆฌ๋Š” ๊ตฌ์กฐ๋ผ์„œ ๊ทธ๋Ÿฐ๊ฒƒ ๊ฐ™๊ณ , ArgumentResolver์—์„œ ์กฐํšŒํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” resolver -> controller -> service ๊นŒ์ง€ ํŠธ๋žœ์žญ์…˜์ด ์—ฐ๊ฒฐ๋˜๋Š” ๊ตฌ์กฐ ๊ฐ™๋‹ค.
  • ์ผ๋‹จ ํŠธ๋žœ์žญ์…˜์€ ์„œ๋น„์Šค ๋‚ด์—์„œ๋งŒ ์—ด๊ณ  ๋‹ซ๋Š”๊ฒŒ ์ข‹๋‹ค!
  • ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ˜„์žฌ ๊ตฌ์กฐ๋กœ ๋งŒ๋“ ๊ฑด ๊ดœ์ฐฎ๋‹ค! ๋‚˜์ค‘์— ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ ์‚ฌ์šฉํ•˜๋ฉด ๊ตณ์ด ์ธํ„ฐ์…‰ํ„ฐ์—์„œ ์กฐํšŒ ์•ˆํ•ด๋„ ํ•ด๊ฒฐ์ด ๋œ๋‹ค
  • pk๋กœ ๊ฐ์ฒด๋ฅผ ์กฐํšŒํ•ด์™€์•ผ ๋”ํ‹ฐ์ฒดํ‚น์ด ๋œ๋‹ค!

๋ผ๋Š” ๋‹ต๋ณ€์„ ๋ฐ›์•˜๋‹ค.

์ถ”๊ฐ€์ ์œผ๋กœ ํ•™์Šตํ•ด๋ณผ ๋งํฌ๊นŒ์ง€!


OSIV์™€ ์„ฑ๋Šฅ ์ตœ์ ํ™”

์ผ๋‹จ ์ถ”์ธก์„ ํ•ด๋ณด์ž๋ฉด, ์ธํ„ฐ์…‰ํ„ฐ์—์„œ ์กฐํšŒํ•œ user ๊ฐ์ฒด๊ฐ€ request.setAttribute()๋ฅผ ํ†ตํ•ด ์„ธํŒ…๋˜๋Š” ์‹œ์ ์— ํŠธ๋žœ์žญ์…˜์ด ๋‹ซํžˆ๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ๋ฐ˜๋ฉด ArgumentResovler์—์„œ ์กฐํšŒํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ์กฐํšŒํ•œ ๊ฐ์ฒด๋ฅผ ๋ฐ”๋กœ ๋ฐ˜ํ™˜ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ํŠธ๋žœ์žญ์…˜์ด ์œ ์ง€๊ฐ€ ๋˜๊ณ  ์žˆ๋Š”๊ฑด๊ฐ€.. ๋ผ๊ณ  ์ƒ๊ฐ์„ ํ–ˆ๋Š”๋ฐ ์•„์ง ํŠธ๋žœ์žญ์…˜๊ณผ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ๋ถ€์กฑํ•ด์„œ ์ถ”๊ฐ€ ํ•™์Šต์ด ํ•„์š”ํ•  ๊ฒƒ ๊ฐ™๋‹ค.

'Thinks > TIL' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

TIL-220623  (0) 2022.11.20
TIL-220621  (0) 2022.11.20
TIL-220620  (0) 2022.11.20
TIL-220615  (0) 2022.11.20
TIL-220613  (0) 2022.11.20