{"id":1736,"date":"2026-07-13T19:58:29","date_gmt":"2026-07-13T19:58:29","guid":{"rendered":"https:\/\/wayhope.kro.kr\/?p=1736"},"modified":"2026-08-31T07:32:53","modified_gmt":"2026-08-31T07:32:53","slug":"swagger-%ed%95%b5%ec%8b%ac-%ec%a0%95%eb%a6%ac","status":"publish","type":"post","link":"https:\/\/wayhope.kro.kr\/?p=1736","title":{"rendered":"Swagger \ud575\uc2ec \uc815\ub9ac"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Swagger\ub294 <strong>HTTP API\ub97c \ubb38\uc11c\ud654\ud558\uace0 \ud14c\uc2a4\ud2b8\ud558\uae30 \uc704\ud55c \ub3c4\uad6c\uc640 \uba85\uc138 \uc0dd\ud0dc\uacc4<\/strong>\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">REST API \uc11c\ubc84\ub97c \uac1c\ubc1c\ud558\ub2e4 \ubcf4\uba74 \uc5d4\ub4dc\ud3ec\uc778\ud2b8\uac00 \ub298\uc5b4\ub098\uba74\uc11c \ubb38\uc81c\uac00 \uc0dd\uae34\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>GET \/users\nPOST \/users\nGET \/users\/{id}\nPOST \/login\nPOST \/orders\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 API\ub4e4\uc774 \uc5b4\ub5a4 \ud30c\ub77c\ubbf8\ud130\ub97c \ubc1b\uace0, \uc5b4\ub5a4 \uc751\ub2f5\uc744 \ubc18\ud658\ud558\uace0, \uc778\uc99d\uc740 \uc5b4\ub5bb\uac8c \ud558\ub294\uc9c0 \ucf54\ub4dc\ub9cc \ubcf4\uace0 \ud30c\uc545\ud558\uae30\ub294 \uc810\uc810 \uc5b4\ub824\uc6cc\uc9c4\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Swagger\ub97c \uc0ac\uc6a9\ud558\uba74 API\uc758 \uad6c\uc870\ub97c \uba85\uc138\ub85c \uc815\uc758\ud558\uace0, \uc774\ub97c \uae30\ubc18\uc73c\ub85c \uc0ac\ub78c\uc774 \uc77d\uc744 \uc218 \uc788\ub294 API \ubb38\uc11c\ub97c \ub9cc\ub4e4 \uc218 \uc788\ub2e4. \ub300\ud45c\uc801\uc73c\ub85c <strong>Swagger UI<\/strong>\ub97c \uc0ac\uc6a9\ud558\uba74 \ube0c\ub77c\uc6b0\uc800\uc5d0\uc11c API \ubaa9\ub85d\uc744 \ud655\uc778\ud558\uace0 \uc9c1\uc811 \uc694\uccad\uae4c\uc9c0 \ubcf4\ub0b4\ubcfc \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc5ec\uae30\uc11c Swagger\uc640 OpenAPI\ub97c \uad6c\ubd84\ud560 \ud544\uc694\uac00 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>OpenAPI\ub294 API\ub97c \ud45c\ud604\ud558\uae30 \uc704\ud55c \ud45c\uc900 \uba85\uc138\uc774\uace0, Swagger\ub294 \uadf8 \uba85\uc138\ub97c \ud65c\uc6a9\ud558\ub294 \uc5ec\ub7ec \ub3c4\uad6c\ub4e4\uc758 \uc774\ub984<\/strong>\uc774\ub77c\uace0 \uc774\ud574\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\uc640 Swagger\uc758 \uad00\uacc4<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\uacfc\uac70\uc5d0\ub294 Swagger Specification\uc774\ub77c\ub294 \uc774\ub984\uc73c\ub85c API \uba85\uc138\uac00 \ubc1c\uc804\ud588\uc9c0\ub9cc \ud604\uc7ac \ud45c\uc900\uc758 \uc774\ub984\uc740 <strong>OpenAPI Specification(OAS)<\/strong>\uc774\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uad6c\uc870\ub97c \ub2e8\uc21c\ud654\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>OpenAPI Specification -&gt; API \uba85\uc138 \uc791\uc131 -&gt; Swagger UI \/ Code Generator\nSwagger UI -&gt; API \ubb38\uc11c \/ \ud14c\uc2a4\ud2b8\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4 OpenAPI \ubb38\uc11c\uc5d0 \ub2e4\uc74c\uacfc \uac19\uc740 API\ub97c \uc815\uc758\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>paths:\n  \/users:\n    get:\n      summary: Get users\n      responses:\n        '200':\n          description: Success\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 \uba85\uc138\ub97c Swagger UI\uac00 \uc77d\uc73c\uba74 \ube0c\ub77c\uc6b0\uc800\uc5d0\uc11c API \ubb38\uc11c\ub97c \ub9cc\ub4e4\uc5b4\uc900\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub530\ub77c\uc11c Swagger\ub97c \uc774\ud574\ud560 \ub54c <strong>Swagger \uc790\uccb4\uac00 API \uc11c\ubc84\ub294 \uc544\ub2c8\ub77c\ub294 \uc810<\/strong>\uc744 \uba3c\uc800 \uc7a1\uc544\ub450\ub294 \uac8c \uc88b\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Swagger\ub294 API\ub97c \uc124\uba85\ud558\uace0 \ud655\uc778\ud558\uae30 \uc704\ud55c \ub3c4\uad6c\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 \ubb38\uc11c\uac00 \ud544\uc694\ud55c \uc774\uc720<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">API\uac00 \uba87 \uac1c \uc5c6\uc744 \ub54c\ub294 \ubb38\uc11c\uc758 \ud544\uc694\uc131\uc744 \ud06c\uac8c \ub290\ub07c\uc9c0 \ubabb\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud558\uc9c0\ub9cc \ud504\ub85c\uc81d\ud2b8\uac00 \ucee4\uc9c0\uba74 API\ub97c \uc0ac\uc6a9\ud558\ub294 \uc0ac\ub78c\uc774 \uac1c\ubc1c\uc790 \ud55c \uba85\uc774 \uc544\ub2d0 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Frontend -&gt; GET \/users \/ POST \/login\nBackend -&gt; Database\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ud504\ub860\ud2b8\uc5d4\ub4dc \uac1c\ubc1c\uc790\ub294 \ub2e4\uc74c \uc815\ubcf4\ub97c \uc54c\uc544\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>URL\nHTTP Method\nRequest Parameter\nRequest Body\nResponse Body\nStatus Code\nAuthentication\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4 \ub85c\uadf8\uc778 API\uac00 \uc788\ub2e4\uace0 \ud558\uc790.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>POST \/login\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\uac83\ub9cc\uc73c\ub85c\ub294 \ubd80\uc871\ud558\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  \"email\": \"user@test.com\",\n  \"password\": \"1234\"\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc751\ub2f5\uc774 \ubb34\uc5c7\uc778\uc9c0\ub3c4 \uc54c\uc544\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  \"accessToken\": \"...\",\n  \"refreshToken\": \"...\"\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Swagger\/OpenAPI\ub97c \uc0ac\uc6a9\ud558\uba74 \uc774\ub7f0 API \uacc4\uc57d\uc744 \uba85\uc138\ub85c \uad00\ub9ac\ud560 \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\">Swagger UI<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Swagger\uc5d0\uc11c \uac00\uc7a5 \uc775\uc219\ud558\uac8c \uc811\ud558\uac8c \ub418\ub294 \uac83\uc774 <strong>Swagger UI<\/strong>\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">API \uba85\uc138\ub97c \uae30\ubc18\uc73c\ub85c \uc6f9 \ud398\uc774\uc9c0\ub97c \ub9cc\ub4e4\uc5b4\uc11c API \ubaa9\ub85d\uc744 \ubcf4\uc5ec\uc900\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Users -&gt; GET \/users \/ POST \/users\nAuthentication -&gt; POST \/login \/ POST \/logout\nOrders -&gt; GET \/orders \/ POST \/orders\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uac01 API\ub97c \ud3bc\uce58\uba74 Request Parameter, Request Body, Response, Status Code \ub4f1\uc744 \ud655\uc778\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub9ac\uace0 <code>Try it out<\/code> \uae30\ub2a5\uc744 \ud1b5\ud574 \uc2e4\uc81c \uc11c\ubc84\uc5d0 \uc694\uccad\uc744 \ubcf4\ub0b4\ubcfc \uc218\ub3c4 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Swagger UI -&gt; Try it out -&gt; HTTP Request -&gt; API Server -&gt; HTTP Response\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub798\uc11c Swagger UI\ub294 \ub2e8\uc21c\ud55c \ubb38\uc11c \ud398\uc774\uc9c0\ub77c\uae30\ubcf4\ub2e4 <strong>API \ud0d0\uc0c9 \ubc0f \uac04\ub2e8\ud55c \ud14c\uc2a4\ud2b8 \ub3c4\uad6c<\/strong>\ub85c\ub3c4 \uc0ac\uc6a9\ud560 \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\">OpenAPI \ubb38\uc11c<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">OpenAPI \ubb38\uc11c\ub294 \ubcf4\ud1b5 YAML \ub610\ub294 JSON\uc73c\ub85c \uc791\uc131\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uac04\ub2e8\ud55c \uc608\uc2dc\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>openapi: 3.0.0\n\ninfo:\n  title: User API\n  version: 1.0.0\n\npaths:\n  \/users\/{id}:\n    get:\n      summary: Get user\n\n      parameters:\n        - name: id\n          in: path\n          required: true\n          schema:\n            type: integer\n\n      responses:\n        '200':\n          description: Success\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 \ubb38\uc11c\uc5d0\ub294 API\uc758 \uad6c\uc870\uac00 \ub4e4\uc5b4\uac04\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>OpenAPI -&gt; info \/ paths \/ components\npaths -&gt; \/users\/{id} -&gt; GET -&gt; parameters \/ responses\ncomponents -&gt; schemas \/ securitySchemes\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc2e4\uc81c \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c\ub294 API\uac00 \ub9ce\uc544\uc9c0\uae30 \ub54c\ubb38\uc5d0 <code>components<\/code>\ub97c \ud65c\uc6a9\ud574 \uacf5\ud1b5 Schema\ub098 Security Scheme \ub4f1\uc744 \uc815\uc758\ud558\ub294 \uacbd\uc6b0\uac00 \ub9ce\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Path<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><code>paths<\/code>\ub294 API Endpoint\ub97c \uc815\uc758\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>paths:\n  \/users:\n    get:\n      ...\n    post:\n      ...\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc5ec\uae30\uc11c <code>\/users<\/code>\uac00 Path\uc774\uace0 <code>get<\/code>, <code>post<\/code>\uac00 HTTP Method\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/users -&gt; GET \/ POST\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ub7f0 \ubc29\uc2dd\uc73c\ub85c API\uc758 \uc678\ubd80 \uc778\ud130\ud398\uc774\uc2a4\ub97c \ud45c\ud604\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\">Parameter<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">API\uac00 \uc785\ub825\uac12\uc744 \ud544\uc694\ub85c \ud558\ub294 \uacbd\uc6b0 Parameter\ub97c \uc815\uc758\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>GET \/users\/123\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc5d0\uc11c <code>123<\/code>\uc774 \uc0ac\uc6a9\uc790 ID\ub77c\uba74 Path Parameter\ub85c \ud45c\ud604\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>parameters:\n  - name: id\n    in: path\n    required: true\n    schema:\n      type: integer\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Query Parameter\ub3c4 \uc815\uc758\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>GET \/users?page=1&amp;size=20\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>parameters:\n  - name: page\n    in: query\n    schema:\n      type: integer\n\n  - name: size\n    in: query\n    schema:\n      type: integer\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ub807\uac8c \ud558\uba74 Swagger UI\uc5d0\uc11c \uc5b4\ub5a4 \uc785\ub825\uac12\uc774 \ud544\uc694\ud55c\uc9c0 \ud45c\uc2dc\ud560 \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\">Request Body<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">POST\ub098 PUT \uac19\uc740 API\uc5d0\uc11c\ub294 Request Body\ub97c \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0\uac00 \ub9ce\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4 \ud68c\uc6d0\uac00\uc785 API\uac00 \uc788\ub2e4\uba74:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  \"email\": \"user@test.com\",\n  \"password\": \"1234\",\n  \"nickname\": \"user\"\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">OpenAPI\uc5d0\uc11c\ub294 Schema\ub97c \ud1b5\ud574 \uc774 \uad6c\uc870\ub97c \ud45c\ud604\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>requestBody:\n  required: true\n  content:\n    application\/json:\n      schema:\n        $ref: '#\/components\/schemas\/UserCreateRequest'\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub9ac\uace0 \uc2e4\uc81c Schema\ub294 \ubcc4\ub3c4\ub85c \uad00\ub9ac\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>components:\n  schemas:\n    UserCreateRequest:\n      type: object\n      required:\n        - email\n        - password\n\n      properties:\n        email:\n          type: string\n\n        password:\n          type: string\n\n        nickname:\n          type: string\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ub807\uac8c \ud558\uba74 \uc5ec\ub7ec API\uc5d0\uc11c \ub3d9\uc77c\ud55c \ub370\uc774\ud130 \uad6c\uc870\ub97c \uc7ac\uc0ac\uc6a9\ud560 \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\">Response<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">API\uac00 \ubc18\ud658\ud558\ub294 \ub370\uc774\ud130\ub3c4 \uba85\uc138\uc5d0 \ud3ec\ud568\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>responses:\n  '200':\n    description: Success\n    content:\n      application\/json:\n        schema:\n          $ref: '#\/components\/schemas\/User'\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Status Code\ub3c4 \uba85\uc2dc\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>200 OK \/ 201 Created \/ 400 Bad Request \/ 401 Unauthorized \/ 403 Forbidden \/ 404 Not Found \/ 500 Internal Server Error\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ub807\uac8c \ud574\ub450\uba74 API\ub97c \uc0ac\uc6a9\ud558\ub294 \uc785\uc7a5\uc5d0\uc11c \uc11c\ubc84\uac00 \uc5b4\ub5a4 \uc0c1\ud669\uc5d0\uc11c \uc5b4\ub5a4 \uc751\ub2f5\uc744 \ubc18\ud658\ud558\ub294\uc9c0 \ud30c\uc545\ud558\uae30 \uc26c\uc6cc\uc9c4\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Schema<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">API\uc5d0\uc11c \uc0ac\uc6a9\ud558\ub294 \ub370\uc774\ud130 \uad6c\uc870\ub97c \uc815\uc758\ud558\ub294 \ubd80\ubd84\uc774 <code>Schema<\/code>\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4 User\ub77c\ub294 \uac1d\uccb4\uac00 \uc788\ub2e4\uba74:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>User:\n  type: object\n  properties:\n    id:\n      type: integer\n\n    name:\n      type: string\n\n    email:\n      type: string\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ub2e4\ub978 API\uc5d0\uc11c\ub3c4 \uc774\ub97c \ucc38\uc870\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ref -&gt; #\/components\/schemas\/User\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc2e4\uc81c \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c API\uac00 \ub9ce\uc544\uc9c0\uba74 Schema\ub97c \uc7ac\uc0ac\uc6a9\ud558\ub294 \uac83\uc774 \uc0c1\ub2f9\ud788 \uc911\uc694\ud574\uc9c4\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>User -&gt; GET \/users \/ GET \/users\/{id} \/ POST \/users \/ PUT \/users\/{id}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uac01 API\uc758 Request\uc640 Response \uad6c\uc870\ub97c \ubcc4\ub3c4\ub85c \uc815\uc758\ud558\uba74\uc11c\ub3c4 \uacf5\ud1b5 \ubaa8\ub378\uc740 \uc7ac\uc0ac\uc6a9\ud560 \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\">Authentication<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Swagger\uc5d0\uc11c\ub294 \uc778\uc99d \ubc29\uc2dd\ub3c4 \uba85\uc138\ub85c \ud45c\ud604\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub300\ud45c\uc801\uc73c\ub85c Bearer Token\uc744 \uc0ac\uc6a9\ud558\ub294 JWT \uc778\uc99d\uc774 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Authorization: Bearer &lt;token&gt;\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">OpenAPI\uc5d0\uc11c\ub294 Security Scheme\uc744 \uc815\uc758\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>components:\n  securitySchemes:\n    bearerAuth:\n      type: http\n      scheme: bearer\n      bearerFormat: JWT\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub9ac\uace0 API\uc5d0 \uc778\uc99d\uc774 \ud544\uc694\ud558\ub2e4\uace0 \uc9c0\uc815\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>security:\n  - bearerAuth: &#91;]\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Swagger UI\uac00 \uc774\ub97c \uc778\uc2dd\ud558\uba74 \uc778\uc99d \uc815\ubcf4\ub97c \uc785\ub825\ud558\uace0 API\ub97c \ud638\ucd9c\ud558\ub294 \ud615\ud0dc\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub2e4\ub9cc \uc5ec\uae30\uc11c \uad6c\ubd84\ud574\uc57c \ud560 \uac83\uc774 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Swagger\uac00 JWT \uc778\uc99d\uc744 \uad6c\ud604\ud574\uc8fc\ub294 \uac83\uc740 \uc544\ub2c8\ub2e4.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">JWT \ubc1c\uae09, \uac80\uc99d, \uc0ac\uc6a9\uc790 \uc778\uc99d \ub4f1\uc758 \uc2e4\uc81c \ube44\uc988\ub2c8\uc2a4 \ub85c\uc9c1\uc740 \uc11c\ubc84 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0\uc11c \uad6c\ud604\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Swagger\/OpenAPI\ub294 \uadf8 \uc778\uc99d \ubc29\uc2dd\uacfc API\uc758 \uc694\uad6c\uc0ac\ud56d\uc744 <strong>\uba85\uc138\ud558\uace0 \ud14c\uc2a4\ud2b8\ud560 \uc218 \uc788\ub3c4\ub85d \ud45c\ud604\ud558\ub294 \uc5ed\ud560<\/strong>\uc744 \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\">Swagger\uc640 Backend Framework<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Swagger\ub294 \ud2b9\uc815 \uc11c\ubc84 \uc5b8\uc5b4\uc5d0 \uc885\uc18d\ub41c \uae30\uc220\uc774 \uc544\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Node.js, Java, C#, Python \ub4f1 \ub2e4\uc591\ud55c \ud658\uacbd\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4 Node.js \uc11c\ubc84\ub77c\uba74 OpenAPI \ubb38\uc11c\ub97c \uc791\uc131\ud558\uace0 Swagger UI\ub97c \uc5f0\uacb0\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Node.js -&gt; REST API \/ OpenAPI Specification -&gt; Swagger UI\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Spring \ud658\uacbd\uc5d0\uc11c\ub3c4 \ub9c8\ucc2c\uac00\uc9c0\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Spring Boot -&gt; Controller \/ OpenAPI -&gt; Swagger UI\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ud504\ub808\uc784\uc6cc\ud06c\uc5d0 \ub530\ub77c \ucf54\ub4dc\uc5d0\uc11c OpenAPI \ubb38\uc11c\ub97c \uc790\ub3d9 \uc0dd\uc131\ud558\ub3c4\ub85d \uad6c\uc131\ud560 \uc218\ub3c4 \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\">Code First\uc640 Design First<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">OpenAPI\ub97c \uc0ac\uc6a9\ud558\ub294 \ubc29\uc2dd\uc740 \ud06c\uac8c \ub450 \uac00\uc9c0 \uad00\uc810\uc73c\ub85c \uc0dd\uac01\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Code First<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\uba3c\uc800 \uc11c\ubc84 \ucf54\ub4dc\ub97c \uc791\uc131\ud558\uace0 API \uc815\ubcf4\ub97c \uae30\ubc18\uc73c\ub85c OpenAPI \ubb38\uc11c\ub97c \uc0dd\uc131\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Controller -&gt; API Implementation -&gt; OpenAPI Document -&gt; Swagger UI\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uac1c\ubc1c \uc18d\ub3c4\uac00 \ube60\ub974\uace0 \uae30\uc874 \ucf54\ub4dc\uc5d0 \uc801\uc6a9\ud558\uae30 \ud3b8\ud55c \uacbd\uc6b0\uac00 \ub9ce\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Design First<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">API \uba85\uc138\ub97c \uba3c\uc800 \uc791\uc131\ud558\uace0 \uadf8 \uba85\uc138\ub97c \uae30\uc900\uc73c\ub85c \uc11c\ubc84\uc640 \ud074\ub77c\uc774\uc5b8\ud2b8\ub97c \uac1c\ubc1c\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>OpenAPI -&gt; Backend \/ Frontend \/ Client SDK\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc5ec\ub7ec \ud300\uc774 \ud558\ub098\uc758 API\ub97c \uae30\uc900\uc73c\ub85c \uac1c\ubc1c\ud558\ub294 \ud658\uacbd\uc5d0\uc11c \uc720\uc6a9\ud558\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">API \uacc4\uc57d\uc744 \uba3c\uc800 \ud569\uc758\ud560 \uc218 \uc788\uae30 \ub54c\ubb38\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\">Swagger\uc640 REST API\uc758 \uad00\uacc4<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Swagger\uac00 REST API\ub97c \ub9cc\ub4dc\ub294 \uac83\uc740 \uc544\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">REST API\ub294 \uc11c\ubc84\uc758 \uc778\ud130\ud398\uc774\uc2a4 \uc124\uacc4 \ubc29\uc2dd\uc774\uace0, Swagger\/OpenAPI\ub294 \uadf8 \uc778\ud130\ud398\uc774\uc2a4\ub97c <strong>\uc124\uba85\ud558\uace0 \uad00\ub9ac\ud558\uae30 \uc704\ud55c \uba85\uc138 \ubc0f \ub3c4\uad6c<\/strong>\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uad00\uacc4\ub97c \uc815\ub9ac\ud558\uba74:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>REST API -&gt; OpenAPI Specification -&gt; Swagger UI\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4 \uc2e4\uc81c \uc11c\ubc84\uac00:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>GET \/users\/123\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ub97c \uc81c\uacf5\ud55c\ub2e4\uba74 OpenAPI\uc5d0\uc11c\ub294 \uc774 API\uac00 \uc5b4\ub5a4 \uc694\uccad\uc744 \ubc1b\uace0 \uc5b4\ub5a4 \uc751\ub2f5\uc744 \ubc18\ud658\ud558\ub294\uc9c0\ub97c \ud45c\ud604\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Swagger UI\ub294 \uadf8 \uba85\uc138\ub97c \uc0ac\ub78c\uc774 \ubcf4\uae30 \ud3b8\ud55c \ud654\uba74\uc73c\ub85c \ub9cc\ub4e4\uc5b4\uc900\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Swagger\ub97c \ud14c\uc2a4\ud2b8 \ub3c4\uad6c\ub85c\ub9cc \uc0ac\uc6a9\ud558\uba74 \uc0dd\uae30\ub294 \ubb38\uc81c<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Swagger UI\uc5d0\uc11c <code>Try it out<\/code>\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uae30 \ub54c\ubb38\uc5d0 Swagger\ub97c \ub2e8\uc21c\ud55c API \ud14c\uc2a4\ud2b8 \ub3c4\uad6c\ub85c \uc0dd\uac01\ud558\uae30 \uc27d\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud558\uc9c0\ub9cc \ubcf8\uc9c8\uc801\uc778 \uc5ed\ud560\uc740 <strong>API \uacc4\uc57d\uc744 \uba85\ud655\ud558\uac8c \ub9cc\ub4dc\ub294 \uac83<\/strong>\uc5d0 \ub354 \uac00\uae5d\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4 \ub2e4\uc74c API\uac00 \uc788\ub2e4\uace0 \ud558\uc790.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>POST \/users\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ubb38\uc11c\uac00 \uc5c6\ub2e4\uba74 \uac1c\ubc1c\uc790\ub294 \uc11c\ubc84 \ucf54\ub4dc\ub97c \ucc3e\uc544\uc11c \ub2e4\uc74c\uc744 \uc9c1\uc811 \ud655\uc778\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Request Body \/ Response \/ Status Code \/ Required Field \/ Authentication\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">OpenAPI\uac00 \uc81c\ub300\ub85c \uc791\uc131\ub418\uc5b4 \uc788\ub2e4\uba74 \uc774 \uc815\ubcf4\uac00 \ud558\ub098\uc758 \uba85\uc138\uc5d0 \ubaa8\uc778\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub798\uc11c Swagger UI\ub294 \uadf8 \uba85\uc138\ub97c \ud655\uc778\ud558\uae30 \uc704\ud55c \uac00\uc7a5 \ud3b8\ud55c \uc778\ud130\ud398\uc774\uc2a4 \uc911 \ud558\ub098\ub77c\uace0 \ubcf4\ub294 \ud3b8\uc774 \ub9de\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 \uac1c\ubc1c\uc5d0\uc11c Swagger\ub97c \uc0ac\uc6a9\ud558\ub294 \ud750\ub984<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\uc2e4\uc81c \uac1c\ubc1c \ud750\ub984\uc744 \ub2e8\uc21c\ud654\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>API \uc124\uacc4 -&gt; OpenAPI \uc815\uc758 -&gt; Backend \uad6c\ud604 -&gt; Swagger UI -&gt; API \ud655\uc778 \/ \ud14c\uc2a4\ud2b8 -&gt; \ubb38\uc11c \uacf5\uc720\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ub610\ub294 Code First \ubc29\uc2dd\uc774\ub77c\uba74:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Backend \uad6c\ud604 -&gt; OpenAPI \uc0dd\uc131 -&gt; Swagger UI -&gt; API \ubb38\uc11c \/ \ud14c\uc2a4\ud2b8\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ud300 \uaddc\ubaa8\uac00 \ucee4\uc9c8\uc218\ub85d API \uba85\uc138\uac00 \ucf54\ub4dc\uc640 \ub530\ub85c \ub180\uc9c0 \uc54a\ub3c4\ub85d \uad00\ub9ac\ud558\ub294 \uac83\uc774 \uc911\uc694\ud558\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 \uc8fc\uc758\ud560 \ubd80\ubd84<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Swagger\ub97c \ubd99\uc600\ub2e4\uace0 API \ubb38\uc11c\uac00 \uc790\ub3d9\uc73c\ub85c \uc88b\uc740 \uc0c1\ud0dc\uac00 \ub418\ub294 \uac83\uc740 \uc544\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc790\ub3d9 \uc0dd\uc131\ub41c \ubb38\uc11c\ub294 \uc2e4\uc81c \uad6c\ud604 \ucf54\ub4dc\uc758 \uad6c\uc870\ub97c \ubcf4\uc5ec\uc8fc\ub294 \ub370\ub294 \ud3b8\ud558\uc9c0\ub9cc, API\ub97c \uc0ac\uc6a9\ud558\ub294 \uc785\uc7a5\uc5d0\uc11c \ud544\uc694\ud55c \uc124\uba85\uc774 \ubd80\uc871\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4 \ub2e4\uc74c \uc815\ubcf4\ub294 \uba85\uc138\uc5d0 \uc81c\ub300\ub85c \ud45c\ud604\ud574\ub450\ub294 \uac83\uc774 \uc88b\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Field Description \/ Required \/ Optional \/ Example \/ Enum \/ Validation Rule \/ Status Code \/ Authentication \/ Error Response\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ud2b9\ud788 Error Response\ub97c \ube7c\uba39\uae30 \uc27d\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc815\uc0c1 \uc751\ub2f5\ub9cc \uc815\uc758\ud574 \ub193\uc73c\uba74 \uc2e4\uc81c \ud074\ub77c\uc774\uc5b8\ud2b8 \uac1c\ubc1c\uc5d0\uc11c\ub294 \uacb0\uad6d \uc11c\ubc84 \ucf54\ub4dc\ub97c \ub2e4\uc2dc \ud655\uc778\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>200 -&gt; \uc815\uc0c1 \uc751\ub2f5\n400 -&gt; \uc798\ubabb\ub41c \uc694\uccad\n401 -&gt; \uc778\uc99d \uc2e4\ud328\n404 -&gt; \ub9ac\uc18c\uc2a4 \uc5c6\uc74c\n409 -&gt; \ucda9\ub3cc\n500 -&gt; \uc11c\ubc84 \uc624\ub958\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ub7f0 \ubd80\ubd84\uae4c\uc9c0 \uba85\ud655\ud558\uac8c \uc815\uc758\ud574\ub450\uba74 API \ubb38\uc11c\uc758 \uac00\uce58\uac00 \uc62c\ub77c\uac04\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Swagger\uc640 API Gateway\ub294 \ub2e4\ub974\ub2e4<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Swagger\uc640 API Gateway\ub3c4 \ud63c\ub3d9\ud558\uae30 \uc27d\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">API Gateway\ub294 \uc2e4\uc81c \ub124\ud2b8\uc6cc\ud06c \uc694\uccad\uc744 \ubc1b\uc544\uc11c \uc778\uc99d, \ub77c\uc6b0\ud305, Rate Limiting, \ub85c\uae45 \ub4f1\uc758 \ucc98\ub9ac\ub97c \ud558\ub294 <strong>\uc11c\ubc84 \uc778\ud504\ub77c \uacc4\uce35<\/strong>\uc774\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ubc18\uba74 Swagger\/OpenAPI\ub294 API\uc758 \uad6c\uc870\uc640 \uacc4\uc57d\uc744 \uc815\uc758\ud558\uace0 \uc774\ub97c \ubb38\uc11c\ud654\ud558\ub294 \uc5ed\ud560\uc774\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Client -&gt; API Gateway -&gt; Backend API\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Swagger\ub294 \uc774 API\uc758 \uad6c\uc870\ub97c \uc124\uba85\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>OpenAPI -&gt; Endpoint \/ Request \/ Response \/ Authentication \/ Schema\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ub458\uc740 \uc11c\ub85c \ub300\uccb4 \uad00\uacc4\uac00 \uc544\ub2c8\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\uc804\uccb4 \uad6c\uc870<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\uc9c0\uae08\uae4c\uc9c0\uc758 \ub0b4\uc6a9\uc744 \ud558\ub098\ub85c \ubb36\uc73c\uba74 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>OpenAPI -&gt; API Specification -&gt; Swagger UI \/ Code Generator\nSwagger UI -&gt; API Documentation -&gt; Try it out -&gt; API Server\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">OpenAPI\uac00 API\uc758 \uacc4\uc57d\uc744 \ud45c\ud604\ud558\uace0, Swagger UI\uac00 \uadf8 \uba85\uc138\ub97c \uc0ac\ub78c\uc774 \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ubb38\uc11c \ubc0f \ud14c\uc2a4\ud2b8 \ud654\uba74\uc73c\ub85c \ubcf4\uc5ec\uc900\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc5ec\uae30\uc5d0 \uc2e4\uc81c \uc11c\ubc84 \uad6c\ud604\uc774 \ubd99\ub294\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Frontend -&gt; API Server -&gt; REST API\nAPI Server -&gt; OpenAPI Specification -&gt; Swagger UI\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\uc815\ub9ac<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Swagger\ub97c \uacf5\ubd80\ud558\uba74\uc11c \uac00\uc7a5 \uba3c\uc800 \uad6c\ubd84\ud574\uc57c \ud560 \uac83\uc740 <strong>Swagger\uc640 OpenAPI\uc758 \uad00\uacc4<\/strong>\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">OpenAPI\ub294 API\ub97c \ud45c\ud604\ud558\ub294 \ud45c\uc900 \uba85\uc138\uc774\uace0, Swagger\ub294 OpenAPI\ub97c \ud65c\uc6a9\ud558\ub294 \ub300\ud45c\uc801\uc778 \ub3c4\uad6c \uc0dd\ud0dc\uacc4\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uac1c\ubc1c \uacfc\uc815\uc5d0\uc11c\ub294 \ubcf4\ud1b5 \ub2e4\uc74c \uad00\uacc4\ub85c \uc774\ud574\ud558\uba74 \ucda9\ubd84\ud558\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>REST API -&gt; OpenAPI -&gt; Swagger UI\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">OpenAPI\uc5d0\ub294 Endpoint, HTTP Method, Parameter, Request Body, Response, Schema, Authentication \uac19\uc740 API\uc758 \uacc4\uc57d\uc774 \ub4e4\uc5b4\uac04\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Swagger UI\ub294 \uc774 \uba85\uc138\ub97c \uae30\ubc18\uc73c\ub85c API \ubb38\uc11c\ub97c \ub9cc\ub4e4\uace0 <code>Try it out<\/code>\uc744 \ud1b5\ud574 \uc2e4\uc81c \uc694\uccad\uc744 \ubcf4\ub0b4\ubcfc \uc218 \uc788\uac8c \ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub9ac\uace0 Swagger\uac00 \uc778\uc99d\uc774\ub098 \ube44\uc988\ub2c8\uc2a4 \ub85c\uc9c1\uc744 \uad6c\ud604\ud558\ub294 \uac83\uc740 \uc544\ub2c8\ub2e4. JWT \uac80\uc99d\uc774\ub098 \uad8c\ud55c \ucc98\ub9ac\ub294 \uc11c\ubc84\uac00 \ub2f4\ub2f9\ud558\uace0, Swagger\/OpenAPI\ub294 \uadf8 API\uac00 \uc5b4\ub5a4 \uc778\uc99d \ubc29\uc2dd\uc744 \uc0ac\uc6a9\ud558\ub294\uc9c0\ub97c \uc124\uba85\ud558\ub294 \uc5ed\ud560\uc744 \ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uacb0\uad6d Swagger\ub97c API \ud14c\uc2a4\ud2b8 \ud398\uc774\uc9c0 \uc815\ub3c4\ub85c\ub9cc \uc0dd\uac01\ud558\uba74 \ubc94\uc704\ub97c \ub108\ubb34 \uc881\uac8c \ubcf4\ub294 \uc148\uc774\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>OpenAPI\ub97c \uc911\uc2ec\uc73c\ub85c API\uc758 \uacc4\uc57d\uc744 \uba85\ud655\ud558\uac8c \uc815\uc758\ud558\uace0, Swagger UI\ub97c \uc774\uc6a9\ud574 \uadf8 \uacc4\uc57d\uc744 \uc0ac\ub78c\uc774 \ud655\uc778\ud558\uace0 \ud14c\uc2a4\ud2b8\ud558\ub294 \uad6c\uc870<\/strong>\ub85c \uc774\ud574\ud558\uba74 \ub41c\ub2e4.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Swagger\ub294 HTTP API\ub97c \ubb38\uc11c\ud654\ud558\uace0 \ud14c\uc2a4\ud2b8\ud558\uae30 \uc704\ud55c \ub3c4\uad6c\uc640 \uba85\uc138 \uc0dd\ud0dc\uacc4\ub2e4. REST API \uc11c\ubc84\ub97c \uac1c\ubc1c\ud558\ub2e4 \ubcf4\uba74 \uc5d4\ub4dc\ud3ec\uc778\ud2b8\uac00 \ub298\uc5b4\ub098\uba74\uc11c \ubb38\uc81c\uac00 \uc0dd\uae34\ub2e4. \uc774 API\ub4e4\uc774 \uc5b4\ub5a4 \ud30c\ub77c\ubbf8\ud130\ub97c \ubc1b\uace0, \uc5b4\ub5a4 \uc751\ub2f5\uc744 \ubc18\ud658\ud558\uace0, \uc778\uc99d\uc740 \uc5b4\ub5bb\uac8c \ud558\ub294\uc9c0 \ucf54\ub4dc\ub9cc \ubcf4\uace0 \ud30c\uc545\ud558\uae30\ub294 \uc810\uc810 \uc5b4\ub824\uc6cc\uc9c4\ub2e4. Swagger\ub97c \uc0ac\uc6a9\ud558\uba74 API\uc758 \uad6c\uc870\ub97c \uba85\uc138\ub85c \uc815\uc758\ud558\uace0, \uc774\ub97c \uae30\ubc18\uc73c\ub85c \uc0ac\ub78c\uc774 \uc77d\uc744 \uc218 \uc788\ub294 API \ubb38\uc11c\ub97c \ub9cc\ub4e4 \uc218 \uc788\ub2e4. \ub300\ud45c\uc801\uc73c\ub85c Swagger UI\ub97c \uc0ac\uc6a9\ud558\uba74 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[52],"tags":[],"class_list":["post-1736","post","type-post","status-publish","format-standard","hentry","category-tools"],"_links":{"self":[{"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/posts\/1736","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=1736"}],"version-history":[{"count":3,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/posts\/1736\/revisions"}],"predecessor-version":[{"id":2010,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/posts\/1736\/revisions\/2010"}],"wp:attachment":[{"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1736"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1736"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1736"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}