일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 쓰레드
- 실전 자바 고급 1편
- container
- contatiner
- 제네릭스
- 도커 엔진
- 멀티 쓰레드
- 스레드 제어와 생명 주기
- Docker
- 김영한
- 시작하세요! 도커 & 쿠버네티스
- LIST
- 동시성
- 중급자바
- 알고리즘
- 시작하세요 도커 & 쿠버네티스
- 인프런
- java
- 도커
- 컨테이너
- Collection
- 리스트
- 실전 자바 중급 2편
- Kubernetes
- 쿠버네티스
- 스레드
- Thread
- 자바
- 오케스트레이션
- 자료구조
- Today
- Total
쌩로그
Header에 JWT가 잘 들어갔지만...(NPE 해결, feat. 오타를 주의하자) 본문
목차.
- 포스팅 개요
- 본론
2-1. log.info 바름
2-2. 오타 발견
2-3. 문제해결 - 요약
3-1. 번외 - 디버깅의 유래
1. 포스팅 개요

저번 포스팅에서 한칸 띄어쓰기가 중요하다고 하면서 오타를 잠시 언급했던 내용이 있다. 그와 관련된 내용이다.
JWT를 잘 발급받고, 요청 Header에 JWT를 잘 넣었지만, 사용자정보를 읽어올 수 없어 NPE(NullPointerException)가 발생한 문제를 해결한 포스팅인데,
결론은 사실....오타다..
오타 하나로 1-2일을 삽질했고, 이를 발견하고 허무해서 사실 열 받아서 쓰는 포스팅이다..
그래도 잡고나니 기분은 좋았다..🙂
2. 본론
2-1. log.info 바름
소셜 로그인을 하고, JWT를 발급받아 Headr에 Authorization의 값으로 잘 넣었다.. 분명히!!
그런데 컨트롤러 메서드에서 Principal 정보를 받을 때, 계속 NullPointerException
이 발생했다.
그래서 log.info를 컨트롤러 메서드 영역에 넣고, 발라봤지만,,,

log에서조차 NPE가 떴다.
생각해보면 당연한 결과였다.
log에서도 메서드를 호출한 값이 log로 나오는 방식인데, 당연히 Principal(인증된 사용자 객체)자체가 null이라, NPE가 뜰 수 밖에 없던 결과였다.
log로도 확인할 수 없어서 SpringSecurity 필터들을 자세히 살펴보고, ChatGPT한테도 물어보고, Filter들도 어떤 필터를 거쳐가는지 확인했었다..
2-2. 오타 발견
그런데,,보다보니 이상한 게 눈에 하나 띄었다.Bearer jwtsdlfhsdoifhsdf
JWT는 위와 같은 방식으로 오는데, 이 때 Bearer
이 부분은 String 클래스의 replace() 메서드를 통해서 ""(공백)
으로 치환하게 되어있다.
request.getHeader("Authorization").replace("Bearer ","");
요청의 헤더 중, "Authorization"에 해당하는 값의 "Bearer " 부분을 ""으로 치환
코드가 이렇다.
그런데,"Bearer "
<< 이렇게 되어있어야 할 부분이"Bearer ,"
<< 이렇게 되어있었다...
하..


후...
위와 같이 오타(=버그)를 발견했으니 수정해줬다.
이 때 엥간히도 화났었나보다.. 사실 시간 지나고 스샷만 캡쳐해놓고 이제야 포스팅하는건데..ㅋㅋㅋㅋㅋㅋㅋㅋ
2-3. 문제해결
수정을 하고난 후 발라놨던 log.info가 잘 동작한다.

그리고 NullPoinerException
이 나오지 않게 되었다.
(참고로 아래 문제는 다른 문제라서 괜찮다. 결국 오타를 잡아서 JWT와 관련된 NPE 문제는 해결했다.)

사실 오타를 발견하고도 정말 이 문제가 맞을까?? 라는 두려움과 설레임 속에 서버를 실행시켰었다.
근데 정말 이 문제가 맞아서 다행이었다...후..
3. 요약
JWT를 잘 Header에 잘 담아서 보냈지만, 오류로 인해 발생한 NPE를 해결한 포스팅이었다.
3-1. 번외 - 디버깅의 유래
- Debug의 어원의 유래는 초창기 컴퓨터에 나방이 들어가 고장을 일으킨 데에 있다
https://seobinggo.com/606
https://namu.wiki/w/%EB%94%94%EB%B2%84%EA%B7%B8
https://blog.naver.com/mdown/220157579733
이번 건 ㄹㅇ 디버깅이었다.
끝.
내가 성장하는 것이 다른 사람에게 좋은 영향을 줄 수 있다.
그래서 나는 잘 되야만 한다.
나는 진짜 ㄹㅇ 조만간 잘 될 사람이다.
어차피 잘 될 것이고, 지금도 잘 된 사람이다..
요즘 폭풍 성장 중이다.
어쨋든간 나는 어잘될사다.
'TroubleShooting & 고민 > BE' 카테고리의 다른 글
AOP는 필요없었다...(feat. Spring Security는 진짜 좋은 프레임워크다.) (0) | 2023.07.09 |
---|---|
AOP로 AccessToken 검증(빡쳐서 만듬) (5) | 2023.07.05 |
Spring Rest Docs Plug in 못 받는 문제..(feat.gradle 7) (0) | 2023.05.05 |
오라클이 설치가 원활하지 못할 때(오라클 설치 롤백) (0) | 2023.05.05 |
H2 데이터베이스 연결 오류(인프런 - 김영한 JPA 기본편 강의 중) (0) | 2023.05.05 |