ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 인프런 스프링 입문 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
Designed by Tistory.