이 강의에서는 Spring JDBC에서 Spring Data JPA로 Eazy School 웹 애플리케이션을 마이그레이션하는 과정을 설명합니다. 여기에서는 Contact와 Holidays 페이지와 관련된 비즈니스 로직을 Spring Data JPA로 전환하는 방법을 다루며, 이를 통해 더 효율적이고 유지보수가 쉬운 코드를 작성할 수 있습니다.
먼저, Spring Data JPA를 사용하기 위해 pom.xml 파일에 의존성을 추가해야 합니다. Spring Boot를 사용하고 있으므로, Spring Data JPA를 위한 스타터 의존성을 추가합니다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
Spring Data JPA에서는 엔티티 클래스를 데이터베이스 테이블과 매핑해야 합니다. 이를 위해 @Entity와 @Table 애너테이션을 사용하여 Java 객체와 데이터베이스 테이블 간의 관계를 설정합니다.
@Entity
@Table(name = "contact_msg")
public class Contact {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer contactId;
private String name;
private String mobileNum;
private String email;
private String subject;
private String message;
private String status;
// Getters and Setters
}
@Entity: 이 클래스가 데이터베이스 테이블과 매핑됨을 나타냅니다.@Table(name = "contact_msg"): 클래스 이름과 테이블 이름이 다를 경우 명시적으로 매핑.@Id 및 @GeneratedValue: contactId가 기본 키이며, 자동으로 생성되는 값임을 설정.BaseEntity 클래스에서 상속을 받는 경우, 해당 필드를 상속받은 모든 엔티티에서 사용하도록 설정해야 합니다.@MappedSuperclass
public class BaseEntity {
private LocalDateTime createdAt;
private String createdBy;
private LocalDateTime updatedAt;
private String updatedBy;
// Getters and Setters
}
@MappedSuperclass: 이 클래스를 상속받는 모든 엔티티에 해당 필드를 포함하도록 설정.@Entity
@Table(name = "holidays")
public class Holiday {
@Id
private String day;
@Enumerated(EnumType.STRING)
private HolidayType type;
// Getters and Setters
}
@Enumerated(EnumType.STRING): Enum 타입을 데이터베이스의 varchar 컬럼에 저장하기 위한 설정.Spring Data JPA의 핵심 기능을 사용하려면 CrudRepository 또는 JpaRepository 인터페이스를 확장하여 리포지토리를 생성합니다.
@Repository
public interface ContactRepository extends CrudRepository<Contact, Integer> {
}
@Repository
public interface HolidayRepository extends CrudRepository<Holiday, String> {
}
Spring Boot 애플리케이션에 Spring Data JPA가 적용되도록 설정합니다. @EnableJpaRepositories와 @EntityScan 애너테이션을 사용해 리포지토리와 엔티티 클래스를 스캔하도록 설정합니다.
@SpringBootApplication
@EnableJpaRepositories(basePackages = "com.easybytes.easyschool.repository")
@EntityScan(basePackages = "com.easybytes.easyschool.model")
public class EasySchoolApplication {
public static void main(String[] args) {
SpringApplication.run(EasySchoolApplication.class, args);
}
}
Spring Data JPA를 통해 비즈니스 로직에서 리포지토리를 사용하여 데이터베이스 작업을 수행합니다.
@Service
public class ContactService {
@Autowired
private ContactRepository contactRepository;
public void saveContact(Contact contact) {
contactRepository.save(contact);
}
}
@Service
public class HolidayService {
@Autowired
private HolidayRepository holidayRepository;
public Iterable<Holiday> getAllHolidays() {
return holidayRepository.findAll();
}
}
pom.xml 파일에 Spring Data JPA 스타터 의존성 추가.@Entity, @Table, @Id 등을 사용하여 모델 클래스와 데이터베이스 테이블을 매핑.CrudRepository를 확장한 리포지토리 인터페이스를 생성하여 기본 CRUD 작업을 처리.@EnableJpaRepositories와 @EntityScan을 사용해 리포지토리와 엔티티를 스캔.이 과정에서는 기존의 Spring JDBC 코드를 Spring Data JPA로 마이그레이션함으로써, 코드의 복잡성을 줄이고 유지보수성을 높이는 방법을 배웠습니다.