[Project] authentication NPE
Categories: Project
๐ ๊ฐ์ธ์ ์ธ ๊ณต๊ฐ์ผ๋ก ๊ณต๋ถ๋ฅผ ๊ธฐ๋กํ๊ณ ๋ณต์ตํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋ธ๋ก๊ทธ์
๋๋ค.
์ ํํ์ง ์์ ์ ๋ณด๊ฐ ์์ ์ ์์ผ๋ ์ฐธ๊ณ ๋ฐ๋๋๋ค :๐ธ
[ํ๋ฆฐ ๋ด์ฉ์ ๋๊ธ๋ก ๋จ๊ฒจ์ฃผ์๋ฉด ๋ณต๋ฐ์ผ์ค๊ฑฐ์์]
Authorization์ ๋ฃ์ง ์์์ ๋ NPE ๋ฐ์
์ต๊ทผ์ ์ฌ์ฉ์๊ฐ ๊ฒ์๊ธ์ ์์ฑํ๋ ์๋ํฌ์ธํธ๋ฅผ ํธ์ถํ ๋, Authentication ๊ณผ์ ์์ NPE(NullPointerException)๊ฐ ๋ฐ์ํ๋ ๋ฌธ์ ๋ฅผ ๊ฒช์๋ค. ์ฝ๋ ํฉ์น๊ณ ํ ์คํธ ์์ํ๊ณ ์๋๋ฐ ๊ฒ์๊ธ ์์ฑ์์ Authorization์ ๋ฃ์ง ์์ผ๋ฉด ๋ฐ์ํ๋ ์์ธ๊ฐ ๊ฝค๋ ๊ฑฐ์ฌ๋ ค์ ์ด๊ฑธ ๊ผญ ์ก๊ณ ๊ฐ์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์๊ณ Security ๋ด๋น์ด ๋์๋๋ฐ ์ด๊ฒ ์ ํฐ์ง์ง๋ผ๋ ์๊ฐ์ด ๋ค์๋ค..
๋ณด์ ๊ด๋ จ ์์ธ๋ผ์ ์ธ์ฆ๋ ์ฌ์ฉ์์ธ์ง ํ์ธํ๋ ๊ณผ์ ์์ ๋ฌธ์ ๊ฐ ์๊ธด ๊ฑด๋ฐ, ์ด๊ฒ ์ปจํธ๋กค๋ฌ ๋ ๋ฒจ์์ ํฐ์ ธ์ ๋นํฉ์ค๋ฌ์ ๋ค. ๋ค์ํ ๋ฐฉ๋ฒ์ ์๋ํด๋ดค๋๋ฐ, ๊ฒฐ๊ตญ ํด๊ฒฐ์ ํ์ง๋ง ๊ทธ ๊ณผ์ ์ด ๋ง๋ง์น ์์๋ค.
์ฒซ ๋ฒ์งธ ์๋: ์ปจํธ๋กค๋ฌ์์ ์์ธ ์ฒ๋ฆฌ
์ฒ์์ ์์ธ๊ฐ ์ปจํธ๋กค๋ฌ์์ ๋ฐ์ํ๋๊น, ๋ชจ๋ ์ํฐํฐ ์ปจํธ๋กค๋ฌ์์ ์ด ์์ธ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๊ณ ๋ คํ๋ค. ๊ฐ ์ปจํธ๋กค๋ฌ์ ์์ธ ์ฒ๋ฆฌ๋ฅผ ์ถ๊ฐํด์ NPE๊ฐ ํฐ์ง๋ฉด ์บ์น(catch)ํ๊ณ , ์ ์ ํ ์๋ต์ ๋ฐํํ๋ ์์ผ๋ก ์ฝ๋๋ฅผ ์์ ํ ์๊ฐ์ด์๋ค. ๊ทผ๋ฐ ์ด๋ ๊ฒ ํ๋ฉด ๋ฌธ์ ๊ฐ ๋ ๊ฐ์ง ์์๋ค.
- ์ ์ง๋ณด์์ฑ ์ ํ: ๋ชจ๋ ์ปจํธ๋กค๋ฌ์ ์์ธ ์ฒ๋ฆฌ๋ฅผ ๋ฃ์ผ๋ฉด ์ฝ๋๊ฐ ๋ณต์กํด์ง๊ณ ์ ์ง๋ณด์๊ฐ ์ด๋ ค์์ง๋ค. ๊ฒ๋ค๊ฐ ์ปจํธ๋กค๋ฌ๋ง๋ค ๋๊ฐ์ ์์ธ ์ฒ๋ฆฌ ๋ก์ง์ ์ถ๊ฐํ๋ ๊ฑด ์ฝ๋ ์ค๋ณต์ ์ผ์ผํค๊ณ , ์๋ก์ด ์ปจํธ๋กค๋ฌ๋ฅผ ์ถ๊ฐํ ๋๋ง๋ค ์ด ์์ ์ ๋ฐ๋ณตํด์ผ ํ๋ ๋ฒ๊ฑฐ๋ก์์ด ์๊ธด๋ค.
- ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ ํด๊ฒฐ์ด ์ ๋จ: ์ฌ์ค 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๊ฐ ๋ฐ์ํ์ง ์๊ณ , ์ ์์ ์ผ๋ก ์ธ์ฆ๋ ์ฌ์ฉ์๊ฐ ๊ฒ์๊ธ์ ์์ฑํ ์ ์๊ฒ ๋๋ค. ์ด๋ฒ ์ผ์ ํตํด ๋ฐฐ์ด ์ ์, ๋ณด์ ์ค์ ์์ ์์ ๋๋ฝ๋ ํฐ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์๋ค๋ ๊ฒ์ด๋ค. ๋จ์ํ ์ปจํธ๋กค๋ฌ๋ ํํฐ ๋ ๋ฒจ์์ ์์ธ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ฒ๋ง์ผ๋ก ๋ถ์กฑํ๊ณ , ๋ณด์ ์ค์ ์ ๋ฐ์ ๊ผผ๊ผผํ ์ดํด๋ณด๋ ๊ฒ ์ค์ํ๋ค๋ ๊ฑธ ๋ค์ ํ๋ฒ ๋๊ผ๋ค.
Leave a comment