본문 바로가기
IT/Java

스프링 부트와 하이버네이트 JPA 기본 사용법

by bamcong 2025. 3. 19.
728x90
반응형

안녕하세요. 오늘은 스프링 부트(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를 사용하면 데이터베이스와의 상호작용이 매우 간편해져, 생산성이 대폭 향상됩니다. 다음 포스팅에서는 좀 더 고급 기능에 대해 다뤄 보겠습니다!

도움이 되셨다면 아래 '공감', '하트' 버튼을 눌러주세요!

728x90
반응형