Ver3.0 ๐ Postman์ผ๋ก ์์ํ๋ API ํ ์คํ ๊ณผ ๊ฐ๋ฐ ๋ฌธ์ํ ํ์ ์ ๋ชจ๋ ๊ฒ

๐ Postman์ผ๋ก ์์ํ๋ API ํ ์คํ ๊ณผ ๊ฐ๋ฐ ๋ฌธ์ํ ํ์ ์ ๋ชจ๋ ๊ฒ
๊ฐ๋ฐ์๋ค์ ํ์ ๋๊ตฌ, Postman์ ํ์ฉํ ์ค๋งํธํ API ๊ฐ๋ฐ ์ฌ์
์๋
ํ์ธ์! ๐ ์ค๋์ ๊ฐ๋ฐ์๋ผ๋ฉด ๋๊ตฌ๋ ํ ๋ฒ์ฏค ๋ค์ด๋ดค์ Postman์ ๋ํด ๊น์ด ์๊ฒ ์ด์ผ๊ธฐํด๋ณด๋ ค๊ณ ํด์.
API ๊ฐ๋ฐ์ ํ๋ค ๋ณด๋ฉด ํ
์คํธ๋ ํด์ผ ํ๊ณ , ๋ฌธ์๋ ๋ง๋ค์ด์ผ ํ๊ณ , ํ์๋ค๊ณผ ๊ณต์ ๋ ํด์ผ ํ๋๋ฐ...
์ด ๋ชจ๋ ๊ฑธ ํ ๊ณณ์์ ํด๊ฒฐํ ์ ์๋ค๋ฉด? ๋ฐ๋ก ๊ทธ๊ฒ Postman์ด๋๋๋ค! ๐ฏ
๐จ Postman์ด ๋ญ๊ธธ๋ ์ด๋ ๊ฒ ์ธ๊ธฐ๊ฐ ๋ง์๊น?
Postman์ 2012๋
์ ์ฒ์ ๋ฑ์ฅํ API ๊ฐ๋ฐ ํ๋ซํผ์ด์์. ์ฒ์์ ๋จ์ํ ํฌ๋กฌ ํ์ฅ ํ๋ก๊ทธ๋จ์ผ๋ก ์์ํ์ง๋ง,
์ง๊ธ์ ์ ์ธ๊ณ 2์ฒ๋ง ๋ช
์ด์์ ๊ฐ๋ฐ์๋ค์ด ์ฌ์ฉํ๋ ๊ฐ๋ ฅํ ํ์
๋๊ตฌ๋ก ์ฑ์ฅํ์ฃ .
์ฌ์ค API ํ
์คํ
๋๊ตฌ๋ ์์ฅ์ ์ ๋ง ๋ง์์. ํ์ง๋ง Postman์ด ํน๋ณํ ์ด์ ๋ ๋ญ๊น์?
๋ฐ๋ก ์ง๊ด์ ์ธ ์ธํฐํ์ด์ค์ ๊ฐ๋ ฅํ ํ์
๊ธฐ๋ฅ,
๊ทธ๋ฆฌ๊ณ ์๋ํ๋ ๋ฌธ์ํ ์์คํ
์ด ์๋ฒฝํ๊ฒ ๊ฒฐํฉ๋์ด ์๊ธฐ ๋๋ฌธ์ด์์. ๐
๐ก ์ฌ๋ฅ๋ท์์๋ ๋ง์ ๊ฐ๋ฐ์ ๋ถ๋ค์ด Postman ๊ด๋ จ ์ง์๊ณผ ๋
ธํ์ฐ๋ฅผ ๊ณต์ ํ๊ณ ๊ณ์ธ์.
API ๊ฐ๋ฐ์ด ์ฒ์์ด๋ผ๋ฉด, ๊ฒฝํ ๋ง์ ๊ฐ๋ฐ์๋ค์ ์กฐ์ธ์ ๋ค์ด๋ณด๋ ๊ฒ๋ ์ข์ ๋ฐฉ๋ฒ์ด๋๋๋ค!
๐ Postman์ ํต์ฌ ๊ธฐ๋ฅ๋ค์ ํํค์ณ๋ณด์
Postman์ ๋จ์ํ API๋ฅผ ํ
์คํธํ๋ ๋๊ตฌ๊ฐ ์๋์์.
API ๊ฐ๋ฐ์ ์ ์ฒด ๋ผ์ดํ์ฌ์ดํด์ ๊ด๋ฆฌํ ์ ์๋ ํตํฉ ํ๋ซํผ์ด๋ผ๊ณ ๋ณด๋ ๊ฒ ๋ง์์.
ํ๋์ฉ ์ดํด๋ณผ๊น์? ๐ฏ
๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋ฅ๋ถํฐ ์์ํด๋ณผ๊ฒ์. Postman์ ํต์ฌ์ ๋ฐ๋ก HTTP ์์ฒญ์ ์ฝ๊ฒ ๋ง๋ค๊ณ ํ
์คํธํ ์ ์๋ค๋ ๊ฑฐ์์.
GET, POST, PUT, DELETE, PATCH ๋ฑ ๋ชจ๋ HTTP ๋ฉ์๋๋ฅผ ์ง์ํ๊ณ ,
ํค๋, ๋ฐ๋, ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ, ์ธ์ฆ ์ ๋ณด ๋ฑ์ ์ง๊ด์ ์ธ UI๋ก ์ค์ ํ ์ ์์ด์.
์๋ฅผ ๋ค์ด REST API๋ฅผ ํ
์คํธํ๋ค๊ณ ํด๋ณผ๊น์?
URL์ ์
๋ ฅํ๊ณ , ๋ฉ์๋๋ฅผ ์ ํํ๊ณ , ํ์ํ ํ๋ผ๋ฏธํฐ๋ฅผ ์ถ๊ฐํ๋ฉด ๋!
Send ๋ฒํผ ํ๋๋ก ์ฆ์ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ ์ ์์ฃ . โก
// ์์: ์ฌ์ฉ์ ์ ๋ณด ์กฐํ API ํ
์คํธ
GET https://api.example.com/users/123
Headers:
Authorization: Bearer your_token_here
Content-Type: application/json
// ์๋ต ๊ฒฐ๊ณผ
{
"id": 123,
"name": "ํ๊ธธ๋",
"email": "hong@example.com",
"created_at": "2024-01-15T10:30:00Z"
}
๊ฐ๋ฐ์ ํ๋ค ๋ณด๋ฉด ๋ก์ปฌ, ๊ฐ๋ฐ, ์คํ
์ด์ง, ํ๋ก๋์
๋ฑ ์ฌ๋ฌ ํ๊ฒฝ์ ์ค๊ฐ๋ฉฐ ํ
์คํธํด์ผ ํ ๋๊ฐ ๋ง์ฃ .
๋งค๋ฒ URL์ด๋ API ํค๋ฅผ ๋ฐ๊พธ๋ ๊ฑด ์ ๋ง ๋ฒ๊ฑฐ๋ก์ด ์ผ์ด์์. ๐
Postman์ ํ๊ฒฝ ๋ณ์(Environment Variables) ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด
์ด๋ฐ ๋ฌธ์ ๋ฅผ ๊น๋ํ๊ฒ ํด๊ฒฐํ ์ ์์ด์!
๊ฐ ํ๊ฒฝ๋ณ๋ก ๋ณ์๋ฅผ ์ค์ ํด๋๊ณ , ํ์ํ ๋ ํ๊ฒฝ๋ง ๋ฐ๊ฟ์ฃผ๋ฉด
๋ชจ๋ ์์ฒญ์ด ์๋์ผ๋ก ํด๋น ํ๊ฒฝ์ ๊ฐ์ ์ฌ์ฉํ๊ฒ ๋์ฃ .
๐ Local Environment
base_url: http://localhost:3000
api_key: dev_key_12345
๋ก์ปฌ ๊ฐ๋ฐ ํ๊ฒฝ์์ ๋น ๋ฅธ ํ
์คํธ
๐ง Development
base_url: https://dev-api.example.com
api_key: dev_key_67890
๊ฐ๋ฐ ์๋ฒ์์ ํตํฉ ํ
์คํธ
๐ Production
base_url: https://api.example.com
api_key: prod_key_secure
์ค์ ์ด์ ํ๊ฒฝ ๊ฒ์ฆ
ํ๋ก์ ํธ๊ฐ ์ปค์ง๋ฉด API ์๋ํฌ์ธํธ๋ ์์ญ, ์๋ฐฑ ๊ฐ๋ก ๋์ด๋์.
์ด๊ฑธ ์ด๋ป๊ฒ ๊ด๋ฆฌํ ๊น์? ๋ฐ๋ก ์ปฌ๋ ์
(Collection)์ด์์! ๐ฆ
์ปฌ๋ ์
์ ๊ด๋ จ๋ API ์์ฒญ๋ค์ ํด๋์ฒ๋ผ ๋ฌถ์ด์ ๊ด๋ฆฌํ ์ ์๋ ๊ธฐ๋ฅ์ด์์.
์๋ฅผ ๋ค์ด "์ฌ์ฉ์ ๊ด๋ฆฌ API", "์ํ ๊ด๋ฆฌ API", "์ฃผ๋ฌธ ๊ด๋ฆฌ API" ์ด๋ฐ ์์ผ๋ก
๊ธฐ๋ฅ๋ณ๋ก ๊ทธ๋ฃนํํด์ ์ ๋ฆฌํ ์ ์์ฃ .
๋ ์ข์ ๊ฑด, ์ปฌ๋ ์
์์ฒด๋ฅผ ํ์๋ค๊ณผ ๊ณต์ ํ ์ ์๋ค๋ ๊ฑฐ์์!
JSON ํ์ผ๋ก ๋ด๋ณด๋ด๊ฑฐ๋, Postman ํด๋ผ์ฐ๋๋ฅผ ํตํด ์ค์๊ฐ์ผ๋ก ๋๊ธฐํํ ์๋ ์์ด์. ๐
๐ก Pro Tip: ์ปฌ๋ ์
์ ์ค๋ช
(Description)์ ์ ์์ฑํด๋๋ฉด,
๋์ค์ ์๋์ผ๋ก API ๋ฌธ์๊ฐ ์์ฑ๋ ๋ ๊ทธ๋๋ก ๋ฐ์๋ผ์.
์ฒ์๋ถํฐ ๊ผผ๊ผผํ๊ฒ ์์ฑํ๋ ์ต๊ด์ ๋ค์ด๋ฉด ๋์ค์ ์ ๋ง ํธํด์!
๐ค ์๋ํ ํ ์คํ ์ผ๋ก ์์ฐ์ฑ ๊ทน๋ํํ๊ธฐ
์๋์ผ๋ก API๋ฅผ ํ๋ํ๋ ํ
์คํธํ๋ ๊ฑด ์๊ฐ๋ ์ค๋ ๊ฑธ๋ฆฌ๊ณ ์ค์ํ๊ธฐ๋ ์ฌ์์.
Postman์ ์ง์ง ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ๋ฐ๋ก ์๋ํ ํ
์คํ
์ด์์! ๐ฏ
Postman์์๋ JavaScript๋ฅผ ์ฌ์ฉํด์ ํ
์คํธ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ ์ ์์ด์.
๊ฐ ์์ฒญ๋ง๋ค "Tests" ํญ์์ ์คํฌ๋ฆฝํธ๋ฅผ ์ถ๊ฐํ๋ฉด,
์๋ต์ด ์ฌ ๋๋ง๋ค ์๋์ผ๋ก ๊ฒ์ฆ์ด ์ด๋ฃจ์ด์ง์ฃ .
์๋ฅผ ๋ค์ด๋ณผ๊น์?
// ์ํ ์ฝ๋๊ฐ 200์ธ์ง ํ์ธ
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
});
// ์๋ต ์๊ฐ์ด 200ms ์ดํ์ธ์ง ํ์ธ
pm.test("Response time is less than 200ms", function () {
pm.expect(pm.response.responseTime).to.be.below(200);
});
// ์๋ต ๋ฐ์ดํฐ์ ํน์ ํ๋๊ฐ ์๋์ง ํ์ธ
pm.test("Response has user name", function () {
var jsonData = pm.response.json();
pm.expect(jsonData.name).to.exist;
pm.expect(jsonData.name).to.be.a('string');
});
// ์๋ต ๋ฐ์ดํฐ๋ฅผ ํ๊ฒฝ ๋ณ์์ ์ ์ฅ
var jsonData = pm.response.json();
pm.environment.set("user_id", jsonData.id);
์ด๋ฐ ํ
์คํธ๋ค์ด ์๋์ผ๋ก ์คํ๋๋ฉด์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ค์.
ํต๊ณผํ ํ
์คํธ๋ ์ด๋ก์, ์คํจํ ํ
์คํธ๋ ๋นจ๊ฐ์์ผ๋ก ํ์๋๋๊น
ํ๋์ ์ด๋ค ๋ถ๋ถ์ ๋ฌธ์ ๊ฐ ์๋์ง ์ ์ ์์ฃ ! โจ
์ปฌ๋ ์
์ ์๋ ๋ชจ๋ API๋ฅผ ํ ๋ฒ์ ํ
์คํธํ๊ณ ์ถ๋ค๋ฉด?
Collection Runner๋ฅผ ์ฌ์ฉํ๋ฉด ๋ผ์!
Runner๋ฅผ ์คํํ๋ฉด ์ปฌ๋ ์
์์ ๋ชจ๋ ์์ฒญ์ด ์์ฐจ์ ์ผ๋ก ์คํ๋๊ณ ,
๊ฐ๊ฐ์ ํ
์คํธ ๊ฒฐ๊ณผ๋ฅผ ํ๋์ ๋ณผ ์ ์์ด์.
์ฌ์ง์ด ๋ฐ๋ณต ํ์๋ ์ค์ ํ ์ ์์ด์ ๋ถํ ํ
์คํธ๋ ๊ฐ๋ฅํ์ฃ . ๐ช
์ปฌ๋ ์ ์์ โถ ๋ฒํผ์ ํด๋ฆญํ๊ฑฐ๋ ์๋จ ๋ฉ๋ด์์ Runner๋ฅผ ์ ํํด์.
๋ฐ๋ณต ํ์(Iterations), ๋๋ ์ด ์๊ฐ, ๋ฐ์ดํฐ ํ์ผ ๋ฑ์ ์ค์ ํ ์ ์์ด์.
๋ชจ๋ ์์ฒญ์ด ์๋์ผ๋ก ์คํ๋๊ณ ๊ฒฐ๊ณผ๊ฐ ์ค์๊ฐ์ผ๋ก ํ์๋ผ์.
ํต๊ณผ/์คํจ ๋น์จ, ์๋ต ์๊ฐ, ์๋ฌ ๋ฉ์์ง ๋ฑ์ ํ์ธํ๊ณ ๋ฌธ์ ๋ฅผ ํ์ ํด์.
Postman์ ํ
์คํธ๋ฅผ ๋ช
๋ น์ค(CLI)์์ ์คํํ๊ณ ์ถ๋ค๋ฉด Newman์ ์ฌ์ฉํ๋ฉด ๋ผ์.
Newman์ Postman์ ์ปฌ๋ ์
์ Node.js ํ๊ฒฝ์์ ์คํํ ์ ์๊ฒ ํด์ฃผ๋ ๋๊ตฌ์์.
์ด๊ฑธ ์ฌ์ฉํ๋ฉด Jenkins, GitLab CI, GitHub Actions ๊ฐ์
CI/CD ํ์ดํ๋ผ์ธ์ API ํ
์คํธ๋ฅผ ์๋์ผ๋ก ํตํฉํ ์ ์์ด์! ๐
// Newman ์ค์น
npm install -g newman
// ์ปฌ๋ ์
์คํ
newman run my-collection.json -e my-environment.json
// HTML ๋ฆฌํฌํธ ์์ฑ
newman run my-collection.json -r html --reporter-html-export report.html
// CI/CD ํ์ดํ๋ผ์ธ ์์ (GitHub Actions)
name: API Tests
on: [push]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Install Newman
run: npm install -g newman
- name: Run API Tests
run: newman run collection.json -e environment.json
๐ ์๋ ๋ฌธ์ํ๋ก ์๊ฐ ์ ์ฝํ๊ธฐ
API ๋ฌธ์ ์์ฑ, ์ ๋ง ๊ท์ฐฎ์ฃ ? ๐
์ฝ๋๋ ๊ณ์ ๋ฐ๋๋๋ฐ ๋ฌธ์๋ ์
๋ฐ์ดํธ๊ฐ ์ ๋๊ณ ...
ํ์๋ค์ด "์ด API ์ด๋ป๊ฒ ์ฐ๋ ๊ฑฐ์์?"๋ผ๊ณ ๋ฌผ์ด๋ณด๋ฉด ๋ ์ค๋ช
ํด์ผ ํ๊ณ ...
Postman์ ์ด๋ฐ ๊ณ ๋ฏผ์ ํ ๋ฐฉ์ ํด๊ฒฐํด์ค์!
์๋ ๋ฌธ์ํ ๊ธฐ๋ฅ์ด ์ ๋ง ๊ฐ๋ ฅํ๊ฑฐ๋ ์. ๐
Postman์์ ์ปฌ๋ ์
์ ๋ง๋ค๊ณ ์์ฒญ์ ์ถ๊ฐํ๋ฉด,
๊ทธ ์ฆ์ API ๋ฌธ์๊ฐ ์๋์ผ๋ก ์์ฑ๋ผ์!
๊ฐ ์์ฒญ์ ์ค๋ช
, ํ๋ผ๋ฏธํฐ, ํค๋, ์์ ์๋ต ๋ฑ์ด
๊น๋ํ ์น ํ์ด์ง ํํ๋ก ๋ง๋ค์ด์ง์ฃ .
๋ณ๋๋ก ๋ฌธ์๋ฅผ ์์ฑํ ํ์๊ฐ ์์ด์. โจ
๐จ ๋ฌธ์ ์ปค์คํฐ๋ง์ด์ง
Postman ๋ฌธ์๋ Markdown์ ์ง์ํด์!
์ปฌ๋ ์
์ด๋ ์์ฒญ์ Description ๋ถ๋ถ์ Markdown ๋ฌธ๋ฒ์ ์ฌ์ฉํ๋ฉด
๋ ํ๋ถํ๊ณ ๋ณด๊ธฐ ์ข์ ๋ฌธ์๋ฅผ ๋ง๋ค ์ ์์ด์.
์ฝ๋ ๋ธ๋ก, ์ด๋ฏธ์ง, ๋งํฌ, ํ ๋ฑ์ ์์ ๋กญ๊ฒ ์ถ๊ฐํ ์ ์๋ต๋๋ค.
์์ฑ๋ ๋ฌธ์๋ ํ ๋ด๋ถ์์๋ง ๋ณผ ์๋ ์๊ณ ,
์ธ๋ถ์ ๊ณต๊ฐํ ์๋ ์์ด์.
"Publish" ๋ฒํผ์ ๋๋ฅด๋ฉด ๊ณ ์ ํ URL์ด ์์ฑ๋๊ณ ,
์ด ๋งํฌ๋ฅผ ๊ณต์ ํ๋ฉด ๋๊ตฌ๋ ๋ฌธ์๋ฅผ ๋ณผ ์ ์์ฃ .
์ฌ์ง์ด ๊ฒ์ ์์ง์ ๋
ธ์ถ๋๊ฒ ํ ์๋ ์์ด์! ๐
๋ง์ ๊ธฐ์
๋ค์ด ์์ฌ์ Public API ๋ฌธ์๋ฅผ
Postman์ผ๋ก ๋ง๋ค์ด์ ์ ๊ณตํ๊ณ ์์ด์.
Stripe, Twilio, SendGrid ๊ฐ์ ์ ๋ช
์๋น์ค๋ค๋ ์ฌ์ฉํ๊ณ ์์ฃ .
โ ๏ธ ๋ณด์ ์ฃผ์์ฌํญ
๋ฌธ์๋ฅผ ํผ๋ธ๋ฆฌ์ฑํ ๋๋ ๋ฏผ๊ฐํ ์ ๋ณด๊ฐ ํฌํจ๋์ด ์์ง ์์์ง
๊ผญ ํ์ธํด์ผ ํด์!
API ํค, ํ ํฐ, ๋น๋ฐ๋ฒํธ ๊ฐ์ ์ ๋ณด๋ ์ ๋ ๋ฌธ์์ ํฌํจ์ํค๋ฉด ์ ๋ผ์.
๋์ ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ฉํ๊ณ , ๋ฌธ์์๋ ์์ ๊ฐ๋ง ํ์ํ์ธ์.
Postman ๋ฌธ์์ ๊ฐ์ฅ ํฐ ์ฅ์ ์ ์ค์๊ฐ ๋๊ธฐํ์์.
์ปฌ๋ ์
์ ์์ ํ๋ฉด ๋ฌธ์๋ ์๋์ผ๋ก ์
๋ฐ์ดํธ๋ผ์.
์๋ก์ด ์๋ํฌ์ธํธ๋ฅผ ์ถ๊ฐํ๊ฑฐ๋, ํ๋ผ๋ฏธํฐ๋ฅผ ๋ณ๊ฒฝํ๊ฑฐ๋,
์ค๋ช
์ ์์ ํ๋ฉด ์ฆ์ ๋ฌธ์์ ๋ฐ์๋์ฃ .
๋ ์ด์ "๋ฌธ์๊ฐ ์ต์ ๋ฒ์ ์ด ์๋์์"๋ผ๋ ๋ง์ ๋ค์ ์ผ์ด ์์ด์! ๐
๐ฅ ํ ํ์ ๊ธฐ๋ฅ์ผ๋ก ํจ๊ป ์ฑ์ฅํ๊ธฐ
ํผ์ ๊ฐ๋ฐํ๋ ๊ฒ๋ ์ข์ง๋ง, ํ์ผ๋ก ์ผํ ๋ ์ง์ง ์๋์ง๊ฐ ๋์ฃ !
Postman์ ํ ํ์
์ ์ํ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํด์. ๐ค
Workspace๋ ํ์๋ค์ด ํจ๊ป ์์
ํ ์ ์๋ ๊ณต์ ๊ณต๊ฐ์ด์์.
Personal Workspace๋ ๊ฐ์ธ ์์
์ฉ์ด๊ณ ,
Team Workspace๋ ํ์๋ค๊ณผ ์ปฌ๋ ์
, ํ๊ฒฝ, API ๋ฑ์ ๊ณต์ ํ ์ ์์ด์.
Public Workspace๋ ์ ์ธ๊ณ ๋๊ตฌ๋ ๋ณผ ์ ์๋ ๊ณต๊ฐ ๊ณต๊ฐ์ด์ฃ .
ํ ์ํฌ์คํ์ด์ค์์๋ ์ค์๊ฐ์ผ๋ก ๋ณ๊ฒฝ์ฌํญ์ด ๋๊ธฐํ๋ผ์.
๋๊ตฐ๊ฐ ์ปฌ๋ ์
์ ์์ ํ๋ฉด ๋ค๋ฅธ ํ์๋ค๋ ์ฆ์ ํ์ธํ ์ ์์ฃ ! ๐
๐ค Personal
๊ฐ์ธ ์์
๊ณต๊ฐ
์คํ์ ์ธ ํ
์คํธ
๊ฐ์ธ ํ์ต์ฉ ํ๋ก์ ํธ
๐ฅ Team
ํ ํ์
๊ณต๊ฐ
ํ๋ก์ ํธ ๊ณต์
์ค์๊ฐ ๋๊ธฐํ
๐ Public
๊ณต๊ฐ ์ํฌ์คํ์ด์ค
์คํ์์ค ํ๋ก์ ํธ
์ปค๋ฎค๋ํฐ ๊ณต์
๊ฐ ์ปฌ๋ ์
์ด๋ ์์ฒญ์ ๋๊ธ์ ๋ฌ ์ ์์ด์.
"์ด API ์๋ต ํ์์ด ๋ฐ๋์์ด์", "์ฌ๊ธฐ ๋ฒ๊ทธ๊ฐ ์๋ ๊ฒ ๊ฐ์์" ๊ฐ์
ํผ๋๋ฐฑ์ ๋ฐ๋ก๋ฐ๋ก ๊ณต์ ํ ์ ์์ฃ .
์ฌ๋์ด๋ ์ด๋ฉ์ผ๋ก ์๋ค ๊ฐ๋ค ํ์ง ์์๋,
ํด๋น API ์ปจํ
์คํธ ์์์ ๋ฐ๋ก ์ํตํ ์ ์์ด์ ์ ๋ง ํธํด์! ๐ฌ
์ํฌ์คํ์ด์ค์ Activity Feed๋ฅผ ๋ณด๋ฉด
๋๊ฐ ์ธ์ ๋ฌด์์ ๋ณ๊ฒฝํ๋์ง ํ๋์ ๋ณผ ์ ์์ด์.
"๊น๊ฐ๋ฐ๋์ด User API ์ปฌ๋ ์
์ ์
๋ฐ์ดํธํ์ต๋๋ค"
"์ด๋ฐฑ์๋๋์ด ์๋ก์ด ํ๊ฒฝ์ ์ถ๊ฐํ์ต๋๋ค"
์ด๋ฐ ์์ผ๋ก ๋ชจ๋ ํ๋์ด ๊ธฐ๋ก๋์ฃ .
๋ฒ์ ๊ด๋ฆฌ ์์คํ
์ฒ๋ผ ๋ณ๊ฒฝ ์ด๋ ฅ์ ์ถ์ ํ ์ ์์ด์
๋ฌธ์ ๊ฐ ์๊ฒผ์ ๋ ์์ธ์ ์ฐพ๊ธฐ๋ ์ฌ์์. ๐
๐ก ํ์
ํ: ํ์์ Postman์ ์ฌ์ฉํ ๋๋
๋ช
๋ช
๊ท์น(Naming Convention)์ ์ ํด๋๋ ๊ฒ ์ข์์.
์ปฌ๋ ์
์ด๋ฆ, ํด๋ ๊ตฌ์กฐ, ํ๊ฒฝ ๋ณ์ ์ด๋ฆ ๋ฑ์
์ผ๊ด์ฑ ์๊ฒ ๊ด๋ฆฌํ๋ฉด ๋์ค์ ์ฐพ๊ธฐ๋ ์ฝ๊ณ ํผ๋๋ ์ค์ด๋ค์ด์!
๐ญ Mock Server๋ก ํ๋ก ํธ์๋ ๊ฐ๋ฐ ๊ฐ์ํํ๊ธฐ
๋ฐฑ์๋ API๊ฐ ์์ง ์์ฑ๋์ง ์์๋๋ฐ
ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ์์ํด์ผ ํ ๋๊ฐ ์์ฃ ?
์ด๋ด ๋ Mock Server๊ฐ ์ ๋ง ์ ์ฉํด์! ๐ช
Mock Server๋ ์ค์ API์ฒ๋ผ ๋์ํ๋ ๊ฐ์ง ์๋ฒ์์.
๋ฏธ๋ฆฌ ์ ์๋ ์๋ต์ ๋ฐํํ๋๋ก ์ค์ ํ ์ ์์ฃ .
์๋ฅผ ๋ค์ด ์ฌ์ฉ์ ๋ชฉ๋ก API๊ฐ ์์ง ๊ฐ๋ฐ ์ค์ด๋ผ๋ฉด,
Mock Server๋ฅผ ๋ง๋ค์ด์ ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ๊ฒ ํ ์ ์์ด์.
ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๋ ์ด๊ฑธ ์ฌ์ฉํด์ UI๋ฅผ ๋จผ์ ๋ง๋ค ์ ์์ฃ ! ๐
๊ฐ ์์ฒญ์ "Save as Example"์ ํด๋ฆญํด์ ์์๋๋ ์๋ต์ ์ ์ฅํด์.
์ปฌ๋ ์ ๋ฉ๋ด์์ "Mock Collection"์ ์ ํํ๊ณ ์ด๋ฆ์ ์ง์ด์ค์.
Postman์ด ์๋์ผ๋ก Mock Server URL์ ์์ฑํด์ค์.
์์ฑ๋ URL์ ํ๋ก ํธ์๋ ์ฝ๋์์ ์ฌ์ฉํ๋ฉด ๋!
// Mock Server ์ฌ์ฉ ์์
// Mock URL: https://abc12345.mock.pstmn.io
// ํ๋ก ํธ์๋ ์ฝ๋์์ ์ฌ์ฉ
fetch('https://abc12345.mock.pstmn.io/api/users')
.then(response => response.json())
.then(data => {
console.log(data); // Mock ์๋ต ๋ฐ์ดํฐ
// UI ๋ ๋๋ง ๋ก์ง
});
// ๋์ค์ ์ค์ API๊ฐ ์์ฑ๋๋ฉด URL๋ง ๋ฐ๊พธ๋ฉด ๋ผ์!
fetch('https://api.example.com/api/users')
.then(response => response.json())
.then(data => {
console.log(data); // ์ค์ ์๋ต ๋ฐ์ดํฐ
});
โจ Mock Server๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ฐ ๊ฒ ์ข์์:
1. ๋ณ๋ ฌ ๊ฐ๋ฐ ๊ฐ๋ฅ ๐
๋ฐฑ์๋์ ํ๋ก ํธ์๋๊ฐ ๋์์ ๊ฐ๋ฐํ ์ ์์ด์.
์๋ก ๊ธฐ๋ค๋ฆด ํ์๊ฐ ์์ฃ !
2. ๋น ๋ฅธ ํ๋กํ ํ์ดํ โก
API ์ค๊ณ๋ฅผ ๋จผ์ ํ๊ณ Mock์ผ๋ก ๊ฒ์ฆํ ์ ์์ด์.
์ค์ ๊ตฌํ ์ ์ ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ ์ ์์ฃ .
3. ํ
์คํธ ํ๊ฒฝ ๊ตฌ์ถ ๐งช
ํน์ ์๋๋ฆฌ์ค(์๋ฌ ์ํฉ, ์ฃ์ง ์ผ์ด์ค ๋ฑ)๋ฅผ
์ฝ๊ฒ ์ฌํํ ์ ์์ด์.
4. ๋ฐ๋ชจ์ ํ๋ ์ ํ
์ด์
๐ฌ
์ค์ ์๋ฒ ์์ด๋ ๋์ํ๋ ๋ฐ๋ชจ๋ฅผ ๋ณด์ฌ์ค ์ ์์ด์.
๐ ์ธ์ฆ๊ณผ ๋ณด์ ๊ด๋ฆฌํ๊ธฐ
API ํ
์คํธ๋ฅผ ํ๋ค ๋ณด๋ฉด ์ธ์ฆ์ด ํ์ํ ๊ฒฝ์ฐ๊ฐ ๋ง์ฃ .
Postman์ ๋ค์ํ ์ธ์ฆ ๋ฐฉ์์ ์ง์ํด์! ๐
๐ API Key
๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ์
ํค๋๋ ์ฟผ๋ฆฌ์ ํค ์ถ๊ฐ
๊ณต๊ฐ API์์ ๋ง์ด ์ฌ์ฉ
๐๏ธ Bearer Token
JWT ํ ํฐ ๋ฐฉ์
Authorization ํค๋ ์ฌ์ฉ
ํ๋์ ์ธ API์ ํ์ค
๐ค Basic Auth
์ฌ์ฉ์๋ช
/๋น๋ฐ๋ฒํธ
Base64 ์ธ์ฝ๋ฉ
๊ฐ๋จํ ์ธ์ฆ์ ์ ํฉ
๐ OAuth 2.0
๋ณต์กํ ์ธ์ฆ ํ๋ก์ฐ
์์
๋ก๊ทธ์ธ ๋ฑ
Postman์ด ์๋ ์ฒ๋ฆฌ
OAuth 2.0์ ์ค์ ์ด ๋ณต์กํ๋ฐ,
Postman์ด ์ด๊ฑธ ์ ๋ง ์ฝ๊ฒ ๋ง๋ค์ด์ค์!
Authorization ํญ์์ OAuth 2.0์ ์ ํํ๊ณ ,
ํด๋ผ์ด์ธํธ ID, ์ํฌ๋ฆฟ, ์ธ์ฆ URL ๋ฑ์ ์
๋ ฅํ๋ฉด
Postman์ด ์๋์ผ๋ก ํ ํฐ์ ๋ฐ์์์.
ํ ํฐ์ด ๋ง๋ฃ๋๋ฉด ์๋์ผ๋ก ๊ฐฑ์ ๋ ํด์ฃผ์ฃ ! ๐
// OAuth 2.0 ์ค์ ์์
{
"type": "oauth2",
"grant_type": "authorization_code",
"auth_url": "https://accounts.example.com/oauth/authorize",
"access_token_url": "https://accounts.example.com/oauth/token",
"client_id": "your_client_id",
"client_secret": "your_client_secret",
"scope": "read write",
"redirect_uri": "https://oauth.pstmn.io/v1/callback"
}
// Postman์ด ์๋์ผ๋ก ์ฒ๋ฆฌํด์ฃผ๋ ๊ฒ๋ค:
// 1. ์ธ์ฆ ํ์ด์ง ์ด๊ธฐ
// 2. ์ฌ์ฉ์ ๋ก๊ทธ์ธ ์ฒ๋ฆฌ
// 3. Authorization Code ๋ฐ๊ธฐ
// 4. Access Token ๊ตํ
// 5. ํ ํฐ ์ ์ฅ ๋ฐ ์๋ ๊ฐฑ์
๐ ๋ณด์ ๋ฒ ์คํธ ํ๋ํฐ์ค
1. ๋ฏผ๊ฐํ ์ ๋ณด๋ ํ๊ฒฝ ๋ณ์์
API ํค, ํ ํฐ, ๋น๋ฐ๋ฒํธ๋ ์ ๋ ํ๋์ฝ๋ฉํ์ง ๋ง์ธ์!
ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ฉํ๊ณ , ๊ณต์ ํ ๋๋ ์ ์ธํ์ธ์.
2. .gitignore์ ํ๊ฒฝ ํ์ผ ์ถ๊ฐ
ํ๊ฒฝ ๋ณ์ ํ์ผ์ Git์ ์ปค๋ฐํ์ง ์๋๋ก ์ฃผ์ํ์ธ์.
3. ํ ๋ฉค๋ฒ๋ณ ๊ถํ ๊ด๋ฆฌ
Postman Team ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด
๋ฉค๋ฒ๋ณ๋ก ์ฝ๊ธฐ/์ฐ๊ธฐ ๊ถํ์ ๋ค๋ฅด๊ฒ ์ค์ ํ ์ ์์ด์.
4. ์ ๊ธฐ์ ์ธ ํ ํฐ ๊ฐฑ์
์ค๋๋ ํ ํฐ์ ๋ณด์ ์ํ์ด ๋ ์ ์์ด์.
์ ๊ธฐ์ ์ผ๋ก ๊ฐฑ์ ํ๋ ์ต๊ด์ ๋ค์ด์ธ์!
๐ ๋ชจ๋ํฐ๋ง์ผ๋ก API ์ํ ์ฒดํฌํ๊ธฐ
API๊ฐ ์ ๋์ํ๊ณ ์๋์ง ์ฃผ๊ธฐ์ ์ผ๋ก ํ์ธํ๊ณ ์ถ๋ค๋ฉด?
Postman Monitors๋ฅผ ์ฌ์ฉํ๋ฉด ๋ผ์! ๐ก
Monitor๋ฅผ ์ค์ ํ๋ฉด ์ ํด์ง ์๊ฐ๋ง๋ค
์๋์ผ๋ก API ํ
์คํธ๊ฐ ์คํ๋ผ์.
5๋ถ๋ง๋ค, 1์๊ฐ๋ง๋ค, ํ๋ฃจ์ ํ ๋ฒ ๋ฑ
์ํ๋ ์ฃผ๊ธฐ๋ฅผ ์ค์ ํ ์ ์์ฃ .
ํน์ ์ง์ญ(๋ฏธ๊ตญ, ์ ๋ฝ, ์์์ ๋ฑ)์์ ์คํ๋๊ฒ ํ ์๋ ์์ด์! ๐
์ปฌ๋ ์ ์์ "Monitor Collection" ์ ํ
์คํ ์ฃผ๊ธฐ์ ์ง์ญ ์ ํ
ํ ์คํธ ์คํจ ์ ์ด๋ฉ์ผ์ด๋ ์ฌ๋์ผ๋ก ์๋ฆผ
๋์๋ณด๋์์ ์ฑ๊ณต๋ฅ , ์๋ต ์๊ฐ ๋ฑ ๋ชจ๋ํฐ๋ง
Monitor ๋์๋ณด๋์์๋ ์๊ฐ์ ๋ฐ๋ฅธ API ์ฑ๋ฅ ๋ณํ๋ฅผ ๋ณผ ์ ์์ด์.
์๋ต ์๊ฐ์ด ์ ์ ๋๋ ค์ง๊ณ ์๋ค๋ฉด?
์๋ฒ์ ๋ฌธ์ ๊ฐ ์๊ธฐ๊ธฐ ์ ์ ๋ฏธ๋ฆฌ ์ ์ ์์ฃ .
ํน์ ์๊ฐ๋์ ์๋ฌ๊ฐ ๋ง์ด ๋ฐ์ํ๋ค๋ฉด?
๊ทธ ์๊ฐ๋์ ํธ๋ํฝ์ด๋ ๋ฐฐ์น ์์
์ ํ์ธํด๋ณผ ์ ์์ด์. ๐
๐ก ๋ชจ๋ํฐ๋ง ํ์ฉ ํ:
1. ์ค์ํ ์๋ํฌ์ธํธ๋ง ๋ชจ๋ํฐ๋ง
๋ชจ๋ API๋ฅผ ๋ชจ๋ํฐ๋งํ๋ฉด ๋น์ฉ์ด ๋ง์ด ๋ค์ด์.
ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ๊ด๋ จ๋ API๋ง ์ ํํ์ธ์.
2. ์ ์ ํ ์ฃผ๊ธฐ ์ค์
๋๋ฌด ์์ฃผ ์คํํ๋ฉด ์๋ฒ์ ๋ถ๋ด์ด ๋ ์ ์์ด์.
์๋น์ค ํน์ฑ์ ๋ง๋ ์ฃผ๊ธฐ๋ฅผ ์ ํํ์ธ์.
3. ์๋ฆผ ์ฑ๋ ๋ค์ํ
์ด๋ฉ์ผ๋ฟ๋ง ์๋๋ผ ์ฌ๋, ์นํ
๋ฑ
๋ค์ํ ์ฑ๋๋ก ์๋ฆผ์ ๋ฐ์ ์ ์์ด์!
๐ Postman ๊ณ ๊ธ ๊ธฐ๋ฅ ๋ง์คํฐํ๊ธฐ
๊ธฐ๋ณธ ๊ธฐ๋ฅ์ ์ต์ํด์ก๋ค๋ฉด,
์ด์ ๊ณ ๊ธ ๊ธฐ๋ฅ๋ค์ ๋ฐฐ์๋ณผ ์ฐจ๋ก์์! ๐
์์ฒญ์ ๋ณด๋ด๊ธฐ ์ ์ ์คํ๋๋ ์คํฌ๋ฆฝํธ์์.
ํ์์คํฌํ, ๋๋ค ๊ฐ, ์ํธํ๋ ๋ฐ์ดํฐ ๋ฑ์
๋์ ์ผ๋ก ์์ฑํ ์ ์์ฃ .
// ํ์ฌ ํ์์คํฌํ ์์ฑ
pm.environment.set("timestamp", Date.now());
// ๋๋ค ์ด๋ฉ์ผ ์์ฑ
const randomEmail = `user${Math.floor(Math.random() * 10000)}@example.com`;
pm.environment.set("email", randomEmail);
// UUID ์์ฑ
const uuid = require('uuid');
pm.environment.set("requestId", uuid.v4());
// ์ํธํ๋ ์๋ช
์์ฑ
const CryptoJS = require('crypto-js');
const message = pm.environment.get("timestamp") + pm.environment.get("apiKey");
const signature = CryptoJS.HmacSHA256(message, pm.environment.get("secretKey"));
pm.environment.set("signature", signature.toString());
// ์ด์ ์์ฒญ์ ์๋ต ๋ฐ์ดํฐ ์ฌ์ฉ
const userId = pm.environment.get("userId");
pm.environment.set("profileUrl", `/users/${userId}/profile`);
CSV๋ JSON ํ์ผ์ ์ฌ์ฉํด์
์ฌ๋ฌ ๋ฐ์ดํฐ ์ธํธ๋ก ๋์ผํ ์์ฒญ์ ๋ฐ๋ณต ์คํํ ์ ์์ด์.
์๋ฅผ ๋ค์ด 100๋ช
์ ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ์ ํ
์คํธํ๊ณ ์ถ๋ค๋ฉด?
CSV ํ์ผ์ ๋ฐ์ดํฐ๋ฅผ ์ค๋นํ๊ณ Collection Runner์์ ๋ถ๋ฌ์ค๋ฉด ๋ผ์! ๐
// users.csv ํ์ผ ์์
name,email,age
ํ๊ธธ๋,hong@example.com,30
๊น์ฒ ์,kim@example.com,25
์ด์ํฌ,lee@example.com,28
// Postman์์ ์ฌ์ฉํ๊ธฐ
// ์์ฒญ ๋ฐ๋์์ ๋ณ์ ์ฐธ์กฐ
{
"name": "{{name}}",
"email": "{{email}}",
"age": {{age}}
}
// Collection Runner ์ค์
// 1. Data File ์ ํ: users.csv
// 2. Iterations: 3 (ํ์ผ์ ํ ์๋งํผ ์๋ ์ค์ ๋จ)
// 3. Run ๋ฒํผ ํด๋ฆญ
// โ ๊ฐ ํ์ ๋ฐ์ดํฐ๋ก ์์ฒญ์ด 3๋ฒ ์คํ๋จ!
์ฌ๋ฌ API ์์ฒญ์ ์์ฐจ์ ์ผ๋ก ์คํํ๋ฉด์
์ด์ ์์ฒญ์ ๊ฒฐ๊ณผ๋ฅผ ๋ค์ ์์ฒญ์์ ์ฌ์ฉํ ์ ์์ด์.
์๋ฅผ ๋ค์ด:
1. ๋ก๊ทธ์ธ API๋ก ํ ํฐ ๋ฐ๊ธฐ
2. ํ ํฐ์ผ๋ก ์ฌ์ฉ์ ์ ๋ณด ์กฐํ
3. ์ฌ์ฉ์ ID๋ก ์ฃผ๋ฌธ ๋ด์ญ ์กฐํ
์ด๋ฐ ํ๋ก์ฐ๋ฅผ ์๋ํํ ์ ์์ฃ ! ๐
// 1๋จ๊ณ: ๋ก๊ทธ์ธ API (POST /auth/login)
// Tests ํญ์์ ํ ํฐ ์ ์ฅ
const response = pm.response.json();
pm.environment.set("authToken", response.token);
pm.environment.set("userId", response.userId);
// 2๋จ๊ณ: ์ฌ์ฉ์ ์ ๋ณด ์กฐํ (GET /users/:userId)
// URL์์ ํ๊ฒฝ ๋ณ์ ์ฌ์ฉ
// GET {{baseUrl}}/users/{{userId}}
// Headers์ ํ ํฐ ์ถ๊ฐ
// Authorization: Bearer {{authToken}}
// Tests ํญ์์ ๋ค์ ๋จ๊ณ ์ค๋น
const userData = pm.response.json();
pm.environment.set("userEmail", userData.email);
// 3๋จ๊ณ: ์ฃผ๋ฌธ ๋ด์ญ ์กฐํ (GET /orders)
// Query Parameters์์ ํ๊ฒฝ ๋ณ์ ์ฌ์ฉ
// email={{userEmail}}
// ์ด๋ ๊ฒ ํ๋ฉด ์ธ ๊ฐ์ API๊ฐ ์์ฐจ์ ์ผ๋ก ์คํ๋๋ฉด์
// ๋ฐ์ดํฐ๊ฐ ์๋์ผ๋ก ์ ๋ฌ๋ผ์!
JSON ์๋ต์ ๋ณด๊ธฐ ์ข์ ์ฐจํธ๋ ํ
์ด๋ธ๋ก ํ์ํ ์ ์์ด์.
Postman์ Visualizer ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด
HTML๊ณผ JavaScript๋ก ์ปค์คํ
๋ทฐ๋ฅผ ๋ง๋ค ์ ์์ฃ ! ๐
// Tests ํญ์์ Visualizer ์ฌ์ฉํ๊ธฐ
const response = pm.response.json();
// ํ
ํ๋ฆฟ ์ ์
const template = `
<html>
<head>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
</head>
<body>
<h2>์ฌ์ฉ์ ํต๊ณ</h2>
<canvas id="myChart" width="400" height="200"></canvas>
<script>
const ctx = document.getElementById('myChart').getContext('2d');
const chart = new Chart(ctx, {
type: 'bar',
data: {
labels: ['ํ์ฑ ์ฌ์ฉ์', '๋นํ์ฑ ์ฌ์ฉ์', '์ ๊ท ๊ฐ์
'],
datasets: [{
label: '์ฌ์ฉ์ ์',
data: [{{activeUsers}}, {{inactiveUsers}}, {{newSignups}}],
backgroundColor: ['#4caf50', '#ff9800', '#2196f3']
}]
}
});
</script>
</body>
</html>
`;
// ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ
pm.visualizer.set(template, {
activeUsers: response.stats.active,
inactiveUsers: response.stats.inactive,
newSignups: response.stats.new
});
๐ผ ์ค์ ํ์ฉ ์ฌ๋ก์ ๋ฒ ์คํธ ํ๋ํฐ์ค
์ด๋ก ์ ์ถฉ๋ถํ ๋ฐฐ์ ์ผ๋,
์ด์ ์ค์ ๋ก ์ด๋ป๊ฒ ํ์ฉํ๋์ง ์์๋ณผ๊น์? ๐ฏ
๋ง์ดํฌ๋ก์๋น์ค ํ๊ฒฝ์์๋ ์๋ง์ API๋ค์ด ์๋ก ํต์ ํด์.
Postman์ผ๋ก ์ด๊ฑธ ์ด๋ป๊ฒ ๊ด๋ฆฌํ ๊น์?
๐ฏ ๋ง์ดํฌ๋ก์๋น์ค ๊ด๋ฆฌ ์ ๋ต:
1. ์๋น์ค๋ณ ์ปฌ๋ ์
๋ถ๋ฆฌ
User Service, Order Service, Payment Service ๋ฑ
๊ฐ ๋ง์ดํฌ๋ก์๋น์ค๋ง๋ค ๋ณ๋์ ์ปฌ๋ ์
์ ๋ง๋ค์ด์.
2. ๊ณตํต ํ๊ฒฝ ๋ณ์ ํ์ฉ
API Gateway URL, ์ธ์ฆ ํ ํฐ ๋ฑ
์ฌ๋ฌ ์๋น์ค์์ ๊ณตํต์ผ๋ก ์ฌ์ฉํ๋ ๊ฐ์ ํ๊ฒฝ ๋ณ์๋ก ๊ด๋ฆฌํด์.
3. ์๋น์ค ๊ฐ ์์กด์ฑ ํ
์คํธ
Collection Runner๋ก ์ฌ๋ฌ ์๋น์ค๋ฅผ ์์ฐจ์ ์ผ๋ก ํธ์ถํ๋ฉด์
ํตํฉ ์๋๋ฆฌ์ค๋ฅผ ํ
์คํธํ ์ ์์ด์.
4. ๊ฐ ์๋น์ค์ ํฌ์ค ์ฒดํฌ
Monitor ๊ธฐ๋ฅ์ผ๋ก ๊ฐ ๋ง์ดํฌ๋ก์๋น์ค์ ์ํ๋ฅผ
์ฃผ๊ธฐ์ ์ผ๋ก ํ์ธํ ์ ์์ด์!
์ค์ ํ๋ก์ ํธ์์ Postman์ CI/CD์ ํตํฉํ๋ ๋ฐฉ๋ฒ์ ๋ณผ๊น์?
// GitHub Actions ์ํฌํ๋ก์ฐ ์์
name: API Integration Tests
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main ]
jobs:
api-tests:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Setup Node.js
uses: actions/setup-node@v2
with:
node-version: '16'
- name: Install Newman
run: npm install -g newman newman-reporter-htmlextra
- name: Run API Tests
run: |
newman run ./postman/collections/api-tests.json \
-e ./postman/environments/ci.json \
-r htmlextra,cli \
--reporter-htmlextra-export ./test-results/report.html
- name: Upload Test Results
if: always()
uses: actions/upload-artifact@v2
with:
name: test-results
path: ./test-results
- name: Notify on Failure
if: failure()
uses: 8398a7/action-slack@v3
with:
status: ${{ job.status }}
text: 'API ํ
์คํธ ์คํจ! ํ์ธ์ด ํ์ํฉ๋๋ค.'
webhook_url: ${{ secrets.SLACK_WEBHOOK }}
๋ชจ๋ฐ์ผ ์ฑ์ ๊ฐ๋ฐํ ๋๋ Postman์ด ์ ๋ง ์ ์ฉํด์!
์ฑ ๊ฐ๋ฐ์๋ Mock Server๋ฅผ ์ฌ์ฉํด์
๋ฐฑ์๋ API๊ฐ ์์ฑ๋๊ธฐ ์ ์ UI๋ฅผ ๋จผ์ ๊ฐ๋ฐํ ์ ์์ด์.
๋ค์ํ ์๋ต ์๋๋ฆฌ์ค(์ฑ๊ณต, ์คํจ, ํ์์์ ๋ฑ)๋ฅผ
์ฝ๊ฒ ํ
์คํธํ ์ ์์ฃ . ๐ฑ
๐จ ๋ชจ๋ฐ์ผ ๊ฐ๋ฐ ์ํฌํ๋ก์ฐ:
Phase 1: API ์ค๊ณ
โ Postman์์ API ์คํ ์ ์
โ Mock Server ์์ฑ
โ ์ํ ์๋ต ๋ฐ์ดํฐ ์์ฑ
Phase 2: ๋ณ๋ ฌ ๊ฐ๋ฐ
โ ๋ฐฑ์๋: ์ค์ API ๊ตฌํ
โ ํ๋ก ํธ์๋: Mock Server๋ก UI ๊ฐ๋ฐ
โ ์๋ก ๋
๋ฆฝ์ ์ผ๋ก ์์
๊ฐ๋ฅ!
Phase 3: ํตํฉ
โ ์ค์ API ์์ฑ
โ ์ฑ์์ URL๋ง ๋ณ๊ฒฝ
โ ํตํฉ ํ
์คํธ ์งํ
Phase 4: ๋ฐฐํฌ ํ
โ Monitor๋ก API ์ํ ๋ชจ๋ํฐ๋ง
โ ๋ฌธ์ ๋ฐ์ ์ ์ฆ์ ์๋ฆผ
์๋ก์ด ํ์์ด ํฉ๋ฅํ์ ๋,
Postman ์ปฌ๋ ์
์ ๊ณต์ ํ๋ฉด ์ ๋ง ํธํด์!
๋ชจ๋ API๊ฐ ์ ๋ฆฌ๋์ด ์๊ณ , ์ฌ์ฉ ์์๋ ์๊ณ ,
๋ฌธ์๋ ์๋์ผ๋ก ์์ฑ๋์ด ์์ผ๋๊น
๋น ๋ฅด๊ฒ ํ๋ก์ ํธ๋ฅผ ์ดํดํ ์ ์์ฃ . ๐
๐ก ์จ๋ณด๋ฉ ์ฒดํฌ๋ฆฌ์คํธ:
โ
Postman ์ํฌ์คํ์ด์ค ์ด๋
โ
ํ๊ฒฝ ๋ณ์ ์ค์ ๊ฐ์ด๋ ์ ๊ณต
โ
์ฃผ์ API ์ปฌ๋ ์
๊ณต์
โ
ํ
์คํธ ์๋๋ฆฌ์ค ์คํํด๋ณด๊ธฐ
โ
Mock Server ์ฌ์ฉ๋ฒ ์๋ด
โ
๋ฌธ์ ์์ฑ ๊ท์น ์ค๋ช
์ด๋ ๊ฒ ํ๋ฉด ์ ์
๊ฐ๋ฐ์๋
์ฒซ๋ ๋ถํฐ ๋ฐ๋ก API ํ
์คํธ๋ฅผ ์์ํ ์ ์์ด์!
๐ ๋ค๋ฅธ ๋๊ตฌ๋ค๊ณผ์ ๋น๊ต
Postman ๋ง๊ณ ๋ API ํ
์คํ
๋๊ตฌ๋ ๋ง์์.
์ด๋ค ์ฐจ์ด๊ฐ ์์๊น์? ๐ค
๐ Postman
์ฅ์ :
โข ์ง๊ด์ ์ธ GUI
โข ๊ฐ๋ ฅํ ํ์
๊ธฐ๋ฅ
โข ์๋ ๋ฌธ์ํ
โข Mock Server ์ง์
๋จ์ :
โข ๋ฌด๋ฃ ๋ฒ์ ์ ํ
โข ๋์ฉ๋ ํ
์คํธ ์ ๋๋ฆผ
๐ต Insomnia
์ฅ์ :
โข ๊น๋ํ ์ธํฐํ์ด์ค
โข GraphQL ์ง์ ์ฐ์
โข ์คํ์์ค
๋จ์ :
โข ํ์
๊ธฐ๋ฅ ์ฝํจ
โข ๋ฌธ์ํ ๊ธฐ๋ฅ ๋ถ์กฑ
โข ์ปค๋ฎค๋ํฐ ์์
โก Thunder Client
์ฅ์ :
โข VS Code ํ์ฅ
โข ๊ฐ๋ณ๊ณ ๋น ๋ฆ
โข ๋ฌด๋ฃ
๋จ์ :
โข ๊ธฐ๋ฅ์ด ์ ํ์
โข ํ ํ์
์ด๋ ค์
โข ๊ณ ๊ธ ๊ธฐ๋ฅ ๋ถ์กฑ
๐ด cURL
์ฅ์ :
โข ๋ช
๋ น์ค ๊ธฐ๋ฐ
โข ์คํฌ๋ฆฝํธ ์๋ํ ์ฌ์
โข ์ด๋์๋ ์ฌ์ฉ ๊ฐ๋ฅ
๋จ์ :
โข ํ์ต ๊ณก์ ๋์
โข GUI ์์
โข ํ์
๋ถ๊ฐ
๐ฏ ์ด๋ค ๋๊ตฌ๋ฅผ ์ ํํด์ผ ํ ๊น?
Postman์ ์ ํํ์ธ์:
โข ํ ํ์
์ด ์ค์ํ ๊ฒฝ์ฐ
โข API ๋ฌธ์ํ๊ฐ ํ์ํ ๊ฒฝ์ฐ
โข ๋ค์ํ ๊ณ ๊ธ ๊ธฐ๋ฅ์ด ํ์ํ ๊ฒฝ์ฐ
โข ์ด๋ณด์๋ ์ฝ๊ฒ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ
๋ค๋ฅธ ๋๊ตฌ๋ฅผ ๊ณ ๋ คํ์ธ์:
โข ๊ฐ์ธ ํ๋ก์ ํธ์ด๊ณ ๊ฐ๋จํ ํ
์คํธ๋ง ํ์ํ ๊ฒฝ์ฐ
โข ๋ช
๋ น์ค ํ๊ฒฝ์ ์ ํธํ๋ ๊ฒฝ์ฐ
โข ํน์ ํ๋กํ ์ฝ(GraphQL ๋ฑ)์ ํนํ๋ ๊ธฐ๋ฅ์ด ํ์ํ ๊ฒฝ์ฐ
๐ฐ ๊ฐ๊ฒฉ ์ ์ฑ ๊ณผ ํ๋ ์ ํํ๊ธฐ
Postman์ ๋ฌด๋ฃ๋ก๋ ์ถฉ๋ถํ ์ฌ์ฉํ ์ ์์ง๋ง,
ํ ๊ท๋ชจ๊ฐ ์ปค์ง๋ฉด ์ ๋ฃ ํ๋์ ๊ณ ๋ คํด๋ณผ ๋งํด์. ๐ณ
๐ Free
$0 / ์
โข ๊ฐ์ธ ์ํฌ์คํ์ด์ค
โข ๊ธฐ๋ณธ ํ์
๊ธฐ๋ฅ
โข 1,000 API ํธ์ถ/์
โข 3๋ช
๊น์ง ํ ๋ฉค๋ฒ
์ถ์ฒ: ๊ฐ์ธ ๊ฐ๋ฐ์,
์๊ท๋ชจ ํ๋ก์ ํธ
๐ผ Basic
$12 / ์
โข ํ ์ํฌ์คํ์ด์ค
โข ๊ณ ๊ธ ํ์
๊ธฐ๋ฅ
โข 10,000 API ํธ์ถ/์
โข ๋ฌด์ ํ ํ ๋ฉค๋ฒ
์ถ์ฒ: ์คํํธ์
,
์ค์ ๊ฐ๋ฐํ
๐ Professional
$29 / ์
โข ๋ชจ๋ Basic ๊ธฐ๋ฅ
โข Mock Server ๋ฌด์ ํ
โข 100,000 API ํธ์ถ/์
โข ๊ณ ๊ธ ๋ชจ๋ํฐ๋ง
์ถ์ฒ: ์ค๊ฒฌ ๊ธฐ์
,
ํ๋ฐํ ๊ฐ๋ฐํ
๐ข Enterprise
๋ง์ถค ๊ฐ๊ฒฉ
โข ๋ชจ๋ Pro ๊ธฐ๋ฅ
โข SSO ์ธ์ฆ
โข ์ ๋ด ์ง์
โข ์จํ๋ ๋ฏธ์ค ์ต์
์ถ์ฒ: ๋๊ธฐ์
,
๋ณด์ ์ค์ ํ๋ก์ ํธ
๐ก ํ๋ ์ ํ ๊ฐ์ด๋:
๋ฌด๋ฃ ํ๋์ผ๋ก ์์ํ์ธ์!
๋๋ถ๋ถ์ ๊ธฐ๋ฅ์ ๋ฌด๋ฃ๋ก ์ฌ์ฉํ ์ ์์ด์.
ํ์ด 3๋ช
์ดํ๋ผ๋ฉด ๋ฌด๋ฃ ํ๋์ผ๋ก๋ ์ถฉ๋ถํด์.
์ ๋ฃ ํ๋์ด ํ์ํ ๊ฒฝ์ฐ:
โข ํ์์ด 4๋ช
์ด์
โข Mock Server๋ฅผ ๋ง์ด ์ฌ์ฉ
โข API ํธ์ถ์ด ์ 1,000ํ ์ด๊ณผ
โข ๊ณ ๊ธ ๋ชจ๋ํฐ๋ง ํ์
ํ: ์ฐ๊ฐ ๊ฒฐ์ ํ๋ฉด ์ฝ 20% ํ ์ธ๋ฐ์ ์ ์์ด์!
๐ฏ ์ค์ ํ๋ก์ ํธ ์์
์ค์ ๋ก Postman์ ์ฌ์ฉํด์
๊ฐ๋จํ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค์ด๋ณผ๊น์? ๐ ๏ธ
๊ฐ๋จํ TODO ์ฑ์ API๋ฅผ Postman์ผ๋ก ํ ์คํธํด๋ณด๊ฒ ์ต๋๋ค!
"TODO App API"๋ผ๋ ์ด๋ฆ์ผ๋ก ์ ์ปฌ๋ ์ ์ ๋ง๋ค์ด์.
baseUrl: http://localhost:3000authToken: (๋ก๊ทธ์ธ ํ ์ ์ฅ๋ ์์ )
POST /auth/register - ํ์๊ฐ์
POST /auth/login - ๋ก๊ทธ์ธ
GET /todos - ๋ชฉ๋ก ์กฐํ
POST /todos - ์์ฑ
PUT /todos/:id - ์์
DELETE /todos/:id - ์ญ์
// 1. ํ์๊ฐ์
API (POST /auth/register)
{
"email": "test@example.com",
"password": "password123",
"name": "ํ
์คํธ ์ฌ์ฉ์"
}
// Tests ์คํฌ๋ฆฝํธ
pm.test("ํ์๊ฐ์
์ฑ๊ณต", function () {
pm.response.to.have.status(201);
const response = pm.response.json();
pm.expect(response.message).to.eql("ํ์๊ฐ์
์ฑ๊ณต");
});
// 2. ๋ก๊ทธ์ธ API (POST /auth/login)
{
"email": "test@example.com",
"password": "password123"
}
// Tests ์คํฌ๋ฆฝํธ
pm.test("๋ก๊ทธ์ธ ์ฑ๊ณต", function () {
pm.response.to.have.status(200);
const response = pm.response.json();
pm.expect(response.token).to.exist;
// ํ ํฐ ์ ์ฅ
pm.environment.set("authToken", response.token);
});
// 3. TODO ์์ฑ API (POST /todos)
// Headers: Authorization: Bearer {{authToken}}
{
"title": "Postman ํํ ๋ฆฌ์ผ ์๋ฃํ๊ธฐ",
"description": "๋ชจ๋ ๊ธฐ๋ฅ ํ
์คํธํด๋ณด๊ธฐ",
"completed": false
}
// Tests ์คํฌ๋ฆฝํธ
pm.test("TODO ์์ฑ ์ฑ๊ณต", function () {
pm.response.to.have.status(201);
const response = pm.response.json();
pm.expect(response.id).to.exist;
// TODO ID ์ ์ฅ
pm.environment.set("todoId", response.id);
});
// 4. TODO ๋ชฉ๋ก ์กฐํ (GET /todos)
// Headers: Authorization: Bearer {{authToken}}
// Tests ์คํฌ๋ฆฝํธ
pm.test("TODO ๋ชฉ๋ก ์กฐํ ์ฑ๊ณต", function () {
pm.response.to.have.status(200);
const response = pm.response.json();
pm.expect(response).to.be.an('array');
pm.expect(response.length).to.be.above(0);
});
// 5. TODO ์์ (PUT /todos/{{todoId}})
// Headers: Authorization: Bearer {{authToken}}
{
"title": "Postman ํํ ๋ฆฌ์ผ ์๋ฃํ๊ธฐ",
"description": "๋ชจ๋ ๊ธฐ๋ฅ ํ
์คํธ ์๋ฃ!",
"completed": true
}
// Tests ์คํฌ๋ฆฝํธ
pm.test("TODO ์์ ์ฑ๊ณต", function () {
pm.response.to.have.status(200);
const response = pm.response.json();
pm.expect(response.completed).to.be.true;
});
// 6. TODO ์ญ์ (DELETE /todos/{{todoId}})
// Headers: Authorization: Bearer {{authToken}}
// Tests ์คํฌ๋ฆฝํธ
pm.test("TODO ์ญ์ ์ฑ๊ณต", function () {
pm.response.to.have.status(204);
});
๐ฏ ์ด ํ๋ก์ ํธ์์ ๋ฐฐ์ธ ์ ์๋ ๊ฒ๋ค:
โ
ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ฉํ ๋์ ๋ฐ์ดํฐ ๊ด๋ฆฌ
โ
์ธ์ฆ ํ ํฐ ์๋ ์ ์ฅ ๋ฐ ์ฌ์ฉ
โ
์์ฒญ ๊ฐ ๋ฐ์ดํฐ ์ ๋ฌ (์ฒด์ด๋)
โ
์๋ํ๋ ํ
์คํธ ์์ฑ
โ
Collection Runner๋ก ์ ์ฒด ํ๋ก์ฐ ํ
์คํธ
์ด ํจํด์ ์ตํ๋ฉด ์ด๋ค API๋ ์ฝ๊ฒ ํ
์คํธํ ์ ์์ด์!
๐ Postman์ ๋ฏธ๋์ ํธ๋ ๋
Postman์ ๊ณ์ ์งํํ๊ณ ์์ด์.
์ต๊ทผ์๋ ์ด๋ค ์๋ก์ด ๊ธฐ๋ฅ๋ค์ด ์ถ๊ฐ๋๊ณ ์์๊น์? ๐ฎ
Postman์ AI๋ฅผ ํ์ฉํ ๊ธฐ๋ฅ๋ค์ ์ถ๊ฐํ๊ณ ์์ด์.
Postbot์ด๋ผ๋ AI ์ด์์คํดํธ๊ฐ
ํ
์คํธ ์คํฌ๋ฆฝํธ๋ฅผ ์๋์ผ๋ก ์์ฑํด์ฃผ๊ฑฐ๋,
API ๋ฌธ์๋ฅผ ๋ ์ ์์ฑํ ์ ์๋๋ก ๋์์ค์.
์๋ฅผ ๋ค์ด "์ด API์ ์๋ต ์๊ฐ์ ์ฒดํฌํ๋ ํ
์คํธ๋ฅผ ๋ง๋ค์ด์ค"๋ผ๊ณ ํ๋ฉด
์๋์ผ๋ก ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํด์ฃผ์ฃ ! ๐ค
์์ฆ ํธ๋ ๋๋ API-First ๊ฐ๋ฐ์ด์์.
์ฝ๋๋ฅผ ๋จผ์ ์์ฑํ๋ ๊ฒ ์๋๋ผ,
API ์คํ์ ๋จผ์ ์ ์ํ๊ณ ๊ทธ์ ๋ง์ถฐ ๊ฐ๋ฐํ๋ ๋ฐฉ์์ด์ฃ .
Postman์ OpenAPI(Swagger) ์คํ์ ์๋ฒฝํ๊ฒ ์ง์ํ๊ณ ,
์คํ์์ Mock Server๋ฅผ ์๋์ผ๋ก ์์ฑํ๊ฑฐ๋,
๋ฐ๋๋ก ์ปฌ๋ ์
์์ OpenAPI ์คํ์ ์ถ์ถํ ์๋ ์์ด์! ๐
Postman์ ๋ค์ํ ๋๊ตฌ๋ค๊ณผ ํตํฉ๋๊ณ ์์ด์:
โข GitHub/GitLab: API ์คํ์ Git์ผ๋ก ๋ฒ์ ๊ด๋ฆฌ
โข Slack/Teams: ํ
์คํธ ๊ฒฐ๊ณผ๋ฅผ ํ ์ฑ๋๋ก ์๋ฆผ
โข Datadog/New Relic: ๋ชจ๋ํฐ๋ง ๋ฐ์ดํฐ ์ฐ๋
โข AWS/Azure: ํด๋ผ์ฐ๋ ์๋น์ค์ ์ง์ ์ฐ๋
์์ผ๋ก๋ ๋ ๋ง์ ๋๊ตฌ๋ค๊ณผ ์ฐ๊ฒฐ๋ ๊ฑฐ์์! ๐
๐ ๊ณ์ ํ์ตํ๊ธฐ
Postman์ ๊ณ์ ๋ฐ์ ํ๊ณ ์์ด์.
์ต์ ๊ธฐ๋ฅ๊ณผ ๋ฒ ์คํธ ํ๋ํฐ์ค๋ฅผ ๋ฐฐ์ฐ๋ ค๋ฉด:
โข Postman Learning Center: ๊ณต์ ๋ฌธ์์ ํํ ๋ฆฌ์ผ
โข Postman Community: ํฌ๋ผ์์ ๋ค๋ฅธ ๊ฐ๋ฐ์๋ค๊ณผ ์ํต
โข YouTube ์ฑ๋: ๋น๋์ค ํํ ๋ฆฌ์ผ๊ณผ ์จ๋น๋
โข ์ฌ๋ฅ๋ท: ๊ฒฝํ ๋ง์ ๊ฐ๋ฐ์๋ค์ ์ค์ ๋
ธํ์ฐ
๊พธ์คํ ํ์ตํ๋ฉด์ ์ค๋ ฅ์ ํค์๋๊ฐ์ธ์! ๐ช
๐ฌ ๋ง๋ฌด๋ฆฌํ๋ฉฐ
์ฌ๊ธฐ๊น์ง Postman์ ๊ฑฐ์ ๋ชจ๋ ๊ฒ์ ์ดํด๋ดค์ด์! ๐
์ฒ์์๋ ๋จ์ํ API ํ
์คํ
๋๊ตฌ๋ก ์์ํ์ง๋ง,
์ง๊ธ์ API ๊ฐ๋ฐ์ ์ ์ฒด ๋ผ์ดํ์ฌ์ดํด์ ๊ด๋ฆฌํ๋
๊ฐ๋ ฅํ ํ๋ซํผ์ผ๋ก ์ฑ์ฅํ์ฃ .
ํ
์คํ
, ๋ฌธ์ํ, ํ์
, ๋ชจ๋ํฐ๋ง๊น์ง
๋ชจ๋ ๊ฑธ ํ ๊ณณ์์ ํด๊ฒฐํ ์ ์๋ค๋ ๊ฒ Postman์ ๊ฐ์ฅ ํฐ ๋งค๋ ฅ์ด์์. โจ
๐ฏ ํต์ฌ ์์ฝ:
1. ๊ธฐ๋ณธ ๊ธฐ๋ฅ
โข HTTP ์์ฒญ ํ
์คํ
โข ํ๊ฒฝ ๋ณ์ ๊ด๋ฆฌ
โข ์ปฌ๋ ์
์ผ๋ก API ์ ๋ฆฌ
2. ์๋ํ
โข ํ
์คํธ ์คํฌ๋ฆฝํธ ์์ฑ
โข Collection Runner
โข Newman์ผ๋ก CI/CD ํตํฉ
3. ํ์
โข ํ ์ํฌ์คํ์ด์ค
โข ์ค์๊ฐ ๋๊ธฐํ
โข ๋๊ธ๊ณผ ํผ๋๋ฐฑ
4. ๊ณ ๊ธ ๊ธฐ๋ฅ
โข Mock Server
โข API ๋ชจ๋ํฐ๋ง
โข ์๋ ๋ฌธ์ํ
โข Visualizer
API ๊ฐ๋ฐ์ ์ฒ์ ์์ํ๋ ๋ถ์ด๋ ,
์ด๋ฏธ ๊ฒฝํ์ด ๋ง์ ๊ฐ๋ฐ์๋ ,
Postman์ ์ฌ๋ฌ๋ถ์ ์์ฐ์ฑ์ ํฌ๊ฒ ๋์ฌ์ค ๊ฑฐ์์! ๐
์ค๋ ๋ฐฐ์ด ๋ด์ฉ์ ๋ฐํ์ผ๋ก
์ค์ ํ๋ก์ ํธ์ ์ ์ฉํด๋ณด์ธ์.
์ฒ์์๋ ๊ธฐ๋ณธ ๊ธฐ๋ฅ๋ถํฐ ์์ํด์,
์ ์ฐจ ๊ณ ๊ธ ๊ธฐ๋ฅ๋ค์ ์ตํ๋๊ฐ๋ฉด ๋ผ์.
๊ทธ๋ฆฌ๊ณ ๋งํ๋ ๋ถ๋ถ์ด ์๋ค๋ฉด?
์ฌ๋ฅ๋ท์์ ๊ฒฝํ ๋ง์ ๊ฐ๋ฐ์๋ค์ ๋์์ ๋ฐ์๋ณด์ธ์!
์ค์ ๊ฒฝํ์์ ๋์จ ๋
ธํ์ฐ๋ค์ด ์ ๋ง ๋ง์ด ๋์์ด ๋ ๊ฑฐ์์. ๐
๐ ๊ณ์ ๋ฐฐ์ฐ๊ณ , ์คํํ๊ณ , ๊ณต์ ํ์ธ์!
API ๊ฐ๋ฐ์ ์ธ๊ณ๋ ๋ฌด๊ถ๋ฌด์งํด์.
Postman๊ณผ ํจ๊ป๋ผ๋ฉด ๋ ์ฆ๊ฒ๊ณ ํจ์จ์ ์ธ ๊ฐ๋ฐ์ด ๊ฐ๋ฅํฉ๋๋ค.
์ฌ๋ฌ๋ถ์ ์ฑ๊ณต์ ์ธ API ๊ฐ๋ฐ์ ์์ํฉ๋๋ค! ๐
๊ด๋ จ ํค์๋
๋๊ธ ์์ฑ
์ด ๊ธ์ ๋ํ ์ฌ๋ฌ๋ถ์ ์๊ฐ์ ๋ค๋ ค์ฃผ์ธ์
๋ก๊ทธ์ธ์ด ํ์ํฉ๋๋ค
๋๊ธ์ ์์ฑํ๋ ค๋ฉด ๋จผ์ ๋ก๊ทธ์ธํด์ฃผ์ธ์.
๋๊ธ 0
์ง์์ธ์ ์ฒ - ์ง์ ์ฌ์ฐ๊ถ ๋ณดํธ ๊ณ ์ง
์ง์ ์ฌ์ฐ๊ถ ๋ณดํธ ๊ณ ์ง
- ์ ์๊ถ ๋ฐ ์์ ๊ถ: ๋ณธ ์ปจํ ์ธ ๋ ์ฌ๋ฅ๋ท์ ๋ ์ AI ๊ธฐ์ ๋ก ์์ฑ๋์์ผ๋ฉฐ, ๋ํ๋ฏผ๊ตญ ์ ์๊ถ๋ฒ ๋ฐ ๊ตญ์ ์ ์๊ถ ํ์ฝ์ ์ํด ๋ณดํธ๋ฉ๋๋ค.
- AI ์์ฑ ์ปจํ ์ธ ์ ๋ฒ์ ์ง์: ๋ณธ AI ์์ฑ ์ปจํ ์ธ ๋ ์ฌ๋ฅ๋ท์ ์ง์ ์ฐฝ์๋ฌผ๋ก ์ธ์ ๋๋ฉฐ, ๊ด๋ จ ๋ฒ๊ท์ ๋ฐ๋ผ ์ ์๊ถ ๋ณดํธ๋ฅผ ๋ฐ์ต๋๋ค.
- ์ฌ์ฉ ์ ํ: ์ฌ๋ฅ๋ท์ ๋ช ์์ ์๋ฉด ๋์ ์์ด ๋ณธ ์ปจํ ์ธ ๋ฅผ ๋ณต์ , ์์ , ๋ฐฐํฌ, ๋๋ ์์ ์ ์ผ๋ก ํ์ฉํ๋ ํ์๋ ์๊ฒฉํ ๊ธ์ง๋ฉ๋๋ค.
- ๋ฐ์ดํฐ ์์ง ๊ธ์ง: ๋ณธ ์ปจํ ์ธ ์ ๋ํ ๋ฌด๋จ ์คํฌ๋ํ, ํฌ๋กค๋ง, ๋ฐ ์๋ํ๋ ๋ฐ์ดํฐ ์์ง์ ๋ฒ์ ์ ์ฌ์ ๋์์ด ๋ฉ๋๋ค.
- AI ํ์ต ์ ํ: ์ฌ๋ฅ๋ท์ AI ์์ฑ ์ปจํ ์ธ ๋ฅผ ํ AI ๋ชจ๋ธ ํ์ต์ ๋ฌด๋จ ์ฌ์ฉํ๋ ํ์๋ ๊ธ์ง๋๋ฉฐ, ์ด๋ ์ง์ ์ฌ์ฐ๊ถ ์นจํด๋ก ๊ฐ์ฃผ๋ฉ๋๋ค.
์์ง ๋๊ธ์ด ์์ต๋๋ค.