이번 강의에서는 Spring JDBC에서 Spring Data JPA로 마이그레이션한 애플리케이션의 동작을 데모로 확인합니다. Spring Data JPA가 어떻게 SQL 쿼리를 자동으로 생성하고, CRUD 작업을 처리하는지, 그리고 이를 확인하기 위한 방법들을 설명합니다.
우리가 직접 SQL 문을 작성하지 않았지만, Spring Data JPA가 자동으로 SQL 쿼리를 생성해줍니다. 이를 확인하기 위해 application.properties 파일에 두 가지 설정을 추가합니다:
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
select * from holidays;
Contact 페이지에서 새 메시지를 제출하는 경우를 테스트합니다.
save() 메서드를 사용하여 데이터를 데이터베이스에 저장합니다.insert into contact_msg (name, mobile_num, email, subject, message, status, created_at, created_by)
values (?, ?, ?, ?, ?, ?, ?, ?);
findByStatus("OPEN") 메서드가 호출되며, 자동으로 WHERE 조건을 가진 SELECT 쿼리가 생성됩니다:select * from contact_msg where status = ?;
select * from contact_msg where contact_id = ?;
update contact_msg set status = ?, updated_by = ?, updated_at = ? where contact_id = ?;
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
@Repository
public interface ContactRepository extends CrudRepository<Contact, Integer> {
List<Contact> findByStatus(String status);
}
@Service
public class ContactService {
@Autowired
private ContactRepository contactRepository;
public List<Contact> findOpenMessages() {
return contactRepository.findByStatus("OPEN");
}
public boolean saveMessageDetails(Contact contact) {
Contact savedContact = contactRepository.save(contact);
return savedContact != null && savedContact.getContactId() > 0;
}
public boolean updateMessageStatus(int contactId, String status) {
Optional<Contact> contact = contactRepository.findById(contactId);
contact.ifPresent(c -> {
c.setStatus(status);
c.setUpdatedBy("admin");
c.setUpdatedAt(LocalDateTime.now());
contactRepository.save(c);
});
return contact.isPresent();
}
}
이번 강의에서는 Spring Data JPA로 마이그레이션한 애플리케이션을 테스트하고, SQL 쿼리 자동 생성 및 CRUD 작업이 어떻게 수행되는지를 확인했습니다. Spring Data JPA는 SQL을 직접 작성하지 않고도 데이터베이스 작업을 수행할 수 있게 하여 개발자의 생산성을 크게 향상시킵니다.