TASK/Daily

코드스테이츠 PMB 14기 - 네이버로그인 뜯어보기 W7D3

윤성현, 2022. 10. 11. 17:02

"요청하면 드려요 : API"

 

오지 않을 것 같던 7주 차가 거의 다 마무리되었다. 짧은 시간의 학습이었지만 많은 양의 개발 지식을 얕고 넓고 습득할 수 있는 시간이었다. 물론 이해한 건 많지 않지만 끌고 온 말에게 어찌 물을 먹이겠는가 스스로 먹으려 노력해야 할 뿐이다. 오늘 드디어 API라는 개념에 대해서 학습하였다.

 

뭐라 설명하면 좋을까, API

 

 

API의 사전적 의미부터 설명해볼까 한다. API는 application programming interface의 준말이다. 의미는 운영체제와 응용프로그램 사이의 통신에 사용되는 언어나 메시지 형식을 의미한다. 출처=네이버 지식백과

 

참으로 와닿지 않는 개념이다. 개인적으로 API라는 개념에 대해서 꽤나 오랫동안 이해하지 못했다. 눈으로 지식이 들어와 귀를 통해 날아가는 느낌이랄까? 지금은 어느 정도 이해를 하지만 여전히 어렵긴 마찬가지다.

 

응용프로그램 : 우리가 PC 화면으로 보는 버튼, 입력창들(간단히 말하자면 무엇을 요청할 수 있게끔 만들어놓은 창구다)

운영체제: 서버(요청에 따라 원하는 정보를 내어주는 매점 아줌마라고 생각하면 편하다. 참고로 데이터베이스는 매점 창고)

 

다시 말해 매점 창구를 통해 유저가 "무엇"을 요청하면 올바른 요청에 한해 매점 아줌마가 "무엇"을 내어주는 것이다.

여기서 중요한 것은 올바른 요청이다. 정해진 형식에 따라 요청하지 않으면 아줌마는 그것을 내어주지 않는다. 셔터를 내리는 경우도 있다.

 

사진=한겨례

 

나의 고등학교 시절을 예로 들어보자. 내가 다녔던 학교는 매점은 없지만 학생들이 자체적으로 운영하는 학생자치운영 매점이 존재하였다. 매점은 돈을 받지 않고 특정 경로를 통해 얻어진 쿠폰만을 받고 음식을 팔았는데 특정 경로는 이제 기억나지 않는다. 하지만 중요한 것은 쿠폰을 매점에 건네는 행위이다. 다르게 말하면 쿠폰을 주지 않으면 매점은 음식을 내어주지 않는다. 이것은 학생(클라이언트)과 매점(서버)의 약속이다.

 

다른 관점에서 설명해보자. 초콜릿은 쿠폰 두장이 필요하다. 반면 음료수는 쿠폰 한 장이 필요하다. 쿠폰을 한 장 주면서 초콜릿을 요청하면 매점이 초콜릿을 내어주겠는가, 욕을 하며 내쫓을 가능성이 더 높다. 다행인지 컴퓨터는 차분하게 틀렸다는 의사를 전달한다.

 

이처럼 클라이언트와 서버가 상요 작용하기 위해 정해놓은 규칙 따위를 API라고 명명하였다. 어려우면 그냥 은행 창구로 이해하자.


1. OPEN API 이해하기

 

사진=오픈플랫폼

 

오늘의 과제로 오픈 API를 분석해보는 시간을 가져볼까 한다.

API도 벅차게 이해했는데 앞에 뭐가 또 들러붙었다. OPEN API는 뭐지?

 

쉽게 말해 오픈된 API

 

쉽게 설명하자면 다양한 형태의 은행 창구를 끌어다 쓴다고 이해하면 쉽게 이해할 수 있다. 만약 개발자가 위치기반 맛집 탐색 서비스를 만들려고 한다면 위치를 특정할 수 있는 응용프로그램을 개발해야 한다. 하지만 네이버, 구글 등에서 지도 API를 사용한다면 쉽게 위치 응용프로그램을 구현할 수 있다.

 

네이버와 카카오, 구글 등은 현재 다양한 형태와 종류의 API를 무료로 제공하고 있다. 다만 특정 API의 경우에는 호출량에 제한을 두거나 사용량을 초과하면 유료로 전환되는 경우도 있다.

 

