Home 섹션6. 스프링DB 접근 기술
Post
Cancel

섹션6. 스프링DB 접근 기술

H2 데이터베이스

  • 용량이 낮고 가벼움 & 웹으로 DB를 보여줌 → 교육용으로 좋은 DB
  • 버전은 1.4.200
  • 실행 명령 : ./h2.sh
  • 실행하고 DB파일 생성시 파일이름.mv.db 파일이 생김

데이터베이스 접속 설정

  • build.gradle에 jdbc, h2 관련 라이브러리를 추가
1
2
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
runtimeOnly 'com.h2database:h2'
  • application.properties에 DB 접속정보 작성

    1
    2
    3
    
      spring.datasource.url=jdbc:h2:tcp://localhost/~/test
      spring.datasource.driver-class-name=org.h2.Driver
      spring.datasource.username=sa
    
    • 접속정보 작성 시 스프링 부트가 자동으로 DataSource를 생성

JdbcMemberRepository

  • MemoryMemberRepository처럼 MemberRepository를 상속받아 구현한 구현체 클래스
  • Jdbc를 이용해 데이터베이스에 저장하는 MemberRepository이다.
  • 접속정보 작성 시 생성된 DataSource를 주입받아 사용
  • 기본 구조
    1. sql문 작성
    2. Connection, PreparedStatement, ResultSet 변수 초기화
    3. 위 변수 사용 시 Exception이 많이 발생하므로 try/catch로 감싸놓는다
    4. try 안에서 Connection 연결, PreparedStatement로 sql 전송, ResultSet에 결과값 저장
    5. Connection 릴리즈 → 안할 시 Connection이 쌓여 대참사;;

JdbcTemplateMemberRepository

  • MemberRepository를 상속받아 구현한 구현체 클래스
  • DataSource를 이용해 JdbcTemplate를 생성해 사용한다
  • 간단하게 정리하면 위의 Jdbc 코드를 많이 줄인것

JPA 설정

  • build.gradle에 JPA 라이브러리 추가
1
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
  • application.properties에 JPA 설정 작성

    1
    2
    
      spring.jpa.show-sql=true
      spring.jpa.hibernate.ddl-auto=none
    
    • 작성 시 스프링 부트가 자동으로 EntityManager 자동 생성

JPA

  • Java ORM
  • JPA를 사용하면, SQL과 데이터 중심의 설계에서 객체 중심의 설계로 패러다임을 전환을 할 수 있고 개발 생산성을 크게 높일 수 있다.
  • JPA는 기존의 반복 코드는 물론이고, 기본적인 SQL도 JPA가 직접 만들어서 실행해준다.
  • JPA를 사용 시 @Entity 어노테이션 사용 → @Id 선언 필수
  • EntityManager 사용 → 영속성 컨텍스트를 관리해주는 매니저

스프링 데이터 JPA

  • JPA를 기반으로하는 프레임워크
  • 반복적으로 개발해오던 CRUD를 제공 → 반복작업이 줄어들고 그 시간을 핵심 비즈니스 로직을 개발하는데 집중할 수 있음
  • 인터페이스 구현만으로 80% 해결 가능 → 어메이징!!!
  • 다만 동적쿼리는 해결 x → 동적쿼리는 Querydsl 라이브러리 사용

SpringConfig

  • Spring Bean을 수동으로 등록할 때 사용했던 파일
  • 기존에 설정해 두었던 MemberRepository의 생성자를 다른 구현체로 변경
  • 이 파일만 변경하는 것으로 구현체 변경을 굉장히 쉽게 할 수 있음 → 스프링 DI의 장점

스프링 통합 테스트

  • 기존 테스트들은 스프링과 관련이 없는 자바 코드
  • 따라서 스프링 컨테이너 내의 스프링 빈 사용 x
  • @SpringBootTest, @Transactional를 사용

어노테이션

  • @SpringBootTest : 스프링 컨테이너와 테스트를 함께 실행한다.
  • @Transactional : 테스트 케이스에 이 어노테이션이 있으면, 테스트 시작 전에 트랜잭션을 시작하고, 테스트 완료 후에 항상 롤백한다. 이렇게 하면 DB에 데이터가 남지 않으므로 다음 테스트에 영향을 주지 않는다.
  • @Entity : JPA 사용 시 DB에 대응되는 값
  • @Id : JPA 사용 시 DB에서 PK로 사용할 값임을 선언해주는 것
  • @GeneratedValue : id 값을 어떻게 설정해줄지 정해주는 것, IDENTITY는 DB에서 자동생성
  • @Column : DB의 컬럼명을 설정해줄 수 있음.

  • 생성자가 하나라면 @Autowired 생략 가능
This post is licensed under CC BY 4.0 by the author.