λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ‘¨‍πŸ’» web.dev/node

Node.js ν™˜κ²½μ—μ„œ 넀이버 Open API ν™œμš©ν•˜κΈ°

by HandHand 2021. 3. 2.

넀이버 μ˜€ν”ˆ APIλž€?

λ„€μ΄λ²„λŠ” κ°œλ°œμžλ“€μ΄ ν™œμš©ν• μˆ˜μžˆλ„λ‘ λ‹€μ–‘ν•œ κΈ°λŠ₯듀을 μ˜€ν”ˆ API ν˜•νƒœλ‘œ μ œκ³΅ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

이번 ν¬μŠ€νŒ…μ—μ„œλŠ” 넀이버 Open API에 λŒ€ν•œ μ„€λͺ…κ³Ό 이λ₯Ό ν™œμš©ν•  수 μžˆλŠ” 방법듀에 λŒ€ν•΄ μ†Œκ°œν•˜κ² μŠ΅λ‹ˆλ‹€.

넀이버 개발자 ν™ˆνŽ˜μ΄μ§€μ— 가보면 λ‹€μŒκ³Ό 같이 μ˜€ν”ˆ APIλ₯Ό μ •μ˜ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

넀이버 μ˜€ν”ˆAPIλŠ” 넀이버 ν”Œλž«νΌμ˜ κΈ°λŠ₯을 μ™ΈλΆ€ κ°œλ°œμžκ°€ μ‰½κ²Œ μ΄μš©ν•  수 있게 μ›Ή λ˜λŠ” SDK ν˜•νƒœλ‘œ κ³΅κ°œν•œ κΈ°μˆ λ“€μž…λ‹ˆλ‹€.


μ‰½κ²Œ 말해 λ„€μ΄λ²„μ—μ„œ μ™ΈλΆ€ κ°œλ°œμžλ“€μ΄ μžμ‚¬μ˜ λ‹€μ–‘ν•œ μ„œλΉ„μŠ€λ“€μ„ μ΄μš©ν•  수 μžˆλ„λ‘ 외뢀에 κ³΅κ°œν•΄λ†“μ€ κ²ƒμž…λ‹ˆλ‹€.

μ €ν¬λŠ” ν•΄λ‹Ή APIλ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄ 주어진 ν˜•μ‹μ— 맞좰 μš”μ²­μ„ λ³΄λ‚΄μ£ΌκΈ°λ§Œ ν•˜λ©΄ λ©λ‹ˆλ‹€.

넀이버 개발자 ν™ˆνŽ˜μ΄μ§€μ— κ°€λ©΄ ν™œμš© κ°€λŠ₯ν•œ μ˜€ν”ˆ API듀을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

넀이버 μ˜€ν”ˆ API ν™œμš©ν•˜κΈ°

넀이버 μ˜€ν”ˆ APIλŠ” 크게 두 κ°€μ§€λ‘œ λΆ„λ₯˜λ©λ‹ˆλ‹€.

  • [1] 둜그인 방식
  • [2] λΉ„λ‘œκ·ΈμΈ 방식

둜그인 방식은 νšŒμ› 정보가 ν•„μš”ν•œ API(νšŒμ› 정보 쑰회, λΈ”λ‘œκ·Έ 및 카페, 개인 일정 κ΄€λ ¨ κΈ°λŠ₯)듀을 μ‚¬μš©ν•  λ•Œ μ΄μš©ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€.
ν•΄λ‹Ή APIλ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ¨Όμ € λ‘œκ·ΈμΈμ„ 톡해 인증과정을 거친 ν›„ λ°œκΈ‰λ°›μ€ 토큰을 API μš”μ²­μ— ν¬ν•¨μ‹œμΌœμ€˜μ•Ό ν•©λ‹ˆλ‹€.

λ°˜λŒ€λ‘œ λΉ„λ‘œκ·ΈμΈ 방식은 λ³„λ„μ˜ 인증 과정없이 κ°œλ°œμžκ°€ HTTP 헀더에 ν΄λΌμ΄μ–ΈνŠΈ 정보λ₯Ό ν•¨κ»˜ μ „μ†‘ν•˜κΈ°λ§Œ ν•˜λ©΄ μ΄μš©ν•  수 μžˆλŠ” λ°©μ‹μž…λ‹ˆλ‹€.

πŸ’‘ ν΄λΌμ΄μ–ΈνŠΈ 정보?

