{"id":35774,"date":"2023-06-04T08:35:55","date_gmt":"2023-06-03T23:35:55","guid":{"rendered":"https:\/\/m9js.shop\/blog\/?p=35774"},"modified":"2023-06-04T08:35:55","modified_gmt":"2023-06-03T23:35:55","slug":"how-to-connect-database-using-spring-boot-and-jpa","status":"publish","type":"post","link":"https:\/\/m9js.shop\/blog\/development\/how-to-connect-database-using-spring-boot-and-jpa","title":{"rendered":"\uc2a4\ud504\ub9c1 \ubd80\ud2b8\uc640 JPA\ub97c \ud65c\uc6a9\ud55c \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc5f0\ub3d9 \ubc29\ubc95"},"content":{"rendered":"

\uc2a4\ud504\ub9c1 \ubd80\ud2b8\uc640 JPA\ub97c \ud65c\uc6a9\ud55c \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc5f0\ub3d9 \uac1c\uc694<\/h1>\n

\uc2a4\ud504\ub9c1 \ubd80\ud2b8\uc640 JPA\ub97c \uc774\uc6a9\ud574 \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub97c \uc5f0\ub3d9\ud558\ub294 \ubc29\ubc95\uc740 \ub9ce\uc740 \uc6f9 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uac1c\ubc1c\uc790\ub4e4\uc774 \ud754\ud788 \uc0ac\uc6a9\ud558\ub294 \ubc29\ubc95\uc785\ub2c8\ub2e4. JPA\ub294 Java Persistence API\uc758 \uc57d\uc5b4\ub85c Java \uac1d\uccb4\uc640 \uad00\uacc4\ud615 \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub97c \ub9e4\ud551\ud558\ub294 \uc790\ubc14 ORM(Object-Relational Mapping) \ud504\ub808\uc784\uc6cc\ud06c\uc785\ub2c8\ub2e4. \uc2a4\ud504\ub9c1 \ubd80\ud2b8\ub294 \uc2a4\ud504\ub9c1 \ud504\ub808\uc784\uc6cc\ud06c\uc758 \uc77c\uc885\uc73c\ub85c, \uc2a4\ud504\ub9c1\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 \uc5ec\ub7ec \uae30\ub2a5\uc744 \ubbf8\ub9ac \uc124\uc815\ud574\ub193\uc740 \uac83\uc73c\ub85c\uc11c, \uac04\ud3b8\ud558\uac8c \uc6f9 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uac1c\ubc1c\ud560 \uc218 \uc788\ub3c4\ub85d \ub3c4\uc640\uc90d\ub2c8\ub2e4.<\/p>\n

\uc2a4\ud504\ub9c1 \ubd80\ud2b8\uc640 JPA\ub97c \uc774\uc6a9\ud574 \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub97c \uc5f0\ub3d9\ud558\ub294 \ubc29\ubc95\uc740 \ub9e4\uc6b0 \uac04\ub2e8\ud558\uace0, \ube60\ub974\uac8c \uac1c\ubc1c\ud560 \uc218 \uc788\uac8c \ud574\uc90d\ub2c8\ub2e4. \uc774\ub7ec\ud55c \ubc29\ubc95\uc744 \uc0ac\uc6a9\ud558\uba74, \uac1c\ubc1c\uc790\ub294 \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub97c \uc9c1\uc811 \ub2e4\ub8e8\ub294 SQL \ucffc\ub9ac\ubb38 \uc791\uc131\uc5d0 \ub300\ud55c \ubd80\ub2f4\uacfc \ubcf5\uc7a1\uc131\uc744 \uc904\uc77c \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \uae00\uc5d0\uc11c\ub294 \uc2a4\ud504\ub9c1 \ubd80\ud2b8\uc640 JPA\ub97c \uc774\uc6a9\ud574 \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub97c \uc5f0\ub3d9\ud558\ub294 \ubc29\ubc95\uacfc \uc131\ub2a5 \ud5a5\uc0c1 \ubc29\ubc95\uc744 \uc54c\uc544\ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n

\"Database\"<\/p>\n

\uc2a4\ud504\ub9c1 \ubd80\ud2b8\uc640 JPA\ub97c \uc774\uc6a9\ud55c \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc124\uc815 \ubc29\ubc95<\/h2>\n

\uc2a4\ud504\ub9c1 \ubd80\ud2b8\uc640 JPA\ub97c \uc774\uc6a9\ud574 \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub97c \uc5f0\ub3d9\ud558\ub294 \ubc29\ubc95\uc740 \ud06c\uac8c \ub450 \uac00\uc9c0\ub85c \ub098\ub20c \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud558\ub098\ub294 \uc2a4\ud504\ub9c1 \ubd80\ud2b8\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 \uc2a4\ud0c0\ud130(starter)\ub97c \uc774\uc6a9\ud558\ub294 \uac83\uc774\uace0, \ub2e4\ub978 \ud558\ub098\ub294 \uc2a4\ud504\ub9c1 \ubd80\ud2b8\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 \uc124\uc815 \uc5b4\ub178\ud14c\uc774\uc158(annotation)\uc744 \uc774\uc6a9\ud558\ub294 \uac83\uc785\ub2c8\ub2e4.<\/p>\n

\uc2a4\ud504\ub9c1 \ubd80\ud2b8\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 \uc2a4\ud0c0\ud130 \uc0ac\uc6a9\ud558\uae30<\/h3>\n

\uc2a4\ud504\ub9c1 \ubd80\ud2b8\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 \uc2a4\ud0c0\ud130\ub97c \uc0ac\uc6a9\ud558\uba74, \uac04\ub2e8\ud558\uac8c \uc124\uc815 \ud30c\uc77c\uc744 \uc791\uc131\ud558\uc5ec \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub97c \uc5f0\ub3d9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc2a4\ud504\ub9c1 \ubd80\ud2b8\uc5d0\uc11c\ub294 \ub370\uc774\ud130\ubca0\uc774\uc2a4\ubcc4\ub85c \uc2a4\ud0c0\ud130\ub97c \uc81c\uacf5\ud569\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4, MySQL\uc744 \uc0ac\uc6a9\ud55c\ub2e4\uba74, spring-boot-starter-data-jpa<\/code>\uc640 mysql-connector-java<\/code>\ub97c \uc758\uc874\uc131\uc73c\ub85c \ucd94\uac00\ud574\uc8fc\uba74 \ub429\ub2c8\ub2e4.<\/p>\n

\n  org.springframework.boot\n  spring-boot-starter-data-jpa\n\n  mysql\n  mysql-connector-java\n<\/code><\/pre>\n

\uc774\ub807\uac8c \uc758\uc874\uc131\uc744 \ucd94\uac00\ud558\uba74, \uc2a4\ud504\ub9c1 \ubd80\ud2b8\uac00 \uc54c\uc544\uc11c \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc124\uc815\uc744 \ud574\uc8fc\uba70, JPA\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uac8c \ub429\ub2c8\ub2e4.<\/p>\n

\uc2a4\ud504\ub9c1 \ubd80\ud2b8\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 \uc124\uc815 \uc5b4\ub178\ud14c\uc774\uc158 \uc0ac\uc6a9\ud558\uae30<\/h3>\n

\uc2a4\ud504\ub9c1 \ubd80\ud2b8\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 \uc5b4\ub178\ud14c\uc774\uc158\uc744 \uc0ac\uc6a9\ud558\uba74, \ub354\uc6b1 \uac04\ub2e8\ud558\uac8c \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub97c \uc5f0\ub3d9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4, MySQL\uc744 \uc0ac\uc6a9\ud55c\ub2e4\uba74, @EnableJpaRepositories<\/code>\uc640 @EntityScan<\/code> \uc5b4\ub178\ud14c\uc774\uc158\uc744 \uc0ac\uc6a9\ud558\uba74 \ub429\ub2c8\ub2e4.<\/p>\n

@EnableJpaRepositories(basePackages = \"com.example.repository\")\n@EntityScan(basePackages = {\"com.example.entity\"})<\/code><\/pre>\n

\uc704\uc640 \uac19\uc774 \uc5b4\ub178\ud14c\uc774\uc158\uc744 \uc124\uc815\ud558\uba74, \uc2a4\ud504\ub9c1 \ubd80\ud2b8\uc5d0\uc11c JPA\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uac8c \ub429\ub2c8\ub2e4.<\/p>\n

\uc2a4\ud504\ub9c1 \ubd80\ud2b8\uc640 JPA\ub97c \ud65c\uc6a9\ud55c \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc5f0\ub3d9 \uc608\uc81c<\/h2>\n

\uc2a4\ud504\ub9c1 \ubd80\ud2b8\uc640 JPA\ub97c \uc774\uc6a9\ud574 \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub97c \uc5f0\ub3d9\ud558\ub294 \uc608\uc81c\ub97c \uc0b4\ud3b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \uc608\uc81c\uc5d0\uc11c\ub294 MySQL \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub97c \uc0ac\uc6a9\ud569\ub2c8\ub2e4.<\/p>\n

\uc758\uc874\uc131 \uc124\uc815<\/h3>\n

MySQL\uc744 \uc0ac\uc6a9\ud558\uae30 \uc704\ud574, spring-boot-starter-data-jpa<\/code>\uc640 mysql-connector-java<\/code>\ub97c \uc758\uc874\uc131\uc73c\ub85c \ucd94\uac00\ud574\uc57c \ud569\ub2c8\ub2e4.<\/p>\n

\n  org.springframework.boot\n  spring-boot-starter-data-jpa\n\n  mysql\n  mysql-connector-java\n<\/code><\/pre>\n

\uc124\uc815 \ud30c\uc77c \uc791\uc131<\/h3>\n

MySQL \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0 \uc811\uc18d\ud558\uae30 \uc704\ud574, application.properties<\/code> \ud30c\uc77c\uc5d0 \uc544\ub798\uc640 \uac19\uc774 \uc124\uc815\ud569\ub2c8\ub2e4.<\/p>\n

spring.jpa.hibernate.ddl-auto=create-drop\nspring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver\nspring.datasource.url=jdbc:mysql:\/\/localhost:3306\/test?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true\nspring.datasource.username=root\nspring.datasource.password=<\/code><\/pre>\n

\uc704 \uc124\uc815\uc5d0\uc11c spring.jpa.hibernate.ddl-auto<\/code>\ub294 JPA\uc5d0\uc11c \uc5d4\ud2f0\ud2f0 \ud074\ub798\uc2a4\ub97c \uae30\ubc18\uc73c\ub85c \ub370\uc774\ud130\ubca0\uc774\uc2a4 \ud14c\uc774\ube14\uc744 \uc0dd\uc131\ud560 \ub54c \uc0ac\uc6a9\ud558\ub294 \uc635\uc158\uc785\ub2c8\ub2e4. create-drop<\/code> \uc635\uc158\uc744 \uc0ac\uc6a9\ud558\uba74, \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uc2e4\ud589\ud560 \ub54c\ub9c8\ub2e4 \ud14c\uc774\ube14\uc744 \uc0dd\uc131\ud558\uace0, \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uc885\ub8cc\ud560 \ub54c \ud14c\uc774\ube14\uc744 \uc0ad\uc81c\ud569\ub2c8\ub2e4. spring.datasource.url<\/code>\uc740 MySQL \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc758 \uc811\uc18d \uc815\ubcf4\uc785\ub2c8\ub2e4.<\/p>\n

\uc5d4\ud2f0\ud2f0 \ud074\ub798\uc2a4 \uc791\uc131<\/h3>\n

\ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0 \uc800\uc7a5\ub420 \ub370\uc774\ud130\ub97c \ub2f4\uc744 \uc5d4\ud2f0\ud2f0 \ud074\ub798\uc2a4\ub97c \uc791\uc131\ud569\ub2c8\ub2e4.<\/p>\n

@Entity\n@Table(name = \"users\")\npublic class User {\n    @Id\n    @GeneratedValue(strategy = GenerationType.IDENTITY)\n    private Long id;\n    private String name;\n    private String email;\n\n    \/\/ Getter, Setter\n}<\/code><\/pre>\n

\uc704 \ud074\ub798\uc2a4\uc5d0\uc11c\ub294 @Entity<\/code> \uc5b4\ub178\ud14c\uc774\uc158\uc73c\ub85c \uc5d4\ud2f0\ud2f0 \ud074\ub798\uc2a4\uc784\uc744 \ud45c\uc2dc\ud558\uace0, @Table<\/code> \uc5b4\ub178\ud14c\uc774\uc158\uc73c\ub85c \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0\uc11c \uc0ac\uc6a9\ub420 \ud14c\uc774\ube14 \uc774\ub984\uc744 \uc9c0\uc815\ud569\ub2c8\ub2e4. @Id<\/code>\uc640 @GeneratedValue<\/code> \uc5b4\ub178\ud14c\uc774\uc158\uc73c\ub85c \uc5d4\ud2f0\ud2f0 \ud074\ub798\uc2a4\uc758 \uc2dd\ubcc4\uc790\ub97c \uc9c0\uc815\ud569\ub2c8\ub2e4.<\/p>\n

Repository \uc778\ud130\ud398\uc774\uc2a4 \uc791\uc131<\/h3>\n

\uc5d4\ud2f0\ud2f0 \ud074\ub798\uc2a4\uc640 \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub97c \uc5f0\ub3d9\ud558\uae30 \uc704\ud55c Repository \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc791\uc131\ud569\ub2c8\ub2e4.<\/p>\n

@Repository\npublic interface UserRepository extends JpaRepository {\n}<\/code><\/pre>\n

\uc704 \uc778\ud130\ud398\uc774\uc2a4\uc5d0\uc11c\ub294 @Repository<\/code> \uc5b4\ub178\ud14c\uc774\uc158\uc73c\ub85c Repository \ud074\ub798\uc2a4\uc784\uc744 \ud45c\uc2dc\ud558\uace0, JpaRepository<\/code> \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc0c1\uc18d\ubc1b\uc2b5\ub2c8\ub2e4. JpaRepository<\/code> \uc778\ud130\ud398\uc774\uc2a4\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 \uc5ec\ub7ec \uba54\uc18c\ub4dc\ub97c \uc774\uc6a9\ud574, \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc640 \uc5f0\ub3d9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n

\uc11c\ube44\uc2a4 \ud074\ub798\uc2a4 \uc791\uc131<\/h3>\n

\ube44\uc988\ub2c8\uc2a4 \ub85c\uc9c1\uc744 \ub2f4\ub2f9\ud558\ub294 \uc11c\ube44\uc2a4 \ud074\ub798\uc2a4\ub97c \uc791\uc131\ud569\ub2c8\ub2e4.<\/p>\n

@Service\npublic class UserService {\n    @Autowired\n    private UserRepository userRepository;\n\n    public List getUsers() {\n        return userRepository.findAll();\n    }\n\n    public User getUser(Long id) {\n        return userRepository.findById(id).orElseThrow(() -> new NoSuchElementException());\n    }\n\n    public User createUser(User user) {\n        return userRepository.save(user);\n    }\n}<\/code><\/pre>\n

\uc704 \uc11c\ube44\uc2a4 \ud074\ub798\uc2a4\uc5d0\uc11c\ub294 @Service<\/code> \uc5b4\ub178\ud14c\uc774\uc158\uc73c\ub85c \uc11c\ube44\uc2a4 \ud074\ub798\uc2a4\uc784\uc744 \ud45c\uc2dc\ud558\uace0, @Autowired<\/code> \uc5b4\ub178\ud14c\uc774\uc158\uc73c\ub85c Repository \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc8fc\uc785\ubc1b\uc2b5\ub2c8\ub2e4. findAll()<\/code> \uba54\uc18c\ub4dc\ub97c \uc774\uc6a9\ud574 \ubaa8\ub4e0 \uc0ac\uc6a9\uc790 \uc815\ubcf4\ub97c \uac00\uc838\uc624\uace0, findById()<\/code> \uba54\uc18c\ub4dc\ub97c \uc774\uc6a9\ud574 \ud2b9\uc815 \uc0ac\uc6a9\uc790 \uc815\ubcf4\ub97c \uac00\uc838\uc62c \uc218 \uc788\uc2b5\ub2c8\ub2e4. save()<\/code> \uba54\uc18c\ub4dc\ub97c \uc774\uc6a9\ud574 \uc0ac\uc6a9\uc790 \uc815\ubcf4\ub97c \uc800\uc7a5\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n

\ucee8\ud2b8\ub864\ub7ec \ud074\ub798\uc2a4 \uc791\uc131<\/h3>\n

\uc6f9 \uc694\uccad\uc744 \ucc98\ub9ac\ud558\ub294 \ucee8\ud2b8\ub864\ub7ec \ud074\ub798\uc2a4\ub97c \uc791\uc131\ud569\ub2c8\ub2e4.<\/p>\n

@RestController\npublic class UserController {\n    @Autowired\n    private UserService userService;\n\n    @GetMapping(\"\/users\")\n    public List getUsers() {\n        return userService.getUsers();\n    }\n\n    @GetMapping(\"\/users\/{id}\")\n    public User getUser(@PathVariable Long id) {\n        return userService.getUser(id);\n    }\n\n    @PostMapping(\"\/users\")\n    public User createUser(@RequestBody User user) {\n        return userService.createUser(user);\n    }\n}<\/code><\/pre>\n

\uc704 \ucee8\ud2b8\ub864\ub7ec\uc5d0\uc11c\ub294 @RestController<\/code> \uc5b4\ub178\ud14c\uc774\uc158\uc73c\ub85c \ucee8\ud2b8\ub864\ub7ec \ud074\ub798\uc2a4\uc784\uc744 \ud45c\uc2dc\ud558\uace0, @Autowired<\/code> \uc5b4\ub178\ud14c\uc774\uc158\uc73c\ub85c \uc11c\ube44\uc2a4 \ud074\ub798\uc2a4\ub97c \uc8fc\uc785\ubc1b\uc2b5\ub2c8\ub2e4. @GetMapping<\/code> \uc5b4\ub178\ud14c\uc774\uc158\uc73c\ub85c GET \uc694\uccad\uc744 \ucc98\ub9ac\ud558\uace0, @PostMapping<\/code> \uc5b4\ub178\ud14c\uc774\uc158\uc73c\ub85c POST \uc694\uccad\uc744 \ucc98\ub9ac\ud569\ub2c8\ub2e4.<\/p>\n

\uc2a4\ud504\ub9c1 \ubd80\ud2b8\uc640 JPA\ub97c \uc774\uc6a9\ud55c \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc5f0\ub3d9 \uc131\ub2a5 \ud5a5\uc0c1 \ubc29\ubc95<\/h2>\n

\uc2a4\ud504\ub9c1 \ubd80\ud2b8\uc640 JPA\ub97c \uc774\uc6a9\ud55c \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc5f0\ub3d9\uc5d0\uc11c \uc131\ub2a5 \ud5a5\uc0c1\uc744 \uc704\ud574 \uace0\ub824\ud574\uc57c \ud560 \uba87 \uac00\uc9c0 \ubc29\ubc95\uc774 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n

\uce90\uc2dc \uc0ac\uc6a9\ud558\uae30<\/h3>\n

\ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0\uc11c \ub370\uc774\ud130\ub97c \uac00\uc838\uc624\ub294 \uc791\uc5c5\uc740 \ube44\uc6a9\uc774 \ub9ce\uc774 \ub4dc\ub294 \uc791\uc5c5 \uc911 \ud558\ub098\uc785\ub2c8\ub2e4. \uc774\ub7ec\ud55c \uc791\uc5c5\uc744 \ucd5c\uc18c\ud654\ud558\uae30 \uc704\ud574, \uce90\uc2dc\ub97c \uc0ac\uc6a9\ud558\ub294 \uac83\uc774 \uc88b\uc2b5\ub2c8\ub2e4. \uc2a4\ud504\ub9c1 \ubd80\ud2b8\uc640 JPA\uc5d0\uc11c\ub294 \uce90\uc2dc\ub97c \uc801\uadf9\uc801\uc73c\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ub2e4\uc591\ud55c \ubc29\ubc95\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4, @Cacheable<\/code> \uc5b4\ub178\ud14c\uc774\uc158\uc744 \uc774\uc6a9\ud574 \uba54\uc18c\ub4dc\uc758 \uacb0\uacfc\ub97c \uce90\uc2dc\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n

@Service\npublic class UserService {\n    @Autowired\n    private UserRepository userRepository;\n\n    @Cacheable(value = \"users\")\n    public List getUsers() {\n        return userRepository.findAll();\n    }\n\n    \/\/ ...\n}<\/code><\/pre>\n

\uc704 \ucf54\ub4dc\uc5d0\uc11c\ub294 @Cacheable<\/code> \uc5b4\ub178\ud14c\uc774\uc158\uc73c\ub85c getUsers()<\/code> \uba54\uc18c\ub4dc\uc758 \uacb0\uacfc\ub97c \uce90\uc2dc\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n

\ud398\uc774\uc9d5 \ucc98\ub9ac\ud558\uae30<\/h3>\n

\ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0\uc11c \ub300\ub7c9\uc758 \ub370\uc774\ud130\ub97c \ud55c \ubc88\uc5d0 \uac00\uc838\uc624\ub294 \uac83\uc740 \ube44\uc6a9\uc774 \ub9ce\uc774 \ub4dc\ub294 \uc791\uc5c5 \uc911 \ud558\ub098\uc785\ub2c8\ub2e4. \uc774\ub7ec\ud55c \uc791\uc5c5\uc744 \ucd5c\uc18c\ud654\ud558\uae30 \uc704\ud574, \ud398\uc774\uc9d5 \ucc98\ub9ac\ub97c \uc0ac\uc6a9\ud558\ub294 \uac83\uc774 \uc88b\uc2b5\ub2c8\ub2e4. \uc2a4\ud504\ub9c1 \ubd80\ud2b8\uc640 JPA\uc5d0\uc11c\ub294 Pageable<\/code> \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc774\uc6a9\ud574 \ud398\uc774\uc9d5 \ucc98\ub9ac\ub97c \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n

@Service\npublic class UserService {\n    @Autowired\n    private UserRepository userRepository;\n\n    public Page getUsers(int page, int size) {\n        Pageable pageable = PageRequest.of(page, size);\n        return userRepository.findAll(pageable);\n    }\n\n    \/\/ ...\n}<\/code><\/pre>\n

\uc704 \ucf54\ub4dc\uc5d0\uc11c\ub294 Pageable<\/code> \uc778\ud130\ud398\uc774\uc2a4\ub85c \ud398\uc774\uc9d5 \ucc98\ub9ac\ub97c \ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n

SQL \ud29c\ub2dd\ud558\uae30<\/h3>\n

SQL \ud29c\ub2dd\uc740 \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc131\ub2a5 \ud5a5\uc0c1\uc744 \uc704\ud574 \uac00\uc7a5 \uc911\uc694\ud55c \uc791\uc5c5 \uc911 \ud558\ub098\uc785\ub2c8\ub2e4. \uc2a4\ud504\ub9c1 \ubd80\ud2b8\uc640 JPA\uc5d0\uc11c\ub3c4 SQL \ud29c\ub2dd\uc744 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4, @Query<\/code> \uc5b4\ub178\ud14c\uc774\uc158\uc744 \uc774\uc6a9\ud574 \uc9c1\uc811 SQL \ucffc\ub9ac\ub97c \uc791\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n

@Repository\npublic interface UserRepository extends JpaRepository {\n    @Query(\"SELECT u FROM User u WHERE u.name LIKE %:name%\")\n    List findByNameLike(@Param(\"name\") String name);\n}<\/code><\/pre>\n

\uc704 \ucf54\ub4dc\uc5d0\uc11c\ub294 @Query<\/code> \uc5b4\ub178\ud14c\uc774\uc158\uc73c\ub85c \uc9c1\uc811 SQL \ucffc\ub9ac\ub97c \uc791\uc131\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n

\uacb0\ub860<\/h2>\n

\uc774 \uae00\uc5d0\uc11c\ub294 \uc2a4\ud504\ub9c1 \ubd80\ud2b8\uc640 JPA\ub97c \uc774\uc6a9\ud574 \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub97c \uc5f0\ub3d9\ud558\ub294 \ubc29\ubc95\uacfc \uc131\ub2a5 \ud5a5\uc0c1 \ubc29\ubc95\uc744 \uc54c\uc544\ubcf4\uc558\uc2b5\ub2c8\ub2e4. \uc2a4\ud504\ub9c1 \ubd80\ud2b8\uc640 JPA\ub97c \uc774\uc6a9\ud558\uba74, \uac04\ub2e8\ud558\uace0 \ube60\ub974\uac8c \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub97c \uc5f0\ub3d9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub610\ud55c, \uce90\uc2dc\ub97c \uc0ac\uc6a9\ud558\uac70\ub098 \ud398\uc774\uc9d5 \ucc98\ub9ac\ub97c \ud558\uac70\ub098 SQL \ud29c\ub2dd\uc744 \ud568\uc73c\ub85c\uc368 \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc131\ub2a5\uc744 \ub354\uc6b1 \ud5a5\uc0c1\uc2dc\ud0ac \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub7ec\ud55c \ubc29\ubc95\ub4e4\uc744 \uc798 \ud65c\uc6a9\ud558\uba74, \ub354\uc6b1 \ube60\ub974\uace0 \uc548\uc815\uc801\uc778 \uc6f9 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uac1c\ubc1c\ud560 \uc218 \uc788\uc744 \uac83\uc785\ub2c8\ub2e4.<\/p>\n","protected":false},"excerpt":{"rendered":"

“\uc2a4\ud504\ub9c1 \ubd80\ud2b8\uc640 JPA\ub97c \uc774\uc6a9\ud55c DB \uc5f0\ub3d9 \ubc29\ubc95” – \uae30\uc220\uc801\uc778 \uad00\uc810\uc5d0\uc11c \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,2058,5898,2104,2076,2105,2100,5932,2144,5979],"class_list":["post-35774","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-development","tag-api","tag-application","tag-backend","tag-data","tag-from","tag-java","tag-mysql","tag-spring-boot","tag-web","tag-5979"],"acf":[],"_links":{"self":[{"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/posts\/35774","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=35774"}],"version-history":[{"count":1,"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/posts\/35774\/revisions"}],"predecessor-version":[{"id":35967,"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/posts\/35774\/revisions\/35967"}],"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=35774"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/categories?post=35774"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/tags?post=35774"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}