순수 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 |