How to use Postman? ๐Ÿ™Œ๐Ÿป(feat: express.js)

Yoonminยท2024๋…„ 12์›” 11์ผ
1

HTTP, WEB

๋ชฉ๋ก ๋ณด๊ธฐ
1/2
post-thumbnail

โœ… Postman ์ด๋ž€?

ํ•ด๋‹น ๊ธ€์€ ์„ค์น˜, ์ ‘์† ๋ฐฉ๋ฒ•์ด ์ฃผ๊ฐ€ ์•„๋‹Œ postman ์ฝ”๋“œ ์—ฐ๊ฒฐ, ์š”์ฒญ ํ™•์ธ๋“ฑ์„ ์œ„์ฃผ๋กœ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค! :)

"API์˜ ๊ฐœ๋ฐœ์„ ๋น ๋ฅด๊ณ  ์‰ฝ๊ฒŒ, ๊ฐœ๋ฐœ๋œ API๋ฅผ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๊ณ ,ํŒ€์›๋“ค๊ฐ„์˜ ๊ณต์œ ๋ฅผ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค."

โœ… API ๋„Œ ๋ˆ„๊ตฌ?๐Ÿง

API๋ž€ Application Programming Interface์˜ ์•ฝ์ž์ž…๋‹ˆ๋‹ค.

  • Application

API์˜ ๋งฅ๋ฝ์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋ผ๋Š” ๋‹จ์–ด๋Š” ๊ณ ์œ ํ•œ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ ๋ชจ๋“  ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

  • Interface

์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋‘ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ„์˜ ์„œ๋น„์Šค ๊ณ„์•ฝ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

interface๋ฅผ ์‰ฝ๊ฒŒ ์„ค๋ช…ํ•ด๋ณด๋ฉด ํ’€์–ด๋ณด๋ฉด, ์–ด๋–ค ๋‘ ๋งค๊ฐœ์ฒด๊ฐ€ ์ƒํ˜ธ์ž‘์šฉํ•˜์—ฌ ์˜ํ–ฅ์„ ๋ผ์น  ์ˆ˜ ์žˆ๋Š” ์–ด๋– ํ•œ ์š”์†Œ๋“ค์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.์š”์†Œ๋“ค์˜ ์˜ˆ์‹œ๋กœ ์‚ฌ๋žŒ๊ณผ ์‚ฌ๋žŒ, ๊ธฐ๊ณ„์™€ ๊ธฐ๊ณ„, ์‚ฌ๋žŒ๊ณผ ๊ธฐ๊ณ„์˜ ๊ด€๊ณ„๋“ฑ์„ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์‹œ๋กœ ์šฐ๋ฆฌ๊ฐ€ ์ปดํ“จํ„ฐ์˜ ๊ธ€์„ ์ž…๋ ฅํ•˜๊ณ  ์‹ถ์„๋•Œ, ํ‚ค๋ณด๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ๊ธ€์„ ์ž…๋ ฅํ•˜๊ฒŒ ๋  ๊ฒƒ ์ž…๋‹ˆ๋‹ค.
์ด๋•Œ ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•œ ํ‚ค๋ณด๋“œ๊ฐ€ ์‚ฌ๋žŒ๊ณผ ์ปดํ“จํ„ฐ ์‚ฌ์ด์— ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋˜๋Š” ๊ฒ๋‹ˆ๋‹ค.

  • API

์ด ๊ณ„์•ฝ์€ ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‘ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๋ฐฉ๋ฒ•์ด๋ž€๋œป์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
์ด๋•Œ๋Š” ์ปดํ“จํ„ฐ๋ผ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š”๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋– ํ•œ ์–‘์‹์ด ํ•„์š”ํ• ๊ฒƒ์ด๊ณ 
API ๋ฌธ์„œ์—๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ด๋Ÿฌํ•œ ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ๋“ค์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

โœ… API ์‚ฌ์šฉ๋ฐฉ๋ฒ•

์—ฌ๋Ÿฟ ๊ณต์‹์‚ฌ์ดํŠธ์— ๋“ค์–ด๊ฐ€๋ฉด ๊ฐ ํšŒ์‚ฌ์˜ API๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ณณ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
ํ•ด๋‹น API์—๋Š” key๊ฐ€ ์กด์žฌ ํ•  ๊ฒƒ์ด๊ณ , ๊ทธ์—๋”ฐ๋ฅธ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์ด ์ ํ˜€์žˆ์œผ๋‹ˆ ์ฐธ๊ณ ํ•˜๋ฉด ๋  ๊ฒƒ์ด๋‹ค.

โœ… API ์˜ˆ์‹œ๋ฅผ ํ†ตํ•œ Postman ์‚ฌ์šฉ๋ฒ•

