TIL - HttpHeaders | LinkedMultiValueMap | 카카오 소셜 로그인 구현 중 오류

su·2023년 7월 10일
0

TIL

목록 보기
39/93
post-thumbnail

HttpHeaders

springframework.http와 java.net.http


코드를 작성하다가 HttpHeaders에 필요한 정보를 add 해주어야 하는 경우가 있었다.
import를 잘못 해주는 바람에 오류가 났었는데, 그 때문에 spring에서 사용하는 HttpHeaders 말고 다른 것이 있다는 것도 발견하게 되었다.

java.net.http

Java.net을 이용하여 http 통신을 하는 방법이다.
Stream을 받은 후에, Reader로 읽어 오는 방식으로 사용할 수 있다고 한다.

springframework.http

spring을 이용하여 http 통신을 하는 방법이다.
나는 spring을 사용하여 코드를 작성하고 있으니, 앞으로도 springframework.http을 import 하여 사용하면 되는 듯 하다 !

출처: https://charlie-choi.tistory.com/220

LinkedMultiValueMap

Map

Map이라는 자료구조는 Key와 Value의 한 쌍으로 이루어져 있다.

HashMapTreeMapLinkedHashMap
중복 키가 존재하지 않는다중복 키가 존재하지 않는다중복 키가 존재하지 않는다
Map에 있는 데이터를 가져올 때, Key를 인덱스처럼 가져와 Value를 뽑기 때문에 시간복잡도가 O(1)이다Map에 있는 데이터를 가져올 때, Key를 인덱스처럼 가져와 Value를 뽑기 때문에 시간복잡도가 O(1)이다Map에 있는 데이터를 가져올 때, Key를 인덱스처럼 가져와 Value를 뽑기 때문에 시간복잡도가 O(1)이다
데이터가 들어올 때마다 Key 값에 따라 자동으로 정렬된다데이터가 들어올 때마다 Key 값에 따라 자동으로 정렬된다
입력 순서를 보장한다

MultiValueMap

앞서 살펴본 Map의 종류들은 중복 Key가 존재하지 않았다. 즉 Key의 중복을 허용하지 않았다.
MultiValueMap의 경우에는 중복 Key를 허용한다.
데이터를 가져올 때, Key에 따른 Value들을 List의 형태로 반환한다.
LinkedMultiValueMap 역시, 순서를 보장하는 MultiValueMap의 종류이다.

출처: https://taehoung0102.tistory.com/182

문제 - 카카오 로그인 구현 시도 중 오류

1) 문제

java.lang.NullPointerException:
Cannot invoke "com.fasterxml.jackson.databind.JsonNode.asText()"
because the return value of
"com.fasterxml.jackson.databind.JsonNode.get(String)"
is null at com.sparta.myselectshop.service.KakaoService
.getKakaoUserInfo(KakaoService.java:114) ~[main/:na]
	at ...

하여튼 차분히 넘어가는 경우가 없다 ..
꼭 이렇게 사건을 만들까나 ㅠㅠ
NullPointerException이 발생했다.
어느 곳에서 오류가 발생했는지 바로 확인했는데, 결론은 내가 원하는 값이 null이기 때문에 받아올 수 없다는 오류였다.

2) 시도

메소드명이나, 필드명에서 실수를 했나 싶어서 다시 읽어보았지만
잘못 작성한 것이 없었다.
찬찬히 오류 내용을 다시 살펴보니, email에서 null이 발생하고 있었다.
처음에 카카오에서 로그인을 할 때, 필수 사항과 선택 사항 동의가 있었는데, 습관처럼 이메일 선택은 해제하는 바람에 그랬나 ..? 싶었는데 아무래도 그게 맞았던 것 같았다.
그래서 일단 웹사이트의 쿠키를 몇 번이고 지우고 다시 시도해봤으나 소용이 없었다..

3) 해결

이런 경우에는, 본인이 로그인 한 카카오 계정에 들어가서
설정 - 카카오 계정 - 계정 연결 탭의 연결된 서비스 에 들어가
새롭게 로그인 된 외부 서비스에 들어가서, 연결을 끊으면 된다.
그 후에 다시 로그인을 시도하면 원래대로 동의할 수 있는 창이 뜨게 된다.

이메일에 동의를 해주고 나서 다시 실행하니, nullpointerexception이 발생하지 않았다.

4) 배운 점

email에 동의를 하지 않으면, 사용자에 대해서 정말 email에 대한 정보를 가져올 수 없다는 점을 직접 확인해 볼 수 있었다.
만약 나처럼 email에 대한 선택 동의를 하지 않은 사람의 경우라면, 시스템 상에서 NullPointerException이 발생할 수 있으므로, 이런 경우에 대한 예외 처리를 꼭 해두어야 할 것 같다.

profile
(❁´◡`❁)

0개의 댓글