{"id":36477,"date":"2023-06-06T08:11:02","date_gmt":"2023-06-05T23:11:02","guid":{"rendered":"https:\/\/m9js.shop\/blog\/?p=36477"},"modified":"2023-06-06T08:11:02","modified_gmt":"2023-06-05T23:11:02","slug":"rest-api-development-guide-using-spring-web-mvc","status":"publish","type":"post","link":"https:\/\/m9js.shop\/blog\/development\/rest-api-development-guide-using-spring-web-mvc","title":{"rendered":"\uc2a4\ud504\ub9c1 \uc6f9 MVC\ub97c \ud65c\uc6a9\ud55c REST API \uac1c\ubc1c \uac00\uc774\ub4dc"},"content":{"rendered":"

\uc2a4\ud504\ub9c1 \uc6f9 MVC\ub97c \ud65c\uc6a9\ud55c REST API \uac1c\ubc1c \uac00\uc774\ub4dc<\/h1>\n

\"Spring<\/p>\n

\uc2a4\ud504\ub9c1 \uc6f9 MVC\ub780 \ubb34\uc5c7\uc778\uac00?<\/h2>\n

\uc2a4\ud504\ub9c1 \ud504\ub808\uc784\uc6cc\ud06c\ub294 Java \uae30\ubc18\uc758 \uc624\ud508 \uc18c\uc2a4 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \ud504\ub808\uc784\uc6cc\ud06c\ub85c, \ub300\uaddc\ubaa8\uc758 \uae30\uc5c5\uc6a9 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uac1c\ubc1c\ud558\uae30 \uc704\ud55c \ub2e4\uc591\ud55c \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4. \uc2a4\ud504\ub9c1 \uc6f9 MVC\ub294 \uc2a4\ud504\ub9c1 \ud504\ub808\uc784\uc6cc\ud06c\uc758 \uc77c\ubd80\uc774\uba70, \uc6f9 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uac1c\ubc1c\uc744 \uc704\ud55c \ud504\ub808\uc784\uc6cc\ud06c\uc785\ub2c8\ub2e4.<\/p>\n

\uc2a4\ud504\ub9c1 \uc6f9 MVC\ub294 Model-View-Controller \ud328\ud134\uc744 \uae30\ubc18\uc73c\ub85c \ud569\ub2c8\ub2e4. \uc774 \ud328\ud134\uc740 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uc138 \uac00\uc9c0 \uc694\uc18c\ub85c \ubd84\ub9ac\ud569\ub2c8\ub2e4. \ubaa8\ub378\uc740 \ub370\uc774\ud130\ub97c \ucc98\ub9ac\ud558\uace0 \ube44\uc988\ub2c8\uc2a4 \ub85c\uc9c1\uc744 \ud3ec\ud568\ud569\ub2c8\ub2e4. \ubdf0\ub294 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc758 UI\ub97c \ub2f4\ub2f9\ud569\ub2c8\ub2e4. \ucee8\ud2b8\ub864\ub7ec\ub294 \ubaa8\ub378\uacfc \ubdf0 \uc0ac\uc774\uc758 \uc911\uac1c\uc790 \uc5ed\ud560\uc744 \ud569\ub2c8\ub2e4.<\/p>\n

\uc2a4\ud504\ub9c1 \uc6f9 MVC\ub294 \uc6f9 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc758 \uad6c\uc131\uc694\uc18c\ub4e4\uc744 \uc81c\uc5b4\ud558\uace0, \uc694\uccad\uacfc \uc751\ub2f5\uc744 \ucc98\ub9ac\ud558\ub294\ub370 \ud544\uc694\ud55c \ub2e4\uc591\ud55c \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4.<\/p>\n

REST API \uac1c\ubc1c\uc744 \uc704\ud55c \uc2a4\ud504\ub9c1 \uc6f9 MVC \uad6c\uc870<\/h2>\n

REST(Representational State Transfer)\ub294 \uc6f9 \uae30\uc220\uc5d0\uc11c \uc790\uc8fc \uc0ac\uc6a9\ub418\ub294 \uc544\ud0a4\ud14d\ucc98 \uc2a4\ud0c0\uc77c \uc911 \ud558\ub098\uc785\ub2c8\ub2e4. REST API\ub294 HTTP \uc694\uccad\uacfc \uc751\ub2f5\uc744 \ud1b5\ud574 \ub370\uc774\ud130\ub97c \uc804\uc1a1\ud558\ub294 \ubc29\uc2dd\uc73c\ub85c \uc791\ub3d9\ud569\ub2c8\ub2e4.<\/p>\n

\uc2a4\ud504\ub9c1 \uc6f9 MVC\ub294 REST API \uac1c\ubc1c\uc744 \uc704\ud55c \uad6c\uc870\ub97c \uc81c\uacf5\ud569\ub2c8\ub2e4. \uc2a4\ud504\ub9c1 \uc6f9 MVC\ub97c \uc774\uc6a9\ud558\uba74 RESTful\ud55c API\ub97c \uc27d\uac8c \uac1c\ubc1c\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n

REST API\ub97c \uac1c\ubc1c\ud558\uae30 \uc704\ud574\uc11c\ub294 \uba87 \uac00\uc9c0 \uad6c\uc131\uc694\uc18c\uac00 \ud544\uc694\ud569\ub2c8\ub2e4. \uba3c\uc800, HTTP \uc694\uccad\uc744 \ucc98\ub9ac\ud558\uae30 \uc704\ud55c URL \ub9e4\ud551\uc774 \ud544\uc694\ud569\ub2c8\ub2e4. \ub450 \ubc88\uc9f8, HTTP \uc694\uccad\uc758 \ub370\uc774\ud130\ub97c \ucc98\ub9ac\ud558\uae30 \uc704\ud55c \ud30c\ub77c\ubbf8\ud130 \ubc14\uc778\ub529\uc774 \ud544\uc694\ud569\ub2c8\ub2e4. \ub9c8\uc9c0\ub9c9\uc73c\ub85c, HTTP \uc751\ub2f5\uc744 \ucc98\ub9ac\ud558\uae30 \uc704\ud55c View\uac00 \ud544\uc694\ud569\ub2c8\ub2e4.<\/p>\n

\uc2a4\ud504\ub9c1 \uc6f9 MVC\ub294 REST API \uac1c\ubc1c\uc744 \uc704\ud55c \ub2e4\uc591\ud55c \uc5b4\ub178\ud14c\uc774\uc158\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4. @RestController<\/code> \uc5b4\ub178\ud14c\uc774\uc158\uc740 RESTful\ud55c API\ub97c \uac1c\ubc1c\ud558\uae30 \uc704\ud55c \uac00\uc7a5 \uc911\uc694\ud55c \uc5b4\ub178\ud14c\uc774\uc158\uc785\ub2c8\ub2e4.<\/p>\n

HTTP \uc694\uccad \ubc0f \uc751\ub2f5 \ucc98\ub9ac \ubc29\ubc95<\/h2>\n

HTTP \uc694\uccad\uacfc \uc751\ub2f5\uc740 \uc2a4\ud504\ub9c1 \uc6f9 MVC\uc5d0\uc11c \uc911\uc694\ud55c \uc5ed\ud560\uc744 \ud569\ub2c8\ub2e4. \uc2a4\ud504\ub9c1 \uc6f9 MVC\ub294 HTTP \uc694\uccad\uacfc \uc751\ub2f5\uc744 \ucc98\ub9ac\ud558\uae30 \uc704\ud55c \ub2e4\uc591\ud55c \ubc29\ubc95\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4.<\/p>\n

URL \ub9e4\ud551<\/h3>\n

HTTP \uc694\uccad\uc744 \ucc98\ub9ac\ud558\uae30 \uc704\ud574\uc11c\ub294 URL \ub9e4\ud551\uc774 \ud544\uc694\ud569\ub2c8\ub2e4. \uc2a4\ud504\ub9c1 \uc6f9 MVC\ub294 @RequestMapping<\/code> \uc5b4\ub178\ud14c\uc774\uc158\uc744 \uc774\uc6a9\ud558\uc5ec URL \ub9e4\ud551\uc744 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n

\uc608\ub97c \ub4e4\uc5b4, \/hello<\/code> URL\ub85c \uc694\uccad\uc744 \ubc1b\uc558\uc744 \ub54c "Hello, World!" \ubb38\uc790\uc5f4\uc744 \ubc18\ud658\ud558\ub294 \uac04\ub2e8\ud55c RESTful API\ub97c \ub9cc\ub4e4\uc5b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n

@RestController\npublic class HelloController {\n\n    @RequestMapping(\"\/hello\")\n    public String hello() {\n        return \"Hello, World!\";\n    }\n\n}<\/code><\/pre>\n

\uc774 \ucf54\ub4dc \uc608\uc81c\uc5d0\uc11c @RestController<\/code> \uc5b4\ub178\ud14c\uc774\uc158\uc73c\ub85c \ud074\ub798\uc2a4\ub97c \uc120\uc5b8\ud558\uace0, @RequestMapping<\/code> \uc5b4\ub178\ud14c\uc774\uc158\uc73c\ub85c \/hello<\/code> URL\uc5d0 \ub300\ud55c \ub9e4\ud551\uc744 \uc218\ud589\ud569\ub2c8\ub2e4.<\/p>\n

\ud30c\ub77c\ubbf8\ud130 \ubc14\uc778\ub529<\/h3>\n

HTTP \uc694\uccad\uc758 \ub370\uc774\ud130\ub97c \ucc98\ub9ac\ud558\uae30 \uc704\ud574\uc11c\ub294 \ud30c\ub77c\ubbf8\ud130 \ubc14\uc778\ub529\uc774 \ud544\uc694\ud569\ub2c8\ub2e4. \uc2a4\ud504\ub9c1 \uc6f9 MVC\ub294 \ub2e4\uc591\ud55c \ubc29\ubc95\uc73c\ub85c \ud30c\ub77c\ubbf8\ud130 \ubc14\uc778\ub529\uc744 \uc9c0\uc6d0\ud569\ub2c8\ub2e4.<\/p>\n

Path Variable<\/h4>\n

URL\uc5d0 \uc788\ub294 \ub370\uc774\ud130\ub97c \ud30c\ub77c\ubbf8\ud130\ub85c \ubc14\uc778\ub529\ud558\ub294 \ubc29\ubc95\uc785\ub2c8\ub2e4. @PathVariable<\/code> \uc5b4\ub178\ud14c\uc774\uc158\uc744 \uc774\uc6a9\ud558\uc5ec \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n

\uc608\ub97c \ub4e4\uc5b4, \/hello\/{name}<\/code> URL\ub85c \uc694\uccad\uc744 \ubc1b\uc558\uc744 \ub54c {name}<\/code> \uac12\uc744 \ud30c\ub77c\ubbf8\ud130\ub85c \ubc1b\uc544\uc11c "Hello, {name}!" \ubb38\uc790\uc5f4\uc744 \ubc18\ud658\ud558\ub294 RESTful API\ub97c \ub9cc\ub4e4\uc5b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n

@RestController\npublic class HelloController {\n\n    @RequestMapping(\"\/hello\/{name}\")\n    public String hello(@PathVariable String name) {\n        return \"Hello, \" + name + \"!\";\n    }\n\n}<\/code><\/pre>\n

\uc774 \ucf54\ub4dc \uc608\uc81c\uc5d0\uc11c @PathVariable<\/code> \uc5b4\ub178\ud14c\uc774\uc158\uc73c\ub85c {name}<\/code> \uac12\uc744 \ud30c\ub77c\ubbf8\ud130\ub85c \ubc1b\uc544\uc11c \ucc98\ub9ac\ud569\ub2c8\ub2e4.<\/p>\n

Request Parameter<\/h4>\n

HTTP \uc694\uccad\uc758 Query String\uc5d0 \uc788\ub294 \ub370\uc774\ud130\ub97c \ud30c\ub77c\ubbf8\ud130\ub85c \ubc14\uc778\ub529\ud558\ub294 \ubc29\ubc95\uc785\ub2c8\ub2e4. @RequestParam<\/code> \uc5b4\ub178\ud14c\uc774\uc158\uc744 \uc774\uc6a9\ud558\uc5ec \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n

\uc608\ub97c \ub4e4\uc5b4, \/hello?name={name}<\/code> URL\ub85c \uc694\uccad\uc744 \ubc1b\uc558\uc744 \ub54c name<\/code> \uac12\uc744 \ud30c\ub77c\ubbf8\ud130\ub85c \ubc1b\uc544\uc11c "Hello, {name}!" \ubb38\uc790\uc5f4\uc744 \ubc18\ud658\ud558\ub294 RESTful API\ub97c \ub9cc\ub4e4\uc5b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n

@RestController\npublic class HelloController {\n\n    @RequestMapping(\"\/hello\")\n    public String hello(@RequestParam String name) {\n        return \"Hello, \" + name + \"!\";\n    }\n\n}<\/code><\/pre>\n

\uc774 \ucf54\ub4dc \uc608\uc81c\uc5d0\uc11c @RequestParam<\/code> \uc5b4\ub178\ud14c\uc774\uc158\uc73c\ub85c name<\/code> \uac12\uc744 \ud30c\ub77c\ubbf8\ud130\ub85c \ubc1b\uc544\uc11c \ucc98\ub9ac\ud569\ub2c8\ub2e4.<\/p>\n

View \ucc98\ub9ac<\/h3>\n

HTTP \uc751\ub2f5\uc744 \ucc98\ub9ac\ud558\uae30 \uc704\ud574\uc11c\ub294 View\uac00 \ud544\uc694\ud569\ub2c8\ub2e4. \uc2a4\ud504\ub9c1 \uc6f9 MVC\ub294 \ub2e4\uc591\ud55c \ubc29\ubc95\uc73c\ub85c View\ub97c \ucc98\ub9ac\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n

JSON \uc751\ub2f5<\/h4>\n

JSON\uc740 RESTful\ud55c API\uc5d0\uc11c \uc790\uc8fc \uc0ac\uc6a9\ub418\ub294 \ub370\uc774\ud130 \ud615\uc2dd \uc911 \ud558\ub098\uc785\ub2c8\ub2e4. \uc2a4\ud504\ub9c1 \uc6f9 MVC\ub294 @ResponseBody<\/code> \uc5b4\ub178\ud14c\uc774\uc158\uc744 \uc774\uc6a9\ud558\uc5ec JSON \ud615\uc2dd\uc758 \ub370\uc774\ud130\ub97c \ubc18\ud658\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n

\uc608\ub97c \ub4e4\uc5b4, \/hello\/{name}<\/code> URL\ub85c \uc694\uccad\uc744 \ubc1b\uc558\uc744 \ub54c {name}<\/code> \uac12\uc744 \ud30c\ub77c\ubbf8\ud130\ub85c \ubc1b\uc544\uc11c JSON \ud615\uc2dd\uc73c\ub85c \ubc18\ud658\ud558\ub294 RESTful API\ub97c \ub9cc\ub4e4\uc5b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n

@RestController\npublic class HelloController {\n\n    @RequestMapping(\"\/hello\/{name}\")\n    public Map hello(@PathVariable String name) {\n        Map result = new HashMap();\n        result.put(\"message\", \"Hello, \" + name + \"!\");\n        return result;\n    }\n\n}<\/code><\/pre>\n

\uc774 \ucf54\ub4dc \uc608\uc81c\uc5d0\uc11c @ResponseBody<\/code> \uc5b4\ub178\ud14c\uc774\uc158\uc73c\ub85c JSON \ud615\uc2dd\uc758 \ub370\uc774\ud130\ub97c \ubc18\ud658\ud569\ub2c8\ub2e4.<\/p>\n

HTML \uc751\ub2f5<\/h4>\n

HTML\uc740 \uc6f9 \ud398\uc774\uc9c0\ub97c \ud45c\uc2dc\ud558\uae30 \uc704\ud55c \uc5b8\uc5b4\uc785\ub2c8\ub2e4. \uc2a4\ud504\ub9c1 \uc6f9 MVC\ub294 \ub2e4\uc591\ud55c \ubc29\ubc95\uc73c\ub85c HTML \uc751\ub2f5\uc744 \ucc98\ub9ac\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n

\uc608\ub97c \ub4e4\uc5b4, \/hello\/{name}<\/code> URL\ub85c \uc694\uccad\uc744 \ubc1b\uc558\uc744 \ub54c {name}<\/code> \uac12\uc744 \ud30c\ub77c\ubbf8\ud130\ub85c \ubc1b\uc544\uc11c HTML \ud615\uc2dd\uc73c\ub85c \ubc18\ud658\ud558\ub294 RESTful API\ub97c \ub9cc\ub4e4\uc5b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n

@Controller\npublic class HelloController {\n\n    @RequestMapping(\"\/hello\/{name}\")\n    public String hello(@PathVariable String name, Model model) {\n        model.addAttribute(\"message\", \"Hello, \" + name + \"!\");\n        return \"hello\";\n    }\n\n}<\/code><\/pre>\n

\uc774 \ucf54\ub4dc \uc608\uc81c\uc5d0\uc11c @Controller<\/code> \uc5b4\ub178\ud14c\uc774\uc158\uc73c\ub85c Controller \ud074\ub798\uc2a4\ub97c \uc120\uc5b8\ud558\uace0, Model<\/code> \uac1d\uccb4\ub97c \uc774\uc6a9\ud558\uc5ec \ub370\uc774\ud130\ub97c \uc804\ub2ec\ud569\ub2c8\ub2e4. return \"hello\";<\/code> \uad6c\ubb38\uc5d0\uc11c hello<\/code>\ub294 HTML \ud30c\uc77c\uc758 \uc774\ub984\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4.<\/p>\n

\uc2a4\ud504\ub9c1 \uc6f9 MVC\ub97c \ud65c\uc6a9\ud55c REST API \uac1c\ubc1c \uac00\uc774\ub4dc<\/h2>\n

\uc2a4\ud504\ub9c1 \uc6f9 MVC\ub97c \uc774\uc6a9\ud558\uc5ec RESTful\ud55c API\ub97c \uac1c\ubc1c\ud558\uae30 \uc704\ud574\uc11c\ub294 \uba87 \uac00\uc9c0 \uac00\uc774\ub4dc\ub77c\uc778\uc744 \ub530\ub77c\uc57c \ud569\ub2c8\ub2e4.<\/p>\n

1. RESTful\ud55c URL \uad6c\uc131<\/h3>\n

RESTful\ud55c API\uc5d0\uc11c\ub294 URL \uad6c\uc131\uc774 \uc911\uc694\ud569\ub2c8\ub2e4. URL\uc740 \ub9ac\uc18c\uc2a4\ub97c \ub098\ud0c0\ub0b4\ub294 \ub370 \uc0ac\uc6a9\ub418\uba70, HTTP \uba54\uc11c\ub4dc\uc640 \ud568\uaed8 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.<\/p>\n

\uc608\ub97c \ub4e4\uc5b4, \/users\/{id}<\/code> URL\ub85c \uc0ac\uc6a9\uc790 \uc815\ubcf4\ub97c \uc5bb\ub294 RESTful\ud55c API\ub97c \ub9cc\ub4e4\uc5b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4. GET<\/code> \uba54\uc11c\ub4dc\ub97c \uc774\uc6a9\ud558\uc5ec \uc0ac\uc6a9\uc790 \uc815\ubcf4\ub97c \uc5bb\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4. POST<\/code> \uba54\uc11c\ub4dc\ub97c \uc774\uc6a9\ud558\uc5ec \uc0c8\ub85c\uc6b4 \uc0ac\uc6a9\uc790 \uc815\ubcf4\ub97c \uc0dd\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. PUT<\/code> \uba54\uc11c\ub4dc\ub97c \uc774\uc6a9\ud558\uc5ec \uc0ac\uc6a9\uc790 \uc815\ubcf4\ub97c \uc218\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. DELETE<\/code> \uba54\uc11c\ub4dc\ub97c \uc774\uc6a9\ud558\uc5ec \uc0ac\uc6a9\uc790 \uc815\ubcf4\ub97c \uc0ad\uc81c\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n

@RequestMapping(\"\/users\")\npublic class UserController {\n\n    @GetMapping(\"\/{id}\")\n    public User getUserById(@PathVariable Long id) {\n        \/\/ ...\n    }\n\n    @PostMapping(\"\/\")\n    public User createUser(@RequestBody User user) {\n        \/\/ ...\n    }\n\n    @PutMapping(\"\/{id}\")\n    public User updateUser(@PathVariable Long id, @RequestBody User user) {\n        \/\/ ...\n    }\n\n    @DeleteMapping(\"\/{id}\")\n    public void deleteUser(@PathVariable Long id) {\n        \/\/ ...\n    }\n\n}<\/code><\/pre>\n

\uc774 \ucf54\ub4dc \uc608\uc81c\uc5d0\uc11c \/users\/{id}<\/code> URL\ub85c \uc0ac\uc6a9\uc790 \uc815\ubcf4\ub97c \uc5bb\ub294 RESTful\ud55c API\ub97c \uad6c\uc131\ud558\uc600\uc2b5\ub2c8\ub2e4. @GetMapping<\/code>, @PostMapping<\/code>, @PutMapping<\/code>, @DeleteMapping<\/code> \uc5b4\ub178\ud14c\uc774\uc158\uc744 \uc774\uc6a9\ud558\uc5ec HTTP \uba54\uc11c\ub4dc\ub97c \uc9c0\uc815\ud558\uc600\uc2b5\ub2c8\ub2e4.<\/p>\n

2. Request Body \uc0ac\uc6a9<\/h3>\n

HTTP \uc694\uccad\uc758 \ub370\uc774\ud130\ub97c \ucc98\ub9ac\ud558\uae30 \uc704\ud574\uc11c\ub294 Request Body\ub97c \uc0ac\uc6a9\ud574\uc57c \ud569\ub2c8\ub2e4. Request Body\ub294 HTTP \uba54\uc2dc\uc9c0\uc758 \ubcf8\ubb38\uc5d0 \uc704\uce58\ud55c \ub370\uc774\ud130\ub97c \uc758\ubbf8\ud569\ub2c8\ub2e4.<\/p>\n

\uc2a4\ud504\ub9c1 \uc6f9 MVC\ub294 @RequestBody<\/code> \uc5b4\ub178\ud14c\uc774\uc158\uc744 \uc774\uc6a9\ud558\uc5ec Request Body\ub97c \ucc98\ub9ac\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n

@PostMapping(\"\/users\")\npublic User createUser(@RequestBody User user) {\n    \/\/ ...\n}<\/code><\/pre>\n

\uc774 \ucf54\ub4dc \uc608\uc81c\uc5d0\uc11c @RequestBody<\/code> \uc5b4\ub178\ud14c\uc774\uc158\uc73c\ub85c Request Body\ub97c \ucc98\ub9ac\ud569\ub2c8\ub2e4.<\/p>\n

3. Response Body \uc0ac\uc6a9<\/h3>\n

HTTP \uc751\ub2f5\uc758 \ub370\uc774\ud130\ub97c \ucc98\ub9ac\ud558\uae30 \uc704\ud574\uc11c\ub294 Response Body\ub97c \uc0ac\uc6a9\ud574\uc57c \ud569\ub2c8\ub2e4. Response Body\ub294 HTTP \uba54\uc2dc\uc9c0\uc758 \ubcf8\ubb38\uc5d0 \uc704\uce58\ud55c \ub370\uc774\ud130\ub97c \uc758\ubbf8\ud569\ub2c8\ub2e4.<\/p>\n

\uc2a4\ud504\ub9c1 \uc6f9 MVC\ub294 @ResponseBody<\/code> \uc5b4\ub178\ud14c\uc774\uc158\uc744 \uc774\uc6a9\ud558\uc5ec Response Body\ub97c \ucc98\ub9ac\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n

@GetMapping(\"\/users\/{id}\")\npublic User getUserById(@PathVariable Long id) {\n    \/\/ ...\n}<\/code><\/pre>\n

\uc774 \ucf54\ub4dc \uc608\uc81c\uc5d0\uc11c @ResponseBody<\/code> \uc5b4\ub178\ud14c\uc774\uc158\uc73c\ub85c Response Body\ub97c \ucc98\ub9ac\ud569\ub2c8\ub2e4.<\/p>\n

4. Exception \ucc98\ub9ac<\/h3>\n

RESTful\ud55c API\uc5d0\uc11c\ub294 \uc608\uc678 \ucc98\ub9ac\uac00 \uc911\uc694\ud569\ub2c8\ub2e4. \uc608\uc678 \ucc98\ub9ac\ub97c \ud1b5\ud574 \ud074\ub77c\uc774\uc5b8\ud2b8\uc5d0\uac8c \uc801\uc808\ud55c \uc751\ub2f5\uc744 \ubcf4\ub0b4\uc904 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n

\uc2a4\ud504\ub9c1 \uc6f9 MVC\ub294 @ExceptionHandler<\/code> \uc5b4\ub178\ud14c\uc774\uc158\uc744 \uc774\uc6a9\ud558\uc5ec \uc608\uc678 \ucc98\ub9ac\ub97c \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n

@ControllerAdvice\npublic class RestExceptionHandler {\n\n    @ExceptionHandler(UserNotFoundException.class)\n    @ResponseStatus(HttpStatus.NOT_FOUND)\n    public void handleUserNotFoundException() {\n        \/\/ ...\n    }\n\n}<\/code><\/pre>\n

\uc774 \ucf54\ub4dc \uc608\uc81c\uc5d0\uc11c @ControllerAdvice<\/code> \uc5b4\ub178\ud14c\uc774\uc158\uc73c\ub85c \uc608\uc678 \ucc98\ub9ac \ud074\ub798\uc2a4\ub97c \uc120\uc5b8\ud558\uace0, @ExceptionHandler<\/code> \uc5b4\ub178\ud14c\uc774\uc158\uc73c\ub85c \uc608\uc678 \ucc98\ub9ac \uba54\uc11c\ub4dc\ub97c \uad6c\ud604\ud569\ub2c8\ub2e4.<\/p>\n

\uacb0\ub860<\/h2>\n

\uc774\ubc88 \uae00\uc5d0\uc11c\ub294 \uc2a4\ud504\ub9c1 \uc6f9 MVC\ub97c \ud65c\uc6a9\ud558\uc5ec RESTful\ud55c API\ub97c \uac1c\ubc1c\ud558\ub294 \ubc29\ubc95\uc5d0 \ub300\ud574 \uc54c\uc544\ubcf4\uc558\uc2b5\ub2c8\ub2e4. \uc2a4\ud504\ub9c1 \uc6f9 MVC\ub294 REST API \uac1c\ubc1c\uc744 \uc704\ud55c \ub2e4\uc591\ud55c \uae30\ub2a5\uc744 \uc81c\uacf5\ud558\uba70, \uac1c\ubc1c\uc790\ub4e4\uc774 \uc27d\uac8c RESTful\ud55c API\ub97c \uac1c\ubc1c\ud560 \uc218 \uc788\ub3c4\ub85d \ub3c4\uc640\uc90d\ub2c8\ub2e4. RESTful\ud55c API\ub97c \uac1c\ubc1c\ud560 \ub54c\ub294 URL \uad6c\uc131, Request Body\uc640 Response Body \ucc98\ub9ac, \uc608\uc678 \ucc98\ub9ac \ub4f1\uc5d0 \uc8fc\uc758\ud574\uc57c \ud569\ub2c8\ub2e4. \uc2a4\ud504\ub9c1 \uc6f9 MVC\ub97c \uc774\uc6a9\ud558\uba74 \uc774\ub7ec\ud55c \uc791\uc5c5\ub4e4\uc744 \uc27d\uac8c \ucc98\ub9ac\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n","protected":false},"excerpt":{"rendered":"

\uc2a4\ud504\ub9c1 \uc6f9 MVC\ub97c \ud65c\uc6a9\ud558\uc5ec REST API\ub97c \uac1c\ubc1c\ud558\ub294 \ubc29\ubc95\uc744 \uc54c\uc544\ubcf4\uc790.<\/p>\n","protected":false},"author":1,"featured_media":12882,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1957],"tags":[2119,2105,2188,2443,5932,471,906],"class_list":["post-36477","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-development","tag-api","tag-java","tag-public","tag-restful","tag-spring-boot","tag-state","tag-world"],"acf":[],"_links":{"self":[{"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/posts\/36477","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/comments?post=36477"}],"version-history":[{"count":1,"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/posts\/36477\/revisions"}],"predecessor-version":[{"id":36484,"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/posts\/36477\/revisions\/36484"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/media\/12882"}],"wp:attachment":[{"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/media?parent=36477"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/categories?post=36477"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/tags?post=36477"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}