SpringBoot_웹 MVC, DB 접근 기술 4
:: 웹 MVC 개발
- 컨트롤러가 정적컨텐츠파일보다 우선순위가 높다.
- 모델이 데이터 담을 때에는 addAttribute() 사용
- Model addAttribute(String name, Object value)
${aaa}
: aaa 안의 값을 꺼내는 것
th:each
: loop 돌기
:: DB 접근 기술
:: h2 DataBase
h2 설치
- 권한주기 (맥만) : chmod 755 h2.sh
- DB 파일 생성 : jdbc:h2:~/test
~/test.mv.db 파일 생성되었는지 확인
윈도우 기준 C드라이브 -> 사용자 -> 사용자 이름
- 생성되었다면 후부턴 jdbc:h2:tcp://localhost/~/test 로 접속
- JDBC API로 직접 코딩 하는 것은 오래 전 이야기이다.
- 그러므로 정신건강을 위해 편하게 보고 필요할 때 찾아서 보기
JDBC 만든 후 변화
- 개방-폐쇄 원칙(OCP, Open-Closed Principle)
- 확장에는 열려있고, 수정, 변경에는 닫혀있다.
- SpringConfig 파일에서 MemoryMemberRepository에서 JdbcMemberRepository로 수정만 하면 다른 파일 수정 없음
- 이처럼 스프링 DI 사용하면 기존 코드를 전혀 손대지 않고, 설정만으로 구현 클래스 변경 가능
:: 스프링 통합 테스트
Code
- 스프링 컨테이너와 db까지 연결한 통합 테스트
- h2에서 저장된 db를
delete from member
으로 지우고 시작
- @Transactional 없이 진행시 db에 그대로 저장이 되어있음
@SpringBootTest
: 스프링 컨테이너와 테스트를 함께 실행
@Transactional
- 테스트 시작 전에 트랜잭션을 시작하고, 테스트 완료 후에 항상 롤백
- DB에 데이터가 남지 않으므로 다음 테스트에 영향 X
- 단위 테스트 : 자바코드로 하는 테스트
- 통합 테스트 : 스프링 컨테이너까지 올려서 하는 테스트
:: @Transactional
- test시 db에 데이터 다 넣고, test가 끝나면 db를 모두 롤백시킴 (반영하지 않음)
:: 스프링 jdbcTemplate
Code
- 순수 jdbc와 동일한 환경설정
- JDBC API에서 본 반복 코드를 제거
- 하지만 sql 직접 작성
- test코드는 중요하다.