넀이버 μ˜€ν”ˆ APIλ₯Ό ν™œμš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” 기본적으둜 μ›ν•˜λŠ” API에 λŒ€ν•΄ μ‚¬μš© 신청이 ν•„μš”ν•©λ‹ˆλ‹€.
μ΄λ•Œ μ‹ μ²­ ν›„ λ°œκΈ‰λ°›μ€ μœ μ € 정보λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€.


파파고 μ˜€ν”ˆ API

넀이버 파파고 μ˜€ν”ˆ APIλŠ” μžμ—°μ–΄ 처리 κ΄€λ ¨ κΈ°μˆ λ“€μ„ κ°œλ°œμžλ“€μ΄ μ‰½κ²Œ μ΄μš©ν•  수 μžˆλ„λ‘ μ˜€ν”ˆ API둜 μ œκ³΅ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

이번 ν¬μŠ€νŒ…μ—μ„œλŠ” 파파고의 λ²ˆμ—­ κΈ°λŠ₯을 ν™œμš©ν•˜μ—¬ 주어진 ν…μŠ€νŠΈλ₯Ό λ²ˆμ—­ν•œ λ’€ κ²°κ³Όλ₯Ό 확인해보도둝 ν•˜κ² μŠ΅λ‹ˆλ‹€.

μš°μ„  넀이버 파파고 API ν™ˆνŽ˜μ΄μ§€λ‘œ κ°€μ„œ API 이용 신청을 ν•΄μ•Όν•©λ‹ˆλ‹€.

이용 신청을 λˆ„λ₯΄λ©΄ λ‹€μŒκ³Ό 같은 μ‹ μ²­ 폼을 μž‘μ„±ν•˜κ²Œ λ©λ‹ˆλ‹€.

  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 이름 : 파파고 μ˜€ν”ˆ APIλ₯Ό ν™œμš©ν•  μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 이름 μž‘μ„±
  • μ‚¬μš© API : ν•΄λ‹Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ‚¬μš©ν•  μ˜€ν”ˆ API듀을 μ„ νƒν•©λ‹ˆλ‹€. (볡수 선택 κ°€λŠ₯)
  • λΉ„λ‘œκ·ΈμΈ μ˜€ν”ˆ API μ„œλΉ„μŠ€ ν™˜κ²½ : λ„€μ΄λ²„μ—κ²Œ μ–΄λ–€ ν™˜κ²½μ—μ„œ ν•΄λ‹Ή APIκ°€ ν™œμš©λ˜λŠ”μ§€ μ•Œλ €μ€λ‹ˆλ‹€.

μ €λŠ” ν˜„μž¬ 둜컬 ν™˜κ²½μ—μ„œ ν…ŒμŠ€νŠΈλ₯Ό μ§„ν–‰ν•œ ν›„ WEBν™˜κ²½μ—μ„œ 이λ₯Ό ν™œμš©ν•  κ²ƒμ΄λ―€λ‘œ

λΉ„λ‘œκ·ΈμΈ μ˜€ν”ˆ API ν™˜κ²½μ„ WEB 둜 ν•˜κ³  URL둜 둜컬 ν˜ΈμŠ€νŠΈμž„μ„ λ‚˜νƒ€λ‚΄λŠ” https://localhost:3000/ λ₯Ό μž…λ ₯ν•˜κ³  신청을 λ§ˆμΉ˜κ² μŠ΅λ‹ˆλ‹€.

λͺ¨λ“  신청을 λ§ˆλ¬΄λ¦¬ν•˜λ©΄ μœ„μ™€ 같이 ν΄λΌμ΄μ–ΈνŠΈ ID와 Passwordλ₯Ό λ°œκΈ‰ν•΄μ€λ‹ˆλ‹€.

μ΄ν›„μ˜ μƒ˜ν”Œ μ½”λ“œμ—μ„œ 이 정보λ₯Ό ν™œμš©ν•©λ‹ˆλ‹€.

μƒ˜ν”Œ μ½”λ“œ μž‘μ„±

이제 ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μž‘μ„±ν•˜κ³  ν•΄λ‹Ή APIκ°€ 잘 λ™μž‘ν•˜λŠ”μ§€ ν™•μΈν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

이λ₯Ό μœ„ν•΄ μƒˆλ‘œμš΄ ν”„λ‘œμ νŠΈλ₯Ό μƒμ„±ν•œ λ’€ package.json을 μƒμ„±ν•˜κ³  request λͺ¨λ“ˆμ„ μ„€μΉ˜ν•©λ‹ˆλ‹€.

ν”„λ‘œμ νŠΈ npm μ„€μ • (package.json 생성)

npm init

