์ƒ์„ธ ์ปจํ…์ธ 

๋ณธ๋ฌธ ์ œ๋ชฉ

[Node.js] 10์žฅ ์›น API ์„œ๋ฒ„ ๋งŒ๋“ค๊ธฐ

22-23/22-23 Node.js

by dev otcroz 2022. 11. 24. 10:00

๋ณธ๋ฌธ

728x90

๐Ÿ” API ์„œ๋ฒ„ ์ดํ•ดํ•˜๊ธฐ

API : Application Programming Interface, ํ”„๋กœ๊ทธ๋žจ์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ—ˆ์šฉํ•˜๋Š” ์ ‘์ 

์›น API : ๋‹ค๋ฅธ ์›น ์„œ๋น„์Šค์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์ž์›์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋Š” ์ฐฝ๊ตฌ, URL์„ ํ†ตํ•ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“  ๊ฒƒ์ด ์›น API ์„œ๋ฒ„

๐Ÿ“Œ ํฌ๋กค๋ง (Crawling)

ํ‘œ๋ฉด์ ์œผ๋กœ ๋ณด์ด๋Š” ์›น ์‚ฌ์ดํŠธ์˜ ์ •๋ณด๋ฅผ ์ผ์ • ์ฃผ๊ธฐ๋กœ ์ˆ˜์ง‘ํ•ด ์ž์ฒด์ ์œผ๋กœ ๊ฐ€๊ณตํ•˜๋Š” ๊ธฐ์ˆ 

 

๐Ÿ” ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ ๋ฐ JWT๋ฅผ ์„ค์ •ํ•ด ๋ณด์ž

๋‹ค๋ฅธ ์„œ๋ฒ„์— NodeBird ์„œ๋น„์Šค์˜ ๊ฒŒ์‹œ๊ธ€, ํ•ด์‹œํƒœ๊ทธ, ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ JSON ํ˜•์‹์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ!

๋‹จ, ์ธ์ฆ๋œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ •ํ•ด์ง„ ํ• ๋‹น๋Ÿ‰ ์•ˆ์—์„œ API ํ˜ธ์ถœ์„ ํ—ˆ์šฉํ•œ๋‹ค

 

API๋Š” ํƒ€์ธ์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ธ ๋งŒํผ, ๋ณ„๋„์˜ ์ธ์ฆ ๊ณผ์ •์ด ํ•„์š”ํ•˜๋‹ค. 

์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” JWT ํ† ํฐ์œผ๋กœ ์ธ์ฆํ•˜์—ฌ ์‚ฌ์šฉ์ž๋ฅผ ๊ตฌ๋ณ„ํ•˜๊ธฐ๋„ ํ•œ๋‹ค.

 

๐Ÿ“Œ JWT (JSON Web Token)

JSON ํ˜•์‹์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ํ† ํฐ์ด๋‹ค.

Header (ํ—ค๋”) : ์„œ๋ช… ์ƒ์„ฑ์„ ์œ„ํ•ด ์–ด๋Š ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ• ์ง€ ์‹๋ณ„ํ•œ๋‹ค. 

PayRoad (ํŽ˜์ด๋กœ๋“œ) : ์ผ๋ จ์˜ ํด๋ ˆ์ž„์„ ํฌํ•จํ•˜๋ฉฐ, ์ผ๋ฐ˜์ ์œผ๋กœ ํฌํ•จ๋˜๋Š” ํ‘œ์ค€ ํ•„๋“œ์ธ 7๊ฐœ์˜ ๋“ฑ๋ก ํด๋ ˆ์ž„ ์ด๋ฆ„์„ ์ •์˜ํ•œ๋‹ค.

Signature (์„œ๋ช…) : ํ† ํฐ์„ ์•ˆ์ „ํ•˜๊ฒŒ ํ™•์ธํ•œ๋‹ค. ์„œ๋ช…์„ ํ†ตํ•ด ํ† ํฐ์ด ๋ณ€์กฐ๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

โœ… JWT ํ† ํฐ ์ธ์ฆ ๊ณผ์ •์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ

JWT ๋ชจ๋“ˆ์„ ์„ค์น˜ํ•˜๊ณ , API ์‚ฌ์šฉ์„ ์œ„ํ•ด ํ† ํฐ ๋ฐœ๊ธ‰ ํ›„ ์ธ์ฆ ๊ณผ์ •์ด ๋ฐ˜๋ณต์ ์œผ๋กœ ์ด๋ฃจ์–ด์ง€๊ธฐ์— ๋ฏธ๋“ค์›จ์–ด๋กœ ์ œ์ž‘ํ•œ๋‹ค.

  • POST ๋ผ์šฐํ„ฐ๋Š” ํ† ํฐ์„ ๋ฐœ๊ธ‰ํ•จ
  • GET ๋ผ์šฐํ„ฐ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ํ† ํฐ์„ ํ…Œ์ŠคํŠธํ•จ
  • ๋ผ์šฐํ„ฐ์˜ ์‘๋‹ต์€ ์ผ์ •ํ•œ ํ˜•์‹์„ ๊ฐ–์ถค

GET ๋ผ์šฐํ„ฐ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐœ๊ธ‰๋ฐ›์€ ํ† ํฐ์„ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ผ์šฐํ„ฐ์ด๋‹ค.

ํ† ํฐ์„ ๊ฒ€์ฆํ•˜๋Š” ๋ฏธ๋“ค์›จ์–ด๋ฅผ ๊ฑฐ์นœ ํ›„, ๊ฒ€์ฆ์ด ์„ฑ๊ณตํ–ˆ๋‹ค๋ฉด ํ† ํฐ์˜ ๋‚ด์šฉ๋ฌผ์„ ์‘๋‹ต์œผ๋กœ ๋ณด๋‚ธ๋‹ค.

 

