본문 바로가기

PMB 10기

[W7D3] 개발자의 암호문 엿보기 (Feat. 네이버 Open API)

개발자 암호문 

😃 개발1님 :
개발2님, 이거 원래 POST로 보냈을 때는 200이 왔는데, PUT으로 수정된 후에 500이 날아와요!

 

[개발자 암호문] 해독을 위해 오늘의 글에서는 API네이버 OPEN API에 대해 알아보고자 한다. 

 

('비전공자를 위한 이해할 수 있는 IT 지식/최원영 지음'에서 일부 내용을 발췌하였습니다.)


API란? 

API(Application Programing Interface)는 서로 다른 응용프로그램에서 데이터를 주고받기 위한 체계를 의미한다. 어떤 특정 사이트에서 특정 데이터를 공유할 경우 어떠한 방식으로 정보를 요청해야 하는지, 그리고 어떠한 데이터를 제공받을 수 있을지에 대한 규격들을 API라고 한다. 이는 요청을 보내는 쪽과 응답을 주는 쪽으로 나뉘어져 있다. 

 

예를들어, 스마트폰 메신저를 통해 '엄마에게 사진 보내줘'라는 요청을 보내면, 메신져는 이 요청을 받아 '엄마에게 사진 전송'으로 응답한다. 여기서 스마트폰은 클라이언트를 의미하고, 응답을 받는 메신져는 서버 컴퓨터의 역할을 담당한다.

이렇게 서로 요청과 응답을 주고 받기 위해서는 사전에 '여기로 요청하면 이러한 응답을 보낼게, 저기로 요청하면 저러한 응답을 보낼게'라고 하는 일종의 체계가 필요하며, 이 체계를 API라고 한다.

클라이언트 관점

클라이언트 관점, 즉 요청하는 쪽에서 들여다 보면 클라이언트는 서버에게 '무언가 해줘'라고 요청을 보낸다. 여기서 이요청은 CRUD로 불리는 크게 4가지 요소로 나눌 수 있으며, 데이터를 다룰 때 큰 틀에서 보면 대부분의 요청이 다음 4가지에 속한다. 

 

CRUD 주소
Create 올려줘 컴퓨터주소/ timelinecreate
Read 불러와줘 컴퓨터주소/timelineread   
Update 바꿔줘 컴퓨터주소/timelineupdate
Delete 지워줘 컴퓨터주소/timelinedelete

 

CRUD 요청은 CRUD 별 각각의 주소를 가지게 되는데, 이렇게 주소를 구성할 경우 너무 많은 주소가 생겨버려서 예상치 못한 버그가 발생할 수 있다. 이에 사람들은 조금 더 체계적으로 API를 관리하고 싶어 했고, 그 영향으로 체계적인 API라는 사회 운동이 탄생한다. 이러한 API를 REST(Representational State Transfer)한 API 즉, RESTful API 라고 한다. 

 

RESTful API 

RESTful API에서는 CRUD를 하나의 주소로 관리하며, 요청을 보낼 때 어떤 요청을 보냈는지 파악할 수 있는 일종의 스티커를 붙여서 함께 전송한다. 여기서 스티커는 현업에서 '메서드'라고 표현한다.  

 

CRUD 메서드
Create 올려줘 POST
Read 불러와줘 GET
Update 바꿔줘 PUT(전체)/PATCH(일부)
Delete 지워줘 DELETE

서버 관점

다음은 서버, 즉 요청을 받아 응답하는 쪽에서 들여다보면 응답은 크게 2가지로 나뉜다. '잘 됐어', '잘 안 됐어' 

그런데, 잘 됐다의 표현만 봐도 'good', 'OK', 'Success'등 다양하다 보니 개발자들은 일종의 체계가 필요하다고 생각했다. 이에, 응답 표현을 깔끔하게 숫자로 표현하기로 했다. 이러한 서버의 응답 코드를 '상태 코드'로 정리하였으며, 대표적인 상태코드로는 '404 Not Found'가 있다. 

디즈니의 404 Not Found 페이지

HTTP 상태 코드

응답코드 응답 설명
100번대 정보 요청을 받았으며 프로세스를 계속한다.
200번대 성공 요청을 성공적으로 받았으며 인식했고 수용하였다.
300번대 리다이렉션 요청 완료를 위해 추가 작업 조치가 필요하다.
400번대 클라이언트 오류 요청의 문법이 잘못되었거나 요청을 처리할 수 없다.
500번대 서버 오류 서버가 명백히 유효한 요청에 대해 충족을 실패했다.

API 개념 확장

API는 클라이언트와 서버 뿐만 아니라 다른 소프트웨어 간의 연결도 가능하게 만든다. 예를 들어, 이커머스 쇼핑몰 창업을 위해 쇼핑몰 어플을 개발 중인 상황이다. 쇼핑몰 회원 수를 늘리기 위해서는 간편한 가입 절차가 필수적이고, 가장 좋은 대안은 SNS를 통한 빠른 회원가입이다.

 

