강의를 들으며 생각 정리 + "자바 ORM 표준 JPA 프로그래밍" 책 참고
프로젝트 생성
스프링 부트 스타터(https://start.spring.io/) 에서 프로젝트를 생성한다.
dependencies : web, jpa, h2, lombok
간단하게 테스트(애플리케이션 실행, 컨트롤러 테스트 등) 해서 정상 작동하는지 확인한다.
+) 롬복의 경우 다음 링크를 참고해서 설치한다.
+) IntelliJ에서 Gradle 사용 시 주의점
라이브러리 살펴보기
스프링부트는 기본적으로 라이브러리를 등록하면 의존관계가 필요한 다른 라이브러리들을 모두 가져온다.
프로젝트 생성시 등록한 라이브러리들에 대한 주요 의존 라이브러리들을 살펴보면 다음과 같다.
스프링부트 라이브러리
spring-boot-starter-web
- spring-boot-starter-tomcat: 톰캣 (웹서버)
- spring-webmvc: 스프링 웹 MVC
spring-boot-starter-data-jpa
- spring-boot-starter-aop
- spring-boot-starter-jdbc
- HikariCP 커넥션 풀 (부트 기본)
- hibernate + JPA: 하이버네이트 + JPA
- spring-data-jpa: 스프링 데이터 JPA
spring-boot-starter(공통): 스프링 부트 + 스프링 코어 + 로깅
- spring-boot
- spring-core
- spring-boot-starter-logging
- logback, slf4j
테스트 라이브러리
spring-boot-starter-test
- junit: 테스트 프레임워크(junit5)
- mockito: 목 라이브러리
- assertj: 테스트 코드를 좀 더 편하게 작성하게 도와주는 라이브러리
- spring-test: 스프링 통합 테스트 지원
H2 데이터베이스 설치
h2 데이터베이스는 개발이나 테스트 용도로 가볍고 편리한 DB, 웹 화면을 제공한다.
version : 1.4.200
+) 현재 사용하는 스프링부트 버전과 맞는 h2 버전은 스프링 매뉴얼을 참고하면 된다.
https://gksdudrb922.tistory.com/110
다운로드 및 설치 방법
스프링 데이터 JPA와 DB 설정, 동작확인
기본 설정
<application.yml>
spring:
datasource:
url: jdbc:h2:tcp://localhost/~/datajpa
username: sa
password:
driver-class-name: org.h2.Driver
jpa:
hibernate:
ddl-auto: create
properties:
hibernate:
format_sql: true
logging.level:
org.hibernate.SQL: debug
spring.datasource -> H2 데이터베이스 연결
spring.jpa.hibernate.ddl-auto: create -> 애플리케이션 실행 시점에 테이블을 drop 하고, 다시 생성한다.
spring.jpa.properties.hibernate: format_sql -> SQL 출력시 보기 좋게 포맷 후 출력해준다.
logging.level.org.hibernate.SQL : debug -> logger를 통해 하이버네이트 실행 SQL을 남긴다
+) 참고: 모든 로그 출력은 가급적 로거를 통해 남겨야 한다.
+) 쿼리 파라미터 로그 남기기
https://gksdudrb922.tistory.com/111
동작 확인
스프링 데이터 JPA가 잘 동작하는지 간단한 테스트를 해보자.
도메인
</entity/Member>
@Entity
@Getter @Setter
public class Member {
@Id @GeneratedValue
private Long id;
private String username;
protected Member() {
}
public Member(String username) {
this.username = username;
}
}
스프링 데이터 JPA 리포지토리
</repository/MemberRepository>
public interface MemberRepository extends JpaRepository<Member, Long> {}
테스트
@SpringBootTest
@Transactional
class MemberRepositoryTest {
@Autowired
MemberRepository memberRepository;
@Test
public void testMember() {
//given
Member member = new Member("memberA");
Member savedMember = memberRepository.save(member);
//when
Member findMember = memberRepository.findById(savedMember.getId()).get();
//then
assertThat(findMember.getId()).isEqualTo(member.getId());
assertThat(findMember.getUsername()).isEqualTo(member.getUsername());
assertThat(findMember).isEqualTo(member);
}
}
'java > jpa' 카테고리의 다른 글
[Spring Data JPA] 공통 인터페이스 기능 (0) | 2021.05.23 |
---|---|
[Spring Data JPA] 예제 도메인 모델 (0) | 2021.05.23 |
[JPA] 쿼리 파라미터 로그 남기기 (0) | 2021.05.23 |
[JPA] API 개발 고급 - 실무 필수 최적화 (1) | 2021.05.21 |
[JPA] API 개발 고급 - 컬렉션 조회 최적화 (0) | 2021.05.19 |