POST ๋ผ์šฐํ„ฐ์—์„œ๋Š” ์ „๋‹ฌ๋ฐ›์€ ํด๋ผ์ด์–ธํŠธ ๋น„๋ฐ€ํ‚ค๋กœ ๋„๋ฉ”์ธ์ด ๋“ฑ๋ก๋๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ํ† ํฐ์„ ๋ฐœ๊ธ‰ํ•ด์„œ ์‘๋‹ตํ•œ๋‹ค.

ํ† ํฐ์€ ์•„๋ž˜ ์ฝ”๋“œ์™€ ๊ฐ™์ด jwt.sign ๋ฉ”์†Œ๋“œ๋กœ ๋ฐœ๊ธ‰๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

โœ… jwt.sign ๋ฉ”์†Œ๋“œ๋กœ ๋ฐœ๊ธ‰๋ฐ›๊ธฐ ์œ„ํ•ด์„œ

  • ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜๋Š” ํ† ํฐ์˜ ๋‚ด์šฉ
  • ๋‘ ๋ฒˆ์งธ ์ธ์ˆ˜๋Š” ํ† ํฐ์˜ ๋น„๋ฐ€ํ‚ค
  • ์„ธ ๋ฒˆ์งธ ์ธ์ˆ˜๋Š” ํ† ํฐ์˜ ์„ค์ •

๐Ÿ” ํ˜ธ์ถœ, SNS API ์„œ๋ฒ„

์ œ๊ณต๋˜๋Š” API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์„œ๋น„์Šค, 2์ฐจ ์„œ๋น„์Šค๋Š” NodeCat

API ์‚ฌ์šฉ์„ ์œ„ํ•ด ์‚ฌ์šฉ์ž ์ธ์ฆ์ด ๋˜๋Š”์ง€ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ผ์šฐํ„ฐ ์ œ์ž‘์ด ํ•„์š”ํ•จ

SNS ์„œ๋น„์Šค ์—ญ์‹œ ๋‚ด๊ฐ€ ์˜ฌ๋ฆฐ ์„œ๋น„์Šค๋ฅผ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜, ํ•ด์‹œํƒœ๊ทธ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ผ์šฐํ„ฐ๋ฅผ ์ œ์ž‘ํ•˜์—ฌ ์‚ฌ์šฉํ•จ

 

๐Ÿ” ์‚ฌ์šฉ๋Ÿ‰ ์ œํ•œ

์ธ์ฆ๋œ ์‚ฌ์šฉ์ž๋ผ ํ•ด๋„ ๊ณผ๋„ํ•˜๊ฒŒ API๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์„œ๋ฒ„์— ๋ฌด๋ฆฌ๊ฐ€ ๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— ์ผ์ • ๊ธฐ๊ฐ„ ๋‚ด์— API๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํšŸ์ˆ˜๋ฅผ ์ œํ•œํ•˜์—ฌ ํŠธ๋ž˜ํ”ฝ์„ ์ค„์ด๋Š” ๊ฒƒ์ด ์ข‹๋‹ค

๐Ÿ“Œ express-rate-limit ํŒจํ‚ค์ง€๋กœ ์ œ์ž‘ํ•œ๋‹ค!

  • apiLimiter ๋ฏธ๋“ค์›จ์–ด๋ฅผ ๋ผ์šฐํ„ฐ์— ๋„ฃ์œผ๋ฉด ๋ผ์šฐํ„ฐ์— ์‚ฌ์šฉ๋Ÿ‰ ์ œํ•œ์ด ๊ฑธ๋ฆฐ๋‹ค.
  • deprecated ๋ฏธ๋“ค์›จ์–ด๋Š” ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋˜๋Š” ๋ผ์šฐํ„ฐ์— ๋ถ™์—ฌ์ค„ ๊ฒƒ์ด๋‹ค.

๐Ÿ” CORS

๋ณ€๊ฒฝ ํ›„, http://localhost:4000์— ์ ‘์†ํ•˜๋ฉด Access-Control-Allow-Origin์ด๋ผ๋Š” ํ—ค๋”๊ฐ€ ์—†๋‹ค๋Š” ๋‚ด์šฉ์˜ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

์ด๋ ‡๊ฒŒ ์„œ๋ฒ„์—์„œ ์„œ๋ฒ„๋กœ ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ์™€ ๋‹ฌ๋ฆฌ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์„œ๋ฒ„๋กœ ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ๋Š” ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค.

์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ CORS(Cross-Origin Resource Sharing) ๋ฌธ์ œ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

 

CORS ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์‘๋‹ต ํ—ค๋”์— Access-Control-Allow-Origin ํ—ค๋”๋ฅผ ๋„ฃ์–ด์•ผ ํ•œ๋‹ค.

res.set ๋ฉ”์„œ๋“œ๋กœ ์ง์ ‘ ๋„ฃ์„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ npm์—๋Š” cors๋ผ๋Š” ํŒจํ‚ค์ง€๊ฐ€ ์ฒ˜๋ฆฌํ•ด์ค€๋‹ค.

NodeBird API ์„œ๋ฒ„์—์„œ ์„ค์น˜ํ•œ๋‹ค.

 


Node.js 

Editor : PeeP

728x90

๊ด€๋ จ๊ธ€ ๋”๋ณด๊ธฐ