이럴 경우 API를 활용할 수 있다. API를 통해 서로 다른 프로그램이지만, 응답과 요청을 주고받으며 특정 데이터를 공유할 수 있다. 대표적으로 네이버, 카카오등 많은 SNS 회사들이 자사의 응용 소프트웨어나 웹 서비스의 프로그래밍적인 권한을 무료 또는 단계적 유료로 개방하고 있다. 이렇게 하나의 웹 사이트에서 자신이 가진 기능을 이용할 수 있도록 공개한 API를 오픈 API라고 한다. 


네이버 OPEN API 탐방

네이버 OPEN API 종류

네이버 오픈API는 인증 여부에 따라 로그인 방식 오픈 API비로그인 방식 오픈 API로 구분된다. 

로그인 방식
로그인 방식 오픈 API는 '네이버 로그인'의 인증을 받아 접근 토큰(access token)을 획득해야 사용할 수 있는 오픈 API입니다. API를 호출할 때 네이버 로그인 API를 통해 받은 접근 토큰의 값을 전송해야 합니다.

비로그인 방식
비로그인 방식 오픈 API는 HTTP 헤더에 클라이언트 아이디와 클라이언트 시크릿 값만 전송해 사용할 수 있는 오픈 API입니다. 네이버 로그인의 인증을 통한 접근 토큰을 획득할 필요가 없습니다.

 

API 설명 호출제한 구분
검색 네이버 블로그, 이미지, 웹, 뉴스, 백과사전, 책, 카페, 지식iN 등 검색 25,000회/일 비로그인
네이버 로그인 외부 사이트에서 네이버 로그인 기능 구현 없음 로그인
네이버 회원 프로필 조회 네이버 회원 이름, 이메일 주소, 휴대전화번호, 별명, 성별, 생일, 연령대, 출생연도, 프로필 조회 없음 로그인
Papago 번역 Papago 번역 인공신경망 기반 기계 번역 10,000글자/일 비로그인
CLOVA Face Recognition 입력된 사진을 입력받아 얼굴윤곽/부위/표정/유명인 닮음도를 리턴 1,000건/일 비로그인
데이터랩(검색어트렌드) 통합검색어 트렌드 조회 1,000회/일 비로그인
데이터랩(쇼핑인사이트) 쇼핑인사이트 분야별 트렌드 조회 1,000회/일 비로그인
캡차(이미지) 자동 입력 방지용 보안 이미지 생성 및 입력값 비교 1,000회/일 비로그인
캘린더 로그인한 사용자 캘린더에 일정 추가 가능 5,000회/일 로그인
카페 특정 네이버 카페 가입하기 50회/일 로그인
카페 네이버 회원이 가입한 카페 게시판에 글 쓰기 200회/일 로그인
단축URL 입력된 URL을 me2.do 형태의 짧은 URL로 변환 25,000회/일 비로그인
공유하기 네이버 블로그, 카페 공유하기 없음 비로그인

Papago 번역 API > 한글인명 - 로마자 변환 API 

실제 API 문서와 예시를 살펴보기 위해 파파고 번역 API 중 한글인명 - 로마자 변환 API를 활용했다.

한글로 된 이름을 로마자 표기로 변환해주는 API입니다. 현행 로마자 표기법을 따라 변환한 이름과 통계적으로 많이 사용되고 있는 로마자 이름도 함께 제안받을 수 있습니다.
예 : 강나래 -> Gang Narae, Kang Narae
예 : 강나래 -> Kang Narae, Gang Narae, Kang Nare, Kang Nalae, Gang Nare, Gang Nalae

사전 준비사항

한글 인명-로마자 변환을 사용하려면 먼저 네이버 개발자 센터에서 애플리케이션을 등록하고 클라이언트 아이디와 클라이언트 시크릿을 발급받아야 한다. 네이버 아이디가 있다면 누구나 발급받을 수 있다. 

네이버 개발자 센터 > 네이버 로그인 > 약관동의 > 계정 정보 등록 > 애플리케이션 등록> 클라이언트 정보 확인

애플리케이션 등록 > 클라이언트 정보 확인 단계 캡처

API 레퍼런스

요청 URL https://openapi.naver.com/v1/krdict/romanization
프로토콜  HTTPS
메서드 GET / POST

 

파라미터(변수) 타입 필수 여부 설명
query String Y 로마자로 변환할 한글 이름

요청 예시

import urllib.request

client_id = "<네이버에서 발급받은 CLIENT ID>"
client_secret = "<네이버에서 발급받은 CLIENT SECRET>"

encText = urllib.parse.quote("배수지")
url = "https://openapi.naver.com/v1/krdict/romanization?query=" + encText

request = urllib.request.Request(url)
request.add_header("X-Naver-Client-Id",client_id)
request.add_header("X-Naver-Client-Secret",client_secret)
response = urllib.request.urlopen(request)
rescode = response.getcode()

if(rescode==200):
    response_body = response.read()
    print(response_body.decode('utf-8'))