만약 API가 라이브러리와 함께 제공되면 소프트웨어 개발도구(SDK: Software Development Kit)라고 한다.

출처=네이버 지식백과

 

 

 

2. 네이버 개발자 센터 뜯어보기

 

사진=네이버 디벨로퍼즈

 

좋다 개념 정리는 끝났다. 이제 네이버 개발자 센터로 쳐들어가서 OPEN API가 무엇인지 살펴보자.

 

네이버개발자센터는 [네이버 Developers]라는 브랜드 네임으로 운영되고 있다.

api 소개 탭을 들어가면 네이버에서 제공하는 다양한 오픈 api의 목록을 열람할 수 있다.

 

https://developers.naver.com/products/intro/plan/plan.md

 

네이버 오픈 API 목록 - INTRO

네이버 오픈 API 목록 NAVER Developers - API 소개 네이버 오픈API 목록 및 안내입니다. 네이버 오픈 API 목록 API명 설명 호출제한 검색 네이버 블로그, 이미지, 웹, 뉴스, 백과사전, 책, 카페, 지식iN 등 검

developers.naver.com

 

우측을 보면 호출 제한이라는 테이블이 마련되어 있는데 이는 각 api별로 할당된 수용 호출량이다. 따라서 기재되어있는 호출량을 넘기면 해당 api의 사용이 제한된다. 이제부터 네이버에서 제공하는 오픈 API의 특징들을 알아보자.

 

로그인 방식/비로그인 방식

 

네이버 오픈 API는 크게 로그인 방식 API와 비로그인 방식 API로 나누어진다. 로그인 방식 API의 경우, "네이버 로그인"의 인증을 받아 접근 토근을 획득해야 사용할 수 있는 오픈 API이다. 한마디로 유저가 네이버 로그인을 통하여 토근을 획득해야 해당 API를 사용할 수 있다는 의미이다. [네이버 로그인], [카페], [캘린더]등의 API가 있으며 주로 로그인을 통해 개인화된 정보를 다룰 때 사용하는 API이다.

 

비로그인 방식 오픈 API의 경우 HTTP 헤더에 클라이언트 아이디와 클라이언트 시크릿 값만 전송하여 사용할 수 있는 오픈 API 다. 네이버 로그인을 통한 접근 토근을 획득할 필요가 없다. 다시 말해 네이버 로그인하지 않아도 유저가 특정 기능을 사용할 수 있다는 의미이다.

 

API 게이트웨이

 

네이버 오픈 API를 사용하기 위해서는 네이버 API 게이트웨이의 개념에 대해서 알아둘 필요가 있다. 네이버 오픈 API는 대부분 https://openapi.naver.com/ 서버를 통해 API를 호출한다. 이 서버가 바로 API 게이트웨이 서버이다. API 게이트웨이는 오픈 API 호출이 들어오면 API 호출이 정확한지, 인증된 사용자의 호출인지, 호출 허용량이 맞는지 등을 확인한 다음 실제 각 API 서버를 호출한 결괏값을 반환한다. 잘못된 호출이 들어오면 오류 코드와 오류 메시지를 반환한다. 쉽게 말해 네이버 전용 오픈 API 검증 허브라고 이해하면 된다.

 

클라이언트 아이디/클라이언트 시크릿

 

2016년 이전에는 네이버 오픈 API 이용 시 API별 키를 발급받았다. API 키는 인증 사용자임을 입증하는 고유한 텍스트 문자열이다. API를 호출 시, API 키를 API게이트웨이 서버에 함께 전송하여 인증 사용자임을 입증하였다. 2016년 1월 26일 이후 API 키 형식은 더 이상 사용하지 않고 클라이언트 아이디/클라이언트 시크릿을 사용하게 되었다.

 

이는 네이버 오픈 API 사용자가 인증된 사용자인지를 확인하는 고유한 아이디와 비밀번호이다. 네이버 디벨로퍼스 - 애플리케이션 등록 메뉴에서 애플리케이션을 등록하면 발급되는 값이다.

 

네이버 로그인 API를 통해 알아보자

 

