brunch

매거진 PM 만들기

You can make anything
by writing

C.S.Lewis

by 이영 Mar 09. 2022

네이버 간편로그인 API 살펴보기

오픈 API, RESTful API

새로 다운로드 받은 앱에 회원가입 하기 전에, 우리는 위 사진과 유사한 간편로그인 버튼들을 마주한다. 자주 사용하는 서비스의 버튼을 누르고 개인정보 활용 동의를 하게 되면, 추가 회원 정보 외에 우리의 기본적인 정보는 자동으로 입력되거나 회원가입이 완료된다.


서비스를 사용하는 고객의 입장에선 어떤 서비스든 가입할 때마다 자신의 정보를 반복적으로 입력하는데 힘들기 때문일 수도 있지만, 서비스를 운영하는 입장에선 조금 더 사용자가 회원가입에 대한 부담없이 쉽게 접근할 수 있도록 진입장벽을 낮춰줄 수 있고, 다른 서비스의 회원의 정보를 단순히 빌리는 것이 아닌 실제 회원으로 관리할 수 있다.


오늘은 앞에서 설명한 간편로그인 회원가입 절차를 구체적으로 알아보려 한다. 이를 위해 API를 우선적으로 알아보고, 위 사진의 서비스 중 가장 앞에 위치한 네이버를 예로 어떤 구조로 이뤄져있는지 살펴보고자 한다.







Application

Programming

Interface


API는 응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을 통신하는 인터페이스다. 즉, 프로그램과 프로그램 사이에서 특정 정보를 정해진 규칙에 맞게 전달해주는 통신 매개체 역할을 하게 된다.


https://blog.wishket.com/


API를 통해 특정 정보에 대한 한 가지의 요청만 있다면 매우 쉽겠지만, 두 개, 세 개, 극단적으로 얘기하면 몇 백만개의 정보를 요청했을 때, 하나하나 입력해서 전달해주는 것만큼 비효율적인 것은 없을 것이다. 또, 응답자들이 각각의 방법대로 정보를 전달해준다면 그 것만큼 정신없는 상황이 없다.


그래서 이를 잘 정돈할 수 있게 표준화하고자, RESTful API라는 개념이 생겼다.






RESTful API



REST는 Representational State Transfer의 약자로, 웹 페이지의 리소스(이미지, 동영상, DB)에 고유한 URI를 부여하여 활용하는 것을 의미한다. 이미지와 같은 각각의 리소스마다 주소를 지정하고 정보를 통신하는 방법이며 보통 JSON, XML, RSS 등의 형태로 전달한다.


API CRUD와 RESTful API Method

C - CREAT 생성    ->  POST(입력)
R - READ 읽기      ->  GET(요청)
U - UPDATE 갱신  ->   PUT(부분), PATCH(전체)
D - DELETE 삭제  ->  DELETE(삭제)


API에서 Create, Read, Update, Delete 등의 연산을 RESTful API에선 GET, POST, PUT, PATCH, DELETE와 같은 Method를 사용하여 규격화하여 표현한다. 자세한 사용 방법은 아래 네이버 간편로그인 오픈 API에서 확인해보려 한다.





오픈 API


오픈 API는 말 그대로 누구나 사용할 수 있도록 공개된 API다. 보편적으로 효율적인 서비스 운영을 위해 내부에서만 활용하지만 서비스에서 갖고 있는 특정 기능 또는 콘텐츠를 외부에서 HTTP(웹 프로토콜)로 호출하여 사용할 수 있도록 공개하기도 한다.


예를 들면 구글맵, 간편로그인 등이 있다. 이를 공개하는 이유는 자사 서비스의 기능을 활용하게 함으로써 서비스의 저변을 넓히고 새로운 서비스를 창출할 수 있도록 제공한다. 공공데이터의 경우엔 데이터 활용 대회를 개최하여 정부는 현재 공개되어있는 분야별 데이터를 어떤 방식으로 활용할 수 있는지에 대해 힌트를 얻기도 한다.




네이버 간편로그인 오픈 API



구성

· 로그인 인증 요청 API
· 접근 토큰 발급 API
· 접근 토큰 갱신 API
· 접근 토큰 삭제 API

로그인 인증 요청 API는 웹과 앱에 네이버 로그인 화면을 호출하는 API다. 인증에 성공하게 되면 해당 API에서 받은 code값을 통해 발급 API을 호출하게 된다.


