안녕하세요. 오늘은 스프링 부트(Spring Boot)와 하이버네이트(Hibernate) JPA(Java Persistence API)의 기본 사용법에 대해 알아보겠습니다. 이 포스팅에서는 JPA를 활용하여 데이터베이스와 상호작용하는 기초적인 방법을 예제와 함께 설명하도록 하겠습니다.
1. 프로젝트 설정
먼저, 스프링 부트를 사용한 프로젝트를 생성해야 합니다. Spring Initializr 에 접속하여 아래와 같은 의존성을 선택한 후 프로젝트를 생성합니다.
- Spring Web
- Spring Data JPA
- H2 Database (내장 데이터베이스)
그 후, 다운로드한 zip 파일을 추출하여 IDE에서 열어줍니다.
2. application.properties 설정
프로젝트의 `src/main/resources/application.properties` 파일에 데이터베이스와 JPA 관련 설정을 추가합니다.
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.h2.console.enabled=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
위의 설정으로 H2 데이터베이스를 사용하도록 구성했습니다. H2는 메모리 기반의 관계형 데이터베이스이기 때문에 간편하게 사용할 수 있습니다.
3. JPA Entity 클래스 생성
이제 JPA Entity 클래스를 생성해 보겠습니다. `src/main/java/com/example/demo/model` 디렉토리를 만들고, 그 안에 `User.java` 파일을 생성합니다.
package com.example.demo.model;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String email;
// Getter and Setter methods
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
클래스에 `@Entity` 어노테이션을 붙여주면 JPA가 해당 클래스를 데이터베이스 테이블로 매핑합니다. `@Id`는 기본 키를 지정하고, `@GeneratedValue`는 자동으로 증가하는 값을 생성하도록 설정합니다.
4. Repository 인터페이스 생성
데이터베이스와의 상호작용을 위한 Repository 인터페이스를 생성합니다. `src/main/java/com/example/demo/repository` 디렉토리를 만들고, `UserRepository.java` 파일을 생성합니다.
package com.example.demo.repository;
import com.example.demo.model.User;
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserRepository extends JpaRepository<User, Long> {
}
JPA의 `JpaRepository`를 상속받음으로써 CRUD 작업을 위한 기본적인 메서드들이 자동으로 제공됩니다.
5. 서비스 클래스 및 컨트롤러 생성
이제 서비스를 담당할 클래스와 REST API를 위한 컨트롤러를 만들어 보겠습니다. `src/main/java/com/example/demo/service` 디렉토리를 만들고, `UserService.java` 파일을 생성합니다.
package com.example.demo.service;
import com.example.demo.model.User;
import com.example.demo.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Optional;
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public List findAll() {
return userRepository.findAll();
}
public Optional findById(Long id) {
return userRepository.findById(id);
}
public User save(User user) {
return userRepository.save(user);
}
public void deleteById(Long id) {
userRepository.deleteById(id);
}
}
서비스 클래스에서 Repository를 주입받아 데이터를 CRUD하는 메서드를 정의했습니다.
다음으로 `src/main/java/com/example/demo/controller` 디렉토리를 만들고, `UserController.java` 파일을 추가하겠습니다.
package com.example.demo.controller;
import com.example.demo.model.User;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserService userService;
@GetMapping
public List getUsers() {
return userService.findAll();
}
@PostMapping
public User createUser(@RequestBody User user) {
return userService.save(user);
}
@DeleteMapping("/{id}")
public ResponseEntity deleteUser(@PathVariable Long id) {
userService.deleteById(id);
return ResponseEntity.ok().build();
}
}
이제 기본적으로 사용자의 목록을 가져오고, 사용자를 생성하고, 사용자를 삭제할 수 있는 REST API를 구축하였습니다.
6. 어플리케이션 실행
모든 설정이 완료되었으니, 이제 어플리케이션을 실행해봅시다. IDE에서 `DemoApplication.java` 파일을 실행하면 스프링 부트 애플리케이션이 시작됩니다. H2 콘솔을 사용하여 데이터베이스를 확인하려면, 아래 URL로 접속합니다:
http://localhost:8080/h2-console
로그인 정보는 `JDBC URL`을 `jdbc:h2:mem:testdb`로 입력하고, 사용자 이름은 `sa`로 사용해 주세요.
결론
이상으로 스프링 부트와 하이버네이트 JPA의 기본 사용법에 대해 알아보았습니다. JPA를 사용하면 데이터베이스와의 상호작용이 매우 간편해져, 생산성이 대폭 향상됩니다. 다음 포스팅에서는 좀 더 고급 기능에 대해 다뤄 보겠습니다!
도움이 되셨다면 아래 '공감', '하트' 버튼을 눌러주세요!
'IT > Java' 카테고리의 다른 글
Java Spring Framework를 활용한 OpenAI Chat Completions 예제 (1) | 2025.03.26 |
---|---|
Jsoup에서 인증서 error 우회하는 방법 (1) | 2025.03.24 |
자바 Stream API를 활용한 데이터 처리 예제 (0) | 2025.03.09 |
JAVA Spring Boot에서 Quartz를 활용한 간편한 작업 스케줄링 (0) | 2025.03.03 |
JAVA GSON 소개 (1) | 2025.03.01 |