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);
'Languages' 카테고리의 다른 글
Flutter를 시작하기 전에 Flutter에 대해서 알아보기 (0) | 2023.04.07 |
---|---|
Android에서 HTTP URL 허용 설정 (0) | 2023.04.04 |
spring boot에서 외부 static path 사용하기 (0) | 2023.04.04 |
spring boot과 JPA 에서 InvalidDataAccessApiUsageException 에러 해결하기 (0) | 2023.04.04 |
spring boot 실행하는 방법과 외부 properties 설정 파일 읽기 (0) | 2023.04.04 |