SpringBoot 입문(5) - DB 접근 기술 / 단위테스트 vs 통합테스트

김정욱·2021년 2월 9일
0
post-thumbnail

스프링 DB 접근 기술

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 사용!
profile
Developer & PhotoGrapher

0개의 댓글