[Project] authentication NPE

Updated:

Categories:

Tags: ,

๐Ÿ“Œ ๊ฐœ์ธ์ ์ธ ๊ณต๊ฐ„์œผ๋กœ ๊ณต๋ถ€๋ฅผ ๊ธฐ๋กํ•˜๊ณ  ๋ณต์Šตํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋ธ”๋กœ๊ทธ์ž…๋‹ˆ๋‹ค.
์ •ํ™•ํ•˜์ง€ ์•Š์€ ์ •๋ณด๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋‹ˆ ์ฐธ๊ณ ๋ฐ”๋ž๋‹ˆ๋‹ค :๐Ÿ˜ธ
[ํ‹€๋ฆฐ ๋‚ด์šฉ์€ ๋Œ“๊ธ€๋กœ ๋‚จ๊ฒจ์ฃผ์‹œ๋ฉด ๋ณต๋ฐ›์œผ์‹ค๊ฑฐ์—์š”]


Authorization์„ ๋„ฃ์ง€ ์•Š์•˜์„ ๋•Œ NPE ๋ฐœ์ƒ

์ตœ๊ทผ์— ์‚ฌ์šฉ์ž๊ฐ€ ๊ฒŒ์‹œ๊ธ€์„ ์ž‘์„ฑํ•˜๋Š” ์—”๋“œํฌ์ธํŠธ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ, Authentication ๊ณผ์ •์—์„œ NPE(NullPointerException)๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ๊ฒช์—ˆ๋‹ค. ์ฝ”๋“œ ํ•ฉ์น˜๊ณ  ํ…Œ์ŠคํŠธ ์‹œ์ž‘ํ•˜๊ณ  ์žˆ๋Š”๋ฐ ๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ์‹œ์— Authorization์„ ๋„ฃ์ง€ ์•Š์œผ๋ฉด ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ๊ฐ€ ๊ฝค๋‚˜ ๊ฑฐ์Šฌ๋ ค์„œ ์ด๊ฑธ ๊ผญ ์žก๊ณ  ๊ฐ€์•ผ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๊ณ  Security ๋‹ด๋‹น์ด ๋‚˜์˜€๋Š”๋ฐ ์ด๊ฒŒ ์™œ ํ„ฐ์ง€์ง€๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค..

๋ณด์•ˆ ๊ด€๋ จ ์˜ˆ์™ธ๋ผ์„œ ์ธ์ฆ๋œ ์‚ฌ์šฉ์ž์ธ์ง€ ํ™•์ธํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด ๊ฑด๋ฐ, ์ด๊ฒŒ ์ปจํŠธ๋กค๋Ÿฌ ๋ ˆ๋ฒจ์—์„œ ํ„ฐ์ ธ์„œ ๋‹นํ™ฉ์Šค๋Ÿฌ์› ๋‹ค. ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์„ ์‹œ๋„ํ•ด๋ดค๋Š”๋ฐ, ๊ฒฐ๊ตญ ํ•ด๊ฒฐ์€ ํ–ˆ์ง€๋งŒ ๊ทธ ๊ณผ์ •์ด ๋งŒ๋งŒ์น˜ ์•Š์•˜๋‹ค.

์ฒซ ๋ฒˆ์งธ ์‹œ๋„: ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

