스프링 DB 접근 기술

inho ha·2022년 2월 12일
0

스프링 데이터 엑세스

  1. 순수 Jdbc
    20년전 방식
  2. 스프링 JdbcTemplate
    중복을 제거해서 sql을 편리하게 날릴 수 있음
  3. JPA
    sql도 직접 작성하지 않고 JPA가 쿼리를 날려줌
  4. 스프링 데이터 JPA
    JPA를 편리하게 쓸수 있도록 한번 감싼 기술

H2 db setting

위와 같이 JDBC URL 을 파일로 해 놓으면 어플리케이션과 웹 콘솔이 동시에 접근이 안되고 충돌이 날 수 있음

한번 생성한 이후 위와 같이 JDBC URL 을 수정하여 파일을 직접 접근 하는 것이 아닌 소켓을 통하여 접근하도록 하여 여러곳에서 접근 가능하도록 설정해야함

sql 관리

drop table if exists member CASCADE;
create table member
(
 id bigint generated by default as identity,
 name varchar(255),
 primary key (id)
);

테이블 생성할 때 사용한 sql은 sql/ddl.sql 이런 파일에 저장하여 같이 깃에 올리면 변경 내역 파악에 좋다.

순수 JDBC

  1. dependencydp 라이브러리 추가
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
runtimeOnly 'com.h2database:h2'

이후 gradle refresh 버튼 누르기

  1. src/main/resources/application.properties 에 DB 경로 추가
spring.datasource.url=jdbc:h2:tcp://localhost/~/test
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
  1. JDBC Repository 작성
    dataSource 생성
    sql string 으로 직접 작성
    try catch 로 예외처리 잘해줘야함
    사용한 자원 release 잘해줘야함
    spring framework 통해서 dataSource 사용할때는 DataSourceUtils 를 통해서 getConnection 해야 transaction 에 걸리지 않고 connection 이 유지가 됨

  2. SpringConfig 수정
    repository 메서드가 JdbpRepository 를 리턴하도록 수정(자바 코드로 직접 스프링 빈 추가해서 수정이 간단함)
    dataSource 도 @Autowired 로 추가

스프링이 좋은 이유

객체지향적인 설계로 다형성 활용 가능
인터페이스를 두고 구현체를 바꿔끼우기를 할 수 있음
특히 스프링은 스프링 컨테이너가 이를 지원해줘서 편리하게 가능
di
원래는 repository 뿐만 아니라 의존성이 있는 service 모두 수정해야했는데 repository 리턴만 수정하면 됨

OCP : open-closed principle 개방 폐쇄 원칙, 확장에는 열려있고 수정에는 닫혀있다, 어플리케이션 전체를 변경할 필요 없이 추가되는 부분만 작성하면 됨
스프링의 DI을 사용

스프링 통합 테스트

스프링 컨테이너와 db까지 연결한 통합 테스트

기존의 테스트 코드에 @SpringBootTest, @Transactional 추가해주면 됨
데이터베이스는 기본적으로 데이터를 insert query 해준다음에 commit 해줘야 반영이 됨
보통은 auto query 임
@SpringBootTest : 스프링을 실행하여 테스트를 진행함
@Transactional 을 테스트 케이스에 달면 테스트 실행전 transaction을 실행하고 테스트가 끝나면 롤백을 해줘서 db에 테스트 내용이 반영이 안되고 다 지워져서 반복적인 테스트가 가능해짐 테스트 메서드 마다 동작함, 테스트 케이스가 아닌 다른 코드에 달면 정상적으로 동작함

스프링 없이 순수한 단위 테스트가 더 좋은 테스트일 확률이 높음
더 빠르고 독립적임

테스트 잘 작성하는 것이 중요함
항상 테스트 코드 잘 짜려고 고민 해야함
현업에서 개발 비율이 60%는 테스트 코드 작성
그만큼 테스트 코드 작성이 중요함

스프링 JdbpTemplate

JDBC API 에서 반복 코드를 대부분 제거해줌
sql은 직접 작성해야함

생성자가 하나만 있을때는 @Autowired 생략 가능

디자인 패턴중 template method patern 이 많이 사용되어 jdbcTemplate임

IntelliJ 단축키

option + enter : implements 한 뒤 단축키 사용시 멤버 변수 메서드들 implements 가능

profile
iha / ian / inho ha

0개의 댓글