{"id":563,"date":"2024-12-10T20:33:24","date_gmt":"2024-12-10T11:33:24","guid":{"rendered":"https:\/\/blog.anchors-biz.com\/?p=563"},"modified":"2024-12-27T09:46:39","modified_gmt":"2024-12-27T00:46:39","slug":"spring-boot-%ed%94%84%eb%a1%9c%ec%a0%9d%ed%8a%b8%ec%97%90%ec%84%9c-jpa-%ec%9d%b4%ed%95%b4%ed%95%98%ea%b8%b0","status":"publish","type":"post","link":"https:\/\/blog.anchors-biz.com\/?p=563","title":{"rendered":"Spring Boot \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c JPA \uc774\ud574\ud558\uae30"},"content":{"rendered":"\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Spring Boot \ud504\ub85c\uc81d\ud2b8\ub97c \uc9c4\ud589\ud558\ub2e4 \ubcf4\uba74 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc640\uc758 \uc0c1\ud638\uc791\uc6a9\uc744 \uc704\ud574 \ub2e4\uc591\ud55c \uae30\uc220\uc744 \uc120\ud0dd\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uadf8\uc911\uc5d0\uc11c\ub3c4 JPA(Java Persistence API)\ub294 \uac00\uc7a5 \ub110\ub9ac \uc0ac\uc6a9\ub418\ub294 ORM(Object Relational Mapping) \ud45c\uc900\uc73c\ub85c, \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc640 \uac1d\uccb4 \uac04\uc758 \ub9e4\ud551\uc744 \uac04\ub2e8\ud558\uace0 \ud6a8\uc728\uc801\uc73c\ub85c \ucc98\ub9ac\ud560 \uc218 \uc788\ub3c4\ub85d \ub3c4\uc640\uc90d\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\uc774\ubc88 \ud3ec\uc2a4\ud2b8\uc5d0\uc11c\ub294 JPA\uc5d0 \ub300\ud55c \uae30\ubcf8\uc801\uc778 \uc124\uba85, JPA\uc640 MyBatis\uc758 \ube44\uad50, \uadf8\ub9ac\uace0 JPA\ub97c \uc0ac\uc6a9\ud574\uc57c \ud558\ub294 \uc774\uc720\uc5d0 \ub300\ud574 \uc54c\uc544\ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<div style=\"height:29px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" \/>\n\n\n\n<p><\/p>\n\n\n\n<h3><strong>1. JPA\ub780 \ubb34\uc5c7\uc778\uac00?<\/strong><\/h3>\n\n\n\n<p><strong>JPA<\/strong>(Java Persistence API)\ub294 \uc790\ubc14 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0\uc11c \uad00\uacc4\ud615 \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub97c \ub2e4\ub8e8\uae30 \uc704\ud55c <span style=\"text-decoration: underline\">\ud45c\uc900 \uc778\ud130\ud398\uc774\uc2a4\uc785\ub2c8\ub2e4<\/span>. JPA\ub294 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc640 \uac1d\uccb4 \uac04\uc758 \ub9e4\ud551\uc744 \uc790\ub3d9\ud654\ud558\uc5ec \uac1c\ubc1c\uc790\uac00 SQL \ucffc\ub9ac\ub97c \uc9c1\uc811 \uc791\uc131\ud558\uc9c0 \uc54a\uace0\ub3c4 \ub370\uc774\ud130\ub97c \ucc98\ub9ac\ud560 \uc218 \uc788\ub3c4\ub85d \ub3c4\uc640\uc90d\ub2c8\ub2e4. JPA\ub294 Hibernate, EclipseLink, OpenJPA\uc640 \uac19\uc740 \uad6c\ud604\uccb4\ub97c \ud1b5\ud574 \ub3d9\uc791\ud558\uba70, Spring Data JPA\ub294 \uc774\ub97c \ub354\uc6b1 \uac04\ud3b8\ud558\uac8c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d \uc9c0\uc6d0\ud558\ub294 Spring \uc0dd\ud0dc\uacc4\uc758 \uac15\ub825\ud55c \ub3c4\uad6c\uc785\ub2c8\ub2e4.<br><\/p>\n\n\n\n<h4>JPA\uc758 \uc8fc\uc694 \ud2b9\uc9d5<\/h4>\n\n\n\n<ul><li><strong>\uac1d\uccb4\uc640 \uad00\uacc4\ud615 \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uac04\uc758 \ub9e4\ud551<\/strong>: \uc5d4\ud2f0\ud2f0(Entity) \ud074\ub798\uc2a4\ub97c \ud1b5\ud574 \ub370\uc774\ud130\ubca0\uc774\uc2a4 \ud14c\uc774\ube14\uacfc \uc790\ubc14 \uac1d\uccb4\ub97c \ub9e4\ud551\ud569\ub2c8\ub2e4.<\/li><li><strong>JPQL(Java Persistence Query Language)<\/strong>: \uac1d\uccb4 \uc9c0\ud5a5 \ucffc\ub9ac \uc5b8\uc5b4\ub97c \uc0ac\uc6a9\ud558\uc5ec SQL\ubcf4\ub2e4 \uc9c1\uad00\uc801\uc73c\ub85c \ub370\uc774\ud130\ub97c \uc870\ud68c\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/li><li><strong>\ud2b8\ub79c\uc7ad\uc158 \uad00\ub9ac<\/strong>: \ub370\uc774\ud130\ubca0\uc774\uc2a4 \ud2b8\ub79c\uc7ad\uc158\uc744 \uc27d\uac8c \uad00\ub9ac\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/li><li><strong>\uce90\uc2f1<\/strong>: 1\ucc28 \uce90\uc2dc(\uc601\uc18d\uc131 \ucee8\ud14d\uc2a4\ud2b8)\ub97c \ud1b5\ud574 \uc131\ub2a5\uc744 \ucd5c\uc801\ud654\ud569\ub2c8\ub2e4.<br><\/li><\/ul>\n\n\n\n<h5>\ub808\ud37c\ub7f0\uc2a4 URL<\/h5>\n\n\n\n<ul><li><a href=\"https:\/\/jakarta.ee\/specifications\/persistence\/\">\uacf5\uc2dd JPA \ubb38\uc11c<\/a><\/li><li><a href=\"https:\/\/hibernate.org\/documentation\/\">Hibernate \uacf5\uc2dd \ubb38\uc11c<\/a><\/li><li><a href=\"https:\/\/spring.io\/projects\/spring-data-jpa\">Spring Data JPA \uacf5\uc2dd \ubb38\uc11c<\/a><\/li><li><a href=\"https:\/\/www.baeldung.com\/hibernate-jpa-tutorial\">Baeldung\uc758 JPA \ud29c\ud1a0\ub9ac\uc5bc<\/a><\/li><\/ul>\n\n\n\n<div style=\"height:29px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" \/>\n\n\n\n<h3><strong>2. JPA\uc640 MyBatis \ube44\uad50<\/strong><\/h3>\n\n\n\n<p>JPA\uc640 MyBatis\ub294 \ubaa8\ub450 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc640\uc758 \uc0c1\ud638\uc791\uc6a9\uc744 \ub3d5\ub294 \ub3c4\uad6c\uc774\uc9c0\ub9cc, \uc811\uadfc \ubc29\uc2dd\uacfc \ucca0\ud559\uc5d0\uc11c \ud070 \ucc28\uc774\uac00 \uc788\uc2b5\ub2c8\ub2e4. \uc544\ub798\ub294 \ub450 \uae30\uc220\uc758 \uc8fc\uc694 \ucc28\uc774\uc810\uc744 \ube44\uad50\ud55c \ud45c\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th><\/th><th><\/th><th><\/th><\/tr><\/thead><tbody><tr><td>\ud2b9\uc9d5<\/td><td>JPA<\/td><td>MyBatis<\/td><\/tr><tr><td>\ucca0\ud559<\/td><td>ORM(Object Relational Mapping) \uae30\ubc18\uc73c\ub85c \uac1d\uccb4\uc640 \ud14c\uc774\ube14 \uac04 \ub9e4\ud551\uc744 \uc790\ub3d9\ud654<\/td><td>SQL Mapper\ub85c SQL \ucffc\ub9ac\ub97c \uc9c1\uc811 \uc791\uc131\ud558\uc5ec \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc640 \uc0c1\ud638\uc791\uc6a9<\/td><\/tr><tr><td>\ucffc\ub9ac \uc791\uc131<\/td><td>JPQL \ub610\ub294 \uba54\uc11c\ub4dc \uc774\ub984 \uae30\ubc18 \ucffc\ub9ac \uc0ac\uc6a9 (SQL \ucd94\uc0c1\ud654)<\/td><td>SQL\uc744 \uc9c1\uc811 \uc791\uc131 (SQL\uc5d0 \ub300\ud55c \uc644\uc804\ud55c \uc81c\uc5b4 \uac00\ub2a5)<\/td><\/tr><tr><td>\uc0dd\uc0b0\uc131<\/td><td>\ub9e4\ud551\uacfc \ucffc\ub9ac \uc790\ub3d9\ud654\ub85c \uc0dd\uc0b0\uc131 \ud5a5\uc0c1<\/td><td>SQL \uc791\uc131\uc774 \ud544\uc694\ud558\ubbc0\ub85c \uc0c1\ub300\uc801\uc73c\ub85c \uc0dd\uc0b0\uc131\uc774 \ub0ae\uc74c<\/td><\/tr><tr><td>\uc720\uc5f0\uc131<\/td><td>\ubcf5\uc7a1\ud55c \ucffc\ub9ac \uc791\uc131\uc774 \uc5b4\ub824\uc6b8 \uc218 \uc788\uc74c<\/td><td>\ubcf5\uc7a1\ud55c SQL \ucffc\ub9ac \uc791\uc131\uc5d0 \uc720\ub9ac<\/td><\/tr><tr><td>\ub7ec\ub2dd \ucee4\ube0c<\/td><td>\ucd08\uae30 \ud559\uc2b5 \uace1\uc120\uc774 \ub2e4\uc18c \uac00\ud30c\ub984<\/td><td>SQL\uc744 \uc54c\uace0 \uc788\ub2e4\uba74 \ube44\uad50\uc801 \uc27d\uac8c \uc2dc\uc791 \uac00\ub2a5<\/td><\/tr><tr><td>\uce90\uc2f1<\/td><td>1\ucc28 \uce90\uc2dc(\uc601\uc18d\uc131 \ucee8\ud14d\uc2a4\ud2b8)\uc640 2\ucc28 \uce90\uc2dc \uc9c0\uc6d0<\/td><td>\ubcc4\ub3c4\uc758 \uce90\uc2f1 \uba54\ucee4\ub2c8\uc998 \ud544\uc694<\/td><\/tr><tr><td>\ud2b8\ub79c\uc7ad\uc158 \uad00\ub9ac<\/td><td>Spring\uacfc \ud1b5\ud569\ud558\uc5ec \ud2b8\ub79c\uc7ad\uc158 \uad00\ub9ac \uc6a9\uc774<\/td><td>\ud2b8\ub79c\uc7ad\uc158 \uad00\ub9ac\ub294 \uac1c\ubc1c\uc790\uac00 \uc9c1\uc811 \ucc98\ub9ac\ud574\uc57c \ud568<\/td><\/tr><tr><td>\uc0ac\uc6a9 \uc0ac\ub840<\/td><td>CRUD \uc911\uc2ec\uc758 \uc560\ud50c\ub9ac\ucf00\uc774\uc158, \uac1d\uccb4 \uc9c0\ud5a5 \uc124\uacc4\uac00 \uc911\uc694\ud55c \uacbd\uc6b0<\/td><td>\ubcf5\uc7a1\ud55c SQL \ucffc\ub9ac\uac00 \ud544\uc694\ud55c \uacbd\uc6b0, \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc911\uc2ec \uc124\uacc4<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h5>\uc694\uc57d<\/h5>\n\n\n\n<ul><li><strong>JPA<\/strong>\ub294 \uac1d\uccb4 \uc9c0\ud5a5\uc801\uc778 \uc124\uacc4\uc640 CRUD \uc911\uc2ec\uc758 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0 \uc801\ud569\ud558\uba70, \uc0dd\uc0b0\uc131\uc744 \ub192\uc774\uace0 \uc720\uc9c0\ubcf4\uc218\ub97c \uc6a9\uc774\ud558\uac8c \ud569\ub2c8\ub2e4.<\/li><li><strong>MyBatis<\/strong>\ub294 \ubcf5\uc7a1\ud55c SQL \ucffc\ub9ac\uac00 \ud544\uc694\ud55c \uacbd\uc6b0\ub098 \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc911\uc2ec\uc758 \uc124\uacc4\uc5d0 \uc801\ud569\ud569\ub2c8\ub2e4.<\/li><\/ul>\n\n\n\n<div style=\"height:29px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" \/>\n\n\n\n<h3><strong>3. JPA\ub97c \uc0ac\uc6a9\ud574\uc57c \ud558\ub294 \uc774\uc720<\/strong><\/h3>\n\n\n\n<p>JPA\ub294 \uac1d\uccb4 \uc9c0\ud5a5 \ud504\ub85c\uadf8\ub798\ubc0d\uacfc \uad00\uacc4\ud615 \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uac04\uc758 \uac04\uadf9\uc744 \uc904\uc774\uace0, <span style=\"text-decoration: underline\">\uc0dd\uc0b0\uc131\uacfc \uc720\uc9c0\ubcf4\uc218\uc131\uc744 \ub192\uc774\ub294 \ub370 \uc911\uc810\uc744 \ub461\ub2c8\ub2e4<\/span>. \ub2e4\uc74c\uc740 JPA\ub97c \uc0ac\uc6a9\ud574\uc57c \ud558\ub294 \uc8fc\uc694 \uc774\uc720\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h4>1) \uc0dd\uc0b0\uc131 \ud5a5\uc0c1<\/h4>\n\n\n\n<p>JPA\ub294 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc640\uc758 \uc0c1\ud638\uc791\uc6a9\uc744 \uc790\ub3d9\ud654\ud558\uc5ec \uac1c\ubc1c\uc790\uac00 \ubc18\ubcf5\uc801\uc73c\ub85c \uc791\uc131\ud574\uc57c \ud558\ub294 SQL \ucffc\ub9ac\uc640 \ub9e4\ud551 \ucf54\ub4dc\ub97c \uc904\uc5ec\uc90d\ub2c8\ub2e4. \ud2b9\ud788 Spring Data JPA\ub97c \uc0ac\uc6a9\ud558\uba74 \uba54\uc11c\ub4dc \uc774\ub984\ub9cc\uc73c\ub85c\ub3c4 \ucffc\ub9ac\ub97c \uc0dd\uc131\ud560 \uc218 \uc788\uc5b4 \uac1c\ubc1c \uc18d\ub3c4\uac00 \ud06c\uac8c \ud5a5\uc0c1\ub429\ub2c8\ub2e4<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Repository \uc778\ud130\ud398\uc774\uc2a4\npublic interface UserRepository extends JpaRepository&lt;User, Long&gt; {\n    List&lt;User&gt; findByLastName(String lastName);\n}\n<\/code><\/pre>\n\n\n\n<p>\uc704\uc640 \uac19\uc740 \ucf54\ub4dc\ub9cc\uc73c\ub85c SELECT * FROM user WHERE last_name = ? \ucffc\ub9ac\uac00 \uc790\ub3d9\uc73c\ub85c \uc0dd\uc131\ub429\ub2c8\ub2e4. \uc774\ub294 \uac1c\ubc1c\uc790\uac00 SQL \uc791\uc131\uc5d0 \uc18c\uc694\ub418\ub294 \uc2dc\uac04\uc744 \uc904\uc774\uace0, \ube44\uc988\ub2c8\uc2a4 \ub85c\uc9c1\uc5d0 \ub354 \uc9d1\uc911\ud560 \uc218 \uc788\ub3c4\ub85d \ub3c4\uc640\uc90d\ub2c8\ub2e4.<\/p>\n\n\n\n<div style=\"height:29px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><\/p>\n\n\n\n<h4>2) \uac1d\uccb4 \uc9c0\ud5a5\uc801\uc778 \uc124\uacc4<\/h4>\n\n\n\n<p>JPA\ub294 \uac1d\uccb4 \uc9c0\ud5a5\uc801\uc778 \uc124\uacc4\ub97c \uc9c0\uc6d0\ud569\ub2c8\ub2e4. \uc5d4\ud2f0\ud2f0(Entity) \uac04\uc758 \uad00\uacc4\ub97c \uac1d\uccb4 \ubaa8\ub378\ub85c \ud45c\ud604\ud560 \uc218 \uc788\uc73c\uba70, \uc774\ub97c \ud1b5\ud574 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc640 \uac1d\uccb4 \uac04\uc758 \ub9e4\ud551\uc744 \uc790\uc5f0\uc2a4\ub7fd\uac8c \ucc98\ub9ac\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@Entity\npublic class Order {\n    @Id\n    @GeneratedValue\n    private Long id;\n\n    @ManyToOne\n    private Customer customer;\n\n    @OneToMany(mappedBy = \"order\")\n    private List&lt;OrderItem&gt; items;\n}\n<\/code><\/pre>\n\n\n\n<p>\uc704\uc640 \uac19\uc740 \ucf54\ub4dc\ub85c \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc758 \uad00\uacc4\ub97c \uac1d\uccb4 \uc9c0\ud5a5\uc801\uc73c\ub85c \ud45c\ud604\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub97c \ud1b5\ud574 \uac1d\uccb4 \uac04\uc758 \uad00\uacc4\ub97c \uc9c1\uad00\uc801\uc73c\ub85c \uc774\ud574\ud558\uace0 \uc720\uc9c0\ubcf4\uc218\uc131\uc744 \ub192\uc77c \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<div style=\"height:29px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4>3) JPQL\uacfc \uba54\uc11c\ub4dc \uae30\ubc18 \ucffc\ub9ac<\/h4>\n\n\n\n<p>JPA\ub294 JPQL(Java Persistence Query Language)\uc744 \ud1b5\ud574 \uac1d\uccb4 \uc9c0\ud5a5\uc801\uc778 \ucffc\ub9ac\ub97c \uc791\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub294 SQL\ubcf4\ub2e4 \uc9c1\uad00\uc801\uc774\uba70, \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0 \uc885\uc18d\ub418\uc9c0 \uc54a\ub294 \ucf54\ub4dc\ub97c \uc791\uc131\ud560 \uc218 \uc788\uac8c \ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@Query(\"SELECT o FROM Order o WHERE o.customer.name = :name\")\nList&lt;Order&gt; findOrdersByCustomerName(@Param(\"name\") String name);\n<\/code><\/pre>\n\n\n\n<p>JPQL\uc740 SQL\uacfc \uc720\uc0ac\ud558\uc9c0\ub9cc, \ub370\uc774\ud130\ubca0\uc774\uc2a4 \ud14c\uc774\ube14\uc774 \uc544\ub2cc \uc5d4\ud2f0\ud2f0 \uac1d\uccb4\ub97c \ub300\uc0c1\uc73c\ub85c \ucffc\ub9ac\ub97c \uc791\uc131\ud569\ub2c8\ub2e4. \uc774\ub97c \ud1b5\ud574 \ub370\uc774\ud130\ubca0\uc774\uc2a4 \ubcc0\uacbd \uc2dc\uc5d0\ub3c4 \ucf54\ub4dc \uc218\uc815\uc774 \ucd5c\uc18c\ud654\ub429\ub2c8\ub2e4.<\/p>\n\n\n\n<div style=\"height:29px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4>4)&nbsp;JPA\uc758 \ub2e8\uc810\uacfc QueryDSL\ub85c\uc758 \ubcf4\uc644<\/h4>\n\n\n\n<p>JPA\ub294 \uac15\ub825\ud55c ORM \uae30\uc220\uc774\uc9c0\ub9cc, \ub2e4\uc74c\uacfc \uac19\uc740 \ub2e8\uc810\uc774 \uc874\uc7ac\ud569\ub2c8\ub2e4:<\/p>\n\n\n\n<ol><li><strong>\ubcf5\uc7a1\ud55c \ub3d9\uc801 \ucffc\ub9ac \uc791\uc131\uc758 \uc5b4\ub824\uc6c0<\/strong>: JPQL\uc740 \uc815\uc801 \ucffc\ub9ac \uc791\uc131\uc5d0\ub294 \uc801\ud569\ud558\uc9c0\ub9cc, \uc870\uac74\uc774 \uc790\uc8fc \ubc14\ub00c\ub294 \ub3d9\uc801 \ucffc\ub9ac\ub97c \uc791\uc131\ud558\uae30\uc5d0\ub294 \ubd88\ud3b8\ud569\ub2c8\ub2e4.<\/li><li><strong>\ud0c0\uc785 \uc548\uc804\uc131 \ubd80\uc871<\/strong>: JPQL\uc740 \ubb38\uc790\uc5f4 \uae30\ubc18\uc73c\ub85c \uc791\uc131\ub418\uae30 \ub54c\ubb38\uc5d0, \ucef4\ud30c\uc77c \uc2dc\uc810\uc5d0 \ucffc\ub9ac\uc758 \uc624\ub958\ub97c \uc7a1\uc544\ub0b4\uae30 \uc5b4\ub835\uc2b5\ub2c8\ub2e4.<\/li><li><strong>\uac00\ub3c5\uc131 \ubb38\uc81c<\/strong>: \ubcf5\uc7a1\ud55c JPQL \ucffc\ub9ac\ub294 \ucf54\ub4dc\uc758 \uac00\ub3c5\uc131\uc744 \ub5a8\uc5b4\ub728\ub9b4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/li><\/ol>\n\n\n\n<p>\uc774\ub7ec\ud55c \ub2e8\uc810\uc744 \ubcf4\uc644\ud558\uae30 \uc704\ud574&nbsp;<strong>QueryDSL<\/strong>\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. QueryDSL\uc740 JPA\uc640 \ud568\uaed8 \uc0ac\uc6a9\ub418\uba70, \ub3d9\uc801 \ucffc\ub9ac\ub97c \ud0c0\uc785 \uc548\uc804\ud558\uace0 \uac04\uacb0\ud558\uac8c \uc791\uc131\ud560 \uc218 \uc788\ub3c4\ub85d \ub3c4\uc640\uc90d\ub2c8\ub2e4.<\/p>\n\n\n\n<h5><strong>QueryDSL\uc758 \uc7a5\uc810<\/strong><\/h5>\n\n\n\n<ul><li><strong>\ud0c0\uc785 \uc548\uc804\uc131<\/strong>: \ucef4\ud30c\uc77c \uc2dc\uc810\uc5d0 \ucffc\ub9ac \uc624\ub958\ub97c \uc7a1\uc544\ub0bc \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/li><li><strong>\ub3d9\uc801 \ucffc\ub9ac \uc791\uc131 \uc6a9\uc774<\/strong>: \uc870\uac74\uc5d0 \ub530\ub77c \ub3d9\uc801\uc73c\ub85c \ucffc\ub9ac\ub97c \uc0dd\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/li><li><strong>\uac00\ub3c5\uc131 \ud5a5\uc0c1<\/strong>: \uba54\uc11c\ub4dc \uccb4\uc774\ub2dd \ubc29\uc2dd\uc73c\ub85c \ucffc\ub9ac\ub97c \uc791\uc131\ud558\ubbc0\ub85c \ucf54\ub4dc\uac00 \uc9c1\uad00\uc801\uc774\uace0 \uc77d\uae30 \uc27d\uc2b5\ub2c8\ub2e4.<\/li><\/ul>\n\n\n\n<h5>QueryDSL \uc0ac\uc6a9 \uc608\uc2dc<\/h5>\n\n\n\n<pre class=\"wp-block-code\"><code>java\n\n\/\/ Q \ud074\ub798\uc2a4 \uc0dd\uc131 (\uc5d4\ud2f0\ud2f0 \uae30\ubc18)\nQUser user = QUser.user;\n\n\/\/ QueryDSL\uc744 \uc0ac\uc6a9\ud55c \ub3d9\uc801 \ucffc\ub9ac \uc791\uc131\nJPAQueryFactory queryFactory = new JPAQueryFactory(entityManager);\nList&lt;User&gt; users = queryFactory\n    .selectFrom(user)\n    .where(user.age.gt(18)\n        .and(user.name.startsWith(\"John\")))\n    .fetch();\n\n<\/code><\/pre>\n\n\n\n<p>\uc704 \ucf54\ub4dc\uc5d0\uc11c&nbsp;<code>QUser<\/code>\ub294 QueryDSL\uc774 \uc790\ub3d9\uc73c\ub85c \uc0dd\uc131\ud55c \ud074\ub798\uc2a4\uc774\uba70, \uc774\ub97c \ud1b5\ud574 \ud0c0\uc785 \uc548\uc804\ud55c \ucffc\ub9ac\ub97c \uc791\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc870\uac74\uc774 \ucd94\uac00\ub418\uac70\ub098 \ubcc0\uacbd\ub418\uc5b4\ub3c4 \uba54\uc11c\ub4dc \uccb4\uc774\ub2dd \ubc29\uc2dd\uc73c\ub85c \uc27d\uac8c \uc218\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<h5><strong>QueryDSL\ub85c JPA \ub2e8\uc810 \ubcf4\uc644<\/strong><\/h5>\n\n\n\n<ul><li><strong>\ubcf5\uc7a1\ud55c \ub3d9\uc801 \ucffc\ub9ac \ucc98\ub9ac<\/strong>: QueryDSL\uc740 \uc870\uac74\uc5d0 \ub530\ub77c \ub3d9\uc801\uc73c\ub85c \ucffc\ub9ac\ub97c \uc0dd\uc131\ud560 \uc218 \uc788\uc5b4, JPQL\uc758 \ud55c\uacc4\ub97c \uadf9\ubcf5\ud569\ub2c8\ub2e4.<\/li><li><strong>\ud0c0\uc785 \uc548\uc804\uc131<\/strong>: \ucffc\ub9ac\ub97c \uc791\uc131\ud560 \ub54c \ucef4\ud30c\uc77c \uc2dc\uc810\uc5d0 \uc624\ub958\ub97c \ud655\uc778\ud560 \uc218 \uc788\uc5b4, \ub7f0\ud0c0\uc784 \uc624\ub958\ub97c \uc904\uc77c \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/li><li><strong>\uac00\ub3c5\uc131<\/strong>: \uba54\uc11c\ub4dc \uccb4\uc774\ub2dd \ubc29\uc2dd\uc73c\ub85c \ucffc\ub9ac\ub97c \uc791\uc131\ud558\ubbc0\ub85c, \ucf54\ub4dc\uac00 \uc9c1\uad00\uc801\uc774\uace0 \uc720\uc9c0\ubcf4\uc218\uac00 \uc6a9\uc774\ud569\ub2c8\ub2e4.<\/li><\/ul>\n\n\n\n<div style=\"height:29px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4>5) \ud2b8\ub79c\uc7ad\uc158 \uad00\ub9ac<\/h4>\n\n\n\n<p>JPA\ub294 Spring\uacfc\uc758 \ud1b5\ud569\uc744 \ud1b5\ud574 \ud2b8\ub79c\uc7ad\uc158 \uad00\ub9ac\ub97c \uac04\ub2e8\ud558\uac8c \ucc98\ub9ac\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. <code>@Transactional<\/code> \uc5b4\ub178\ud14c\uc774\uc158\uc744 \uc0ac\uc6a9\ud558\uba74 \ud2b8\ub79c\uc7ad\uc158 \ubc94\uc704\ub97c \uc27d\uac8c \uc9c0\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@Service\n@Transactional\npublic class OrderService {\n    public void placeOrder(Order order) {\n        \/\/ \ud2b8\ub79c\uc7ad\uc158 \ub0b4\uc5d0\uc11c \ucc98\ub9ac\n    }\n}\n<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<p>\ud2b8\ub79c\uc7ad\uc158 \uad00\ub9ac\ub294 \ub370\uc774\ud130\uc758 \uc77c\uad00\uc131\uc744 \uc720\uc9c0\ud558\uace0, \ubcf5\uc7a1\ud55c \ud2b8\ub79c\uc7ad\uc158 \ub85c\uc9c1\uc744 \uac04\ub2e8\ud558\uac8c \ucc98\ub9ac\ud560 \uc218 \uc788\ub3c4\ub85d \ub3c4\uc640\uc90d\ub2c8\ub2e4.<\/p>\n\n\n\n<div style=\"height:29px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4>6) \uce90\uc2f1\uc744 \ud1b5\ud55c \uc131\ub2a5 \ucd5c\uc801\ud654<\/h4>\n\n\n\n<p>JPA\ub294 1\ucc28 \uce90\uc2dc(\uc601\uc18d\uc131 \ucee8\ud14d\uc2a4\ud2b8)\ub97c \ud1b5\ud574 \ub3d9\uc77c\ud55c \ud2b8\ub79c\uc7ad\uc158 \ub0b4\uc5d0\uc11c \ub3d9\uc77c\ud55c \uc5d4\ud2f0\ud2f0\ub97c \uc870\ud68c\ud560 \ub54c \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0 \ub2e4\uc2dc \uc811\uadfc\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uc774\ub97c \ud1b5\ud574 \uc131\ub2a5\uc744 \ucd5c\uc801\ud654\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<h5>\uc608\uc2dc: 1\ucc28 \uce90\uc2dc \ud65c\uc6a9<\/h5>\n\n\n\n<pre class=\"wp-block-code\"><code>EntityManager em = ...;\nUser user1 = em.find(User.class, 1L); \/\/ DB\uc5d0\uc11c \uc870\ud68c\nUser user2 = em.find(User.class, 1L); \/\/ \uce90\uc2dc\uc5d0\uc11c \uc870\ud68c (DB \uc811\uadfc X)\n<\/code><\/pre>\n\n\n\n<p>1\ucc28 \uce90\uc2dc\ub294 \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc811\uadfc \ud69f\uc218\ub97c \uc904\uc5ec \uc131\ub2a5\uc744 \ub192\uc774\uace0, \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc758 \uc751\ub2f5 \uc18d\ub3c4\ub97c \uac1c\uc120\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<div style=\"height:29px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4>7) \ubcc0\uacbd \uac10\uc9c0(Dirty Checking)<\/h4>\n\n\n\n<p>JPA\ub294 \uc5d4\ud2f0\ud2f0\uc758 \uc0c1\ud0dc\ub97c \uc9c0\uc18d\uc801\uc73c\ub85c \uac10\uc9c0\ud558\uc5ec \ubcc0\uacbd\ub41c \ub370\uc774\ud130\ub97c \uc790\ub3d9\uc73c\ub85c \uc5c5\ub370\uc774\ud2b8\ud569\ub2c8\ub2e4. \uc774\ub97c \ud1b5\ud574 \uac1c\ubc1c\uc790\ub294 \uba85\uc2dc\uc801\uc73c\ub85c UPDATE \ucffc\ub9ac\ub97c \uc791\uc131\ud558\uc9c0 \uc54a\uc544\ub3c4 \ub429\ub2c8\ub2e4.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@Transactional\npublic void updateUser(Long id, String newName) {\n    User user = em.find(User.class, id); \/\/ \uc5d4\ud2f0\ud2f0 \uc870\ud68c\n    user.setName(newName);              \/\/ \uc5d4\ud2f0\ud2f0 \ubcc0\uacbd\n    \/\/ \ud2b8\ub79c\uc7ad\uc158 \uc885\ub8cc \uc2dc\uc810\uc5d0 \uc790\ub3d9\uc73c\ub85c UPDATE \ucffc\ub9ac \uc2e4\ud589\n}\n<\/code><\/pre>\n\n\n\n<p>\ubcc0\uacbd \uac10\uc9c0\ub294 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc640 \uac1d\uccb4 \uac04\uc758 \ub3d9\uae30\ud654\ub97c \uc790\ub3d9\uc73c\ub85c \ucc98\ub9ac\ud558\uc5ec \ucf54\ub4dc\uc758 \uac04\uacb0\uc131\uacfc \uc720\uc9c0\ubcf4\uc218\uc131\uc744 \ub192\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<div style=\"height:29px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4>8) \ud48d\ubd80\ud55c \uc0dd\ud0dc\uacc4\uc640 \ucee4\ubba4\ub2c8\ud2f0 \uc9c0\uc6d0<\/h4>\n\n\n\n<p>JPA\ub294 Hibernate\uc640 \uac19\uc740 \uac15\ub825\ud55c \uad6c\ud604\uccb4\uc640 Spring Data JPA\uc640 \uac19\uc740 \ub3c4\uad6c\ub97c \ud1b5\ud574 \ud48d\ubd80\ud55c \uc0dd\ud0dc\uacc4\ub97c \uc81c\uacf5\ud569\ub2c8\ub2e4. \uc774\ub97c \ud1b5\ud574 \ub2e4\uc591\ud55c \ubb38\uc81c\ub97c \ud574\uacb0\ud560 \uc218 \uc788\ub294 \uc790\ub8cc\uc640 \ucee4\ubba4\ub2c8\ud2f0 \uc9c0\uc6d0\uc744 \ubc1b\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub610\ud55c, JPA\ub294 \ud45c\uc900 \uae30\uc220\uc774\uae30 \ub54c\ubb38\uc5d0 \ub2e4\uc591\ud55c \ud504\ub808\uc784\uc6cc\ud06c\uc640\uc758 \ud638\ud658\uc131\uc774 \ub6f0\uc5b4\ub0a9\ub2c8\ub2e4.<\/p>\n\n\n\n<div style=\"height:29px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4>9) SQL \uc911\uc2ec \uac1c\ubc1c\uc758 \ub2e8\uc810 \ubcf4\uc644<\/h4>\n\n\n\n<p>SQL \uc911\uc2ec \uac1c\ubc1c\uc5d0\uc11c\ub294 \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc2a4\ud0a4\ub9c8\uc640 SQL \ucffc\ub9ac\uc5d0 \ub300\ud55c \uc758\uc874\uc131\uc774 \ub192\uc544 \uc720\uc9c0\ubcf4\uc218\uac00 \uc5b4\ub824\uc6b8 \uc218 \uc788\uc2b5\ub2c8\ub2e4. JPA\ub294 \uac1d\uccb4 \uc911\uc2ec\uc758 \uac1c\ubc1c \ubc29\uc2dd\uc744 \ud1b5\ud574 \uc774\ub7ec\ud55c \ubb38\uc81c\ub97c \ubcf4\uc644\ud558\uba70, \ub370\uc774\ud130\ubca0\uc774\uc2a4 \ubcc0\uacbd\uc5d0 \uc720\uc5f0\ud558\uac8c \ub300\ucc98\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<div style=\"height:29px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4>10)&nbsp;Spring Boot \uac1c\ubc1c \ud2b8\ub80c\ub4dc\uc5d0\uc11c JPA\uc758 \uc810\uc720\uc728<\/h4>\n\n\n\n<p>\ud604\uc7ac Spring Boot \uae30\ubc18\uc758 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uac1c\ubc1c\uc5d0\uc11c JPA\ub294 \uac00\uc7a5 \ub110\ub9ac \uc0ac\uc6a9\ub418\ub294 \ub370\uc774\ud130 \uc811\uadfc \uae30\uc220 \uc911 \ud558\ub098\uc785\ub2c8\ub2e4. \ud2b9\ud788, Spring Data JPA\ub294 JPA\uc758 \ubcf5\uc7a1\ud55c \uc124\uc815\uacfc \uc0ac\uc6a9\ubc95\uc744 \uac04\uc18c\ud654\ud558\uc5ec \uac1c\ubc1c\uc790\ub4e4\uc774 \ub354 \uc27d\uac8c JPA\ub97c \ud65c\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d \ub3d5\uace0 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" width=\"1024\" height=\"618\" src=\"https:\/\/blog.anchors-biz.com\/wp-content\/uploads\/2024\/12\/google-trend-jpa-mybatis-kr-1024x618.png\" alt=\"\" class=\"wp-image-565\" srcset=\"https:\/\/blog.anchors-biz.com\/wp-content\/uploads\/2024\/12\/google-trend-jpa-mybatis-kr-1024x618.png 1024w, https:\/\/blog.anchors-biz.com\/wp-content\/uploads\/2024\/12\/google-trend-jpa-mybatis-kr-300x181.png 300w, https:\/\/blog.anchors-biz.com\/wp-content\/uploads\/2024\/12\/google-trend-jpa-mybatis-kr-768x463.png 768w, https:\/\/blog.anchors-biz.com\/wp-content\/uploads\/2024\/12\/google-trend-jpa-mybatis-kr.png 1142w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption>\uc9c0\ub09c 5\ub144\uac04 \uad6d\ub0b4\uc5d0\uc11c jpa\uc640 mybatis \uad6c\uae00 \uac80\uc0c9\ub7c9 \ucc28\uc774<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" src=\"https:\/\/blog.anchors-biz.com\/wp-content\/uploads\/2024\/12\/google-trend-jpa-mybatis-1024x589.png\" alt=\"\" class=\"wp-image-566\" width=\"850\" height=\"488\" srcset=\"https:\/\/blog.anchors-biz.com\/wp-content\/uploads\/2024\/12\/google-trend-jpa-mybatis-1024x589.png 1024w, https:\/\/blog.anchors-biz.com\/wp-content\/uploads\/2024\/12\/google-trend-jpa-mybatis-300x172.png 300w, https:\/\/blog.anchors-biz.com\/wp-content\/uploads\/2024\/12\/google-trend-jpa-mybatis-768x441.png 768w, https:\/\/blog.anchors-biz.com\/wp-content\/uploads\/2024\/12\/google-trend-jpa-mybatis.png 1164w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><figcaption>\uc9c0\ub09c 5\ub144\uac04 \uc804\uc138\uacc4\uc5d0\uc11c jpa\uc640 mybatis \uad6c\uae00 \uac80\uc0c9\ub7c9 \ucc28\uc774<\/figcaption><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>JPA\ub294 \uad6d\ub0b4\uc5d0\uc11c\ub3c4 \uc774\ubbf8 \uc8fc\uc694 \ud2b8\ub80c\ub4dc\ub85c \uc790\ub9ac \uc7a1\uc558\uc73c\uba70, \uc804 \uc138\uacc4\uc801\uc73c\ub85c\ub3c4 \uac00\uc7a5 \ub110\ub9ac \uc0ac\uc6a9\ub418\ub294 \ub370\uc774\ud130 \uc811\uadfc \uae30\uc220\ub85c \uc790\ub9ac\ub9e4\uae40\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h5>JPA\uc758 \ub192\uc740 \uc810\uc720\uc728\uc740 \ub2e4\uc74c\uacfc \uac19\uc740 \uc774\uc720\uc5d0\uc11c \uae30\uc778\ud569\ub2c8\ub2e4:<\/h5>\n\n\n\n<ol><li><strong>Spring Data JPA\uc758 \uac04\ud3b8\ud568<\/strong>: JPA\uc758 \ubcf5\uc7a1\ud55c \uc124\uc815\uc744 Spring Data JPA\uac00 \uac04\uc18c\ud654\ud558\uc5ec, \uac1c\ubc1c\uc790\ub4e4\uc774 \ub354 \uc27d\uac8c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/li><li><strong>\uac1d\uccb4 \uc9c0\ud5a5 \uc124\uacc4\uc640\uc758 \uc790\uc5f0\uc2a4\ub7ec\uc6b4 \ud1b5\ud569<\/strong>: JPA\ub294 \uac1d\uccb4 \uc9c0\ud5a5\uc801\uc778 \uc124\uacc4\uc640 \uc798 \ub9de\uc544, \uc5d4\ud130\ud504\ub77c\uc774\uc988 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uac1c\ubc1c\uc5d0 \uc801\ud569\ud569\ub2c8\ub2e4.<\/li><li><strong>Spring \uc0dd\ud0dc\uacc4\uc640\uc758 \uac15\ub825\ud55c \ud1b5\ud569<\/strong>: Spring Boot\uc640 JPA\ub294 \uc644\ubcbd\ud788 \ud1b5\ud569\ub418\uc5b4 \uc788\uc5b4, \uac1c\ubc1c\uc790\uac00 \ub370\uc774\ud130 \uc811\uadfc \ub85c\uc9c1\uc744 \uac04\ub2e8\ud788 \uad6c\ud604\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/li><\/ol>\n\n\n\n<div style=\"height:29px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" \/>\n\n\n\n<p><\/p>\n\n\n\n<h3>\uacb0\ub860<\/h3>\n\n\n\n<p>JPA\ub294 \uac1d\uccb4 \uc9c0\ud5a5\uc801\uc778 \uc124\uacc4\uc640 \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uac04\uc758 \ub9e4\ud551\uc744 \uac04\uc18c\ud654\ud558\uc5ec \uc0dd\uc0b0\uc131\uc744 \ub192\uc774\uace0 \uc720\uc9c0\ubcf4\uc218\ub97c \uc6a9\uc774\ud558\uac8c \ud569\ub2c8\ub2e4. \ud2b9\ud788 Spring Boot\uc640 \ud568\uaed8 \uc0ac\uc6a9\ud558\uba74 JPA\uc758 \uac15\ub825\ud55c \uae30\ub2a5\uc744 \ub354\uc6b1 \uc27d\uac8c \ud65c\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ubb3c\ub860 MyBatis\uc640 \uac19\uc740 SQL \uc911\uc2ec\uc758 \ub3c4\uad6c\uac00 \ud544\uc694\ud55c \uacbd\uc6b0\ub3c4 \uc788\uc9c0\ub9cc, \ub300\ubd80\ubd84\uc758 CRUD \uc911\uc2ec \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0\uc11c\ub294 JPA\uac00 \ub354 \uc801\ud569\ud55c \uc120\ud0dd\uc774 \ub420 \uac83\uc785\ub2c8\ub2e4.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>JPA(Java Persistence API)\ub294 \uac1d\uccb4\uc640 \uad00\uacc4\ud615 \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uac04\uc758 \ub9e4\ud551\uc744 \uc790\ub3d9\ud654\ud558\ub294 Java \ud45c\uc900 ORM \uae30\uc220\ub85c, Spring Boot \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c \uac00\uc7a5 \ub110\ub9ac \uc0ac\uc6a9\ub418\ub294 \ub370\uc774\ud130 \uc811\uadfc \ubc29\uc2dd\uc785\ub2c8\ub2e4. JPA\ub294 \uc0dd\uc0b0\uc131\uc744 \ub192\uc774\uace0 \uac1d\uccb4 \uc9c0\ud5a5 \uc124\uacc4\uc640 \uc790\uc5f0\uc2a4\ub7fd\uac8c \ud1b5\ud569\ub418\uba70, Spring Data JPA\ub97c \ud1b5\ud574 \uac04\ud3b8\ud558\uac8c \ud65c\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ud558\uc9c0\ub9cc JPA\ub294 \ubcf5\uc7a1\ud55c \ub3d9\uc801 \ucffc\ub9ac \uc791\uc131\uacfc \ud0c0\uc785 \uc548\uc804\uc131 \ubd80\uc871 \uac19\uc740 \ub2e8\uc810\uc774 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub97c \ubcf4\uc644\ud558\uae30 \uc704\ud574 QueryDSL\uc744 \uc0ac\uc6a9\ud558\uba74 \ub3d9\uc801 \ucffc\ub9ac\ub97c \ud0c0\uc785 \uc548\uc804\ud558\uace0 \uac00\ub3c5\uc131 \ub192\uac8c \uc791\uc131\ud560 \uc218 \uc788\uc5b4 JPA\uc758 \ud55c\uacc4\ub97c \uadf9\ubcf5\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uad6d\ub0b4\uc5d0\uc11c\ub3c4 JPA\ub294 \uc774\ubbf8 \uc8fc\uc694 \ud2b8\ub80c\ub4dc\ub85c \uc790\ub9ac \uc7a1\uc558\uc73c\uba70, \uc804 \uc138\uacc4\uc801\uc73c\ub85c\ub3c4 \uac00\uc7a5 \ub110\ub9ac \uc0ac\uc6a9\ub418\ub294 \ub370\uc774\ud130 \uc811\uadfc \uae30\uc220\ub85c \uc778\uc815\ubc1b\uace0 \uc788\uc2b5\ub2c8\ub2e4. Spring Boot\uc640 JPA, \uadf8\ub9ac\uace0 QueryDSL\uc758 \uc870\ud569\uc740 CRUD \uc911\uc2ec \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uac1c\ubc1c\uc5d0\uc11c \uac00\uc7a5 \ud6a8\uc728\uc801\uc774\uace0 \uac15\ub825\ud55c \uc120\ud0dd\uc9c0\uc785\ub2c8\ub2e4.<\/p>\n","protected":false},"author":16,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_mi_skip_tracking":false},"categories":[3],"tags":[36,51,52,35],"_links":{"self":[{"href":"https:\/\/blog.anchors-biz.com\/index.php?rest_route=\/wp\/v2\/posts\/563"}],"collection":[{"href":"https:\/\/blog.anchors-biz.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.anchors-biz.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.anchors-biz.com\/index.php?rest_route=\/wp\/v2\/users\/16"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.anchors-biz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=563"}],"version-history":[{"count":9,"href":"https:\/\/blog.anchors-biz.com\/index.php?rest_route=\/wp\/v2\/posts\/563\/revisions"}],"predecessor-version":[{"id":648,"href":"https:\/\/blog.anchors-biz.com\/index.php?rest_route=\/wp\/v2\/posts\/563\/revisions\/648"}],"wp:attachment":[{"href":"https:\/\/blog.anchors-biz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=563"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.anchors-biz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=563"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.anchors-biz.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=563"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}