์ฒ˜์Œ์—” ์˜ˆ์™ธ๊ฐ€ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๋ฐœ์ƒํ•˜๋‹ˆ๊นŒ, ๋ชจ๋“  ์—”ํ‹ฐํ‹ฐ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ์ด ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ณ ๋ คํ–ˆ๋‹ค. ๊ฐ ์ปจํŠธ๋กค๋Ÿฌ์— ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ NPE๊ฐ€ ํ„ฐ์ง€๋ฉด ์บ์น˜(catch)ํ•˜๊ณ , ์ ์ ˆํ•œ ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ์‹์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•  ์ƒ๊ฐ์ด์—ˆ๋‹ค. ๊ทผ๋ฐ ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ๋‘ ๊ฐ€์ง€ ์žˆ์—ˆ๋‹ค.

  1. ์œ ์ง€๋ณด์ˆ˜์„ฑ ์ €ํ•˜: ๋ชจ๋“  ์ปจํŠธ๋กค๋Ÿฌ์— ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ๋„ฃ์œผ๋ฉด ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•ด์ง€๊ณ  ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ค์›Œ์ง„๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ ์ปจํŠธ๋กค๋Ÿฌ๋งˆ๋‹ค ๋˜‘๊ฐ™์€ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋กœ์ง์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฑด ์ฝ”๋“œ ์ค‘๋ณต์„ ์ผ์œผํ‚ค๊ณ , ์ƒˆ๋กœ์šด ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ๋งˆ๋‹ค ์ด ์ž‘์—…์„ ๋ฐ˜๋ณตํ•ด์•ผ ํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์ด ์ƒ๊ธด๋‹ค.
  2. ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ œ ํ•ด๊ฒฐ์ด ์•ˆ ๋จ: ์‚ฌ์‹ค NPE๊ฐ€ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ํ„ฐ์ง„ ๊ฑด ๋งž์ง€๋งŒ, ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ œ๋Š” Authentication ๊ณผ์ •์— ์žˆ์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ปจํŠธ๋กค๋Ÿฌ ๋ ˆ๋ฒจ์—์„œ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฑด ์ž„์‹œ๋ฐฉํŽธ์ผ ๋ฟ, ์ง„์งœ ์›์ธ์„ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ์—ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ์‹œ๋„: Security Configuration์—์„œ ๋ฌธ์ œ ํ•ด๊ฒฐ

๊ทธ๋ž˜์„œ ๋ณด์•ˆ ์„ค์ •(SecurityConfiguration) ์ชฝ์—์„œ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฐฉํ–ฅ์„ ํ‹€์—ˆ๋‹ค. ์ธ์ฆ ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ๋‹ˆ๊นŒ, Spring Security์˜ ํ•„ํ„ฐ๋‚˜ ์—”ํŠธ๋ฆฌ ํฌ์ธํŠธ์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒŒ ๋” ๋งž๋‹ค๊ณ  ํŒ๋‹จํ–ˆ๋‹ค.

  • JwtVerifiedFilter: JWT ํ† ํฐ ๊ฒ€์ฆ ๊ณผ์ •์—์„œ ์˜ˆ์™ธ๊ฐ€ ํ„ฐ์งˆ ์ˆ˜ ์žˆ์–ด์„œ, ์ด ํ•„ํ„ฐ์—์„œ NPE๋ฅผ ์บ์น˜ํ•˜๊ณ  ์ ์ ˆํ•œ ์˜ˆ์™ธ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ ค๊ณ  ํ–ˆ๋‹ค. ๊ทผ๋ฐ ์ด ๋ฐฉ๋ฒ•๋งŒ์œผ๋กœ๋Š” ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์•˜๋‹ค. ํ•„ํ„ฐ์—์„œ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค๊ณ  ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ œ๊ฐ€ ์‚ฌ๋ผ์ง€์ง„ ์•Š์•„์„œ์˜€๋‹ค.
  • EntryPoint: ์ธ์ฆ๋˜์ง€ ์•Š์€ ์‚ฌ์šฉ์ž๊ฐ€ ์ ‘๊ทผํ•  ๋•Œ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์—”ํŠธ๋ฆฌ ํฌ์ธํŠธ์—์„œ NPE๋ฅผ ์ฒ˜๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ–ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•๋„ ์ผ๋ถ€ ๊ฒฝ์šฐ์—๋Š” ์œ ์šฉํ–ˆ์ง€๋งŒ, ์—ฌ์ „ํžˆ NPE ๋ฌธ์ œ๋ฅผ ์™„์ „ํžˆ ํ•ด๊ฒฐํ•˜์ง„ ๋ชปํ–ˆ๋‹ค. EntryPoint๋Š” ์ฃผ๋กœ ์ธ์ฆ ์‹คํŒจ ์‹œ์˜ ์ฒ˜๋ฆฌ๋ฅผ ๋‹ด๋‹นํ•˜๋Š”๋ฐ, ๊ทผ๋ณธ์ ์ธ ์›์ธ์€ SecurityConfiguration ์„ค์ • ๋ˆ„๋ฝ์— ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ตœ์ข… ์›์ธ ํŒŒ์•…: Security Configuration์˜ ์„ค์ • ๋ˆ„๋ฝ

