본문 바로가기
Languages

Spring Boot과 JPA에 대해서 알아 봅니다.

by lucidiz 2023. 4. 4.
반응형

 

Spring Boot
Spring Boot

Spring Boot에서 JPA는 자바 ORM 기술의 표준 스펙인 JPA(Java Persistence API)를 사용하여 데이터베이스에 접근하는 방법입니다. JPA를 사용하면 데이터베이스와의 상호작용을 추상화할 수 있으며, 데이터베이스의 변경 사항에 대응하는 코드 변경을 최소화할 수 있습니다. JPA는 개발자가 객체지향적인 방식으로 데이터베이스를 다룰 수 있도록 도와주며, SQL 쿼리를 직접 작성하지 않아도 데이터베이스 연동이 가능합니다.

 

Spring Boot에서 JPA를 사용하려면, 다음과 같은 단계를 따릅니다.

1. pom.xml 파일에 JPA 관련 라이브러리를 추가합니다.

  • spring-boot-starter-data-jpa 라이브러리를 추가해줍니다.

2. application.properties 파일에 데이터베이스 연결 정보를 설정합니다.

  • 'application.properties' 파일에 데이터베이스 연결 정보를 설정합니다.
  • 'spring.datasource.*' 속성을 통해 데이터베이스 연결 정보를 설정합니다.

3. 엔티티 클래스를 작성합니다.

  • JPA 엔티티 클래스는 @Entity 어노테이션을 사용하여 정의합니다.
  • 각 엔티티 클래스의 필드는 데이터베이스의 컬럼과 매핑됩니다.

4. @Repository 어노테이션을 사용하여 레포지토리 인터페이스를 선언합니다.

  • JpaRepository 인터페이스는 JPA에서 제공하는 CRUD(Create, Read, Update, Delete) 메서드를 정의합니다.
  • JpaRepository 인터페이스는 @Repository 어노테이션을 사용하여 정의합니다.

5. 레포지토리 인터페이스를 구현하는 클래스를 작성합니다.

  • 서비스 계층에서 JpaRepository 인터페이스를 사용하여 데이터베이스와 상호작용합니다.

6. 컨트롤러에서 레포지토리를 주입받아 사용합니다.

 

 

예를 들어, 다음과 같은 엔티티 클래스가 있다고 가정해보겠습니다.

 

@Entity
@Table(name = "users")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "name")
    private String name;

    @Column(name = "email")
    private String email;

    // Getter, Setter, Constructor 생략
}

위 엔티티 클래스는 users 테이블과 매핑되며, id, name, email 필드를 가지고 있습니다. 이제 이 엔티티 클래스를 사용하는 레포지토리 인터페이스를 선언해보겠습니다.

 

@Repository
public interface UserRepository extends JpaRepository<User, Long> {

}

 

위 코드에서 @Repository 어노테이션을 사용하여 레포지토리 인터페이스를 선언하였고, JpaRepository를 상속받았습니다. JpaRepository는 Spring Data JPA에서 제공하는 인터페이스로, 데이터베이스에 접근하는데 필요한 CRUD(Create, Read, Update, Delete) 기능을 제공합니다.

이제 레포지토리를 구현하는 클래스를 작성해보겠습니다.

 

@Service
public class UserService {

    private UserRepository userRepository;

    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    public User getUserById(Long id) {
        return userRepository.findById(id).orElse(null);
    }

    public List<User> getAllUsers() {
        return userRepository.findAll();
    }

    public User saveUser(User user) {
        return userRepository.save(user);
    }

    public void deleteUser(Long id) {
        userRepository.deleteById(id);
    }
}

 

위 코드에서 UserRepository를 주입받아 사용합니다. getUserById, getAllUsers, saveUser, deleteUser에서 주입받아 사용합니다.

 

이제 컨트롤러에서 레포지토리를 주입받아 사용해 보겠습니다.

 

스프링 프레임워크에서는 @Autowired 어노테이션을 사용하여 의존성 주입을 수행합니다. 레포지토리 인터페이스를 컨트롤러에 주입받습니다.

 

@RestController
public class UserController {
    @Autowired
    private UserRepository userRepository;

    @GetMapping("/users/{username}")
    public User getUser(@PathVariable String username) {
        return userRepository.findByUsername(username);
    }
}

 

컨트롤러에서 주입받은 레포지토리를 사용하여 데이터베이스와 상호작용합니다.

 

userRepository.findByUsername(username);

 

반응형