지금까지 네이버 오픈 API의 특징들에 대해서 간략히 소개하였다. 이제부터 대표적인 네이버 오픈 API인 "네이버 로그인"을 통하여 네이버 오픈 API가 어떻게 제품과 연동되는지 알아보자     ※ 네이버 디벨로퍼스의 설명을 참고하였습니다.

 

네이버 로그인 API 사용절차

 

1. 제품 내의 네이버 아이디로 로그인 버튼을 클릭

2. 모바일의 경우 네이버 앱 간편 로그인 기능으로 로그인, 앱 미설치의 경우 인앱 브라우저 실행 및 네이버 로그인 화면으로 이동

3. 아이디와 비밀번호를 입력하여 로그인, 최초 로그인 시 사용자 정보 제공 동의 화면으로 이동

4. 정보제공 동의 시, 콜백 URL로 접근 토근이 발급 - 네이버 로그인 완료 및 오픈 API 활용 가능


지금부터 제품 내에 네이버 로그인 API가 어떻게 적용되는지 알아보자

 

네이버 로그인이 제품 내에 적용되기 위해서는 우선 네이버 디벨로퍼스에 애플리케이션을 등록해야 한다.

내 애플리케이션 메뉴에서 내가 등록한 애플리케이션의 Client ID와 Client Secret 값을 확인할 수 있다.

 

API 권한 관련

 

네이버 로그인을 이용하면 네이버에서 제공하는 로그인 오픈 API를 활용하여 서비스를 개발할 수 있다.

오픈 API를 이용하기 위해 애플리케이션에서 API를 호출할 수 있도록 권한을 설정해야 한다.

API 권한 설정: 내 애플리케이션'의 'API 권한 관리' 탭에서 사용하고자 하는 API에 대하여 권한을 설정할 수 있다.

 

로그인 연동을 진행하기 위해 네이버 로그인 버튼을 클릭하였을 때 이동할 "네이버 로그인 URL"을 우선적으로 생성한다.

해당 과정에서 유저는 네이버 로그인 인증&로그인 연동 동의 과정을 수행할 수 있다.

사용자가 로그인 연동에 동의하면 동의 정보를 포함하여 CALLBACK URL로 전송된다.

 

요청문 샘플

https://nid.naver.com/oauth2.0/authorize?response_type=code&client_id=CLIENT_ID&state=STATE_STRING&redirect_uri=CALLBACK_URL

 

네이버 로그인 인증 요청 API 호출 시,

- 유저가 네이버에 비로그인 상태라면 네이버 로그인 화면으로 이동

- 유저가 네이버 로그인 상태라면 기본 정보 제공 동의 화면으로 이동

- API 요청 실패 시에는 에러 코드와 에러 메시지가 전송

 

Callback 응답 정보

  • API 요청 성공 시 : http://콜백 URL/redirect? code={code값}&state={state값}
  • API 요청 실패 시 : http://콜백 URL/redirect? state={state값}&error={에러코드값}&error_description={에러 메시지}

 

사진=네이버디벨로퍼스

 

접근 토큰 발급 요청

 

Callback으로 전달받은 정보를 이용, 접근 토큰을 발급받을 수 있다. 접근 토큰은 사용자가 인증을 완료했다는 것을 보장하는 인증 정보이 접근 토근을 이용하여 프로필 api 혹은 오픈 api를 호출하는 것이 가능하다.

 

Callback으로 전달받은 'code' 값을 이용하여 '접근 토큰 발급 API'를 호출하게 되면 API 응답으로 접근 토큰에 대한 정보를 받을 수 있다. 'code' 값을 이용한 API 호출은 최초 1번만 수행할 수 있으며 접근 토큰 발급이 완료되면 사용된 'code'는 더 이상 재사용할 수 없다.

 

사진=네이버디벨로퍼스

요청문 샘플

https://nid.naver.com/oauth2.0/token?grant_type=authorization_code&client_id=jyvqXeaVOVmV&client_secret=527300A0_COq1_XV33cf&code=EIc5bFrl4RibFls1&state=9kgsGTfH4j7IyAkg

회고: API 쉽지 않다.

 

이해를 못 하는 이유가 있었던 것일까? 조금이나마 이해가 됐다 싶다가도 정신을 차리면 방향을 잃고 헤매고 있으니 죽을 맛이다. 역시 입 개발자가 되는 것은 멀고도 험한 일인 것일까... 열심히 공부하자