1) H2 데이터베이스 설치 (개발용)
: 개발 or 테스트용 가벼운 DB
2) 순수 Jdbc
: 가장 옛날 방식으로서 DB연결할 때 마다 커넥션을 생성하고
Statement나 PreStatement를 생성하는 모든 과정을 해야함
따라서, 현재에는 거의 사용하지 않는 방법이다.
3) 스프링 JdbcTemplate
: Jdbc Template이나 Mybatis같은 라이브러리들은 순수 Jdbc방식에서 중복되는 많은 코드들을 최소화 하고 보다 편리하게 사용하기 위한 것이다.
(현재에도 JPA를 사용하지 않으면 사용하는 방법)
- 커넥션 등 중복을 최소화해서 많이 간결해졌다
- SQL문을 작성해야 한다
4) JPA
- 기존의 반복코드 / 기본적인 SQL문도 JPA가 만들어서 실행
- SQL과 데이터 중심의 설계 --> 객체 중심 설계로 패러다임을
전환할 수 있음- 개발 생산성을 크게 향상
- 하지만, Primary Key기반이 아닌 쿼리는
JPQL
이라는 객체지향 쿼리를 사용해야 함 (결국 쿼리를 사용하긴 함!)[ 사용하기 ]
1. buld.gradle에 추가
spring-boot-starter-data-jpq
내부에 jdbc 관련 라이브러리를 포함해서 jdbc의존성은 없어도 된다!
2. application.properties에 추가
show-sql
: JPA가 생성하는 SQL을 출력한다.ddl-auto
: JPA는 테이블을 자동으로 생성하는 기능을 제공하는데,none
을 사용하면 해당 기능을 끈다
(create
를 사용하면 Entity 정보를 바탕으로 테이블 생성)
3. Domain 파일 생성
@GeneratedValue(strategy = GenerationType.IDENTITY)
: 특정 속성의 값을 자동 증가 할 수 있게 해주는 전략!
4. Repository 생성
- JPA는
EntityManager
을 통해서 관리 (내부에 커넥션 정보 등 존재!)- Repository에서 실제 DB에 접근하는 실제 함수를 작성하기 위해서
내부에JPQL
이라는 객체 지향 쿼리를 사용 (PK기반이 아닐 때!)
5. Service에 @Transaction 추가 & 사용
- 실제 DB에 접근하는 Repository를 사용하는 Service에서는
@Transaction
어노테이션을 추가해야 한다 (반드시!)- 모든 DB관련 작업은 Transaction단위로 수행되며 정상 종료되면 커밋하며, 예외 발생시 롤백해야 한다
* JPA를 활용한 모든 데이터 변경은 트랜잭션 안에서 실행해야한다!!!
5) 스프링 데이터 JPA
- JPA에서 반복적으로 사용하는 CRUD 기능을 모두 제공하는 기술
findByName()
/findByEmail()
처럼 특성 속성에 의한 조회도 가능!- 페이징 기능도 자동 제공
- 개발자는 핵심 비즈니스 로직을 개발하는데 집중할 수 있음
- JPA를 편리하게 사용하는 방법 일 뿐
--> 결국 JPA를 학습한 후 배워야 함!!- 현재 실무에서 JPA를 쓴다면 스프링 데이터 JPA는 필수!
- 복잡한 동적 쿼리는
Querydsl
라이브러리를 이용!
- 실제 스프링 컨테이너를 실행시키지 않고, 코드의 로직만 수행하며 DB와 연동해서 점검하는 테스트
- 가장 작은 단위의 테스트 / 실제 컨테이너 실행 X
- 통합 테스트보다 빠르다
- 단위 테스트를 잘 하는 것이 매우 중요함!
- 실제 스프링 컨테이너와 테스트를 함께 실행해서 진행하는 테스트
- 실제 컨테이너를 실행시켜서 단위테스트보다 느리다!
- 통합 테스트를 위해서는 반드시
@SpringBootTest
사용!- 테스트 완료 후 DB 자동 롤백을 위해
@Transactional
사용!