์—ฌ๋Ÿฌ ์‹œ๋„ ๋์— ๊ฒฐ๊ตญ ์ง„์งœ ๋ฌธ์ œ์˜ ์›์ธ์„ ์ฐพ์•„๋ƒˆ๋‹ค. ๋ฐ”๋กœ SecurityConfiguration์—์„œ ๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ ์—”๋“œํฌ์ธํŠธ์— ๋Œ€ํ•œ ์„ค์ •์ด ๋ˆ„๋ฝ๋˜์–ด ์žˆ์—ˆ๋‹ค. ์ด ์„ค์ •์ด ๋น ์ ธ์„œ ์ธ์ฆ ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•œ ์˜ˆ์™ธ๋ฅผ ์ œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•˜๊ณ  NPE๊ฐ€ ํ„ฐ์กŒ๋˜ ๊ฑฐ๋‹ค.

๋ณด์•ˆ ์„ค์ •์„ ๋‹ค์‹œ ์‚ดํŽด๋ณด๋‹ˆ, ํŠน์ • ์—”๋“œํฌ์ธํŠธ์— ๋Œ€ํ•ด JWT ๊ฒ€์ฆ์ด๋‚˜ ๊ถŒํ•œ ์„ค์ •์ด ์ œ๋Œ€๋กœ ์•ˆ ๋ผ ์žˆ์–ด์„œ ์ธ์ฆ ๊ฐ์ฒด๊ฐ€ null์ธ ์ƒํƒœ๋กœ ์ ‘๊ทผ์ด ์ด๋ฃจ์–ด์กŒ๊ณ , ๊ทธ ๊ฒฐ๊ณผ NPE๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฑฐ์˜€๋‹ค.

๋ฌธ์ œ ํ•ด๊ฒฐ: Security Configuration ์ˆ˜์ •

๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด SecurityConfiguration์—์„œ ๋ˆ„๋ฝ๋œ ์—”๋“œํฌ์ธํŠธ ์„ค์ •์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค. ๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ ์—”๋“œํฌ์ธํŠธ์— ๋Œ€ํ•ด ์ ์ ˆํ•œ ๊ถŒํ•œ ๊ฒ€์ฆ๊ณผ JWT ํ† ํฐ ๊ฒ€์‚ฌ๋ฅผ ์ถ”๊ฐ€ํ–ˆ๊ณ , ๋•๋ถ„์— ์ธ์ฆ ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์˜ˆ์™ธ๋ฅผ ์‚ฌ์ „์— ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

์ด์ œ NPE๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ณ , ์ •์ƒ์ ์œผ๋กœ ์ธ์ฆ๋œ ์‚ฌ์šฉ์ž๊ฐ€ ๊ฒŒ์‹œ๊ธ€์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋๋‹ค. ์ด๋ฒˆ ์ผ์„ ํ†ตํ•ด ๋ฐฐ์šด ์ ์€, ๋ณด์•ˆ ์„ค์ •์—์„œ ์ž‘์€ ๋ˆ„๋ฝ๋„ ํฐ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๋‹จ์ˆœํžˆ ์ปจํŠธ๋กค๋Ÿฌ๋‚˜ ํ•„ํ„ฐ ๋ ˆ๋ฒจ์—์„œ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋ก  ๋ถ€์กฑํ•˜๊ณ , ๋ณด์•ˆ ์„ค์ • ์ „๋ฐ˜์„ ๊ผผ๊ผผํžˆ ์‚ดํŽด๋ณด๋Š” ๊ฒŒ ์ค‘์š”ํ•˜๋‹ค๋Š” ๊ฑธ ๋‹ค์‹œ ํ•œ๋ฒˆ ๋А๊ผˆ๋‹ค.

Project ์นดํ…Œ๊ณ ๋ฆฌ ๋‚ด ๋‹ค๋ฅธ ๊ธ€ ๋ณด๋Ÿฌ๊ฐ€๊ธฐ

Leave a comment