[스프링입문] 섹션6-1. 스프링 DB 접근 기술 - Jdbc, JdbcTemplate

2023. 1. 17. 16:23· Spring/스프링입문

순수 JDBC -> DB시간에 해봤던 과제 같다....

JDBC template: spring이 중복을 제거해 JDBC의 (편리하게 가능) 

JPA라는 기술이 쿼리를 다 날려주는. 

스프링 데이터 JPA (jpa를 편리하게 쓸수있게 감싼 기술)

 

 

h2 database 사용

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

자바에서는 Long 이지만 DB에서느 bigint 타입.

generated by default as identity -> 값세팅하지 않고 인서트하면 db가 자동으로 ID값을 채워줌.

 

 

 

implementation 'org.springframework.boot:spring-boot-starter-jdbc'
runtimeOnly 'com.h2database:h2'

build.gradle 파일에 jdbc, h2 데이터베이스 관련 라이브러리 추가
첫번째줄: build.gradle 파일에 추가. 자바에서 DB와 연동하려면 JDBC드라이버가 꼭 있어야함.

두번째줄: DB랑 붙을 때 DB가 제공하는 클라이언트가 필요. -> h2 database client.

 

spring.datasource.url=jdbc:h2:tcp://localhost/~/test
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa

스프링 부트 데이터베이스 연결 설정 추가(resources/application.properties)

 

 

@Configuration
public class SpringConfig {
   
   @Autowired DataSource dataSource;// 스프링이 데이터베이스와 연결할수있는 dataSource를 만들어줌.

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

   @Bean
   public MemberRepository memberRepository(){
      return new JdbcMemberRepository(dataSource);
   }
}

Datasource 주입 해줘야함. -> @Autowired 통해 연결해주면 스프링이 알아서 아까한 세팅을 통해 스프링 빈으로 등록해줌.

JdbcMemberRepository만 바꿔줌.

 

스프링을 왜쓰냐?? 객체지향설계가 왜좋냐?? 다형성을 이용했다. 스프링은 이것이 편하게 해주게 서비스를 제공해줌.

개방 폐쇄 원칙(OCP)

  • - 확장에는 열려있고, 수정에는 닫혀있다.

확장-> 기능추가   수정에(변경)는 닫혀있다???  기능을 완전히 변경해도 앱전체를 수정할 필요는 없음. 조립코드는 수정해야하지만 실제앱동작에 필요한 코드는 변경하지 않아도 됨.

 

DI(Dependency Injection)

  • 기존코드를 손대지 않고, 설정만으로 구현 클래스를 변경할 수 있다.

스프링 통합 테스트

스프링컨테이너 + DB 통합 테스트

 

전에 테스트한건 자바코드를 통해함.

근데 순수 자바코드로 테스트하는게 불가능 -> 스프링이 들고 있는게 많다.

스프링이랑 엮어서 테스트를 해보자.

DB까지 다 연결해서 테스트

 

@SpringBootTest
@Transactional

@SpringBootTest -> 스프링컨테이너와 테스트를 함께 실행

@Transactional -> 테스트 시작 전에 트랜잭선을 시작하고, 테스트 완료 후에 항상 롤백한다.

DB 에올라가면  roll back 시켜서 올라가지않는것을 이용. because DB의 transaction commit, rollback 때문에 가능.

 

그렇다면 순수한 자바 코드로 테스트하는것은 쓸모가 없나?? 

 

- 일단 시간차이만 해도 순수자바가 더 빠름.

-  순수한 단위테스트가 좋을 확률이 높음. 꼭그렇진 않지만. 

- 통합 테스트-> DB,스프링 다연동.


JDBC Template

- Jdbc template 메뉴얼 참고

 

- JDBC APT에서 본 반복 코드를 대부분 제거해준다. 그러나 sql은 직접 작성해야한다.

'Spring > 스프링입문' 카테고리의 다른 글

[스프링입문] 섹션7. AOP  (0) 2023.01.17
[스프링입문] 섹션6-2. JPA, 스프링데이터 JPA  (0) 2023.01.17
[스프링입문] 섹션5. 회원관리 예제 - 웹MVC개발  (0) 2023.01.17
[스프링입문] 섹션4. 스프링 빈과 의존관계  (2) 2023.01.16
[스프링입문] 섹션3.회원 관리 예제 - 웹MVC개발  (0) 2023.01.16
'Spring/스프링입문' 카테고리의 다른 글
  • [스프링입문] 섹션7. AOP
  • [스프링입문] 섹션6-2. JPA, 스프링데이터 JPA
  • [스프링입문] 섹션5. 회원관리 예제 - 웹MVC개발
  • [스프링입문] 섹션4. 스프링 빈과 의존관계
LTSGOD
LTSGOD
LTSGOD
TS's log
LTSGOD
전체
오늘
어제
  • 분류 전체보기 (138)
    • 언어 공부 (18)
      • C++ (6)
      • Python (12)
    • AI (39)
      • Numpy (2)
      • Pandas (5)
      • Pytorch (11)
      • Deep Learning (9)
      • CV (11)
      • 과제에서 얻은 것 (1)
    • 수학 (17)
      • 확률론 (8)
      • AI Math (9)
    • Spring (24)
      • 스프링입문 (8)
      • 스프링 원리 - 기본편 (5)
      • 스프링부트와 AWS로 혼자구현하는 웹 서비스 (10)
      • JPA (1)
      • spring MVC (0)
    • CS 기본 (25)
      • 네트워크 (5)
      • OS (4)
      • 자료구조 (9)
      • DB (7)
    • Git (2)
    • 백준 (1)
    • 활동 (8)
      • 2023 겨울 (1)
      • 네이버 부스트캠프 AI Tech (7)
    • HTML,CSS (2)
    • 도커 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • AI Tech 5기
  • Camper
  • 5기
  • AI
  • 붓캠
  • 백준
  • AWS
  • pytorch
  • 부스트캠프
  • 후기
  • BOOSTCAMP
  • 회고

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.1
LTSGOD
[스프링입문] 섹션6-1. 스프링 DB 접근 기술 - Jdbc, JdbcTemplate
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.