API의 기본, 실습을 통해 확실히 익히고 넘어가자
들어가며
개발자나 프로덕트 매니저에게 API는 꽤나 친숙한 용어이다. 소프트웨어 개발 과정에서 어떤 기능을 구현할 때, 많은 경우 기존 API를 활용하여 시간과 비용 노력을 절감할 수 있기 때문이다. 물론 요즘엔 비개발자에게도 많이 알려져있다. 많은 학생들이 공공 API를 활용하여 어플을 개발하기도 하고, 사이드 프로젝트를 진행한다. 오늘은 이 널리 알려졌다면 알려졌고 생소하다면 생소할 수도 있는 API에 대해 알아볼 예정이다.
API란?
API는 Application Programming Interface의 줄임말이다. API의 역할은 레스토랑의 점원을 떠올리면 된다. 점원은 손님에게 메뉴판을 제공하면 메뉴판 내에서 손님이 음식을 주문한다. 그럼 종업원은 주방에 주문받은 요리를 요청하고 요리사에게 완성된 요리를 받아 손님에게 전달한다.
API는 프로그램들이 서로 데이터를 주고 받으며 상호작용하는 것을 도와주는 매개체로 작용한다. 프로그램 상 점원과 같은 역할을 수행하는 것이다. 앞으로는 API의 개념이 헷갈릴 때면 음식점의 점원을 떠올려보자.
이를 반영하여 한마디로 정의해보자면, API는 소프트웨어가 다른 소프트웨어로부터 지정된 형식으로 요청, 명령을 받을 수 있는 수단이라 볼 수 있겠다. 예를 들어 날씨 정보를 제공하는 어플리케이션의 경우 기상청 서버의 API를 필요로 한다. 이 경우 날짜/위치/날씨정보 등 지정된 형식에 따라 데이터를 요청하면 기상청 서버로부터 'N˚C' 라는 결과값을 전달받을 수 있다.
웹서비스는 통상적으로 REST API 방식을 따른다. REST API란 REST 아키텍처의 제약 조건을 준수하는 API를 말한다. RESTful API는 HTTP 프로토콜을 기반으로 하며, 클라이언트와 서버 간의 통신을 위해 HTTP 메소드를 사용한다.
HTTP 메소드는 GET, POST, PUT, DELETE 등으로 이루어져 있다. 하나씩 개념을 훑고 넘어가보자.
GET
서버에서 리소스를 가져올 때 사용된다. 가져오기만 할 뿐 수정하지 않기 때문에 안전한(Safe) 메소드라고도 불린다. 예를 들어 브런치에서 글을 조회하는 것은 GET 메소드에 해당된다.
POST
서버에서 리소스를 생성하거나 업데이트할 때 사용된다. 예를 들어 브런치에 새로운 글을 작성하는 것은 POST 메소드를 활용하는 것에 해당된다.
PUT
기존 리소스를 업데이트 할 때 사용된다. 예를 들어 브런치에서 게시글을 수정할 때 PUT 메소드를 활용할 수 있다.
DELETE
서버에서 리소스를 제거할 때 사용된다. 브런치에서 글을 삭제할 때 DELETE 메소드를 사용하게 된다.
네이버 로그인 API
자 개념은 익혔으니 슬슬 실습으로 넘어가보자.
이를 위해 다양한 Open API를 제공하는 것으로 알려진 Naver Developers를 방문해보았다.
여기서 Open API란 하나의 웹사이트(이 경우 네이버)에서 자신이 가진 기능을 제3자가 이용할 수 있도록 공개한 API를 말한다. 오늘은 네이버의 다양한 Open API 중에서도 '네이버 아이디로 로그인(이하 네아로) 기능'과 관련된 API를 중점적으로 다룰 것이다. 현재 네아로 기능 API는 무료로 제공된다.
네이버 로그인은 OAuth 2.0 기반의 사용자 인증 기능을 제공해 네이버가 아닌 다른 서비스에서 네이버의 사용자 인증 기능을 이용할 수 있게 하는 서비스를 말한다. 쉽게 말해 흔히 간편 로그인이라고도 불리는 그것이다.
네이버 로그인 API은 여러가지 이점을 지닌다. 이를 이해관계자 별로 분류하면 다음과 같다.
네이버 로그인이 제공하는 서비스를 쭉 살펴보고 넘어가자.
1. 소셜 로그인
네이버 아이디를 통해 간편하게 서비스 이용이 가능하다. 사용자는 회원가입 단계의 번거로운 개인정보 입력절차, ID 비밀번호 생성 절차를 생략할 수 있다.
2. 로그인 연동 회원 프로필 조회
사업자는 손쉽게 네이버 로그인 연동 사용자의 프로필 정보를 얻을 수 있으며 서비스에 활용할 수 있다. 사용자의 이름, 메일 주소, 성별 연령대 등 인적 정보의 조회가 가능하다.
3. 네이버 API 활용 가능
네이버 로그인을 통해 사용 가능한 네이버의 다양한 오픈 API를 사용할 수 있다.
4. 서비스 이용 통계 제공
개발자센터의 로그인 통계 메뉴를 통해 간편하게 서비스 이용 통계를 활용할 수 있다.
5. 네이버 로그인 뱃지
애플리케이션 등록 시 네이버 검색결과에서 네이버 로그인 뱃지가 노출된다.
네이버 로그인 REST API 프로세스
먼저 네이버 로그인 API의 기본 정보를 살펴보자.
그림에서 볼 수 있듯이 네이버 로그인은 REST API 구조로 주 메서드는 GET과 POST를 활용하고 있다.
여기서 우리는 GET/POST가 함께 적혀있는 걸 확인할 수 있다. 이는 무엇을 뜻하는걸까?
네이버 로그인 인증을 요청할 때에 GET / POST 메소드를 함께 사용하는 이유는, API 요청에 필요한 데이터를 GET 메소드로 전송하고, 실제 로그인 인증 처리를 위한 민감한 정보는 POST 메소드로 전송하기 때문이다.
예를 들어 네이버 로그인 인증 API를 호출할 때, 인증 요청에 필요한 데이터 중에는 'client_id'와 'redirect_uri' 등이 있다. 이러한 데이터는 보안상 큰 문제가 없는 일반적인 정보이기 때문에 GET 메소드를 사용하여 전달한다.
그러나 인증 요청 이후에는 사용자의 아이디와 비밀번호와 같은 민감한 정보가 필요하고, 이러한 보안이 중요한 데이터는 POST 메소드를 사용하여 전송된다.
여기서 한 가지 짚고 넘어갈 점은 통상적으로 로그인과 같이 보안이 민감한 경우 POST 메소드를 활용한다는 것이다. 예를 들어 로그인의 경우 GET 메소드를 활용하면 요청 URL에 로그인 정보가 노출되지만, POST 메소드는 요청 Body 부분에 로그인 정보가 담겨져서 데이터가 노출되지 않는다. 쉽게 말해 POST를 활용해야 데이터가 외부에 노출되지 않음으로 보안적인 문제를 예방할 수 있게 된다. (이와 별개로 데이터를 암호화해야 보안상 안전해진다.)
다음은 본격적인 네이버 로그인 API 프로세스이다.
0. 사전 준비
애플리케이션 등록
클라이언트 ID 확인
API 권한 설정
사전준비가 끝나면, 네이버 로그인 인증을 요청할 수 있다.
1. 네이버 로그인 연동 URL 생성
네이버 로그인 버튼을 클릭하였을 때 이동할 네이버 로그인 URL 생성해야 한다. 유저가 네이버 로그인 연동에 동의하면 동의 정보를 포함한 유저 정보가 Callback URL로 전송된다.
2. 네이버 로그인 연동 결과 Callback 정보
네이버 로그인과 정보 제공 동의 과정이 완료되면 콜백 URL에 code값과 state 값이 URL 문자열로 전송된다. code 값은 접근 토큰 발급 요청에 사용된다. API 요청에 실패하면 에러 코드와 함께 에러 메시지가 전송된다.
3. 접근 토큰 발급 요청
Callback으로 전달받은 정보를 이용하여 접근 토큰을 발급받을 수 있다.
4. 접근 토큰을 이용하여 프로필 API 호출
접근 토큰을 이용하면 프로필 정보 조회 API를 호출하거나 오픈 API를 호출하는것이 가능하다.
사용자 로그인 정보를 획득하기 위해서는 프로필 정보 조회 API를 먼저 호출해야 한다.
이 단계에서 사용자 프로필 정보를 조회할 수 있다. 출력 결과는 사용자 연령대, 사용자 생일, 출생연도, 사용자 프로필 사진 URL, 휴대폰 번호 등의 정보를 포함한다.
5. 사용자 허용 프로필 권한 확인
접근 토큰을 이용하여 사용자가 제공을 허용한 프로필의 항목을 확인하는것이 가능하다.
특정 사용자 프로필 항목이 서비스 운영에 필수적으로 필요한 경우 프로필 조회에 앞서 먼저 제공 항목을 확인하는것이 좋다.
보다 자세한 내용은 NAVER Developers 의 네이버 로그인 개발가이드에서 확인이 가능하다. 이 정도면 충분히 알아본 것 같으니 이쯤에서 마쳐도 될 것 같다.
출처
https://developers.naver.com/docs/login/overview/overview.md
https://aws.amazon.com/ko/what-is/restful-api/