{"id":1658,"date":"2026-03-31T16:16:19","date_gmt":"2026-03-31T16:16:19","guid":{"rendered":"https:\/\/wayhope.kro.kr\/?p=1658"},"modified":"2026-08-31T07:32:36","modified_gmt":"2026-08-31T07:32:36","slug":"spring-%ea%b0%9c%eb%b0%9c-%ed%95%b5%ec%8b%ac-%ec%a0%95%eb%a6%ac","status":"publish","type":"post","link":"https:\/\/wayhope.kro.kr\/?p=1658","title":{"rendered":"Spring \uc11c\ubc84 \uac1c\ubc1c \ud575\uc2ec \uc815\ub9ac"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Spring\uc740 Java\ub85c \uc6f9 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uac1c\ubc1c\ud560 \ub54c \ub9ce\uc774 \uc0ac\uc6a9\ud558\ub294 \ud504\ub808\uc784\uc6cc\ud06c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ucc98\uc74c Spring\uc744 \ubcf4\uba74 <code>@Controller<\/code>, <code>@Service<\/code>, <code>@Repository<\/code>, <code>@Autowired<\/code>, <code>@Transactional<\/code>\ucc98\ub7fc \uc0dd\uc18c\ud55c \uc5b4\ub178\ud14c\uc774\uc158\uc774 \uacc4\uc18d \ub4f1\uc7a5\ud55c\ub2e4. \uc5ec\uae30\uc5d0 Spring MVC, JPA, Security, AOP\uae4c\uc9c0 \ubd99\uc73c\uba74\uc11c \uac01\uac01\uc758 \uae30\ub2a5\uc744 \ub530\ub85c \uc678\uc6b0\uae30 \uc27d\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud558\uc9c0\ub9cc Spring\uc744 \uc774\ud574\ud560 \ub54c \uba3c\uc800 \ubd10\uc57c \ud558\ub294 \uac83\uc740 \uc5b4\ub178\ud14c\uc774\uc158\uc774 \uc544\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\uac1d\uccb4\uac00 \uc5b4\ub5bb\uac8c \ub9cc\ub4e4\uc5b4\uc9c0\uace0, \uc11c\ub85c \uc5b4\ub5bb\uac8c \uc5f0\uacb0\ub418\uba70, HTTP \uc694\uccad\uc774 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \ub0b4\ubd80\ub97c \uc5b4\ub5bb\uac8c \ud1b5\uacfc\ud558\ub294\uac00<\/strong>\ub97c \uc774\ud574\ud558\ub294 \uac83\uc774 \uba3c\uc800\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Spring \uc6f9 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc758 \uae30\ubcf8\uc801\uc778 \ud750\ub984\uc740 \ub2e4\uc74c\uacfc \uac19\uc774 \ubcfc \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>HTTP Request -&gt; DispatcherServlet -&gt; Controller -&gt; Service -&gt; Repository -&gt; Database\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub9ac\uace0 \uc774 \uacfc\uc815\uc5d0\uc11c \ud544\uc694\ud55c \uac1d\uccb4\ub4e4\uc744 Spring Container\uac00 \uc0dd\uc131\ud558\uace0 \uad00\ub9ac\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\">Spring\uc740 \ubb34\uc5c7\uc744 \ud574\uacb0\ud558\ub294\uac00<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Java\uc5d0\uc11c\ub294 \ud544\uc694\ud55c \uac1d\uccb4\ub97c \uc9c1\uc811 \uc0dd\uc131\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>UserRepository repository = new UserRepository();\nUserService service = new UserService(repository);\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc791\uc740 \ud504\ub85c\uadf8\ub7a8\uc5d0\uc11c\ub294 \ubb38\uc81c\uac00 \uc5c6\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud558\uc9c0\ub9cc \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc774 \ucee4\uc9c0\uba74 \uac1d\uccb4\uc758 \uc218\uac00 \ub9ce\uc544\uc9c0\uace0 \uc11c\ub85c \uc758\uc874\ud558\ub294 \uad00\uacc4\ub3c4 \ubcf5\uc7a1\ud574\uc9c4\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>OrderController -&gt; OrderService -&gt; OrderRepository -&gt; Database\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc5ec\uae30\uc5d0 \uc778\uc99d, \ub85c\uae45, \ud2b8\ub79c\uc7ad\uc158 \uac19\uc740 \uacf5\ud1b5 \uae30\ub2a5\uae4c\uc9c0 \ucd94\uac00\ub418\uba74 \uac1d\uccb4 \uc0dd\uc131\uacfc \uc5f0\uacb0\uc744 \uc9c1\uc811 \uad00\ub9ac\ud558\ub294 \uc77c\uc774 \uc810\uc810 \ubcf5\uc7a1\ud574\uc9c4\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Spring\uc740 \uc774\ub7f0 \uac1d\uccb4\uc758 \uc0dd\uc131\uacfc \uad00\ub9ac, \uc758\uc874\uc131 \uc5f0\uacb0, \uc6f9 \uc694\uccad \ucc98\ub9ac, \ud2b8\ub79c\uc7ad\uc158, \ubcf4\uc548 \ub4f1\uc758 \uae30\ub2a5\uc744 \ud504\ub808\uc784\uc6cc\ud06c \ucc28\uc6d0\uc5d0\uc11c \uc81c\uacf5\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uac1c\ubc1c\uc790\ub294 \uac1d\uccb4\ub97c \uc9c1\uc811 \uc0dd\uc131\ud558\ub294 \ucf54\ub4dc\ubcf4\ub2e4 \uac01 \uac1d\uccb4\uc758 \ucc45\uc784\uacfc \uc758\uc874\uad00\uacc4\ub97c \uc124\uacc4\ud558\ub294 \ub370 \uc9d1\uc911\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\">Bean\uacfc Spring Container<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Spring\uc5d0\uc11c \uc790\uc8fc \ub4f1\uc7a5\ud558\ub294 \uac1c\ub150\uc774 <code>Bean<\/code>\uc774\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bean\uc740 Spring Container\uac00 \uc0dd\uc131\ud558\uace0 \uad00\ub9ac\ud558\ub294 \uac1d\uccb4\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@Service\npublic class UserService {\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>UserService<\/code>\uc5d0 <code>@Service<\/code>\uac00 \ubd99\uc73c\uba74 Spring\uc774 \ud574\ub2f9 \ud074\ub798\uc2a4\ub97c Bean\uc73c\ub85c \ub4f1\ub85d\ud558\uace0 \uad00\ub9ac\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub300\ud45c\uc801\uc778 Bean \ub4f1\ub85d \ubc29\uc2dd\uc740 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@Component\n@Service\n@Repository\n@Controller\n@RestController\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc9c1\uc811 Bean\uc744 \ub4f1\ub85d\ud558\ub294 \uac83\ub3c4 \uac00\ub2a5\ud558\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@Configuration\npublic class AppConfig {\n\n    @Bean\n    public UserService userService() {\n        return new UserService();\n    }\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Spring \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc774 \uc2e4\ud589\ub418\uba74 Container\uac00 \ud544\uc694\ud55c Bean\uc744 \uc0dd\uc131\ud558\uace0 \uad00\ub9ac\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bean \uc0ac\uc774\uc5d0 \uc758\uc874\uad00\uacc4\uac00 \uc788\ub2e4\uba74 \ud544\uc694\ud55c \uac1d\uccb4\ub97c \uc5f0\uacb0\ud574\uc900\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Spring Container -&gt; UserRepository Bean -&gt; UserService Bean -&gt; UserRepository Dependency\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc5ec\uae30\uc11c \uc911\uc694\ud55c \uac83\uc740 <code>@Service<\/code>\ub77c\ub294 \uc5b4\ub178\ud14c\uc774\uc158 \uc790\uccb4\uac00 \uc544\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\uc65c \uc774 \uac1d\uccb4\ub97c Spring\uc774 \uad00\ub9ac\ud574\uc57c \ud558\ub294\uac00<\/strong>\ub97c \uc774\ud574\ud558\ub294 \uac83\uc774 \ud575\uc2ec\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\">Dependency Injection<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\uac1d\uccb4\uac00 \ub2e4\ub978 \uac1d\uccb4\ub97c \ud544\uc694\ub85c \ud558\ub294 \uad00\uacc4\ub97c \uc758\uc874\uad00\uacc4\ub77c\uace0 \ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4 <code>UserService<\/code>\uac00 <code>UserRepository<\/code>\ub97c \uc0ac\uc6a9\ud55c\ub2e4\uace0 \ud558\uc790.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public class UserService {\n\n    private final UserRepository repository;\n\n    public UserService(UserRepository repository) {\n        this.repository = repository;\n    }\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>UserService<\/code>\ub294 <code>UserRepository<\/code>\ub97c \uc9c1\uc811 \uc0dd\uc131\ud558\uc9c0 \uc54a\ub294\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud544\uc694\ud55c \uac1d\uccb4\ub97c \uc678\ubd80\uc5d0\uc11c \uc804\ub2ec\ubc1b\ub294\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\uac83\uc774 Dependency Injection, DI\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Spring\uc5d0\uc11c\ub294 \uc77c\ubc18\uc801\uc73c\ub85c \uc0dd\uc131\uc790 \uc8fc\uc785\uc744 \uc0ac\uc6a9\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@Service\npublic class UserService {\n\n    private final UserRepository repository;\n\n    public UserService(UserRepository repository) {\n        this.repository = repository;\n    }\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Spring Container\uac00 <code>UserRepository<\/code> Bean\uc744 \ucc3e\uc544 \uc0dd\uc131\uc790\ub97c \ud1b5\ud574 \uc804\ub2ec\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Spring Container -&gt; UserRepository \uc0dd\uc131 -&gt; UserService \uc0dd\uc131 -&gt; Repository \uc8fc\uc785\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ub807\uac8c \ud558\uba74 <code>UserService<\/code>\uac00 \uad6c\uccb4\uc801\uc778 \uad6c\ud604 \uac1d\uccb4\ub97c \uc9c1\uc811 \uc0dd\uc131\ud558\uc9c0 \uc54a\uc544\ub3c4 \ub41c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud14c\uc2a4\ud2b8\uc5d0\uc11c\ub3c4 \ud544\uc694\ud55c \uac1d\uccb4\ub97c \uc9c1\uc811 \uc804\ub2ec\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>UserRepository repository = new FakeUserRepository();\nUserService service = new UserService(repository);\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uac1d\uccb4\ub97c \uc0dd\uc131\ud558\ub294 \ucc45\uc784\uacfc \uac1d\uccb4\ub97c \uc0ac\uc6a9\ud558\ub294 \ucc45\uc784\uc744 \ubd84\ub9ac\ud560 \uc218 \uc788\ub2e4\ub294 \uac83\uc774 DI\uc758 \uc911\uc694\ud55c \uc7a5\uc810\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\">IoC<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">DI\ub97c \uc774\ud574\ud558\uba74 IoC\ub3c4 \uc790\uc5f0\uc2a4\ub7fd\uac8c \uc5f0\uacb0\ub41c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc77c\ubc18\uc801\uc778 Java \ucf54\ub4dc\uc5d0\uc11c\ub294 \uac1c\ubc1c\uc790\uac00 \uac1d\uccb4\uc758 \uc0dd\uc131\uacfc \uc5f0\uacb0\uc744 \uc9c1\uc811 \uacb0\uc815\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\uac1c\ubc1c\uc790 -&gt; \uac1d\uccb4 \uc0dd\uc131 -&gt; \uac1d\uccb4 \uc5f0\uacb0 -&gt; \uac1d\uccb4 \uc0ac\uc6a9\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Spring\uc744 \uc0ac\uc6a9\ud558\uba74 \uac1d\uccb4\uc758 \uc0dd\uc131\uacfc \uc5f0\uacb0\uc744 Spring Container\uac00 \ub2f4\ub2f9\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Spring Container -&gt; \uac1d\uccb4 \uc0dd\uc131 -&gt; \uac1d\uccb4 \uc5f0\uacb0 -&gt; \uac1d\uccb4 \uad00\ub9ac\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uac1c\ubc1c\uc790\uac00 \uac00\uc9c0\uace0 \uc788\ub358 \uc81c\uc5b4\uad8c \uc77c\ubd80\uac00 \ud504\ub808\uc784\uc6cc\ud06c\ub85c \ub118\uc5b4\uac04\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\uac83\uc744 IoC, Inversion of Control\uc774\ub77c\uace0 \ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">DI\ub294 \uc774\ub7ec\ud55c IoC\ub97c \uad6c\ud604\ud558\ub294 \ub300\ud45c\uc801\uc778 \ubc29\ubc95\uc774\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub530\ub77c\uc11c \ub450 \uac1c\ub150\uc744 \uac19\uc740 \uac83\uc73c\ub85c \ubcf4\uae30\ubcf4\ub2e4\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \uc774\ud574\ud558\ub294 \uac83\uc774 \uc88b\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>IoC -&gt; \uc81c\uc5b4\uc758 \uc5ed\uc804\nIoC -&gt; DI\ub97c \ud3ec\ud568\ud55c \uc5ec\ub7ec \ubc29\uc2dd\uc73c\ub85c \uad6c\ud604 \uac00\ub2a5\nDI -&gt; \uac1d\uccb4\uc758 \uc758\uc874\uc131\uc744 \uc678\ubd80\uc5d0\uc11c \uc8fc\uc785\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\">Spring MVC<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Spring\uc73c\ub85c \uc6f9 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uac1c\ubc1c\ud558\uba74 Spring MVC\ub97c \ub9cc\ub098\uac8c \ub41c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">HTTP \uc694\uccad\uc774 \ub4e4\uc5b4\uc624\uba74 \uc77c\ubc18\uc801\uc73c\ub85c \ub2e4\uc74c\uacfc \uac19\uc740 \ud750\ub984\uc744 \uac70\uce5c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Client -&gt; HTTP Request -&gt; DispatcherServlet -&gt; Controller -&gt; Service -&gt; Repository -&gt; Database\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc5ec\uae30\uc11c <code>DispatcherServlet<\/code>\uc740 Spring MVC\uc758 \uc911\uc2ec\uc801\uc778 \uc5ed\ud560\uc744 \ub2f4\ub2f9\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">HTTP \uc694\uccad\uc744 \ubc1b\uc544 \uc801\uc808\ud55c Controller\ub85c \uc804\ub2ec\ud558\uace0 Controller\uc758 \ucc98\ub9ac \uacb0\uacfc\ub97c HTTP \uc751\ub2f5\uc73c\ub85c \uc5f0\uacb0\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Controller\ub294 \uc6f9 \uc694\uccad\uc744 \ucc98\ub9ac\ud558\ub294 \uc785\uad6c\uc5d0 \uac00\uae5d\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@RestController\npublic class UserController {\n\n    private final UserService userService;\n\n    public UserController(UserService userService) {\n        this.userService = userService;\n    }\n\n    @GetMapping(\"\/users\/{id}\")\n    public UserResponse getUser(@PathVariable Long id) {\n        return userService.getUser(id);\n    }\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Controller\uc5d0\uc11c \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0 \uc9c1\uc811 \uc811\uadfc\ud558\uae30\ubcf4\ub2e4 Service\ub97c \ud638\ucd9c\ud558\ub294 \uad6c\uc870\ub97c \ub9ce\uc774 \uc0ac\uc6a9\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\">Controller\uc640 Service<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Controller\uc640 Service\ub97c \ubd84\ub9ac\ud558\ub294 \uc774\uc720\ub294 \ucc45\uc784\uc744 \ub098\ub204\uae30 \uc704\ud574\uc11c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Controller\uc5d0\uc11c \ubaa8\ub4e0 \ub85c\uc9c1\uc744 \ucc98\ub9ac\ud574\ub3c4 \ud504\ub85c\uadf8\ub7a8 \uc790\uccb4\ub294 \ub3d9\uc791\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@GetMapping(\"\/users\/{id}\")\npublic UserResponse getUser(@PathVariable Long id) {\n\n    User user = userRepository.findById(id);\n\n    \/\/ \uc5ec\ub7ec \ube44\uc988\ub2c8\uc2a4 \ub85c\uc9c1\n\n    return UserResponse.from(user);\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ud558\uc9c0\ub9cc \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc774 \ucee4\uc9c0\uba74 Controller\uac00 \uc9c0\ub098\uce58\uac8c \ub9ce\uc740 \ucc45\uc784\uc744 \uac00\uc9c0\uac8c \ub41c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub798\uc11c \ubcf4\ud1b5 \ub2e4\uc74c\uacfc \uac19\uc774 \uc5ed\ud560\uc744 \ubd84\ub9ac\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Controller -&gt; HTTP \uc694\uccad\uacfc \uc751\ub2f5 \ucc98\ub9ac\nService -&gt; \ube44\uc988\ub2c8\uc2a4 \ub85c\uc9c1 \ucc98\ub9ac\nRepository -&gt; \ub370\uc774\ud130 \uc811\uadfc\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ud68c\uc6d0 \uac00\uc785\uc744 \uc608\ub85c \ub4e4\uba74:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>POST \/users -&gt; UserController -&gt; UserService -&gt; UserRepository -&gt; Database\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Controller\ub294 HTTP \uc694\uccad\uc744 \ubc1b\uace0 Service\ub97c \ud638\ucd9c\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Service\ub294 \uc911\ubcf5 \ud68c\uc6d0 \ud655\uc778, \ud68c\uc6d0 \uc0dd\uc131 \uac19\uc740 \ube44\uc988\ub2c8\uc2a4 \ub85c\uc9c1\uc744 \ucc98\ub9ac\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Repository\ub294 \ub370\uc774\ud130\ub97c \uc800\uc7a5\ud558\uac70\ub098 \uc870\ud68c\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ub807\uac8c \uc5ed\ud560\uc744 \ub098\ub204\uba74 \uac01 \ud074\ub798\uc2a4\uac00 \ub2f4\ub2f9\ud558\ub294 \ubc94\uc704\uac00 \uba85\ud655\ud574\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\">Repository\uc640 Database<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Repository\ub294 \ub370\uc774\ud130\uc758 \uc800\uc7a5\uacfc \uc870\ud68c\ub97c \ub2f4\ub2f9\ud558\ub294 \uacc4\uce35\uc774\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Spring\uc5d0\uc11c \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub97c \ub2e4\ub8f0 \ub54c\ub294 JDBC\ub97c \uc9c1\uc811 \uc0ac\uc6a9\ud560 \uc218\ub3c4 \uc788\uace0 JPA \uac19\uc740 ORM\uc744 \uc0ac\uc6a9\ud560 \uc218\ub3c4 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Spring Data JPA\ub97c \uc0ac\uc6a9\ud558\uba74 Repository \uad6c\ud604\uc744 \uc0c1\ub2f9 \ubd80\ubd84 \uc790\ub3d9\ud654\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public interface UserRepository\n        extends JpaRepository&lt;User, Long&gt; {\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uae30\ubcf8\uc801\uc778 CRUD \uae30\ub2a5\uc744 \uc81c\uacf5\ubc1b\uc744 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>userRepository.findById(id);\nuserRepository.findAll();\nuserRepository.save(user);\nuserRepository.delete(user);\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc5ec\uae30\uc11c JPA\uc640 Hibernate, Spring Data JPA\ub97c \uac19\uc740 \uae30\uc220\ub85c \uc0dd\uac01\ud558\uba74 \uc548 \ub41c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uac01\uac01\uc758 \uc5ed\ud560\uc774 \ub2e4\ub974\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Spring Data JPA -&gt; Repository \uc0ac\uc6a9 \ud3b8\uc758 \uae30\ub2a5\nJPA -&gt; Java ORM \ud45c\uc900\nHibernate -&gt; JPA \uad6c\ud604\uccb4\nJDBC -&gt; Java Database \uc5f0\uacb0 API\nDatabase -&gt; \uc2e4\uc81c \ub370\uc774\ud130 \uc800\uc7a5\uc18c\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc804\uccb4\uc801\uc778 \uad00\uacc4\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \ubcfc \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Application -&gt; Spring Data JPA -&gt; JPA -&gt; Hibernate -&gt; JDBC -&gt; Database\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uac01 \uae30\uc220\uc774 \uc5b4\ub290 \uacc4\uce35\uc5d0 \uc704\uce58\ud558\ub294\uc9c0 \uc54c\uace0 \uc788\uc73c\uba74 \uc774\ub984\uc774 \ube44\uc2b7\ud55c \uae30\uc220\ub4e4\uc774 \ud6e8\uc52c \ub35c \ud5f7\uac08\ub9b0\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Entity\uc640 DTO<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">JPA\ub97c \uc0ac\uc6a9\ud558\uba74 Entity\ub97c \ub9cc\ub4e4\uac8c \ub41c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@Entity\npublic class User {\n\n    @Id\n    @GeneratedValue\n    private Long id;\n\n    private String name;\n    private String email;\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Entity\ub294 \ub370\uc774\ud130\ubca0\uc774\uc2a4 \ud14c\uc774\ube14\uacfc \ub9e4\ud551\ub418\ub294 \uac1d\uccb4\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud558\uc9c0\ub9cc API \uc694\uccad\uc774\ub098 \uc751\ub2f5\uc5d0 Entity\ub97c \uadf8\ub300\ub85c \uc0ac\uc6a9\ud558\ub294 \uac83\uc740 \uc8fc\uc758\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud68c\uc6d0 \uc0dd\uc131 \uc694\uccad\uc744 \ubc1b\ub294\ub2e4\uba74 \ubcc4\ub3c4\uc758 DTO\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public class CreateUserRequest {\n\n    private String name;\n    private String email;\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc694\uccad \ub370\uc774\ud130\ub294 Service\uc5d0\uc11c Entity\ub85c \ubcc0\ud658\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>HTTP Request -&gt; Request DTO -&gt; Service -&gt; Entity -&gt; Repository -&gt; Database\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc751\ub2f5\ub3c4 \ubcc4\ub3c4\uc758 DTO\ub85c \ubcc0\ud658\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Database -&gt; Entity -&gt; Service -&gt; Response DTO -&gt; HTTP Response\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ub807\uac8c \ud558\uba74 API\uc758 \ub370\uc774\ud130 \uad6c\uc870\uc640 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc758 \uad6c\uc870\ub97c \ubd84\ub9ac\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Entity\uc5d0 \ud544\ub4dc\ub97c \ucd94\uac00\ud588\ub2e4\uace0 \ud574\uc11c API \uc751\ub2f5 \uad6c\uc870\uac00 \ubc18\ub4dc\uc2dc \ubcc0\uacbd\ub418\ub294 \uad6c\uc870\ub97c \ud53c\ud560 \uc218 \uc788\ub2e4\ub294 \uc7a5\uc810\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\">Transaction<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc791\uc5c5\uc744 \ud558\ub098\uc758 \uc791\uc5c5 \ub2e8\uc704\ub85c \ucc98\ub9ac\ud574\uc57c \ud560 \ub54c Transaction\uc744 \uc0ac\uc6a9\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4 \uc8fc\ubb38\uc744 \ucc98\ub9ac\ud558\uba74\uc11c \uc8fc\ubb38\uc744 \uc800\uc7a5\ud558\uace0 \uc7ac\uace0\ub97c \uac10\uc18c\uc2dc\ud0a8\ub2e4\uace0 \ud558\uc790.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@Transactional\npublic void order() {\n\n    orderRepository.save(order);\n\n    inventory.decrease();\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ub450 \uc791\uc5c5\uc774 \ubaa8\ub450 \uc815\uc0c1\uc801\uc73c\ub85c \ucc98\ub9ac\ub418\uc5b4\uc57c \ud55c\ub2e4\uba74 \ud558\ub098\uc758 Transaction\uc73c\ub85c \ubb36\uc744 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc815\uc0c1\uc801\uc73c\ub85c \uc644\ub8cc\ub418\uba74 Commit\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Transaction Start -&gt; \uc8fc\ubb38 \uc800\uc7a5 -&gt; \uc7ac\uace0 \uac10\uc18c -&gt; \uc815\uc0c1 \uc885\ub8cc -&gt; Commit\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc911\uac04\uc5d0 \uc624\ub958\uac00 \ubc1c\uc0dd\ud558\uba74 Rollback\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Transaction Start -&gt; \uc8fc\ubb38 \uc800\uc7a5 -&gt; \uc7ac\uace0 \uac10\uc18c \uc2e4\ud328 -&gt; Rollback\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Spring\uc758 <code>@Transactional<\/code>\uc740 \ub2e8\uc21c\ud55c DB \ud3b8\uc758 \uae30\ub2a5\uc774 \uc544\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Spring\uc758 Transaction \uad00\ub9ac\uc640 Proxy \uae30\ubc18 AOP \uad6c\uc870\uac00 \uc5f0\uacb0\ub418\uc5b4 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub530\ub77c\uc11c \uc774\ud6c4 AOP\ub97c \uacf5\ubd80\ud558\uba74 <code>@Transactional<\/code>\uc758 \ub3d9\uc791 \uad6c\uc870\ub3c4 \ub354 \uba85\ud655\ud558\uac8c \uc774\ud574\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\">AOP<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0\ub294 \uc5ec\ub7ec \ud074\ub798\uc2a4\uc5d0\uc11c \ubc18\ubcf5\uc801\uc73c\ub85c \ud544\uc694\ud55c \uae30\ub2a5\uc774 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub300\ud45c\uc801\uc73c\ub85c \ub2e4\uc74c\uacfc \uac19\uc740 \uac83\ub4e4\uc774 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Logging\nTransaction\nPerformance Measurement\nSecurity\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ub7f0 \uae30\ub2a5\uc744 \ubaa8\ub4e0 \uba54\uc11c\ub4dc\uc5d0 \uc9c1\uc811 \uc791\uc131\ud558\uba74 \ube44\uc988\ub2c8\uc2a4 \ub85c\uc9c1\uacfc \uacf5\ud1b5 \uae30\ub2a5\uc774 \uc11e\uc778\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public void createUser() {\n\n    log.info(\"start\");\n\n    \/\/ \uc2e4\uc81c \ube44\uc988\ub2c8\uc2a4 \ub85c\uc9c1\n\n    log.info(\"end\");\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">AOP\ub294 \uc774\ub7ec\ud55c \uacf5\ud1b5 \uad00\uc2ec\uc0ac\ub97c \ubcc4\ub3c4\ub85c \ubd84\ub9ac\ud560 \uc218 \uc788\ub3c4\ub85d \ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Business Logic + Cross-cutting Concern\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Spring\uc5d0\uc11c\ub294 Proxy\ub97c \uc774\uc6a9\ud55c AOP\uac00 \ub9ce\uc774 \uc0ac\uc6a9\ub41c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Client -&gt; Proxy -&gt; Target Object -&gt; Business Logic\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>@Transactional<\/code> \uc5ed\uc2dc \uc774\ub7ec\ud55c Proxy \uad6c\uc870\uc640 \uc5f0\uacb0\ub41c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">AOP\ub97c \ucc98\uc74c\ubd80\ud130 \uae4a\uac8c \ud30c\uace0\ub4e4 \ud544\uc694\ub294 \uc5c6\uc9c0\ub9cc, <strong>\ubc18\ubcf5\ub418\ub294 \uacf5\ud1b5 \uae30\ub2a5\uc744 \ube44\uc988\ub2c8\uc2a4 \ub85c\uc9c1\uacfc \ubd84\ub9ac\ud558\uae30 \uc704\ud55c \uad6c\uc870<\/strong>\ub77c\ub294 \uc810\uc740 \uc774\ud574\ud558\uace0 \ub118\uc5b4\uac00\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\">Spring Security<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\uc6f9 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0\uc11c\ub294 \ub85c\uadf8\uc778\uacfc \uad8c\ud55c \ucc98\ub9ac\uac00 \ud544\uc694\ud558\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Spring\uc5d0\uc11c\ub294 Spring Security\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uba3c\uc800 \uc778\uc99d\uacfc \uc778\uac00\ub97c \uad6c\ubd84\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Authentication -&gt; \uc0ac\uc6a9\uc790\uac00 \ub204\uad6c\uc778\uc9c0 \ud655\uc778\nAuthorization -&gt; \uc0ac\uc6a9\uc790\uac00 \ubb34\uc5c7\uc744 \ud560 \uc218 \uc788\ub294\uc9c0 \ud655\uc778\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Spring Security\ub294 Filter \uae30\ubc18 \uad6c\uc870\ub97c \uc0ac\uc6a9\ud574 Controller\uc5d0 \uc694\uccad\uc774 \ub3c4\ub2ec\ud558\uae30 \uc804\uc5d0 \ubcf4\uc548 \uad00\ub828 \ucc98\ub9ac\ub97c \uc218\ud589\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub300\ub7b5\uc801\uc778 \ud750\ub984\uc740 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>HTTP Request -&gt; Security Filter Chain -&gt; Authentication \/ Authorization -&gt; DispatcherServlet -&gt; Controller\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4 \uc778\uc99d\uc774 \ud544\uc694\ud55c API\ub77c\uba74 Controller\uac00 \uc2e4\ud589\ub418\uae30 \uc804\uc5d0 \uc778\uc99d \uc815\ubcf4\ub97c \ud655\uc778\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">JWT\ub098 OAuth2 \uac19\uc740 \uc778\uc99d \ubc29\uc2dd\ub3c4 Spring Security\uc640 \ud568\uaed8 \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc911\uc694\ud55c \uac83\uc740 \uc778\uc99d\uacfc \uc778\uac00\ub97c Client\uc5d0\uc11c\ub9cc \ucc98\ub9ac\ud574\uc11c\ub294 \uc548 \ub41c\ub2e4\ub294 \uac83\uc774\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Client UI\uc5d0\uc11c \ubc84\ud2bc \uc228\uae40 -&gt; \ubcf4\uc548 \uae30\ub2a5 \uc544\ub2d8\nServer\uc5d0\uc11c \uc778\uc99d \ud655\uc778 -&gt; \ud544\uc694\nServer\uc5d0\uc11c \uad8c\ud55c \ud655\uc778 -&gt; \ud544\uc694\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc2e4\uc81c \ub370\uc774\ud130 \uc811\uadfc\uc774\ub098 API, Service, Server Action\uc5d0 \ud574\ub2f9\ud558\ub294 \uc11c\ubc84 \uacbd\uacc4\uc5d0\uc11c\ub3c4 \ud544\uc694\ud55c \uad8c\ud55c \uac80\uc99d\uc774 \uc774\ub8e8\uc5b4\uc838\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\">Spring Boot<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Spring\uacfc Spring Boot\ub294 \uad6c\ubd84\ud574\uc11c \ubcfc \ud544\uc694\uac00 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Spring\uc740 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uac1c\ubc1c\uc744 \uc704\ud55c \ud504\ub808\uc784\uc6cc\ud06c\uc774\uace0, Spring Boot\ub294 Spring \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \ube60\ub974\uac8c \uad6c\uc131\ud558\uace0 \uc2e4\ud589\ud560 \uc218 \uc788\ub3c4\ub85d \uc9c0\uc6d0\ud558\ub294 \ud504\ub85c\uc81d\ud2b8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Spring Boot\uc5d0\uc11c\ub294 \ub9ce\uc740 \uc124\uc815\uc774 \uc790\ub3d9\uc73c\ub85c \uad6c\uc131\ub41c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@SpringBootApplication\npublic class Application {\n\n    public static void main(String&#91;] args) {\n        SpringApplication.run(Application.class, args);\n    }\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ub610\ud55c \ub0b4\uc7a5 \uc11c\ubc84\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uae30 \ub54c\ubb38\uc5d0 \ubcc4\ub3c4\uc758 \uc678\ubd80 \uc11c\ubc84\ub97c \uc9c1\uc811 \uad6c\uc131\ud558\uc9c0 \uc54a\uc544\ub3c4 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uc2e4\ud589\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc758\uc874\uc131\uc5d0 \ub530\ub77c \ud544\uc694\ud55c \uc124\uc815\uc744 \uc790\ub3d9\uc73c\ub85c \uad6c\uc131\ud558\ub294 Auto Configuration\ub3c4 Spring Boot\uc758 \ud575\uc2ec \uae30\ub2a5 \uc911 \ud558\ub098\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc2e4\uc81c Spring \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c\ub294 \ub300\ubd80\ubd84 Spring Boot\ub97c \uae30\ubc18\uc73c\ub85c \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uad6c\uc131\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\">Spring\uc5d0\uc11c \uc790\uc8fc \uc0ac\uc6a9\ud558\ub294 Annotation<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Spring\uc744 \uacf5\ubd80\ud558\ub2e4 \ubcf4\uba74 \ub9ce\uc740 Annotation\uc744 \ub9cc\ub098\uac8c \ub41c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ucc98\uc74c\ubd80\ud130 \uc804\ubd80 \uc678\uc6b0\uae30\ubcf4\ub2e4 \uc5ed\ud560\uc744 \uae30\uc900\uc73c\ub85c \ubb36\uc5b4 \ubcf4\ub294 \ud3b8\uc774 \uc88b\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Bean \ub4f1\ub85d<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>@Component\n@Service\n@Repository\n@Controller\n@RestController\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Spring Container\uac00 \uad00\ub9ac\ud560 \uac1d\uccb4\ub97c \ub4f1\ub85d\ud558\ub294 \ub370 \uc0ac\uc6a9\ud55c\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Dependency Injection<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>@Autowired\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc758\uc874\uc131\uc744 \uc8fc\uc785\ud560 \ub54c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub2e4\ub9cc \ucd5c\uadfc\uc5d0\ub294 \uc0dd\uc131\uc790 \uc8fc\uc785\uc744 \uc8fc\ub85c \uc0ac\uc6a9\ud558\uae30 \ub54c\ubb38\uc5d0 \uc0dd\uc131\uc790\uac00 \ud558\ub098\ub77c\uba74 <code>@Autowired<\/code>\ub97c \uc9c1\uc811 \uc791\uc131\ud558\uc9c0 \uc54a\ub294 \uacbd\uc6b0\uac00 \ub9ce\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">HTTP Request<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>@GetMapping\n@PostMapping\n@PutMapping\n@DeleteMapping\n@RequestBody\n@PathVariable\n@RequestParam\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Controller\uc5d0\uc11c HTTP \uc694\uccad\uc744 \ucc98\ub9ac\ud560 \ub54c \uc0ac\uc6a9\ud55c\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Configuration<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>@Configuration\n@Bean\n@Value\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Spring\uc758 \uc124\uc815\uacfc Bean\uc744 \uad6c\uc131\ud560 \ub54c \uc0ac\uc6a9\ud55c\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Transaction<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>@Transactional\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Transaction \uacbd\uacc4\ub97c \uc124\uc815\ud560 \ub54c \uc0ac\uc6a9\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Annotation\uc744 \ub2e8\uc21c\ud788 \uc554\uae30\ud558\uae30\ubcf4\ub2e4 <strong>\uc5b4\ub290 \uacc4\uce35\uc5d0\uc11c \uc5b4\ub5a4 \ubaa9\uc801\uc73c\ub85c \uc0ac\uc6a9\ud558\ub294\uac00<\/strong>\ub97c \uae30\uc900\uc73c\ub85c \ubcf4\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\">\uc804\uccb4\uc801\uc778 Spring \uad6c\uc870<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\uc9c0\uae08\uae4c\uc9c0\uc758 \ub0b4\uc6a9\uc744 \ud558\ub098\ub85c \uc5f0\uacb0\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \ud750\ub984\uc774 \ub41c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Client -&gt; HTTP Request -&gt; Security Filter Chain -&gt; DispatcherServlet -&gt; Controller -&gt; Service -&gt; Repository -&gt; JPA \/ Hibernate -&gt; JDBC -&gt; Database\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub9ac\uace0 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0\uc11c \uc0ac\uc6a9\ud558\ub294 Bean\ub4e4\uc740 Spring Container\uac00 \uad00\ub9ac\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Spring Container -&gt; Controller Bean -&gt; Service Bean -&gt; Repository Bean\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Bean \uc0ac\uc774\uc758 \uc758\uc874\uc131\ub3c4 Spring\uc774 \uc5f0\uacb0\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Spring Container -&gt; Dependency Injection -&gt; Object Graph \uad6c\uc131\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Transaction\uacfc AOP \uac19\uc740 \uae30\ub2a5\uc740 \uac1d\uccb4 \uc2e4\ud589 \uacfc\uc815\uc5d0 \uac1c\uc785\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Client -&gt; Proxy -&gt; Target Bean -&gt; Business Logic\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 \uad6c\uc870\ub97c \uc54c\uace0 \uc788\uc73c\uba74 \uac01\uac01\uc758 Spring \uae30\ub2a5\uc774 \uc11c\ub85c \ub5a8\uc5b4\uc9c4 \uae30\ub2a5\uc774 \uc544\ub2c8\ub77c \ud558\ub098\uc758 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \ud750\ub984 \uc548\uc5d0\uc11c \uc5f0\uacb0\ub418\uc5b4 \uc788\ub2e4\ub294 \uac83\uc744 \ubcfc \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\">Spring\uc5d0\uc11c \ud568\uaed8 \uc54c\uc544\uc57c \ud560 \uac83<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Spring\ub9cc \uacf5\ubd80\ud574\uc11c \uc6f9 \uac1c\ubc1c \uc804\uccb4\ub97c \uc774\ud574\ud558\uae30\ub294 \uc5b4\ub835\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Spring\uc740 \uc5ec\ub7ec \uae30\uc220\uc744 \uc5f0\uacb0\ud574\uc11c \uc6f9 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uad6c\uc131\ud558\ub294 \ud504\ub808\uc784\uc6cc\ud06c\uc774\uae30 \ub54c\ubb38\uc774\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uae30\ubcf8\uc801\uc73c\ub85c \ub2e4\uc74c \uae30\uc220\ub4e4\uc744 \ud568\uaed8 \uc774\ud574\ud560 \ud544\uc694\uac00 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Java -&gt; Object-Oriented Programming -&gt; HTTP -&gt; Servlet -&gt; Spring MVC -&gt; SQL \/ Database -&gt; JPA -&gt; Transaction -&gt; Spring Security\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ud2b9\ud788 Java\uc758 \uac1d\uccb4\uc9c0\ud5a5 \uac1c\ub150\uc774 \ubd80\uc871\ud558\uba74 Spring\uc758 DI\uc640 IoC\ub3c4 Annotation \uc0ac\uc6a9\ubc95 \uc815\ub3c4\ub85c\ub9cc \uc774\ud574\ud558\uae30 \uc27d\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">JPA\ub97c \uc0ac\uc6a9\ud560 \uacbd\uc6b0\uc5d0\ub294 SQL\uacfc \uad00\uacc4\ud615 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc758 \uad6c\uc870\ub3c4 \uc54c\uc544\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Spring\uc774 \ub300\uc2e0 \ucc98\ub9ac\ud558\ub294 \ubd80\ubd84\uacfc \uc2e4\uc81c \uae30\ubc18 \uae30\uc220\uc774 \ucc98\ub9ac\ud558\ub294 \ubd80\ubd84\uc744 \uad6c\ubd84\ud574\uc11c \ubcf4\ub294 \uac83\ub3c4 \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\">Spring\uc744 \ud558\ub098\uc758 \ud750\ub984\uc73c\ub85c \ubcf4\uba74<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Spring\uc758 \ud575\uc2ec\uc740 \ud06c\uac8c \ub450 \uac00\uc9c0 \ud750\ub984\uc73c\ub85c \ubcfc \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uccab \ubc88\uc9f8\ub294 <strong>\uac1d\uccb4 \uad00\ub9ac<\/strong>\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Configuration -&gt; Bean \uc0dd\uc131 -&gt; Dependency Injection -&gt; Spring Container\uc5d0\uc11c \uad00\ub9ac\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ub450 \ubc88\uc9f8\ub294 <strong>HTTP \uc694\uccad \ucc98\ub9ac<\/strong>\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>HTTP Request -&gt; Security Filter Chain -&gt; DispatcherServlet -&gt; Controller -&gt; Service -&gt; Repository -&gt; Database\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 \ub458\uc774 \uacb0\ud569\ud574\uc11c \ud558\ub098\uc758 Spring \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uad6c\uc131\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>HTTP Request -&gt; Spring MVC -&gt; Controller -&gt; Service -&gt; Repository -&gt; Database\n                         ^\n                         |\n                  Spring Container\n                  Bean \/ DI \/ AOP\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc5ec\uae30\uc5d0 \ub370\uc774\ud130 \ubcc0\uacbd\uc774 \ud544\uc694\ud558\uba74 Transaction\uc774 \ubd99\uace0, \uc778\uc99d\uacfc \uad8c\ud55c\uc774 \ud544\uc694\ud558\uba74 Security\uac00 \uc694\uccad \ucc98\ub9ac \uc55e\ub2e8\uc5d0 \ubd99\ub294\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Client -&gt; Security -&gt; Spring MVC -&gt; Controller -&gt; Service -&gt; Transaction -&gt; Repository -&gt; Database\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\">Spring\uacfc Spring Boot\uc758 \uad00\uacc4<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\uc804\uccb4 \uad6c\uc870\ub97c \uc815\ub9ac\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ubcfc \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Spring Boot -&gt; Spring Framework -&gt; Spring MVC \/ DI \/ AOP \/ Transaction \/ Security Integration\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc2e4\uc81c \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c\ub294 Spring Boot\uac00 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc758 \uc2e4\ud589\uacfc \uc124\uc815\uc744 \ud3b8\ub9ac\ud558\uac8c \ub9cc\ub4e4\uc5b4\uc8fc\uace0, \uadf8 \uc704\uc5d0\uc11c Spring\uc758 \uc5ec\ub7ec \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub530\ub77c\uc11c Spring\uc744 \uacf5\ubd80\ud55c\ub2e4\ub294 \uac83\uc740 \ub2e8\uc21c\ud788 <code>@Controller<\/code>\ub098 <code>@Service<\/code>\ub97c \uc0ac\uc6a9\ud558\ub294 \ubc29\ubc95\uc744 \ubc30\uc6b0\ub294 \uac83\uc774 \uc544\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Java Object -&gt; Spring Container -&gt; Dependency Injection -&gt; HTTP Request -&gt; Spring MVC -&gt; Business Logic -&gt; Database\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 \uc804\uccb4 \ud750\ub984\uc744 \uc774\ud574\ud558\ub294 \uac83\uc774 \ud575\uc2ec\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\">\uc815\ub9ac<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Spring\uc744 \ucc98\uc74c \ubcf4\uba74 \uc218\ub9ce\uc740 Annotation\uacfc \uae30\ub2a5 \ub54c\ubb38\uc5d0 \ubcf5\uc7a1\ud574 \ubcf4\uc778\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud558\uc9c0\ub9cc \ud575\uc2ec \uad6c\uc870\ub97c \uc7a1\uc73c\uba74 \ud06c\uac8c \ubcf5\uc7a1\ud558\uc9c0 \uc54a\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Spring Container\uac00 \uac1d\uccb4\ub97c \uc0dd\uc131\ud558\uace0 \uad00\ub9ac\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Bean Definition -&gt; Bean Creation -&gt; Dependency Injection -&gt; Object Management\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Spring MVC\ub294 HTTP \uc694\uccad\uc744 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc73c\ub85c \uc5f0\uacb0\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>HTTP Request -&gt; DispatcherServlet -&gt; Controller\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc560\ud50c\ub9ac\ucf00\uc774\uc158 \ub0b4\ubd80\uc5d0\uc11c\ub294 \uc5ed\ud560\uc744 \ub098\ub220\uc11c \ucc98\ub9ac\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Controller -&gt; Service -&gt; Repository\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Repository\ub294 JPA \ub4f1\uc758 \uae30\uc220\uc744 \uc774\uc6a9\ud574 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc640 \ud1b5\uc2e0\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Repository -&gt; Spring Data JPA -&gt; JPA -&gt; Hibernate -&gt; JDBC -&gt; Database\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Transaction\uacfc AOP\ub294 \uac1d\uccb4 \uc2e4\ud589 \uacfc\uc815\uc5d0 \uac1c\uc785\ud558\uace0, Security\ub294 \uc694\uccad \ucc98\ub9ac \uacfc\uc815\uc5d0\uc11c \uc778\uc99d\uacfc \uc778\uac00\ub97c \ub2f4\ub2f9\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Request -&gt; Security -&gt; Controller -&gt; Service -&gt; Transaction -&gt; Repository -&gt; Database\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uacb0\uad6d Spring\uc5d0\uc11c \uac00\uc7a5 \uba3c\uc800 \uc774\ud574\ud574\uc57c \ud560 \uac83\uc740 Annotation \ubaa9\ub85d\uc774 \uc544\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\uac1d\uccb4\uac00 \uc5b4\ub5bb\uac8c \uc0dd\uc131\ub418\uace0, \uc11c\ub85c \uc5b4\ub5bb\uac8c \uc5f0\uacb0\ub418\uba70, HTTP \uc694\uccad \ud558\ub098\uac00 \uc5b4\ub5a4 \uacc4\uce35\uc744 \uac70\uccd0 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uae4c\uc9c0 \ub3c4\ub2ec\ud558\ub294\uac00<\/strong>\ub97c \uc774\ud574\ud558\ub294 \uac83\uc774 \uba3c\uc800\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8 \uad6c\uc870\ub97c \uc774\ud574\ud558\uba74 <code>@Service<\/code>, <code>@Repository<\/code>, <code>@Transactional<\/code>, <code>@Autowired<\/code> \uac19\uc740 Annotation\ub3c4 \ub2e8\uc21c\ud788 \uc678\uc6cc\uc57c \ud558\ub294 \ubb38\ubc95\uc774 \uc544\ub2c8\ub77c <strong>\uac1d\uccb4 \uad6c\uc870\uc640 \uc2e4\ud589 \ud750\ub984\uc758 \ud2b9\uc815 \uc9c0\uc810\uc5d0 \ubd99\ub294 \uae30\ub2a5<\/strong>\uc73c\ub85c \ubcf4\uc774\uae30 \uc2dc\uc791\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Spring\uc744 \ud558\ub098\uc758 \ud750\ub984\uc73c\ub85c \uc555\ucd95\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>HTTP Request -&gt; Security -&gt; DispatcherServlet -&gt; Controller -&gt; Service -&gt; Repository -&gt; Database\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub9ac\uace0 \uc774 \uac1d\uccb4\ub4e4\uc744 \uad6c\uc131\ud558\uace0 \uc5f0\uacb0\ud558\ub294 \uae30\ubc18\uc5d0\ub294 \ub2e4\uc74c \uad6c\uc870\uac00 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Spring Container -&gt; Bean -&gt; Dependency Injection -&gt; Object Graph\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uacb0\uad6d Spring \uac1c\ubc1c\uc758 \ud575\uc2ec\uc740 <strong>\uac1d\uccb4\uc758 \ucc45\uc784\uacfc \uc758\uc874\uad00\uacc4\ub97c \uc124\uacc4\ud558\uace0, HTTP \uc694\uccad\uc774 \uadf8 \uac1d\uccb4\ub4e4\uc744 \uc5b4\ub5a4 \uc21c\uc11c\ub85c \ud1b5\uacfc\ud558\ub294\uc9c0\ub97c \uad00\ub9ac\ud558\ub294 \uac83<\/strong>\uc774\ub2e4.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Spring\uc740 Java\ub85c \uc6f9 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uac1c\ubc1c\ud560 \ub54c \ub9ce\uc774 \uc0ac\uc6a9\ud558\ub294 \ud504\ub808\uc784\uc6cc\ud06c\ub2e4. \ucc98\uc74c Spring\uc744 \ubcf4\uba74 @Controller, @Service, @Repository, @Autowired, @Transactional\ucc98\ub7fc \uc0dd\uc18c\ud55c \uc5b4\ub178\ud14c\uc774\uc158\uc774 \uacc4\uc18d \ub4f1\uc7a5\ud55c\ub2e4. \uc5ec\uae30\uc5d0 Spring MVC, JPA, Security, AOP\uae4c\uc9c0 \ubd99\uc73c\uba74\uc11c \uac01\uac01\uc758 \uae30\ub2a5\uc744 \ub530\ub85c \uc678\uc6b0\uae30 \uc27d\ub2e4. \ud558\uc9c0\ub9cc Spring\uc744 \uc774\ud574\ud560 \ub54c \uba3c\uc800 \ubd10\uc57c \ud558\ub294 \uac83\uc740 \uc5b4\ub178\ud14c\uc774\uc158\uc774 \uc544\ub2c8\ub2e4. \uac1d\uccb4\uac00 \uc5b4\ub5bb\uac8c \ub9cc\ub4e4\uc5b4\uc9c0\uace0, \uc11c\ub85c \uc5b4\ub5bb\uac8c \uc5f0\uacb0\ub418\uba70, HTTP \uc694\uccad\uc774 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \ub0b4\ubd80\ub97c \uc5b4\ub5bb\uac8c \ud1b5\uacfc\ud558\ub294\uac00\ub97c [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[49],"tags":[],"class_list":["post-1658","post","type-post","status-publish","format-standard","hentry","category-server"],"_links":{"self":[{"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/posts\/1658","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=1658"}],"version-history":[{"count":6,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/posts\/1658\/revisions"}],"predecessor-version":[{"id":1946,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/posts\/1658\/revisions\/1946"}],"wp:attachment":[{"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1658"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1658"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1658"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}