express.js๋ฅผ ํ†ตํ•ด ๋งŒ๋“  ๊ฐ„๋‹จํ•œ API๋ฅผ ํ†ตํ•ด Postman์„ ํ…Œ์ŠคํŠธ ํ•ด๋ณด์ž
๋จผ์ € ๊ฐ„๋‹จํ•œ ์‚ฌ์šฉ๋ฒ•์„ ์ˆœ์„œ๋Œ€๋กœ ๋ณด์—ฌ์ฃผ๋ฉด

์‚ฌ์ง„์—์„œ ๋ณด์ด๋Š” 1๋ฒˆ(new button)์„ ๋ˆ„๋ฅธ ํ›„ 2๋ฒˆ(HTTP icon)์„ ์„ ํƒํ•ด์ค€๋‹ค.

API์— ์ž‘์„ฑํ•œ ์š”์ฒญ(Get,Post๋“ฑ)์„ ์ ์–ด์ฃผ๊ณ  ์˜ฌ๋ฐ”๋ฅธ ์ฃผ์†Œ ๊ฐ’(localhost:3000)์„ ๋„ฃ์–ด์ค€ ํ›„ API๋ช…๋ น์— ๋”ฐ๋ผ ์ž‘์„ฑํ•ด์ฃผ๋ฉด๋œ๋‹ค.


โšก๏ธ ์‹ค์ „ ์‚ฌ์šฉ

์‹œ์ž‘ ์ „ ์„œ๋ฒ„๋ฅผ ๊ผญ ์ผœ์ฃผ์„ธ์š”

โœ”๏ธ Setting

