탄산의 개발상자

[JSP-SERVLET] 네이버아이디로로그인 API (네아로) 사용하기 - 3

by 탄산박스

 https://devtansan-s-tocking.tistory.com/12

<네이버아이디로로그인 API (네아로) 사용하기 - 1> 링크

https://devtansan-s-tocking.tistory.com/16

<네이버아이디로로그인 API (네아로) 사용하기 - 2> 링크

2편에서는 API명세에 따라 callback.jsp의 내용을 재구성하고 access_token값을 추출하는 것 까지 했었다. 앞서 말했듯 나는 servlet에 전부 작성하였다.


1. api명세에 따라 url 생성

if(access_token != null) { // access_token을 잘 받아왔다면
	try {
    	// 이 안에 코드 작성
    } catch (Exception e) {
    	e.printStackTrace().
    }
}

이제 try 블럭 안에 남은 코드를 전부 작성해 줄 것이다.

아래부터는 try 블럭 안에 들어갈 코드라고 생각하고 읽으면 되겠다.

 

 String apiurl = "https://openapi.naver.com/v1/nid/me";
 URL url = new URL(apiurl);
HttpURLConnection con = (HttpURLConnection)url.openConnection();
con.setRequestMethod("GET");
con.setRequestProperty("Authorization", header);
int responseCode = con.getResponseCode();
BufferedReader br;
if(responseCode==200) { // 정상 호출
 br = new BufferedReader(new InputStreamReader(con.getInputStream()));
} else {  // 에러 발생
br = new BufferedReader(new InputStreamReader(con.getErrorStream()));
}
String inputLine;
StringBuffer res = new StringBuffer();
 while ((inputLine = br.readLine()) != null) {
res.append(inputLine);
}
br.close();

여기까지는 api명세에 따라 작성하면 된다. apiurl도 제공해주는 것이고 오타없이 따라서 잘 작성하면 된다. 토큰을 이용해 url을 생성하는 코드로서 네아로 뿐만이 아니라 구글, 카카오 같은 여타 소셜로그인 api도 이와 같은 코드를 작성해주어야 한다. 당연히 여기서 오타나 값을 잘못 받아오면 에러가 난다.

 

2. 정보 가져오기

이제 네아로로 로그인한 사용자의 정보를 가져와보자. 2편에서도 줄곧 강조하였듯, 네이버 개발자 센터에 있는 api명세를 꼼꼼히 읽어보면서 작업하도록 하자. 처음 사용하면 낯선 것이 당연하겠지만 결국 답은 api명세에 있으니 api명세를 다른 창에 띄워두고 코딩하길 추천한다.

api 명세 5. 호출결과 일부

네이버 개발자 센터의 api명세쪽을 훑다보면 위와 같은 부분을 볼 수 있다. 그렇담 붉은색 네모상자는 무엇이냐..

저 상자 안에 있는 '필드'들을 이용하면 사용자 정보를 가져올 수 있다!

 

JSONParser parsing = new JSONParser();
Object obj = parsing.parse(res.toString());
JSONObject jsonObj = (JSONObject)obj;
JSONObject resObj = (JSONObject)jsonObj.get("response");

//왼쪽 변수 이름은 원하는 대로 정하면 된다. 
//단, 우측의 get()안에 들어가는 값은 와인색 상자 안의 값을 그대로 적어주어야 한다.
String naverCode = (String)resObj.get("id");
String email = (String)resObj.get("email");
String name = (String)resObj.get("name");
String nickName = (String)resObj.get("nickname");

짠! 이러면 네아로 사용자의 정보를 이용할 수 있다. db에 insert를 할 수도 있고 사용자 정보 수정시 update를 할 수도 있다. db에 insert하거나 update하는 것은 매우 기본적인 것이므로 생략하겠다.

다만 위의 코드에 이어 insert 혹은 update 코드를 작성해주면 된다.

주의할 점은 주석으로도 써놓았지만 get()에 위 사진에 네모쳐놓은 값을 오타없이 그대로 써주어야 한다는 것이다.

naver에서 정해놓은 규칙이므로 지키지 않으면 당연히 값을 가져올 수 없다.

 

단, 사용자가 네이버 자체에 정보제공을 동의하지 않은 항목은 저렇게 해도 값을 가져올 수 없다. 따라서 이름과 같은 것은 따로 입력을 받게끔 처리를 하던가 위 코드처럼 nickname으로 대신 할 수 있도록 하는 처리가 필요하다.

나는 실명이 꼭 필요한 것이 아니었기에 nickname으로 대체할 수 있도록 처리하였다.

 

또 출력해보면 알겠지만 access_token값은 매우 길다. 그래서 나는 토큰값의 일부를 뚝 잘라 이용하였다.

//예시
String splitToken = access_token.substring(1, 3) + access_token.substring(40, 43);

위는 한 예시로 token값을 두 번 잘라내고 그걸 붙여 사용하는 식으로 작성한 것이다.

원하는 바에 따라 세 번을 substring해서 붙이든 아니면 한 번만 substring해서 잘라내든 token값을 이용하면 될 것 같다.

ajax를 이용하지 않은 jsp-servlet을 이용했으므로 모든 코드를 작성 한 후에 requestDispatcher로 원하는 view에 forward시키면 된다.

 

3. 결과

로그인 전

 

네아로 적용 예시

 

로그인 후

내가 만든 예시를 가져와봤다. 간단하게 네이버 아이디를 forward시켜서 페이지에 보이게 했다. 잘 적용했다면 jsp view파일에서 원하는 정보를 보이게 하는건 어려운 일이 아닐 것이다.

 


네이버아이디로로그인 API 적용법을 총 3편에 걸쳐 작성해보았다.

기록, 복습용으로 적기 시작한 것인데 실제로 도움이 많이 되었다.

적용한다고 고생 좀 했었는데 막상 작동하는거보면 뿌듯하기도 했었고... 기억이 새록새록하다.

 

시간이 허락한다면 이를 spring으로 가져와 적용해보고 싶은데 과연 할 수 있을진 두고봐야알 것 같다.

그럼 끝!

 

코딩은 재밌다 ㅎㅎ


별볼일 없는 글이긴 하지만..

혹~시나 이것을 참고하는 분이 있으시다면 댓글을 남겨주셔도 좋습니다.

 

사이트의 정보

탄산의 개발상자

탄산박스

활동하기