-
인프런 스프링 입문 08 / 스프링 DB 접근, H2, JDBC스프링&스프링부트 2022. 12. 6. 22:13
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
스프링 DB 접근 기술
H2 데이터베이스 설치
- https://www.h2database.com/html/download-archive.html
- 1.4.200 버전 platfrom-dindependent 다운로드
- 압축 해제 후 h2.bat 실행
- 최초 접속(연결) 후 JDBC URL 변경 후 다시 연결
> jdbc:h2:tcp://localhost/~/test
- cmd창에서 파일 확인하기 dir + 파일이름
dir test.mv.db
C:\Users\USER>dir test.mv.db
C 드라이브의 볼륨: Windows10
볼륨 일련 번호: 98DC-2E82
C:\Users\USER 디렉터리
2022-12-06 오후 03:31 24,576 test.mv.db
1개 파일 24,576 바이트
0개 디렉터리 134,485,274,624 바이트 남음- member table 생성
- member table에 'spring' insert, select로 조회
- insert into member(name) values ('spring');에서 insert into member(name) values ("spring"); 했더니 계속 오류, 조심!
순수 JDBC
- 개방-폐쇄 원칙(OCP, Open-Closed Principle) 확장에는 열려있고, 수정(변경)에는 닫혀있다.
- 스프링의 DI (Dependencies Injection)을 사용하면 기존 코드를 전혀 손대지 않고, 설정만으로 구현 클래스를 변경할 수 있다.
- 회원을 등록하고 DB에 결과가 잘 입력되는지 확인
- 데이터를 DB에 저장하므로 스프링 서버를 다시 실행해도 데이터가 안전하게 저장된다.
이번 수업이 조금 충격적이었던 이유 ?
강사님이 이제는 사용하지 않는다, 20년 전에 이렇게 했다 이런 말로 시작해서 뭐 얼마나 복잡하지? 싶었는데
몇 달 전 국비 교육으로 배운 내용이었다... 그때 배울 때 옛날 기술이다 이런 말은 못 들었던 것 같은데...
국비 교육이 옛날 기술을 사용하는 건 알고 있었지만 이번 강의는 조금 충격...
스프링 통합 테스트
@SpringBootTest @Transactional class MemberServiceIntegrationTest { @Autowired MemberService memberService; @Autowired MemberRepository memberRepository; @Test public void 회원가입() throws Exception { //Given Member member = new Member(); member.setName("hello"); //When Long saveId = memberService.join(member); //Then Member findMember = memberRepository.findById(saveId).get(); assertEquals(member.getName(), findMember.getName()); } @Test public void 중복_회원_예외() throws Exception { //Given Member member1 = new Member(); member1.setName("spring"); Member member2 = new Member(); member2.setName("spring"); //When memberService.join(member1); IllegalStateException e = assertThrows(IllegalStateException.class, () -> memberService.join(member2)); //예외가 발생해야 한다. assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다."); } }
- @SpringBootTest : 스프링 컨테이너와 테스트를 함께 실행한다.
- @Transactional : 테스트 케이스에 이 애노테이션이 있으면, 테스트 시작 전에 트랜잭션을 시작하고, 테스트 완료 후에 항상 롤백한다. 이렇게 하면 DB에 데이터가 남지 않으므로 다음 테스트에 영향을 주지 않는다
728x90'스프링&스프링부트' 카테고리의 다른 글
인프런 스프링 입문 10 / JPA, 스프링 데이터 JPA (0) 2022.12.15 인프런 스프링 입문 09 / 스프링 JDBCTemplate (0) 2022.12.14 인프런 스프링 입문 07 / 회원관리 예제 (0) 2022.12.06 인프런 스프링 입문 06 / 스프링 빈 등록 2 가지 (0) 2022.12.04 인프런 스프링 입문 05 / 회원 관리 예제, junit 테스트하는 방법 (0) 2022.12.04