//ํ•ด๋‹น ๋ž€์€ ์„ค์ • ๊ฐ’์„ ๋ณด์—ฌ์ฃผ๊ธฐ์œ„ํ•ด ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
const express = require('express');
const app = express();
const cors = require('cors');
app.use(cors()); // ์ฟ ํ‚ค ํŒŒ์‹ฑ ๋ฏธ๋“ค์›จ์–ด
app.use(express.json()); // JSON ์š”์ฒญ ๋ณธ๋ฌธ ํŒŒ์‹ฑ
// sample DB
![](https://velog.velcdn.com/images/yoon_min/post/1609075f-4394-4f99-8139-29d50e5ae60f/image.png)

//Port | ํฌํŠธ๋Š” ์˜ˆ์ œ๋กœ 3003์„ ์ž„์˜๋กœ ์žก์Œ
const PORT = 3003;
app.listen(PORT, () => {
    console.log(`์„œ๋ฒ„๊ฐ€ http://localhost:${PORT}์—์„œ ์‹คํ–‰ ์ค‘`);
});

โœ”๏ธ Get

๋จผ์ € ๊ฐ„๋‹จํ•œ get ์š”์ฒญ์„ postman์œผ๋กœ ํ™•์ธํ•ด๋ณด์ž

// ๊ณต๊ฐœ ๋ผ์šฐํŠธ
app.get('/', (req, res) => {
    res.send('๋ชจ๋“  ์‚ฌ์šฉ์ž๊ฐ€ ์ ‘๊ทผ ๊ฐ€๋Šฅ');
});

ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑ ํ›„ Postman์—์„œ ์ •์ƒ์ž‘๋™ํ•˜๋Š”์ง€ ์š”์ฒญ์„ ๋ฐ›์•„๋ณด๋ฉด

์ด๋ ‡๊ฒŒ ์ž˜๋ฐ›์•„์˜ค๋Š”๊ฑธ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค.
๋‹ค๋ฅธ ์˜ˆ์‹œ๋„ ํ•ด๋ณด์ž

โœ”๏ธ Post

ํ•ด๋‹น ์ฝ”๋“œ๋Š” ๊ฐ„๋‹จํ•œ ๋กœ๊ทธ์ธ API์ž…๋‹ˆ๋‹ค.

์ฝ”๋“œ ์ฃผ์„์„ ์ž˜๋ณด๋ฉฐ ๋”ฐ๋ผ๊ฐ€์‹œ๊ธธ ์ถ”์ฒœ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

// Login API
app.post('/login', (req, res) => { //login ๊ฒฝ๋กœ request, response์š”์ฒญ
    const {username, password} = req.body; // ์š”์ฒญ body์— username, password๊ฐ€ ์žˆ์–ด์•ผํ•ด
    if (sample_db.id === username && sample_db.password === password) { //์ƒ˜ํ”Œ DB์™€ username๊ณผ password๊ฐ€ ๋™์ผํ•˜๋‹ค๋ฉด
        const token = jwt.sign({ userId: sample_db.id, role: sample_db.role }, SECRET_KEY, { expiresIn: '1h' });//JWT ํ† ํฐ์„ 1์‹œ๊ฐ„๋™์•ˆ ์ƒ์„ฑํ•ด์ค˜
        res.send({ token }); // response์— ํ† ํฐ์„ ๋„ฃ์–ด์ค˜
    }
    else {
        res.status(401).send('Invalid username or password'); //ํ‹€๋ฆฌ๋ฉด 401 ์ƒํƒœ์™€ ํ•ด๋‹น ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•ด์ค˜
    }
});


์ž! ์ฝ”๋“œ ์ฃผ์„์„ ์ž˜ ๋”ฐ๋ผ๊ฐ€๋ฉฐ ๋ดค์œผ๋ฉด ์ด์ œ๋ถ€ํ„ฐ Postman์—์„œ ์š”์ฒญํ•ด ํ™•์ธํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ˆœ์„œ๋Œ€๋กœ ๋”ฐ๋ผ์™€์ฃผ์„ธ์š”

  • ์™ผ์ชฝ ์ƒ๋‹จ ๋นจ๊ฐ„ ๋ฐ•์Šค๋ถ€ํ„ฐ Post์š”์ฒญ์ด์—ˆ์œผ๋‹ˆ Post๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.
  • /login์œผ๋กœ ๊ฒฝ๋กœ๋ฅผ ์š”์ฒญํ–ˆ์œผ๋‹ˆ ์•Œ๋งž๊ฒŒ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.
  • code์—์„œ body์— username, password ์š”์ฒญํ–ˆ์œผ๋‹ˆ Body ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
 const {username, password} = req.body; // ์š”์ฒญ body์— username, password๊ฐ€ ์žˆ์–ด์•ผํ•ด
  • Body ์•ˆ์— raw ์„ ํƒ ํ›„ sample_db์—์žˆ๋˜ ๋ฐ์ดํ„ฐ ๊ฐ’์„ ๋™์ผํ•˜๊ฒŒ ๋„ฃ์–ด์ฃผ๊ณ  send๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด
  • ์„ฑ๊ณต์ ์œผ๋กœ ์ „์†ก(200 OK)๊ฐ€ ์™„๋ฃŒ๋˜๊ณ 
  • JWT ํ† ํฐ๋„ ์ •์ƒ์ ์œผ๋กœ ๋ฐœ๊ธ‰๋œ ๋ชจ์Šต์„ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ์ƒ๋‹จ์—์„œ ๋ฌธ์„œํ™”๋„ ์‰ฝ๊ฒŒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.


๋ฌธ์„œ์— ๋“ค์–ด๊ฐ€ Publish ์ง„ํ–‰์‹œ ํ…Œ์ŠคํŠธ ์ง„ํ–‰๋œ API๋“ค์ด ์ •๋ฆฌ๋˜๊ธฐ์— ์‚ฌ์šฉ์ž์—๊ฒŒ ๋งํฌ๋งŒ ์ „๋‹ฌํ•˜๊ฒŒ๋˜๋ฉด
๋ณด๋‹ค ์‰ฌ์šด ํ˜‘์—…์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ด์ ์ด Postman์— ๊ฐ€์žฅ ํฐ ์žฅ์ ์ด๋ผ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

ํ•ด๋‹น ์‚ฌ์ง„์€ ๋ฌธ์„œํ™”๊ฐ€๋œ ์˜ˆ์‹œ ์‚ฌ์ง„์ž…๋‹ˆ๋‹ค.

โœจ Postman ์ •๋ฆฌ

HTTP ์š”์ฒญ ๋ณด๋‚ด๊ธฐ
: GET, POST, PUT, DELETE ๋“ฑ์˜ HTTP ์š”์ฒญ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ ์„ค์ •
: HTTP ์š”์ฒญ์— ํ•„์š”ํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
์‘๋‹ต ํ™•์ธ
: HTTP ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์„ ํ™•์ธํ•˜๊ณ , JSON, XML ๋“ฑ์˜ ๋‹ค์–‘ํ•œ ํ˜•์‹์œผ๋กœ ์‘๋‹ต์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
ํžˆ์Šคํ† ๋ฆฌ ๊ด€๋ฆฌ
: ์ด์ „์— ๋ณด๋‚ธ HTTP ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ์ €์žฅํ•˜๊ณ , ๋‹ค์‹œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •
: ์„œ๋กœ ๋‹ค๋ฅธ ํ™˜๊ฒฝ์—์„œ ๋™์ผํ•œ HTTP ์š”์ฒญ์„ ๋ณด๋‚ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ, ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•ด ๊ฐ„ํŽธํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
API ๋ฌธ์„œํ™”
: API ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ๋ฌธ์„œํ™”ํ•˜๊ณ , ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž์™€ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋‹ค.
Postman์€ ๋ฌด๋ฃŒ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋‹ค์–‘ํ•œ ํ…œํ”Œ๋ฆฟ๊ณผ ์˜ˆ์ œ ์ฝ”๋“œ๋ฅผ ์ œ๊ณตํ•ด์ฃผ์–ด ์‚ฌ์šฉ์ž๊ฐ€ ๋”์šฑ ํšจ๊ณผ์ ์œผ๋กœ API๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ณ  ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค.

์ถœ์ฒ˜
velog | seunmini.log
velog | oka1313.log

profile
'๊ฐ™์ด์˜ ๊ฐ€์น˜๋ฅผ'

0๊ฐœ์˜ ๋Œ“๊ธ€