[무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의
스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., - 강의 소개 | 인프런
www.inflearn.com
<김영한의 스프링 입문강의 참조>
0. index
- H2 DB 설치
- 순수 JDBC
- 스프링 통합 테스트
- 스프링 JdbcTemplate
- JPA
- 스프링 데이터 JPA
1. H2 DB
교육용, 개발 및 테스트 용도로 쓰이는 가볍고 편리한 DB이다. 웹 화면을 제공한다.
설치 후 웹 화면에서 접속할 JDBC URL은 jdbc:h2:tcp://localhost/~/test 으로 대체.
테이블 만들 때 id bigint generated by default as identity에서, generated by default as identity가 유용하게 쓰인다. 테이블에 insert될 때 id값이 주어지지 않으면 기존에 존재하는 id의 다음 순서로 id가 할당되어 나온다.
2. 순수 Jdbc
데이터베이스 이론 책에서 봤던 jdbc와 동일한 구성이다. 커넥션을 가져오고 원하는 쿼리를 매번 DB에 날려줘야 한다. 실무 입장에선 더할나위없이 비효율적인 과정이다.
스프링이 좋은점은 DB연동시에도 스프링 컨테이너를 통해 다형성을 유지해준다는 점이다. 객체지향적 구현이 굉장히 편리해서 좋다. DI도 편리해서 스프링이 좋다.
- 개방-폐쇄 원칙 (OCP, Open-Closed Principle)을 지킨다.
- 확장에는 열려있고, 수정, 변경에는 닫혀있다. 기능에 변화를 주고 싶을 때 가장 하위 단계의 구현 소스코드 변화 없이 변화를 줄 수 있는 장점이 있다.
- 스프링의 DI를 사용하여 기존 코드를 전혀 손대지 않고, 설정만으로 구현 클래스를 변경할 수 있었다.
3. 스프링 통합 테스트 - 순수 Jdbc를 이용해 구현한 거 테스트
테스트 클래스에 @Transactional이라는 키워드를 붙이면,
테스트 실행하면 트랜잭션을 실행하고, 테스트 종료 후 원상태로 rollback하는 기능을 보여준다. -> 동일환경에서 여러 테스트를 진행할 수 있다. 이를 사용하면 DB에 데이터가 남지 않아 다음 테스트에 영향을 주지 않는다.
내부 메소드에 @Commit 주석을 사용하면 DB에 데이터가 남긴 한다.
사실 순수한 단위 테스트가 더 좋은 테스트일 확률이 높다. 컨테이너에 올려서 테스트하는 통합 테스트를 할 수 밖에 없는 테스트는 잘못 설계된 테스트일 가능성이 높다.
4. 스프링 JdbcTemplate
JDBC API에서 사용했던 반복적인 코드를 줄여줬다. 편리하게 사용 가능하다. 물론 SQL코드는 직접 입력해야 한다.
5. JPA
JPA는 인터페이스다.
JPA는 SQL Query까지 자동으로 처리해준다. 또한, 단순히 SQL/데이터 중심 설계에서 객체 중심의 설계로 패러다임을 전환할 수 있다.
이를 통해 개발 생산성을 크게 높일 수 있다.
ORM
Obeject - Relational - Mapping (객체 - 관계 - 매핑)
객체와 관계형 데이터베이스를 매핑(연결)해주는 도구이다.
domain 폴더의 Member 클래스로 가보자. 이들은 릴레이션을 구성하는 개체(Entity)에 대한 명세라고 할 수 있다.
따라서 각 데이터 타입에 어노테이션을 사용해 pk를 지정하거나 여러 attribute를 임의로 지정할 수 있다. 이를 DB와 Entity를 매핑한다고 한다.
이후 JpaMemberRepository를 만들고, 이는 MemberRepository의 인터페이스를 기반으로 만든다.
JPA를 사용하려면 여기에 EntityManager라는 것을 선언을 해야 한다. 이는 구동 시 스프링이 관리하게 되므로, 구현 이후 다른 파일에서 의존성주입을 받으면 된다.
인라인 리팩터링 단축키(Windows) : Ctrl + Alt + N
createQuery의 파라미터로 qlString이 있는데, 여기 select m from Member m 에서 select m 은 일반적 sql과 달리 저렇게 써도 알아서 잘 매핑해준다. 사용할 클래스는 엔티티 명세가 적힌 클래스를 써준다.
변수 추출 단축키(Windows) : Ctrl + Alt + V
메소드 구현시, pk 기반이 아닌 메소드들은 jpql을 작성해주어야 한다.
JPA 구현 시 항상 Transaction을 사용해주어야 한다. 데이터 저장/변경 시 트랜잭션을 항상 사용해주어야 하므로
MemberService 클래스 자체에 @Transactional을 붙여주거나 데이터 저장/변경이 발생하는 메소드에만 붙여줘도 된다.
'프레임워크 > Spring' 카테고리의 다른 글
[Spring] 스프링 입문강의[7] - 회원 관리 예제_웹 MVC 개발 (0) | 2023.06.03 |
---|---|
[Spring] 스프링 입문강의[6] - 회원 관리 예제_백엔드 개발 / 스프링 빈과 의존관계 설정 (0) | 2023.05.29 |
[Spring] 스프링 입문강의[5] - spring 웹 개발 기초 및 MVC (0) | 2023.05.12 |
[Spring] 스프링 입문강의[4] - 템플릿 엔진 동작환경, 빌드 및 실행 (0) | 2023.05.11 |
[Spring] 스프링 입문강의 [3] - 공식 참조 사이트 (0) | 2023.05.10 |