JPA
- JAVA 진영에서 ORM(Object-Relational Mapping) 기술 표준으로 사용되는 인터페이스이며, 실제적으로 구현된 것이 아니라 구현된 클래스와 매핑을 해주기 위해 사용되는 프레임워크. 구현은 여러 업체들이 하는 것이라고 보면 됨
대표적인 오픈소스로는 Hibernate가 있음. - 기존의 반복 코드는 물론이고, 기본적인 SQL도 JPA가 직접 만들어서 실행해줌
- SQL과 데이터 중심의 설계에서 객체 중심의 설계에서 객체 중심의 설계로 패러다임을 전환할 수 있음
- 개발 생산성을 크게 높일 수 있음
ORM(Ojbect-Relational Mapping)
- 우리가 일반적으로 알고 있는 애플리케이션 Class와 RDB(Relational Database)의 테이블을 매핑(연결)한다는 뜻이며, 기술적으로는 애플리케이션의 객체를 RDB 테이블에 자동으로 영속화 해주는 것이라고 보면 됨.
- SQL문이 아닌 메서드를 통해 DB를 조작할 수 있어, 개발자는 객체 모델을 이용하여 비즈니스 로직을 구성하는 데만 집중할 수 있음. (내부적으로는 쿼리를 생성하여 DB를 조작하지만, 개발자가 이를 신경쓰지 않아도 됨.)
- 프로젝트의 규모가 크고 복잡하여 설계가 잘못될 경우, 속도 저하 및 일관성을 무너뜨리는 문제점이 생길 수 있음.
스프링 부트에 JPA 설정 추가
spring.datasource.url=jdbc:h2:tcp://localhost/~/test
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
spring.jpa.show-sql=true //JPA가 생성하는 SQL을 출력
// JPA는 테이블을 자동으로 생성하는 기능을 제공하는데, none을 사용하면 해당 기능을 끔
// create를 사용하면 엔티티 정보를 바탕으로 테이블도 직접 생성해줌
spring.jpa.hibernate.ddl-auto=none
서비스 계층에 트랜잭션 추가
- org.springframework.transaction.annotation.Transactional 를 사용
- 스프링을 해당 클래스의 메서드를 실행할 때 트랜잭션을 시작하고, 메서드가 정상 종료되면 트랜잭션을 커밋함
- 만약 런타임 예외가 발생하면 롤백함
- JPA를 통한 모든 테이터 변경은 트랜잭션 안에서 실행해야 함
'Spring' 카테고리의 다른 글
Spring | Spring AOP(Aspect Oriented Programming) (0) | 2023.12.07 |
---|---|
Spring | 스프링 데이터 JPA (0) | 2023.12.07 |
Spring | 스프링 JdbcTemplate (0) | 2023.12.06 |
Spring | DataSource, @SpringBootTest, @Transactional (0) | 2023.12.06 |
Spring | 스프링 빈과 의존관계 (0) | 2023.12.05 |