request λͺ¨λ“ˆ μ„€μΉ˜

npm i request

request λͺ¨λ“ˆμ€ http 톡신을 μœ„ν•œ npm νŒ¨ν‚€μ§€μž…λ‹ˆλ‹€.

sample.js

const request = require("request");

// api μš”μ²­ λ³€μˆ˜
const api_url = "https://openapi.naver.com/v1/papago/n2mt";
const client_id = "your-client-id";
const client_secret = "your-client-secret-key";
const query = "papago open api translation success!";

// api μš”μ²­ μ˜΅μ…˜ (λ²ˆμ—­: μ˜μ–΄ -> ν•œκΈ€)
const options = {
  url: api_url,
  form: { source: "en", target: "ko", text: query },
  headers: {
    "X-Naver-Client-Id": client_id,
    "X-Naver-Client-Secret": client_secret,
  },
};

// api μš”μ²­ 보내고 콜백으둜 κ²°κ³Ό λ°›κΈ°
request.post(options, function (error, response, body) {
  if (!error && response.statusCode == 200) {
    console.log(JSON.parse(body));
  } else {
    console.log("error = " + response.statusCode);
  }
});

μ•žμ„œ μ„€μΉ˜ν•œ request λͺ¨λ“ˆμ„ 톡해 API μ£Όμ†Œλ‘œ http μš”μ²­μ„ 보내면 ν•΄λ‹Ή APIκ°€ ν΄λΌμ΄μ–ΈνŠΈ 검증을 ν•œ λ’€ 결과값을 JSON ν˜•μ‹μœΌλ‘œ λ°˜ν™˜ν•΄μ€λ‹ˆλ‹€.

μ΄λ•Œ request λͺ¨λ“ˆμ˜ post ν•¨μˆ˜λŠ” 비동기 λ°©μ‹μœΌλ‘œ μˆ˜ν–‰λ˜λ―€λ‘œ 콜백 ν•¨μˆ˜λ₯Ό λ“±λ‘ν•˜μ—¬ 결과값을 ν™•μΈν•©λ‹ˆλ‹€.

κ²°κ³Ό 확인

λ§Œμ•½ μ„±κ³΅μ μœΌλ‘œ μš”μ²­μ΄ μ „μ†‘λ˜λ©΄ μœ„μ™€ 같은 κ²°κ³Όλ₯Ό 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

주어진 μž…λ ₯ 값에 따라 λ²ˆμ—­μ΄ μ˜¬λ°”λ₯΄κ²Œ μ§„ν–‰λœ 것을 μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.

주의!

request λͺ¨λ“ˆμ€ 2020λ…„ 2μ›” 11일 λΆ€λ‘œ deprecated λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

이번 μ˜ˆμ œμ—μ„œλŠ” κ°„λ‹¨ν•œ ν…ŒμŠ€νŠΈλ₯Ό μœ„ν•΄ request λͺ¨λ“ˆμ„ μ‚¬μš©ν–ˆμ§€λ§Œ

μ‹€μ œ μ„œλΉ„μŠ€μ—μ„œλŠ” http 톡신을 μœ„ν•΄ λ‹€λ₯Έ νŒ¨ν‚€μ§€λ₯Ό μ‚¬μš©ν•˜λŠ” 것을 κ²€ν† ν•  ν•„μš”κ°€ μžˆμŠ΅λ‹ˆλ‹€.

request λͺ¨λ“ˆ deprecated κ΄€λ ¨ 곡지

request λͺ¨λ“ˆμ„ λŒ€μ²΄ν•  수 μžˆλŠ” νŒ¨ν‚€μ§€λ“€

마치며

넀이버 뿐만 μ•„λ‹ˆλΌ λ‹€μ–‘ν•œ κΈ°μ—… ν˜Ήμ€ κ³΅κ³΅κΈ°κ΄€μ—μ„œ μ œκ³΅ν•˜λŠ” μ˜€ν”ˆ APIλ₯Ό ν™œμš©ν•˜λ©΄ 훨씬 더 λ‹€μ–‘ν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 개발이 κ°€λŠ₯ν•΄μ§‘λ‹ˆλ‹€.

본인이 ν•„μš”ν•œ APIλ₯Ό 검색해본 λ’€ λ§ˆμ°¬κ°€μ§€ λ°©λ²•μœΌλ‘œ ν™œμš©ν•˜λ©΄ 될 κ²ƒμž…λ‹ˆλ‹€.

참고 자료

λ°˜μ‘ν˜•

πŸ’¬ λŒ“κΈ€