else:
    print("Error Code:" + rescode)

 

클라이언트 id, secret에 발급받은 정보를 입력한 후 파라미터 = 로마자로 변환할 한글 이름을 입력한다. 메서드는 Get 방식으로 입력된 한글 이름을 로마자로 변환하여 불러오게 된다. 여기서 성공 시 '200'코드 안 되었을 때는 에러코드로 응답 데이터가 반환된다. 

 

응답 성공 시 예시

{"aResult":[{"sFirstName":"\ubc30","aItems":[{"name":"Bae Sooji","score":"99"},{"name":"Bae Suji","score":"78"},{"name":"Bae Soojee","score":"27"},{"name":"Bae Sujee","score":"21"}]}]}

 

한글 이름 '배수지'에 대한 로마자 변환이 여러 대안으로 출력된다. 

 

API 활용

Papago 번역 API > 한글인명 - 로마자 변환 API를 활용하여 한글 이름을 입력하면 로마자로 자동 변환하여 추천해주는 기능을 개발해 볼 수 있다. 개인적으로 여행 예약 어플이나 채팅 어플 등에서 활용하면 좋을 것 같다는 생각을 했다. 그런데, 파파고에서 보다 다양한 언어를 다루고 있으니 로마자 이외에 언어로도 변환해주는 기능도 기대해 볼 수 있을 것 같다. 

 

개발자 암호문 해독

😃 개발1님 :
개발2님, 이거 원래 POST로 보냈을 때는 200이 왔는데, PUT으로 수정된 후에 500이 날아와요!

 

오늘의 글을 통해 개발자의 암호문을 어렴풋이 해독해볼 수 있을 것 같다. 개발1님은 API를 사용하는 입장이다. 즉, 요청하는 입장으로 프론트엔드 개발자일 가능성이 높다. 현재 어떠한 기능에 대해 클라이언트에서 서버요청할 때, POST (Create)PUT (Update)으로 수정한 상황이다. 그런데 POST로 요청을 보냈을 때는 '성공' 했는데, PUT으로 수정된 후에는 '서버 오류'가 난다는 것을 의미한다. 그럼 개발 2님은 아마 서버 담당자, 백엔드 개발자일 가능성이 높다.  

 

😃 프론트엔드 담당자 :
서버 개발자님, 이거 원래 POST로 보냈을 때는 응답이 성공으로 왔는데, PUT으로 수정된 후에 응답이 서버 오류로 날아와요!

북클럽 사랑해요

비전공자를 위한 이해할수 있는 IT 지식 / 최원영

 

오늘 글의 대부분은 '비전공자를 위한 이해할 수 있는 IT 지식'이라는 책을 읽고 작성했다. 사실 나는 굉~~~~~~장히 소설파라서 판타지, 만화, 유토피아, 디스토피아, 베르나르 베르베르, 아멜리 노통브 계열의 책을 좋아한다. 그래서인지 자기 계발 서적과 정보가 담긴 책과는 거리가 멀었다. 그런데, 부트캠프를 시작하며 동기들과 함께 한 북클럽 덕분에 이 책을 읽게 되었다. 물론 토론을 할 수는 없었지만, 그냥 함께 읽고 챕터를 체크하는 정도의 일도 나에게는 큰 도움이 되었다. 처음에는 과연 내가 읽을 수 있을까. 걱정도 했는데, 한 번 마음을 잡고 읽으니 책이 술술 읽혔다. 그 정도로 IT 지식이 하나 없는 무지한 나도 재밌게 읽을 수 있는 책이었다. 클라이언트와 서버의 개념도 아리송했는데, 책을 읽고 그 윤곽이 많이 잡혔다. (마침 오늘 로아 실리안 서버가 터졌음....) 

좋은 책을 경험하게 해준 코드스테이츠와 북클럽 동기분들께 심심한 감사를 전합니다 :)  

 

 

 

 

 

 

 

 

 

<이미지 출처 및 참고자료>

 

https://developers.naver.com/main/

 

NAVER Developers

네이버 오픈 API들을 활용해 개발자들이 다양한 애플리케이션을 개발할 수 있도록 API 가이드와 SDK를 제공합니다. 제공중인 오픈 API에는 네이버 로그인, 검색, 단축URL, 캡차를 비롯 기계번역, 음

developers.naver.com

https://geonlee.tistory.com/187

 

내가 쓰고 싶은 데이터 오픈 API에서 찾아보자!

👋 들어가며 최근 오픈 API를 정리하는 오픈소스 프로젝트 public-apis-korea를 만들고 있다. 기존에 있는 public-apis를 번역만 하자는 생각이었는데, 제대로 정리된 곳도 없는 것 같고, 국내에서도 네

geonlee.tistory.com

https://www.kimsungyoo.com/python-korean-name-to-english/

 

Python을 이용한 한글 이름을 영어로 변환하기

한글 이름의 영문 로마자 변환하기를 python으로 구현합니다.

www.kimsungyoo.com