Spring JPA로 프로젝트를 진행하면서 여러 자료를 참고하면서 기능을 만들고 있었지만, 어떤 흐름으로 기능이 동작하는지 확실히 알아두고 싶어서 간단하게 정리해보기로 한다.
Spring Data JPA란?
Spring Data JPA는 Spring 프레임워크에서 Java Persistence API (JPA)를 지원하는 기술이다. JPA는 자바 개발자들이 관계형 데이터베이스를 사용하는 애플리케이션을 개발하기 위한 표준 스펙이며, Spring Data JPA는 이를 더 편리하게 사용할 수 있도록 Spring의 기능과 통합한 것이다.
Spring Data JPA의 구조
엔티티 클래스(Entity Class)
JPA는 객체와 데이터베이스 간의 매핑을 위해 엔티티 클래스를 사용한다.
엔티티 클래스는 데이터베이스의 테이블과 매핑되는 필드와 관계를 가지고 있다.
Repository 인터페이스
Spring Data JPA에서는 개발자가 데이터베이스에 접근하기 위한 인터페이스를 작성한다.
이 인터페이스는 JpaRepository를 상속하며, 기본적인 CRUD(Create, Read, Update, Delete) 작업을 위한 메서드들을 상속받아 사용할 수 있다.
Repository 구현체
Repository 인터페이스를 상속하여 생성되는 클래스이다.
Repository 인터페이스는 데이터베이스와 상호작용하기 위한 메서드를 정의하는 역할을 하며, 구현체는 이러한 메서드들을 실제로 실행하는 기능을 제공한다.
서비스(Service) 레이어
Repository 인터페이스를 이용하여 데이터베이스에 접근하는 로직을 서비스 레이어에 구현한다.
서비스는 비즈니스 로직을 처리하고, Repository를 호출하여 데이터베이스와 상호작용한다.
컨트롤러(Controller)
사용자의 요청을 받고, 서비스 레이어를 호출하여 결과를 반환한다.
HTTP 요청을 처리하기 위한 API 엔드포인트를 정의하고, 요청 파라미터와 결과를 매핑한다.
의존성 주입(Dependency Injection)
Spring 프레임워크에서는 의존성 주입(Dependency Injection)을 통해 컴포넌트 간의 관계를 관리한다.
Repository, 서비스, 컨트롤러 등의 빈(Bean)을 정의하고, 필요한 객체들을 주입받아 사용한다.
트랜잭션 관리
@Transactional 어노테이션을 사용하여 트랜잭션 범위를 설정할 수 있다.
메서드 레벨 또는 클래스 레벨에서 @Transactional 어노테이션을 사용하여 트랜잭션 경계를 정의한다.
트랜잭션 범위 내에서 데이터베이스 작업을 수행하고, 예외가 발생하면 롤백하고 성공적으로 완료되면 커밋한다.
실행 흐름
- 클라이언트가 컨트롤러를 통해 요청을 보낸다.
- 컨트롤러는 해당 요청을 처리하기 위해 서비스 레이어를 호출한다.
- 서비스 레이어에서는 필요한 비즈니스 로직을 처리하고, Repository를 호출하여 데이터베이스 작업을 수행한다.
- Repository는 JPA를 사용하여 데이터베이스와 상호작용하고, 엔티티를 관리한다.
- 데이터베이스 작업이 완료되면 결과를 서비스 레이어로 반환한다.
- 서비스 레이어는 결과를 컨트롤러로 반환하고, 컨트롤러는 클라이언트에게 응답을 보낸다.
'Study > spring' 카테고리의 다른 글
[Spring Boot] 스프링부트 이미지 외부경로 설정하기 (0) | 2023.07.12 |
---|---|
[Spring] No identifier specified for entity 에러 (0) | 2023.06.27 |
[JPA] Error: 1364: Field 'id' doesn't have a default value 오류 해결 (0) | 2023.06.20 |
스프링 핵심 원리 강의 정리 1 - 객체지향 (0) | 2022.12.23 |
[SpringBoot] 스프링부트 프로젝트 만들기 (0) | 2022.11.29 |