API 기본 정보

 · 로그인 인증 요청: GET/POST 메소드 사용, URL(https://nid.naver.com/oauth2.0/authorize)
 ·토큰 발급/갱신/삭제: GET/POST 메소드 사용, URL(https://nid.naver.com/oauth2.0/token)

기본정보 메소드에서 확인할 수 있듯이 RESTful API의 GET과 POST 메소드를 사용하고 있다. 따라서 간편로그인 오픈 API는 정보 입력, 정보 요청의 기능을 수행하며 삭제와 업데이트는 기능적으로 지원하지 않고 있다. 간편로그인 특성상 사용자가 직접 로그아웃 작업을 직접 수행해야한다. 연동해제의 경우 유효한 토큰일 경우 가능하지만, 유효하지 않은 경우에도 'success'값이 리턴되어 토큰이 유효한지 직접 검증하고 유효한 토큰으로 갱신하여 해제해야하는 한계를 갖고 있다.  


요청 변수


1. 로그인 인증 요청 API

요청 예시


(https)://nid.naver.com/oauth2.0/authorize?response_type=code&client_id=jyvqXeaVOVmV&

redirect_uri=http%3A%2F%2Fservice.redirect.url%2Fredirect&state=hLiDdL2uhPtsftcU



· 인증 요청 기본 URL: tps://nid.naver.com/oauth2.0/authorize?

· 요청 변수 1. response_type=code&

· 요청 변수 2. client_id=jyvqXeaVOVmV&

· 요청 변수 3. redirect_uri=http%3A%2F%2Fservice.redirect.url%2Fredirect&

· 요청 변수 4. state=hLiDdL2uhPtsftcU


변수를 제외한 모든 내용은 예시로 이루어져있다.


응답 예시

· (http)://콜백URL/redirect?code={code값}&state={state값}







2. 접근 코튼 발급/갱신/삭제 요청 API

요청 예시


1. 발급

(https)://nid.naver.com/oauth2.0/token?grant_type=authorization_code&

client_id=jyvqXeaVOVmV&client_secret=527300A0_COq1_XV33cf&

code=EIc5bFrl4RibFls1&state=9kgsGTfH4j7IyAkg


2. 갱신

(https)://nid.naver.com/oauth2.0/token?grant_type=refresh_token&client_id=jyvqXeaVOVmV&

client_secret=527300A0_COq1_XV33cf&refresh_token=c8ceMEJisO4Se7uGCEYKK1p52L93bHXLn


3. 삭제

(https)://nid.naver.com/oauth2.0/token?grant_type=delete&client_id=jyvqXeaVOVmV&

client_secret=527300A0_COq1_XV33cf&access_token=c8ceMEJisO4Se7uGCEYKK1p52L93bHXLnaoETis9YzjfnorlQwEisqemfpKHUq2gY&service_provider=NAVER


· 요청 기본 URL: (https)://nid.naver.com/oauth2.0/token?

· 기본 요청 변수 1. grant_type=authorization_code&

· 기본 요청 변수 2. client_id=jyvqXeaVOVmV&

· 기본 요청 변수 3. client_secret=527300A0_COq1_XV33cf&


· 발급 요청 변수 1. code=EIc5bFrl4RibFls1&

· 발급 요청 변수 2. state=9kgsGTfH4j7IyAkg


· 갱신 요청 변수 1. refresh_token=c8ceMEJisO4Se7uGCEYKK1p52L93bHXLn


· 삭제 요청 변수 1. access_token=c8ceMEJisO4Se7uGCEYKK1p52L93bHXLn

· 삭제 요청 변수 2. service_provider=NAVER


변수를 제외한 모든 내용은 예시이며, 접근 토큰의 발급/갱신/삭제에 따라 요청 변수가 달라지는 것을 확인할 수 있다.



응답 예시

1. 발급

{

     "access_token":"AAAAQosjWDJieBiQZc3to9YQp6HDLvrmyKC+6+iZ3gq7qrkqf50ljZC+Lgoqrg",     "refresh_token":"c8ceMEJisO4Se7uGisHoX0f5JEii7JnipglQipkOn5Zp3tyP7dHQoP0zNKHUq2gY",     "token_type":"bearer",     

"expires_in":"3600"

}


2. 갱신

{

     "access_token":"AAAAQjbRkysCNmMdQ7kmowPrjyRNIRYKG2iGHhbGawP0xfuYwjrE2WTI3p44SNepkFXME/NlxfamcJKPmUU4dSUhz+R2CmUqnN0lGuOcbEw6iexg",     

"token_type":"bearer",    

 "expires_in":"3600"

}


3. 삭제

{

     "access_token":"c8ceMEjfnorlQwEisqemfpM1Wzw7aGp7JnipglQipkOn5Zp3tyP7dHQoP0zNKHUq2gY",     

"result":"success"

}











API를 활용한 간편로그인 예시를 네이버를 통해 알아보았다. 오늘 글에서 언급한 API로 모든 것을 해결할 수 있는 것은 아니고, Android와 iOS, Windows, 웹 앱에 따른 개발 가이드가 있다. 사용하고자하는 형태에 맞춰 각각의 라이브러리를 활용하여 개발을 해야한다. 또, 개발을 마치고 서비스 콘텐츠가 적용이 가능한 유형인지, 로그인 적용 형태가 가이드에 맞춰져있는지, 개인 정보 제공 활용처 확인 등의 검수까지 마쳐야 정상적으로 활용할 수 있다.


서비스 기획에 앞서, 그럴일은 없겠지만, 이러한 부분부분들의 정책들을 이해해야 부적합한 형태로 개발이 되고 있는지 확인하고 검수할 수 있을 것이다. 이는 완성도 높은 서비스를 기획하는 기반으로 생각된다.










참고자료


매거진의 이전글 앱(App)의 다섯 가지 유형
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari