[스프링 입문] 스프링 DB 접근 기술

지현·2021년 11월 1일
0

스프링

목록 보기
5/32

H2 데이터베이스 설치

H2 설치
개발이나 테스트 용도로 가볍고 편리한 DB, 웹 화면 제공

  • 실행: h2\bin\h2.bat (윈도우 기준)
  • 데이터베이스 파일 생성 방법
    • jdbc:h2:~/test (최초 한번)
    • ~/test.mv.db 파일 생성 확인
    • 이후부터는 jdbc:h2:tcp://localhost/~/test 이렇게 접속
      • 파일을 직접 접근하는 것이 아닌 소켓을 통해 접근 -> 여러군데서 접근 가능
  • 테이블 생성
drop table if exists member CASCADE;
create table member
(
 id bigint generated by default as identity,
 name varchar(255),
 primary key (id)
);
  • 테이블 관리를 위해 프로젝트 루트에 sql/ddl.sql 파일을 생성해서 관리

SpringConfig.java

@Configuration
public class SpringConfig {

    private DataSource dataSource;

    @Autowired
    public SpringConfig(DataSource dataSource) {
        this.dataSource=dataSource;
    }

    @Bean
    public MemberService memberService(){
        return new MemberService(memberRepository());
    }

    @Bean
    public MemberRepository memberRepository(){
       // return new MemoryMemberRepository();
        return new JdbcMemberRepository(dataSource);
    }
}
  • 개방-폐쇄 원칙(OCP, Open-Closed Principle)
    확장에는 열려있고, 수정, 변경에는 닫혀있다.
  • 스프링의 DI (Dependencies Injection)을 사용하면 기존 코드를 전혀 손대지 않고, 설정만으로 구현 클래스를 변경 가능
    조립하는 코드만 변경하면 실제 애플리케이션에 관련된 코드들은 변경하지 않아도 됨
  • 데이터를 DB에 저장하므로 스프링 서버를 다시 실행해도 데이터가 안전하게 저장됨

스프링 통합 테스트

package hello.hellospring.service;

...

@SpringBootTest //스프링이 테스트할때 사용
@Transactional //테스트 실행 전 트랜잭션을 걸고 DB에 쿼리를 다 날림(롤백됨) -> 한번의 테스트 끝나고 DB를 비울 필요 없음 -> 반복해서 실행 가능
class MemberServiceIntegrationTest {

    @Autowired MemberService memberService;
    @Autowired MemberRepository memberRepository;
...
  • @SpringBootTest 스프링 컨테이너와 테스트를 함께 실행
  • @Transactional 테스트 케이스에 이 애노테이션이 있으면, 테스트 시작 전에 트랜잭션을 시작하고, 테스트 완료 후에 항상 롤백함 > DB에 반영이 X
    이렇게 하면 DB에 데이터가 남지 않으므로 다음 테스트에 영향을 주지 않음

  • 단위 테스트 순수하게 자바 코드로 하면서 최소한의 단위로 하는것
  • 통합 테스트 스프링 컨테이너, 디비까지 연동 하는것
  • 단위테스트가 더 좋은 테스트일 확률이 높음

스프링 JdbcTemplate

  • 순수 Jdbc와 동일한 환경설정
  • 스프링 JdbcTemplate과 MyBatis 같은 라이브러리는 JDBC API에서 본 반복 코드를 대부분 제거해주지만 SQL은 직접 작성해야 함

JPA

  • JPA는 기존의 반복 코드는 물론이고, 기본적인 SQL도 JPA가 직접 만들어서 실행해줌
  • 개발 생산성을 높일 수 있음

스프링 데이터 JPA

  • 스프링 데이터 JPA는 JPA를 편리하게 사용하도록 도와주는 기술이기 때문에 JPA를 먼저 학습한 후에 스프링 데이터 JPA를 학습해야 함
  • 스프링 데이터 JPA를 사용하면 리포지토리에 구현 클래스 없이 인터페이스 만으로 개발을 완료할 수 있음
  • 반복 개발해온 기본 CRUD 기능도 스프링 데이터JPA가 모두 제공

스프링 데이터 JPA 제공 기능

  • 인터페이스를 통한 기본적인 CRUD
  • findByName() , findByEmail() 처럼 메서드 이름 만으로 조회 기능 제공
  • 페이징 기능 자동 제공


출처
[인프런] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

0개의 댓글