{"id":2656,"date":"2026-10-24T08:47:53","date_gmt":"2026-10-24T08:47:53","guid":{"rendered":"https:\/\/wayhope.kro.kr\/?p=2656"},"modified":"2026-10-24T08:47:53","modified_gmt":"2026-10-24T08:47:53","slug":"api-%ed%85%8c%ec%8a%a4%ed%8a%b8-%eb%b0%8f-%ea%b3%84%ec%95%bd-%ea%b2%80%ec%a6%9d-postman-bruno-api-contract-testing","status":"publish","type":"post","link":"https:\/\/wayhope.kro.kr\/?p=2656","title":{"rendered":"API \ud14c\uc2a4\ud2b8 \ubc0f \uacc4\uc57d \uac80\uc99d #Postman, Bruno, API Contract Testing"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">API \ud14c\uc2a4\ud2b8\uc640 \uacc4\uc57d \uac80\uc99d\uc774 \ud544\uc694\ud55c \uc774\uc720<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">API\ub97c \uac1c\ubc1c\ud560 \ub54c \ub2e8\uc21c\ud788 \uc694\uccad\uc744 \ubcf4\ub0b4\uace0 \uc815\uc0c1\uc801\uc778 \uc751\ub2f5\uc744 \ubc1b\ub294 \uac83\ub9cc\uc73c\ub85c\ub294 \ucda9\ubd84\ud558\uc9c0 \uc54a\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uac1c\ubc1c\uc790\uac00 \uc758\ub3c4\ud55c \ub370\uc774\ud130\uac00 \ubc18\ud658\ub418\ub354\ub77c\ub3c4 HTTP \uc0c1\ud0dc \ucf54\ub4dc\uac00 \uc798\ubabb\ub418\uc5c8\uc744 \uc218 \uc788\uace0, \uc751\ub2f5 \ud544\ub4dc\uac00 \ub204\ub77d\ub418\uc5c8\uc744 \uc218 \uc788\uc73c\uba70, API \uba85\uc138\uc640 \uc2e4\uc81c \uad6c\ud604\uc774 \uc11c\ub85c \ub2e4\ub97c \uc218\ub3c4 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4 \ub2c9\ub124\uc784 \uc911\ubcf5 \uac80\uc0ac API\ub97c \uac1c\ubc1c\ud55c\ub2e4\uace0 \uac00\uc815\ud558\uc790.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud074\ub77c\uc774\uc5b8\ud2b8\ub294 \ub2c9\ub124\uc784\uc774 \uc911\ubcf5\ub418\uc5c8\uc744 \ub54c <code>409 Conflict<\/code>\ub97c \uae30\ub300\ud558\uc9c0\ub9cc, \uc11c\ubc84\ub294 <code>400 Bad Request<\/code>\ub97c \ubc18\ud658\ud55c\ub2e4. \uc11c\ubc84 \ub0b4\ubd80\uc5d0\uc11c\ub294 \uc911\ubcf5 \uac80\uc0ac\uac00 \uc815\uc0c1\uc801\uc73c\ub85c \ub3d9\uc791\ud558\ub354\ub77c\ub3c4 \ud074\ub77c\uc774\uc5b8\ud2b8\ub294 \uacc4\uc57d\uacfc \ub2e4\ub978 \uc751\ub2f5\uc744 \ubc1b\uac8c \ub41c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ub7ec\ud55c \ubb38\uc81c\ub97c \ubc29\uc9c0\ud558\ub824\uba74 API \ud14c\uc2a4\ud2b8\uc640 \uacc4\uc57d \uac80\uc99d\uc744 \uc218\ud589\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">API \ud14c\uc2a4\ud2b8 \ubc0f \uacc4\uc57d \uac80\uc99d\uc740 \ub2e4\uc74c \uc138 \uac00\uc9c0 \uad00\uc810\uc73c\ub85c \uad6c\ubd84\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>API \uae30\ub2a5 \ud14c\uc2a4\ud2b8<\/strong>: \uc694\uccad\uc744 \ubcf4\ub0c8\uc744 \ub54c \uae30\ub2a5\uc774 \uc62c\ubc14\ub974\uac8c \ub3d9\uc791\ud558\ub294\uac00?<\/li>\n\n\n\n<li><strong>API \uacc4\uc57d \ud14c\uc2a4\ud2b8<\/strong>: \uc694\uccad\uacfc \uc751\ub2f5\uc774 \uc57d\uc18d\ub41c \ud615\uc2dd\uacfc \uaddc\uce59\uc744 \uc900\uc218\ud558\ub294\uac00?<\/li>\n\n\n\n<li><strong>\uba85\uc138 \uc77c\uce58 \uac80\uc99d<\/strong>: OpenAPI \ub4f1\uc758 \uba85\uc138\uc640 \uc2e4\uc81c \uad6c\ud604\uc774 \uc77c\uce58\ud558\ub294\uac00?<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 \uc138 \uac00\uc9c0\ub294 \uc11c\ub85c \uc5f0\uad00\ub418\uc5b4 \uc788\uc9c0\ub9cc \uac80\uc99d\ud558\ub294 \ub300\uc0c1\uc740 \ub2e4\ub974\ub2e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Postman\uacfc Bruno<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">API\ub97c \uac1c\ubc1c\ud560 \ub54c\ub294 HTTP \uc694\uccad\uc744 \uc9c1\uc811 \uc0dd\uc131\ud558\uace0 \uc751\ub2f5\uc744 \ud655\uc778\ud560 \uc218 \uc788\ub294 \ub3c4\uad6c\uac00 \ud544\uc694\ud558\ub2e4. \ub300\ud45c\uc801\uc73c\ub85c Postman\uacfc Bruno\uac00 \uc788\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Postman<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Postman\uc740 HTTP API\ub97c \ud14c\uc2a4\ud2b8\ud558\uace0 \uc694\uccad\uc744 \uad00\ub9ac\ud560 \uc218 \uc788\ub294 API \uac1c\ubc1c \ub3c4\uad6c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc8fc\uc694 \uae30\ub2a5\uc740 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>GET, POST, PUT, PATCH, DELETE \uc694\uccad \uc0dd\uc131<\/li>\n\n\n\n<li>HTTP \ud5e4\ub354\uc640 \uc694\uccad \ubcf8\ubb38 \uc124\uc815<\/li>\n\n\n\n<li>\ud658\uacbd\ubcc0\uc218 \uad00\ub9ac<\/li>\n\n\n\n<li>\uc751\ub2f5 \uc0c1\ud0dc \ucf54\ub4dc\uc640 \ubcf8\ubb38 \ud655\uc778<\/li>\n\n\n\n<li>JavaScript \uae30\ubc18 \ud14c\uc2a4\ud2b8 \uc2a4\ud06c\ub9bd\ud2b8 \uc791\uc131<\/li>\n\n\n\n<li>\uc694\uccad \uceec\ub809\uc158 \uad6c\uc131 \ubc0f \uacf5\uc720<\/li>\n\n\n\n<li>\uc790\ub3d9\ud654\ub41c API \ud14c\uc2a4\ud2b8 \uc2e4\ud589<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4 \ud68c\uc6d0\uac00\uc785 API\ub97c \ud14c\uc2a4\ud2b8\ud55c\ub2e4\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \uc694\uccad\uc744 \uad6c\uc131\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\uc694\uccad<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>POST \/api\/v1\/users\nContent-Type: application\/json<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  \"nickname\": \"player01\",\n  \"email\": \"player01@example.com\",\n  \"password\": \"StrongPassword123!\"\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\uc608\uc0c1 \uc751\ub2f5<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>HTTP\/1.1 201 Created\nContent-Type: application\/json<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  \"id\": \"user-123\",\n  \"nickname\": \"player01\",\n  \"email\": \"player01@example.com\"\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Postman\uc5d0\uc11c\ub294 \uc751\ub2f5\uc744 \ud655\uc778\ud558\ub294 \ub370 \uadf8\uce58\uc9c0 \uc54a\uace0 \uc0c1\ud0dc \ucf54\ub4dc, \ub370\uc774\ud130 \ud0c0\uc785, \ud544\uc218 \ud544\ub4dc \ub4f1\uc744 \uc790\ub3d9\uc73c\ub85c \uac80\uc99d\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pm.test(\"\uc0c1\ud0dc \ucf54\ub4dc\ub294 201\uc774\ub2e4\", () =&gt; {\n  pm.response.to.have.status(201);\n});\n\npm.test(\"\uc751\ub2f5\uc5d0 \ud544\uc218 \ud544\ub4dc\uac00 \uc874\uc7ac\ud55c\ub2e4\", () =&gt; {\n  const body = pm.response.json();\n\n  pm.expect(body).to.have.property(\"id\");\n  pm.expect(body).to.have.property(\"nickname\");\n  pm.expect(body).to.have.property(\"email\");\n});\n\npm.test(\"\ub2c9\ub124\uc784\uc774 \ubb38\uc790\uc5f4\uc774\ub2e4\", () =&gt; {\n  const body = pm.response.json();\n\n  pm.expect(body.nickname).to.be.a(\"string\");\n});<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ub807\uac8c \uc791\uc131\ud558\uba74 \ub9e4\ubc88 \uc751\ub2f5\uc744 \ub208\uc73c\ub85c \ud655\uc778\ud558\uc9c0 \uc54a\uc544\ub3c4 \ud14c\uc2a4\ud2b8 \uacb0\uacfc\ub97c \uc790\ub3d9\uc73c\ub85c \ud310\ubcc4\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Bruno<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Bruno \uc5ed\uc2dc HTTP API\ub97c \ud14c\uc2a4\ud2b8\ud558\ub294 \ub3c4\uad6c\uc9c0\ub9cc, \uc694\uccad \ub370\uc774\ud130\ub97c \ud30c\uc77c\ub85c \uad00\ub9ac\ud558\ub294 \ubc29\uc2dd\uc5d0 \ucd08\uc810\uc744 \ub9de\ucd98\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc8fc\uc694 \ud2b9\uc9d5\uc740 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>API \uc694\uccad\uc744 \uceec\ub809\uc158\uc73c\ub85c \uad6c\uc131<\/li>\n\n\n\n<li>\uc694\uccad \ub370\uc774\ud130\ub97c \ud30c\uc77c \ud615\ud0dc\ub85c \uc800\uc7a5<\/li>\n\n\n\n<li>Git\uc744 \uc774\uc6a9\ud55c \ubc84\uc804 \uad00\ub9ac<\/li>\n\n\n\n<li>\ud658\uacbd\ubcc4 \ubcc0\uc218 \uc124\uc815<\/li>\n\n\n\n<li>JavaScript \uae30\ubc18 \ud14c\uc2a4\ud2b8 \uc791\uc131<\/li>\n\n\n\n<li>CLI\ub97c \ud1b5\ud55c \uc790\ub3d9\ud654 \ud14c\uc2a4\ud2b8 \uc2e4\ud589<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Bruno\ub294 API \uc694\uccad\uacfc \ud14c\uc2a4\ud2b8 \uc815\uc758\ub97c \uc800\uc7a5\uc18c\uc5d0\uc11c \ud568\uaed8 \uad00\ub9ac\ud558\uace0 \uc2f6\uc740 \ud504\ub85c\uc81d\ud2b8\uc5d0 \uc801\ud569\ud558\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4 \ud504\ub85c\uc81d\ud2b8 \uc800\uc7a5\uc18c\ub97c \ub2e4\uc74c\uacfc \uac19\uc774 \uad6c\uc131\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>project\/\n\u251c\u2500\u2500 src\/\n\u2502   \u251c\u2500\u2500 controllers\/\n\u2502   \u251c\u2500\u2500 services\/\n\u2502   \u2514\u2500\u2500 repositories\/\n\u251c\u2500\u2500 docs\/\n\u2502   \u2514\u2500\u2500 openapi.yaml\n\u2514\u2500\u2500 tests\/\n    \u2514\u2500\u2500 api\/\n        \u251c\u2500\u2500 collection.bru\n        \u251c\u2500\u2500 environments\/\n        \u2502   \u251c\u2500\u2500 local.bru\n        \u2502   \u251c\u2500\u2500 staging.bru\n        \u2502   \u2514\u2500\u2500 production.bru\n        \u2514\u2500\u2500 users\/\n            \u251c\u2500\u2500 create-user.bru\n            \u251c\u2500\u2500 get-user.bru\n            \u2514\u2500\u2500 update-user.bru<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc2e4\uc81c \uceec\ub809\uc158\uacfc \ud658\uacbd \ud30c\uc77c\uc758 \uad6c\uc870\ub294 Bruno\uc758 \uc124\uc815\uc5d0 \ub530\ub77c \ub2ec\ub77c\uc9c8 \uc218 \uc788\uc9c0\ub9cc, \ud575\uc2ec\uc740 \ud14c\uc2a4\ud2b8 \uc694\uccad\uc744 \ucf54\ub4dc\uc640 \ud568\uaed8 \ubc84\uc804 \uad00\ub9ac\ud560 \uc218 \uc788\ub2e4\ub294 \uc810\uc774\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Postman\uacfc Bruno\uc758 \uc120\ud0dd \uae30\uc900<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><th>\ube44\uad50 \ud56d\ubaa9<\/th><th>Postman<\/th><th>Bruno<\/th><\/tr><tr><td>\uc694\uccad \uc0dd\uc131 \ubc0f \uc751\ub2f5 \ud655\uc778<\/td><td>\uc9c0\uc6d0<\/td><td>\uc9c0\uc6d0<\/td><\/tr><tr><td>\uc790\ub3d9\ud654 \ud14c\uc2a4\ud2b8<\/td><td>\uc9c0\uc6d0<\/td><td>\uc9c0\uc6d0<\/td><\/tr><tr><td>\ud658\uacbd\ubcc0\uc218<\/td><td>\uc9c0\uc6d0<\/td><td>\uc9c0\uc6d0<\/td><\/tr><tr><td>Git \uae30\ubc18 \uc694\uccad \uad00\ub9ac<\/td><td>\uc9c0\uc6d0<\/td><td>\ud30c\uc77c \uc911\uc2ec \uc6cc\ud06c\ud50c\ub85c\uc5d0 \uc801\ud569<\/td><\/tr><tr><td>\ud611\uc5c5<\/td><td>\ud300 \ud611\uc5c5 \uae30\ub2a5 \uc81c\uacf5<\/td><td>\uc800\uc7a5\uc18c \uc911\uc2ec \ud611\uc5c5\uc5d0 \uc801\ud569<\/td><\/tr><tr><td>CLI \uc790\ub3d9\ud654<\/td><td>\uc9c0\uc6d0<\/td><td>\uc9c0\uc6d0<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\ub450 \ub3c4\uad6c \ubaa8\ub450 API \ud14c\uc2a4\ud2b8\uc5d0 \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4. \ud300\uc5d0\uc11c \uc774\ubbf8 Postman\uc744 \uc0ac\uc6a9\ud55c\ub2e4\uba74 \uae30\uc874 \uceec\ub809\uc158\uacfc \ud611\uc5c5 \ud658\uacbd\uc744 \ud65c\uc6a9\ud558\uba74 \ub41c\ub2e4. \uc694\uccad \uc815\uc758\ub97c Git \uc800\uc7a5\uc18c\uc5d0\uc11c \ucf54\ub4dc\uc640 \ud568\uaed8 \uad00\ub9ac\ud558\ub294 \uac83\uc774 \uc911\uc694\ud558\ub2e4\uba74 Bruno\ub3c4 \uc88b\uc740 \uc120\ud0dd\uc774\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc911\uc694\ud55c \uac83\uc740 \ud2b9\uc815 \ub3c4\uad6c\ub97c \uc120\ud0dd\ud558\ub294 \uac83\ubcf4\ub2e4 \ud14c\uc2a4\ud2b8\ub97c \ubc18\ubcf5 \uc2e4\ud589\ud560 \uc218 \uc788\uace0, \ud14c\uc2a4\ud2b8 \uacb0\uacfc\ub97c \uc790\ub3d9\uc73c\ub85c \ud310\ubcc4\ud560 \uc218 \uc788\ub294 \uad6c\uc870\ub97c \ub9cc\ub4dc\ub294 \uac83\uc774\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud658\uacbd\ubcc0\uc218\uc640 \ud14c\uc2a4\ud2b8 \ud658\uacbd<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">API\ub97c \ud14c\uc2a4\ud2b8\ud558\ub2e4 \ubcf4\uba74 \uac1c\ubc1c \ud658\uacbd, \ud14c\uc2a4\ud2b8 \ud658\uacbd, \uc2a4\ud14c\uc774\uc9d5 \ud658\uacbd \ub4f1 \uc11c\ub85c \ub2e4\ub978 \uc11c\ubc84\uc5d0 \uc694\uccad\uc744 \ubcf4\ub0b4\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ub54c \uc11c\ubc84 \uc8fc\uc18c\ub098 \uc778\uc99d \ud1a0\ud070\uc744 \uc694\uccad\ub9c8\ub2e4 \uc9c1\uc811 \uc785\ub825\ud558\uba74 \ud658\uacbd\uc774 \ubc14\ub014 \ub54c\ub9c8\ub2e4 \uc5ec\ub7ec \uc694\uccad\uc744 \uc218\uc815\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud658\uacbd\ubcc0\uc218\ub97c \uc0ac\uc6a9\ud558\uba74 \uc774\ub7ec\ud55c \ubb38\uc81c\ub97c \ud574\uacb0\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud658\uacbd\ubcc0\uc218\ub780?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\ud658\uacbd\ubcc0\uc218\ub294 \uc2e4\ud589 \ud658\uacbd\uc5d0 \ub530\ub77c \ub2ec\ub77c\uc9c0\ub294 \uac12\uc744 \ubcc4\ub3c4\ub85c \uad00\ub9ac\ud558\ub294 \ubc29\uc2dd\uc774\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4 \ub2e4\uc74c\uacfc \uac19\uc740 \uac12\uc744 \uad00\ub9ac\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><th>\ubcc0\uc218<\/th><th>\uc6a9\ub3c4<\/th><\/tr><tr><td><code>baseUrl<\/code><\/td><td>API \uc11c\ubc84\uc758 \uae30\ubcf8 \uc8fc\uc18c<\/td><\/tr><tr><td><code>accessToken<\/code><\/td><td>\uc778\uc99d\uc5d0 \uc0ac\uc6a9\ud558\ub294 \uc561\uc138\uc2a4 \ud1a0\ud070<\/td><\/tr><tr><td><code>userId<\/code><\/td><td>\ud14c\uc2a4\ud2b8 \ub300\uc0c1 \uc0ac\uc6a9\uc790 ID<\/td><\/tr><tr><td><code>testNickname<\/code><\/td><td>\ud14c\uc2a4\ud2b8\uc5d0 \uc0ac\uc6a9\ud560 \ub2c9\ub124\uc784<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\ud658\uacbd\uc5d0 \ub530\ub77c <code>baseUrl<\/code>\ub9cc \ubcc0\uacbd\ud558\uba74 \ub098\uba38\uc9c0 \uc694\uccad \uc815\uc758\ub97c \uc7ac\uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\uac1c\ubc1c \ud658\uacbd<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>baseUrl = http:\/\/localhost:3000<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\ud14c\uc2a4\ud2b8 \ud658\uacbd<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>baseUrl = https:\/\/staging-api.example.com<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\uc694\uccad \uc608\uc2dc<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>GET {{baseUrl}}\/api\/v1\/users\/{{userId}}\nAuthorization: Bearer {{accessToken}}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc704 \uc694\uccad\uc740 \ud658\uacbd\uc5d0 \ub530\ub77c \ub2e4\ub978 \uc11c\ubc84\ub85c \uc804\uc1a1\ub418\uc9c0\ub9cc \uc694\uccad \uc790\uccb4\ub294 \ub3d9\uc77c\ud558\uac8c \uc720\uc9c0\ub41c\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud658\uacbd\ubcc0\uc218\ub97c \uc0ac\uc6a9\ud558\ub294 \uc774\uc720<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\ud658\uacbd\ubcc0\uc218\ub97c \uc0ac\uc6a9\ud558\ub294 \ubaa9\uc801\uc740 \ub2e8\uc21c\ud55c \ud3b8\uc758\uc131\uc5d0 \uadf8\uce58\uc9c0 \uc54a\ub294\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uccab\uc9f8, \ud658\uacbd\ubcc4 \uc124\uc815\uc744 \uc694\uccad \uc815\uc758\uc640 \ubd84\ub9ac\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub458\uc9f8, \ub3d9\uc77c\ud55c \ud14c\uc2a4\ud2b8\ub97c \uc5ec\ub7ec \ud658\uacbd\uc5d0\uc11c \ubc18\ubcf5 \uc2e4\ud589\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc14b\uc9f8, \uc778\uc99d \ud1a0\ud070\uacfc \ud14c\uc2a4\ud2b8 \ub370\uc774\ud130\ub97c \uc911\uc559\uc5d0\uc11c \uad00\ub9ac\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub137\uc9f8, \ud658\uacbd\ub9c8\ub2e4 \ub2e4\ub978 \uc124\uc815\uc744 \uc0ac\uc6a9\ud558\ub354\ub77c\ub3c4 \ud14c\uc2a4\ud2b8 \ucf54\ub4dc\uc758 \uc911\ubcf5\uc744 \uc904\uc77c \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub2e4\ub9cc \uc6b4\uc601 \ud658\uacbd\uc5d0 \uc2e4\uc81c \ub370\uc774\ud130\ub97c \ubcc0\uacbd\ud558\ub294 \ud14c\uc2a4\ud2b8\ub97c \ubb34\ubd84\ubcc4\ud558\uac8c \uc2e4\ud589\ud574\uc11c\ub294 \uc548 \ub41c\ub2e4. \ud14c\uc2a4\ud2b8\uc6a9 \uacc4\uc815\uacfc \ub370\uc774\ud130\ub97c \ubcc4\ub3c4\ub85c \uc900\ube44\ud558\uace0, \ud30c\uad34\uc801\uc778 \uc694\uccad\uc740 \uc2e4\ud589 \ub300\uc0c1\uc744 \uc81c\ud55c\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub610\ud55c \ube44\ubc00\ubc88\ud638, API \ud0a4, \uc2e4\uc81c \uc561\uc138\uc2a4 \ud1a0\ud070 \ub4f1\uc758 \ubbfc\uac10\ud55c \uac12\uc744 Git \uc800\uc7a5\uc18c\uc5d0 \ucee4\ubc0b\ud574\uc11c\ub294 \uc548 \ub41c\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud14c\uc2a4\ud2b8 \ud658\uacbd\uc744 \ubd84\ub9ac\ud558\ub294 \uc774\uc720<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\ud14c\uc2a4\ud2b8 \ud658\uacbd\uc740 \uc2e4\uc81c \uc11c\ube44\uc2a4\uc5d0 \uc601\ud5a5\uc744 \uc8fc\uc9c0 \uc54a\uace0 API\ub97c \uac80\uc99d\ud558\uae30 \uc704\ud55c \uacf5\uac04\uc774\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4 \ud68c\uc6d0\uac00\uc785 API\ub97c \ud14c\uc2a4\ud2b8\ud560 \ub54c \uc6b4\uc601 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0 \ud14c\uc2a4\ud2b8 \uacc4\uc815\uc744 \uacc4\uc18d \uc0dd\uc131\ud55c\ub2e4\uba74 \ub370\uc774\ud130\uac00 \uc624\uc5fc\ub420 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub530\ub77c\uc11c \ub2e4\uc74c\uacfc \uac19\uc774 \ud658\uacbd\uc744 \ubd84\ub9ac\ud558\ub294 \uac83\uc774 \uc88b\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\uac1c\ubc1c \ud658\uacbd\n  \u2514\u2500\u2500 \uac1c\ubc1c\uc6a9 API \uc11c\ubc84\n      \u2514\u2500\u2500 \uac1c\ubc1c\uc6a9 \ub370\uc774\ud130\ubca0\uc774\uc2a4\n\n\ud14c\uc2a4\ud2b8 \ud658\uacbd\n  \u2514\u2500\u2500 \ud14c\uc2a4\ud2b8\uc6a9 API \uc11c\ubc84\n      \u2514\u2500\u2500 \ud14c\uc2a4\ud2b8\uc6a9 \ub370\uc774\ud130\ubca0\uc774\uc2a4\n\n\uc2a4\ud14c\uc774\uc9d5 \ud658\uacbd\n  \u2514\u2500\u2500 \uc6b4\uc601\uacfc \uc720\uc0ac\ud55c \uad6c\uc131\uc758 API \uc11c\ubc84\n      \u2514\u2500\u2500 \uac80\uc99d\uc6a9 \ub370\uc774\ud130\ubca0\uc774\uc2a4\n\n\uc6b4\uc601 \ud658\uacbd\n  \u2514\u2500\u2500 \uc2e4\uc81c \uc11c\ube44\uc2a4 API \uc11c\ubc84\n      \u2514\u2500\u2500 \uc6b4\uc601 \ub370\uc774\ud130\ubca0\uc774\uc2a4<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ud658\uacbd\uc744 \ubd84\ub9ac\ud558\uba74 \ud14c\uc2a4\ud2b8 \ub370\uc774\ud130\uac00 \uc2e4\uc81c \uc0ac\uc6a9\uc790 \ub370\uc774\ud130\uc5d0 \uc601\ud5a5\uc744 \uc8fc\ub294 \ubb38\uc81c\ub97c \uc904\uc77c \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub2e8, \ud658\uacbd\uc744 \ubd84\ub9ac\ud558\ub294 \uac83\ub9cc\uc73c\ub85c \uc548\uc804\uc131\uc774 \uc644\uc131\ub418\ub294 \uac83\uc740 \uc544\ub2c8\ub2e4. \uc811\uadfc \uad8c\ud55c, \ub124\ud2b8\uc6cc\ud06c \uc124\uc815, \ub370\uc774\ud130 \ucd08\uae30\ud654 \uc815\ucc45, \uc678\ubd80 \uacb0\uc81c\ub098 \uc54c\ub9bc \uc11c\ube44\uc2a4\uc758 \ud638\ucd9c \uc5ec\ubd80\ub3c4 \ud568\uaed8 \uad00\ub9ac\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">API \uacc4\uc57d \ud14c\uc2a4\ud2b8\ub780?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">API \uacc4\uc57d \ud14c\uc2a4\ud2b8(API Contract Testing)\ub294 \ud074\ub77c\uc774\uc5b8\ud2b8\uc640 \uc11c\ubc84 \uc0ac\uc774\uc5d0 \ud569\uc758\ub41c \uc694\uccad \ubc0f \uc751\ub2f5 \uaddc\uce59\uc744 \uac80\uc99d\ud558\ub294 \ud14c\uc2a4\ud2b8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc5ec\uae30\uc11c \uacc4\uc57d\uc740 API\ub97c \uc0ac\uc6a9\ud558\ub294 \uce21\uacfc \uc81c\uacf5\ud558\ub294 \uce21\uc774 \uc11c\ub85c \uc9c0\ucf1c\uc57c \ud558\ub294 \uc57d\uc18d\uc744 \uc758\ubbf8\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc77c\ubc18\uc801\uc73c\ub85c \uacc4\uc57d\uc5d0\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \ud56d\ubaa9\uc774 \ud3ec\ud568\ub41c\ub2e4.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>HTTP \uba54\uc11c\ub4dc\uc640 URL<\/li>\n\n\n\n<li>\uc694\uccad \ud5e4\ub354\uc640 \uc778\uc99d \ubc29\uc2dd<\/li>\n\n\n\n<li>\uc694\uccad \ubcf8\ubb38\uc758 \ud544\ub4dc \ubc0f \ub370\uc774\ud130 \ud0c0\uc785<\/li>\n\n\n\n<li>\ud544\uc218 \ud544\ub4dc\uc640 \uc120\ud0dd \ud544\ub4dc<\/li>\n\n\n\n<li>\uc751\ub2f5 \uc0c1\ud0dc \ucf54\ub4dc<\/li>\n\n\n\n<li>\uc751\ub2f5 \ubcf8\ubb38\uc758 \uad6c\uc870<\/li>\n\n\n\n<li>\uc624\ub958 \uc751\ub2f5 \ud615\uc2dd<\/li>\n\n\n\n<li>\ud544\ub4dc\uc758 \uc758\ubbf8\uc640 \uc81c\uc57d \uc870\uac74<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4 \ub2c9\ub124\uc784 \ubcc0\uacbd API\uc758 \uacc4\uc57d\uc774 \ub2e4\uc74c\uacfc \uac19\ub2e4\uace0 \uac00\uc815\ud558\uc790.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>PATCH \/api\/v1\/users\/me\/nickname\nAuthorization: Bearer &lt;accessToken&gt;\nContent-Type: application\/json<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc694\uccad \ubcf8\ubb38:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  \"nickname\": \"new_player\"\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc131\uacf5 \uc751\ub2f5:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>HTTP\/1.1 200 OK<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  \"nickname\": \"new_player\"\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc624\ub958 \uc751\ub2f5:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>HTTP\/1.1 409 Conflict<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  \"code\": \"NICKNAME_ALREADY_EXISTS\",\n  \"message\": \"\uc774\ubbf8 \uc0ac\uc6a9 \uc911\uc778 \ub2c9\ub124\uc784\uc785\ub2c8\ub2e4.\"\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 \uacc4\uc57d\uc744 \uae30\uc900\uc73c\ub85c \uc2e4\uc81c \uc11c\ubc84\uac00 \uc62c\ubc14\ub978 \uc0c1\ud0dc \ucf54\ub4dc\uc640 \uc751\ub2f5 \uad6c\uc870\ub97c \ubc18\ud658\ud558\ub294\uc9c0 \uac80\uc99d\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\uae30\ub2a5 \ud14c\uc2a4\ud2b8\uc640 \uacc4\uc57d \ud14c\uc2a4\ud2b8\uc758 \ucc28\uc774<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\uae30\ub2a5 \ud14c\uc2a4\ud2b8\ub294 \ube44\uc988\ub2c8\uc2a4 \ub85c\uc9c1\uc774 \uc62c\ubc14\ub974\uac8c \ub3d9\uc791\ud558\ub294\uc9c0 \ud655\uc778\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4 \ub2c9\ub124\uc784\uc744 \ubcc0\uacbd\ud55c \ud6c4 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0 \uc0c8\ub85c\uc6b4 \ub2c9\ub124\uc784\uc774 \uc800\uc7a5\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud558\ub294 \uac83\uc774 \uae30\ub2a5 \ud14c\uc2a4\ud2b8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ubc18\uba74 \uacc4\uc57d \ud14c\uc2a4\ud2b8\ub294 \ud074\ub77c\uc774\uc5b8\ud2b8\uc640 \uc11c\ubc84 \uc0ac\uc774\uc758 \uc778\ud130\ud398\uc774\uc2a4\uac00 \ud569\uc758\ub41c \uaddc\uce59\uc744 \uc900\uc218\ud558\ub294\uc9c0 \ud655\uc778\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4 \ub2c9\ub124\uc784 \uc911\ubcf5 \uc2dc <code>409 Conflict<\/code>\ub97c \ubc18\ud658\ud558\uace0, \uc751\ub2f5\uc5d0 <code>code<\/code>\uc640 <code>message<\/code> \ud544\ub4dc\uac00 \uc874\uc7ac\ud558\ub294\uc9c0 \ud655\uc778\ud558\ub294 \uac83\uc774 \uacc4\uc57d \ud14c\uc2a4\ud2b8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub450 \ud14c\uc2a4\ud2b8\ub294 \uc11c\ub85c \ub300\uccb4\ud558\ub294 \uad00\uacc4\uac00 \uc544\ub2c8\ub2e4. \ube44\uc988\ub2c8\uc2a4 \ub85c\uc9c1\uc774 \uc815\ud655\ud558\ub354\ub77c\ub3c4 \uc751\ub2f5 \uacc4\uc57d\uc774 \uc798\ubabb\ub420 \uc218 \uc788\uace0, \uc751\ub2f5 \ud615\uc2dd\uc774 \uc815\ud655\ud558\ub354\ub77c\ub3c4 \ub370\uc774\ud130 \uc800\uc7a5 \ub85c\uc9c1\uc774 \uc798\ubabb\ub420 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">API \uacc4\uc57d \ud14c\uc2a4\ud2b8 \uad6c\ud604\ud558\uae30<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Node.js\uc640 TypeScript \uae30\ubc18\uc758 API\ub97c \uc608\uc2dc\ub85c \uc0b4\ud3b4\ubcf4\uc790.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub2c9\ub124\uc784 \ubcc0\uacbd API\uac00 \ub2e4\uc74c\uacfc \uac19\uc740 \uaddc\uce59\uc744 \uac00\uc9c4\ub2e4\uace0 \uac00\uc815\ud55c\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><th>\uc0c1\ud669<\/th><th>HTTP \uc0c1\ud0dc \ucf54\ub4dc<\/th><th>\uc624\ub958 \ucf54\ub4dc<\/th><\/tr><tr><td>\ub2c9\ub124\uc784 \ubcc0\uacbd \uc131\uacf5<\/td><td>200<\/td><td>\uc5c6\uc74c<\/td><\/tr><tr><td>\uc778\uc99d\ub418\uc9c0 \uc54a\uc740 \uc694\uccad<\/td><td>401<\/td><td><code>UNAUTHORIZED<\/code><\/td><\/tr><tr><td>\ub2c9\ub124\uc784 \ud615\uc2dd \uc624\ub958<\/td><td>400<\/td><td><code>INVALID_NICKNAME<\/code><\/td><\/tr><tr><td>\ub2c9\ub124\uc784 \uc911\ubcf5<\/td><td>409<\/td><td><code>NICKNAME_ALREADY_EXISTS<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 \uaddc\uce59\uc744 \ud14c\uc2a4\ud2b8 \ucf54\ub4dc\ub85c \uc791\uc131\ud558\uba74 \uc11c\ubc84 \uad6c\ud604\uc774 \uacc4\uc57d\uc744 \uc900\uc218\ud558\ub294\uc9c0 \ubc18\ubcf5\uc801\uc73c\ub85c \uac80\uc99d\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\uc815\uc0c1 \uc751\ub2f5 \uac80\uc99d<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Postman \ud14c\uc2a4\ud2b8 \uc2a4\ud06c\ub9bd\ud2b8\uc758 \uc608\uc2dc\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pm.test(\"\uc751\ub2f5 \uc0c1\ud0dc \ucf54\ub4dc\ub294 200\uc774\ub2e4\", () =&gt; {\n  pm.response.to.have.status(200);\n});\n\npm.test(\"\uc751\ub2f5 \ubcf8\ubb38\uc774 \uacc4\uc57d\uc744 \uc900\uc218\ud55c\ub2e4\", () =&gt; {\n  const body = pm.response.json();\n\n  pm.expect(body).to.have.property(\"nickname\");\n  pm.expect(body.nickname).to.be.a(\"string\");\n  pm.expect(body.nickname).to.eql(\"new_player\");\n});<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 \ud14c\uc2a4\ud2b8\ub294 \uc815\uc0c1 \uc751\ub2f5\uc758 \uc0c1\ud0dc \ucf54\ub4dc\uc640 \ud544\uc218 \ud544\ub4dc, \ub370\uc774\ud130 \ud0c0\uc785, \ubc18\ud658\uac12\uc744 \uac80\uc99d\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub2e8\uc21c\ud788 \uc0c1\ud0dc \ucf54\ub4dc\ub9cc \ud655\uc778\ud558\ub294 \uac83\ubcf4\ub2e4 \uc2e4\uc81c \uacc4\uc57d\uc744 \ub354 \uc815\ud655\ud558\uac8c \uac80\uc0ac\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\uc624\ub958 \uc751\ub2f5 \uac80\uc99d<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\ub2c9\ub124\uc784\uc774 \uc774\ubbf8 \uc0ac\uc6a9 \uc911\uc77c \ub54c\uc758 \ud14c\uc2a4\ud2b8\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \uc791\uc131\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pm.test(\"\ub2c9\ub124\uc784 \uc911\ubcf5 \uc2dc 409\ub97c \ubc18\ud658\ud55c\ub2e4\", () =&gt; {\n  pm.response.to.have.status(409);\n});\n\npm.test(\"\uc624\ub958 \uc751\ub2f5 \ud615\uc2dd\uc774 \uc62c\ubc14\ub974\ub2e4\", () =&gt; {\n  const body = pm.response.json();\n\n  pm.expect(body.code)\n    .to.eql(\"NICKNAME_ALREADY_EXISTS\");\n\n  pm.expect(body.message).to.be.a(\"string\");\n});<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 \ud14c\uc2a4\ud2b8\ub97c \uc2e4\ud589\ud558\ub824\uba74 \uc694\uccad\uc5d0 \uc0ac\uc6a9\ud55c \ub2c9\ub124\uc784\uc774 \uc2e4\uc81c\ub85c \uc911\ubcf5\ub41c \uc0c1\ud0dc\uc5ec\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub530\ub77c\uc11c \ud14c\uc2a4\ud2b8 \ub370\uc774\ud130 \uc900\ube44 \ub2e8\uacc4\uc5d0\uc11c \ud574\ub2f9 \ub2c9\ub124\uc784\uc744 \ubbf8\ub9ac \uc0dd\uc131\ud558\uac70\ub098, \ud14c\uc2a4\ud2b8 \uc804\uc6a9 \ub370\uc774\ud130\ub97c \ucd08\uae30\ud654\ud558\ub294 \uc808\ucc28\uac00 \ud544\uc694\ud558\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud14c\uc2a4\ud2b8 \ub370\uc774\ud130\uac00 \uc900\ube44\ub418\uc9c0 \uc54a\uc558\ub2e4\uba74 \ud14c\uc2a4\ud2b8 \uc790\uccb4\uac00 \ubd88\uc548\uc815\ud574\uc9c8 \uc218 \uc788\ub2e4. \ud14c\uc2a4\ud2b8\uc758 \uc131\uacf5 \uc5ec\ubd80\uac00 \uc678\ubd80 \uc0c1\ud0dc\ub098 \uc2e4\ud589 \uc21c\uc11c\uc5d0 \ub530\ub77c \ub2ec\ub77c\uc9c0\uc9c0 \uc54a\ub3c4\ub85d \uc124\uacc4\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\uc785\ub825\uac12 \uac80\uc99d \ud14c\uc2a4\ud2b8<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\uc798\ubabb\ub41c \ub2c9\ub124\uc784\uc774 \uc804\ub2ec\ub418\uc5c8\uc744 \ub54c \uc11c\ubc84\uac00 \uc801\uc808\ud55c \uc624\ub958\ub97c \ubc18\ud658\ud558\ub294\uc9c0\ub3c4 \uac80\uc99d\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4 \ub2c9\ub124\uc784\uc5d0 \ud5c8\uc6a9\ub418\uc9c0 \uc54a\ub294 \ubb38\uc790\uac00 \ud3ec\ud568\ub41c \uacbd\uc6b0 \ub2e4\uc74c\uacfc \uac19\uc740 \ud14c\uc2a4\ud2b8\ub97c \uc791\uc131\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pm.test(\"\uc798\ubabb\ub41c \ub2c9\ub124\uc784\uc740 400\uc744 \ubc18\ud658\ud55c\ub2e4\", () =&gt; {\n  pm.response.to.have.status(400);\n});\n\npm.test(\"\uc624\ub958 \ucf54\ub4dc\uac00 \uc62c\ubc14\ub974\ub2e4\", () =&gt; {\n  const body = pm.response.json();\n\n  pm.expect(body.code).to.eql(\"INVALID_NICKNAME\");\n});<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 \ud14c\uc2a4\ud2b8\ub294 \uc785\ub825\uac12 \uac80\uc99d \uaddc\uce59\uc774 \uc11c\ubc84\uc758 \uc678\ubd80 \uc778\ud130\ud398\uc774\uc2a4\uc5d0 \uc62c\ubc14\ub974\uac8c \ubc18\uc601\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub2e8, \ub2c9\ub124\uc784 \uc911\ubcf5\uc740 \uc785\ub825 \ud615\uc2dd \uc624\ub958\uc640 \ub2e4\ub978 \ubb38\uc81c\ub2e4. \ud615\uc2dd\uc774 \uc720\ud6a8\ud55c \ub2c9\ub124\uc784\uc774 \uc774\ubbf8 \uc874\uc7ac\ud55c\ub2e4\uba74 <code>409 Conflict<\/code>\ub97c \ubc18\ud658\ud558\ub294 \uc2dd\uc73c\ub85c \uc624\ub958\uc758 \uc758\ubbf8\ub97c \uad6c\ubd84\ud558\ub294 \uac83\uc774 \uc88b\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">OpenAPI \uba85\uc138\uc640 \uc2e4\uc81c \uad6c\ud604\uc758 \uc77c\uce58 \uc5ec\ubd80 \uac80\uc99d<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\uacc4\uc57d \ud14c\uc2a4\ud2b8\uc5d0\uc11c \uc911\uc694\ud55c \ubd80\ubd84\uc740 \ud14c\uc2a4\ud2b8 \uae30\uc900\uc744 \uc5b4\ub514\uc5d0\uc11c \uac00\uc838\uc624\ub294\uac00\uc774\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud14c\uc2a4\ud2b8 \ucf54\ub4dc\uc5d0 \uc608\uc0c1 \uc0c1\ud0dc \ucf54\ub4dc\uc640 \uc751\ub2f5 \ud544\ub4dc\ub97c \uc9c1\uc811 \uc791\uc131\ud560 \uc218 \uc788\uc9c0\ub9cc, \uba85\uc138\uc640 \ud14c\uc2a4\ud2b8 \ucf54\ub4dc\uc5d0 \ub3d9\uc77c\ud55c \ub0b4\uc6a9\uc744 \ub530\ub85c \uc791\uc131\ud558\uba74 \ub450 \uacf3\uc758 \uc815\uc758\uac00 \uc11c\ub85c \ub2ec\ub77c\uc9c8 \uc704\ud5d8\uc774 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4 OpenAPI \uba85\uc138\uc5d0\ub294 \ub2c9\ub124\uc784 \uc911\ubcf5 \uc2dc <code>409<\/code>\ub97c \ubc18\ud658\ud55c\ub2e4\uace0 \uc791\uc131\ud588\uc9c0\ub9cc, \ud14c\uc2a4\ud2b8 \ucf54\ub4dc\uc5d0\ub294 <code>400<\/code>\uc744 \uae30\ub300\ud558\ub3c4\ub85d \uc791\uc131\ud588\ub2e4\uba74 \ud14c\uc2a4\ud2b8 \uc790\uccb4\uac00 \uc798\ubabb\ub41c \uacc4\uc57d\uc744 \uac80\uc99d\ud558\uac8c \ub41c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ub97c \ubc29\uc9c0\ud558\ub824\uba74 OpenAPI \uba85\uc138\ub97c \uacc4\uc57d\uc758 \uae30\uc900\uc73c\ub85c \uc0bc\uace0, \ud14c\uc2a4\ud2b8\uc5d0\uc11c \uba85\uc138\uc640 \uc2e4\uc81c \uc751\ub2f5\uc744 \ube44\uad50\ud558\ub294 \uad6c\uc870\ub97c \uace0\ub824\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">OpenAPI \uba85\uc138 \uc608\uc2dc<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>openapi: 3.0.3\n\ninfo:\n  title: User API\n  version: 1.0.0\n\npaths:\n  \/api\/v1\/users\/me\/nickname:\n    patch:\n      summary: \ub2c9\ub124\uc784 \ubcc0\uacbd\n      operationId: updateMyNickname\n\n      security:\n        - bearerAuth: &#91;]\n\n      requestBody:\n        required: true\n        content:\n          application\/json:\n            schema:\n              type: object\n              required:\n                - nickname\n              properties:\n                nickname:\n                  type: string\n                  minLength: 2\n                  maxLength: 16\n\n      responses:\n        \"200\":\n          description: \ub2c9\ub124\uc784 \ubcc0\uacbd \uc131\uacf5\n          content:\n            application\/json:\n              schema:\n                $ref: \"#\/components\/schemas\/NicknameResponse\"\n\n        \"400\":\n          description: \ub2c9\ub124\uc784 \ud615\uc2dd \uc624\ub958\n          content:\n            application\/json:\n              schema:\n                $ref: \"#\/components\/schemas\/ErrorResponse\"\n\n        \"401\":\n          description: \uc778\uc99d \uc2e4\ud328\n          content:\n            application\/json:\n              schema:\n                $ref: \"#\/components\/schemas\/ErrorResponse\"\n\n        \"409\":\n          description: \ub2c9\ub124\uc784 \uc911\ubcf5\n          content:\n            application\/json:\n              schema:\n                $ref: \"#\/components\/schemas\/ErrorResponse\"\n\ncomponents:\n  securitySchemes:\n    bearerAuth:\n      type: http\n      scheme: bearer\n      bearerFormat: JWT\n\n  schemas:\n    NicknameResponse:\n      type: object\n      required:\n        - nickname\n      properties:\n        nickname:\n          type: string\n\n    ErrorResponse:\n      type: object\n      required:\n        - code\n        - message\n      properties:\n        code:\n          type: string\n        message:\n          type: string<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 \uba85\uc138\ub294 API\uc758 \uc694\uccad \ud615\uc2dd, \uc778\uc99d \ubc29\uc2dd, \uc815\uc0c1 \uc751\ub2f5 \ubc0f \uc624\ub958 \uc751\ub2f5\uc744 \uc815\uc758\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub2e4\ub9cc \uc774 \uc608\uc2dc\ub294 \uacc4\uc57d\uc758 \uae30\ubcf8 \uad6c\uc870\ub97c \ubcf4\uc5ec\uc8fc\uae30 \uc704\ud55c \uac83\uc774\ub2e4. \uc2e4\uc81c \uc11c\ube44\uc2a4\uc5d0\uc11c\ub294 \ub2c9\ub124\uc784 \uc815\uaddc\uc2dd, \uacf5\ubc31 \ud5c8\uc6a9 \uc5ec\ubd80, \ubb38\uc790 \uae38\uc774 \uacc4\uc0b0 \uae30\uc900, \uc624\ub958 \ucf54\ub4dc\uc758 \ud5c8\uc6a9 \uac12 \ub4f1\ub3c4 \ud544\uc694\uc5d0 \ub530\ub77c \uba85\uc2dc\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\uba85\uc138\uc640 \uad6c\ud604\uc744 \uac80\uc99d\ud558\ub294 \ubc29\ubc95<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\uba85\uc138\uc640 \uc2e4\uc81c \uad6c\ud604\uc758 \uc77c\uce58 \uc5ec\ubd80\ub97c \uac80\uc99d\ud558\ub294 \ubc29\ubc95\uc740 \uc5ec\ub7ec \uac00\uc9c0\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\uba85\uc138 \uae30\ubc18 \uc751\ub2f5 \uac80\uc99d<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc2e4\uc81c API\uc5d0 \uc694\uccad\uc744 \ubcf4\ub0b4\uace0 \uc751\ub2f5 \uc0c1\ud0dc \ucf54\ub4dc\uc640 \ubcf8\ubb38\uc774 OpenAPI \uba85\uc138\uc5d0 \uc815\uc758\ub41c \uaddc\uce59\uc744 \ub9cc\uc871\ud558\ub294\uc9c0 \uac80\uc0ac\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\uba85\uc138 \uae30\ubc18 \ud14c\uc2a4\ud2b8 \uc0dd\uc131<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">OpenAPI \uba85\uc138\ub97c \uc774\uc6a9\ud574 \uc5ec\ub7ec \uc694\uccad\uacfc \uc785\ub825\uac12\uc744 \uc0dd\uc131\ud558\uace0, \uc2e4\uc81c API\uc758 \uc751\ub2f5\uc774 \uacc4\uc57d\uc5d0 \ub9de\ub294\uc9c0 \ud655\uc778\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\ud074\ub77c\uc774\uc5b8\ud2b8\u00b7\uc11c\ubc84 \uacc4\uc57d \uac80\uc99d<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud074\ub77c\uc774\uc5b8\ud2b8\uac00 \uae30\ub300\ud558\ub294 \uc778\ud130\ud398\uc774\uc2a4\uc640 \uc11c\ubc84\uac00 \uc81c\uacf5\ud558\ub294 \uc778\ud130\ud398\uc774\uc2a4\uac00 \uc11c\ub85c \ud638\ud658\ub418\ub294\uc9c0 \ud655\uc778\ud55c\ub2e4. \ud2b9\ud788 \uc5ec\ub7ec \ud300\uc774 \ub3c5\ub9bd\uc801\uc73c\ub85c \uac1c\ubc1c\ud558\ub294 \ud658\uacbd\uc5d0\uc11c \uc720\uc6a9\ud558\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>CI \ud30c\uc774\ud504\ub77c\uc778 \uac80\uc99d<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ucf54\ub4dc\uac00 \ubcc0\uacbd\ub420 \ub54c \uba85\uc138 \uac80\uc99d\uacfc API \ud14c\uc2a4\ud2b8\ub97c \uc790\ub3d9 \uc2e4\ud589\ud574 \uacc4\uc57d \uc704\ubc18\uc744 \uc870\uae30\uc5d0 \ubc1c\uacac\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ub54c OpenAPI \ud30c\uc77c\uc758 \ubb38\ubc95\uc774 \uc62c\ubc14\ub978\uc9c0\ub9cc \uac80\uc0ac\ud574\uc11c\ub294 \uc2e4\uc81c \uad6c\ud604\uacfc\uc758 \uc77c\uce58 \uc5ec\ubd80\ub97c \ubcf4\uc7a5\ud560 \uc218 \uc5c6\ub2e4. \uba85\uc138 \uc790\uccb4\uc758 \uc720\ud6a8\uc131 \uac80\uc0ac\uc640 \uc2e4\uc81c \uc11c\ubc84\ub97c \ub300\uc0c1\uc73c\ub85c \ud55c \uacc4\uc57d \uac80\uc99d\uc740 \uad6c\ubd84\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">API \uacc4\uc57d \ud14c\uc2a4\ud2b8 \uc790\ub3d9\ud654<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">API \ud14c\uc2a4\ud2b8\ub97c \uc218\ub3d9\uc73c\ub85c \uc2e4\ud589\ud558\ub294 \ubc29\uc2dd\uc740 \ucd08\uae30 \uac1c\ubc1c \ub2e8\uacc4\uc5d0\uc11c\ub294 \uc720\uc6a9\ud558\uc9c0\ub9cc, API \uc218\uac00 \ub298\uc5b4\ub0a0\uc218\ub85d \ubaa8\ub4e0 \uc694\uccad\uc744 \ubc18\ubcf5\ud574\uc11c \ud655\uc778\ud558\uae30 \uc5b4\ub824\uc6cc\uc9c4\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">CI \ud658\uacbd\uc5d0 \ud14c\uc2a4\ud2b8\ub97c \uc5f0\uacb0\ud558\uba74 \ucf54\ub4dc\uac00 \ubcc0\uacbd\ub420 \ub54c\ub9c8\ub2e4 API \uacc4\uc57d\uc744 \uc790\ub3d9\uc73c\ub85c \uac80\uc99d\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc77c\ubc18\uc801\uc778 \uc790\ub3d9\ud654 \uad6c\uc870\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\uac1c\ubc1c\uc790\uac00 \ucf54\ub4dc \ubcc0\uacbd\n       |\n       v\nGit \uc800\uc7a5\uc18c\uc5d0 Push\n       |\n       v\nCI \ud30c\uc774\ud504\ub77c\uc778 \uc2e4\ud589\n       |\n       v\nOpenAPI \uba85\uc138 \uac80\uc99d\n       |\n       v\n\ud14c\uc2a4\ud2b8 \uc11c\ubc84 \ubc0f \ud14c\uc2a4\ud2b8 \ub370\uc774\ud130 \uc900\ube44\n       |\n       v\nAPI \uacc4\uc57d \ud14c\uc2a4\ud2b8 \uc2e4\ud589\n       |\n       v\n\ud14c\uc2a4\ud2b8 \uacb0\uacfc \ud655\uc778\n       |\n       +---- \uc2e4\ud328 ----&gt; \ubc30\ud3ec \ucc28\ub2e8 \ub610\ub294 \uac80\ud1a0\n       |\n       +---- \uc131\uacf5 ----&gt; \ub2e4\uc74c \ubc30\ud3ec \ub2e8\uacc4<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4 \ud14c\uc2a4\ud2b8 \uc2e4\ud589 \ub2e8\uacc4\uc5d0\uc11c\ub294 Postman CLI \ub610\ub294 Bruno CLI\uc640 \uac19\uc740 \ub3c4\uad6c\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4. \uba85\uc138 \uae30\ubc18 \ud14c\uc2a4\ud2b8 \ub3c4\uad6c\ub97c \ubcc4\ub3c4\ub85c \ub3c4\uc785\ud574 OpenAPI \uc2a4\ud0a4\ub9c8\uc640 \uc2e4\uc81c \uc751\ub2f5\uc744 \ube44\uad50\ud560 \uc218\ub3c4 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc911\uc694\ud55c \uc810\uc740 \ud14c\uc2a4\ud2b8\uac00 \uc2e4\ud328\ud588\uc744 \ub54c \uadf8 \uc6d0\uc778\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc5b4\uc57c \ud55c\ub2e4\ub294 \uac83\uc774\ub2e4. \uc2e4\ud328\ud55c \uc694\uccad, \uc2e4\uc81c \uc751\ub2f5, \uae30\ub300\ud55c \uacb0\uacfc, \uc0ac\uc6a9\ud55c \ud658\uacbd\uc744 \ud568\uaed8 \uae30\ub85d\ud558\uba74 \ubb38\uc81c\ub97c \ube60\ub974\uac8c \ucd94\uc801\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\uc790\ub3d9\ud654\ud560 \ub54c \uace0\ub824\ud560 \uc0ac\ud56d<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\ud14c\uc2a4\ud2b8 \ub370\uc774\ud130\uc758 \uc0dd\uc131\uacfc \uc815\ub9ac\ub97c \uc790\ub3d9\ud654\ud55c\ub2e4.<\/li>\n\n\n\n<li>\ud14c\uc2a4\ud2b8 \ud658\uacbd\uc758 \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub97c \uc6b4\uc601 \ud658\uacbd\uacfc \ubd84\ub9ac\ud55c\ub2e4.<\/li>\n\n\n\n<li>\uc778\uc99d \ud1a0\ud070\uacfc \ube44\ubc00\uac12\uc744 \uc548\uc804\ud558\uac8c \uad00\ub9ac\ud55c\ub2e4.<\/li>\n\n\n\n<li>\ud14c\uc2a4\ud2b8 \uac04 \ub370\uc774\ud130 \uc758\uc874\uc131\uc744 \ucd5c\uc18c\ud654\ud55c\ub2e4.<\/li>\n\n\n\n<li>\uc2e4\ud328\ud55c \uc694\uccad\uacfc \uc751\ub2f5\uc744 \ucd94\uc801\ud560 \uc218 \uc788\ub3c4\ub85d \ub85c\uadf8\ub97c \ub0a8\uae34\ub2e4.<\/li>\n\n\n\n<li>\uba85\uc138 \ubcc0\uacbd\uc774 \uae30\uc874 \ud074\ub77c\uc774\uc5b8\ud2b8\uc640 \ud638\ud658\ub418\ub294\uc9c0 \ud655\uc778\ud55c\ub2e4.<\/li>\n\n\n\n<li>\uc678\ubd80 API, \uacb0\uc81c \uc2dc\uc2a4\ud15c \ub4f1 \uc2e4\uc81c \ubd80\uc791\uc6a9\uc774 \ubc1c\uc0dd\ud558\ub294 \ud638\ucd9c\uc740 \uaca9\ub9ac\ud558\uac70\ub098 \ubaa8\uc758 \uac1d\uccb4\ub85c \ub300\uccb4\ud55c\ub2e4.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ub7ec\ud55c \uc870\uac74\uc744 \uac16\ucd94\uba74 API \ud14c\uc2a4\ud2b8\ub294 \uac1c\ubc1c\uc790\uac00 \ud544\uc694\ud560 \ub54c\ub9cc \uc2e4\ud589\ud558\ub294 \ub3c4\uad6c\uac00 \uc544\ub2c8\ub77c \ubc30\ud3ec \uc548\uc815\uc131\uc744 \uc720\uc9c0\ud558\ub294 \uc790\ub3d9\ud654\ub41c \uac80\uc99d \uc808\ucc28\uac00 \ub41c\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\uc2e4\ubb34\uc5d0\uc11c \uad8c\uc7a5\ud558\ub294 \ud14c\uc2a4\ud2b8 \uc804\ub7b5<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\ubaa8\ub4e0 API\uc5d0 \ub3d9\uc77c\ud55c \uc218\uc900\uc758 \ud14c\uc2a4\ud2b8\ub97c \uc801\uc6a9\ud560 \ud544\uc694\ub294 \uc5c6\ub2e4. API\uc758 \uc911\uc694\ub3c4\uc640 \uc7a5\uc560 \uc704\ud5d8\uc5d0 \ub530\ub77c \ud14c\uc2a4\ud2b8\ub97c \uad6c\uc131\ud558\ub294 \uac83\uc774 \ud6a8\uc728\uc801\uc774\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><th>\ud14c\uc2a4\ud2b8 \ub300\uc0c1<\/th><th>\uc8fc\uc694 \uac80\uc99d \ub0b4\uc6a9<\/th><\/tr><tr><td>\uc778\uc99d API<\/td><td>\ud1a0\ud070 \uc720\ud6a8\uc131, \uc778\uc99d \uc2e4\ud328, \uad8c\ud55c \ubd80\uc871<\/td><\/tr><tr><td>\ud68c\uc6d0 API<\/td><td>\ud544\uc218 \ud544\ub4dc, \uc785\ub825\uac12 \uac80\uc99d, \uc911\ubcf5 \ub370\uc774\ud130<\/td><\/tr><tr><td>\uac8c\uc784 \uc7ac\ud654 API<\/td><td>\uc7ac\ud654 \ubcc0\uacbd \uaddc\uce59, \uc911\ubcf5 \uc694\uccad, \ub370\uc774\ud130 \uc815\ud569\uc131<\/td><\/tr><tr><td>\uacb0\uc81c API<\/td><td>\uc911\ubcf5 \uacb0\uc81c \ubc29\uc9c0, \ud2b8\ub79c\uc7ad\uc158 \uacb0\uacfc, \uc624\ub958 \ucc98\ub9ac<\/td><\/tr><tr><td>\uc870\ud68c API<\/td><td>\uc751\ub2f5 \uc2a4\ud0a4\ub9c8, \ud398\uc774\uc9c0\ub124\uc774\uc158, \uc815\ub82c<\/td><\/tr><tr><td>\uad00\ub9ac\uc790 API<\/td><td>\uad8c\ud55c \uac80\uc99d, \uc811\uadfc \uc81c\ud55c, \uc624\ub958 \uc751\ub2f5<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\ud2b9\ud788 \uac8c\uc784 \uc11c\ubc84\uc5d0\uc11c\ub294 \uc7ac\ud654 \uc9c0\uae09, \uc544\uc774\ud15c \uad6c\ub9e4, \ubcf4\uc0c1 \uc218\ub839\uacfc \uac19\uc774 \ub370\uc774\ud130\uc758 \uc815\ud569\uc131\uc774 \uc911\uc694\ud55c API\ub97c \uc8fc\uc758 \uae4a\uac8c \ud14c\uc2a4\ud2b8\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4 \ub3d9\uc77c\ud55c \ubcf4\uc0c1 \uc694\uccad\uc774 \ub450 \ubc88 \uc804\uc1a1\ub418\uc5c8\uc744 \ub54c \uc7ac\ud654\uac00 \ub450 \ubc88 \uc9c0\uae09\ub41c\ub2e4\uba74, \uc751\ub2f5 \ud615\uc2dd\uc774 \uc544\ubb34\ub9ac \uc815\ud655\ud558\ub354\ub77c\ub3c4 \uc11c\ube44\uc2a4\ub294 \uc815\uc0c1\uc774\ub77c\uace0 \ubcfc \uc218 \uc5c6\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ub7ec\ud55c \ubb38\uc81c\ub97c \ubc1c\uacac\ud558\ub824\uba74 \uacc4\uc57d \ud14c\uc2a4\ud2b8\ubfd0 \uc544\ub2c8\ub77c \uc911\ubcf5 \uc694\uccad \ucc98\ub9ac, \ub3d9\uc2dc\uc131 \uc81c\uc5b4, \ud2b8\ub79c\uc7ad\uc158, \uba71\ub4f1\uc131\uc5d0 \ub300\ud55c \uae30\ub2a5 \ud14c\uc2a4\ud2b8\ub3c4 \ud568\uaed8 \uc218\ud589\ud574\uc57c \ud55c\ub2e4.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>API \ud14c\uc2a4\ud2b8\uc640 \uacc4\uc57d \uac80\uc99d\uc774 \ud544\uc694\ud55c \uc774\uc720 API\ub97c \uac1c\ubc1c\ud560 \ub54c \ub2e8\uc21c\ud788 \uc694\uccad\uc744 \ubcf4\ub0b4\uace0 \uc815\uc0c1\uc801\uc778 \uc751\ub2f5\uc744 \ubc1b\ub294 \uac83\ub9cc\uc73c\ub85c\ub294 \ucda9\ubd84\ud558\uc9c0 \uc54a\ub2e4. \uac1c\ubc1c\uc790\uac00 \uc758\ub3c4\ud55c \ub370\uc774\ud130\uac00 \ubc18\ud658\ub418\ub354\ub77c\ub3c4 HTTP \uc0c1\ud0dc \ucf54\ub4dc\uac00 \uc798\ubabb\ub418\uc5c8\uc744 \uc218 \uc788\uace0, \uc751\ub2f5 \ud544\ub4dc\uac00 \ub204\ub77d\ub418\uc5c8\uc744 \uc218 \uc788\uc73c\uba70, API \uba85\uc138\uc640 \uc2e4\uc81c \uad6c\ud604\uc774 \uc11c\ub85c \ub2e4\ub97c \uc218\ub3c4 \uc788\ub2e4. \uc608\ub97c \ub4e4\uc5b4 \ub2c9\ub124\uc784 \uc911\ubcf5 \uac80\uc0ac API\ub97c \uac1c\ubc1c\ud55c\ub2e4\uace0 \uac00\uc815\ud558\uc790. \ud074\ub77c\uc774\uc5b8\ud2b8\ub294 \ub2c9\ub124\uc784\uc774 \uc911\ubcf5\ub418\uc5c8\uc744 \ub54c 409 Conflict\ub97c [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-2656","post","type-post","status-publish","format-standard","hentry","category-dev-logs"],"_links":{"self":[{"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/posts\/2656","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2656"}],"version-history":[{"count":1,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/posts\/2656\/revisions"}],"predecessor-version":[{"id":2657,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/posts\/2656\/revisions\/2657"}],"wp:attachment":[{"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2656"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2656"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2656"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}