아래 강의 정리
목차
- 프로젝트 생성 : Spring Initializr
- 라이브러리 살펴보기
- View 환경 설정
- H2 데이터베이스 설치
- JPA와 DB 설정, 동작확인
이거 보고 학습해도 좋다.
Spring Initializr
- SNAPSHOT : 아직 개발중인 버전
- Spring boot 3.xxxx는 Java17이 최소 요구사항
- 무언가 문제 발생했을때 해결할 자신이 없어서 강의와 맞춰 선택
- java 17 : recode class 해보고 싶어 && 서포트 기간이 길다.
- H2 DB : 개발, 테스트 때 간단하게 교육용으로 사용하기 좋다.
- Lombok : reduce bolierplate code. 간단한 어노테이션으로 코드 자동으로 제너레이션 해준다.
- 스프링부트 플러그인 : 라이브러리에 대한 dependency 버전까지 자동으로 해결해준다.
라이브러리 살펴보기
핵심 라이브러리
- 스프링 MVC
- 스프링 ORM (ORM?)
- JPA, 하이버네이터
- 스프링 데이터 JPA
spring-boot-starter-web
- spring-boot-starter-tomcat: 톰캣 (웹서버)
- spring-webmvc: 스프링 웹 MVC
spring-boot-starter-thymeleaf: 타임리프 템플릿 엔진(View)
- 뷰 템플릿이라고도 부르는데, 컨트롤러가 전달하는 데이터를 이용해 동적으로 화면을 구성할 수 있게 해준다.
spring-boot-starter-data-jpa
- spring-boot-starter-aop
- spring-boot-starter-jdbc
- HikariCP 커넥션 풀
- hibernate + JPA
- spring-data-jpa
spring-boot-starter(공통): 스프링 부트 + 스프링 코어 + 로깅
- spring-boot
- spring-core
- spring-boot-starter-logging
- logback : slf4j의 구현체
- slf4j : 로거를 찍는 인터페이스의 모음
spring-boot-starter-test
- junit : 테스트 프레임워크
- mockito : 목 라이브러리 / (Mock 객체란?)
- assertj : 테스트 코드를 좀 더 편하게 작성하게 도와주는 라이브러리
- sprint-test : 스프링 통합 테스트 지원
View 환경 설정
- Model에 데이터를 실어서 View에 넘긴다.
- return "hello" : 화면 이름
- resource > templates > hello.html 로 렌더링 -> 스프링부트가 알아서 한다.
스프링부트 thypmeleaf viewName 매핑
- resources:templates/ + {ViewName} + .html
정적인 화면
- resources:static > 무언가파일.html
참고
spring-boot-devtools 라이브러리 추가하면,
html 파일을 컴파일만 해주면, 서버 재시작 없이 View 파일 변경이 가능하다.
인텔리J 컴파일 방법 : 메뉴 > build > ReCompile
H2 데이터베이스 설치
- 최소 한 번 이대로 연결 해야한다. -> jpashop.mv.db 파일이 생성된다.
- 이후부턴 이걸로 연결 : jdbc:h2:tcp://localhost/~/jpashop
JPA와 DB 설정, 동작 확인
spring:
datasource:
url: jdbc:h2:tcp://localhost/~/jpashop
username: sa
password:
driver-class-name: org.h2.Driver -> 데이터베이스 커넥션과 관련된 datasource 설정이 완료된다.
=> 이렇게 해도 히카리CP를 써서 커넥션 풀 이런게 스프링 부트가 다 세팅을 걸어준다.
jpa:
hibernate:
ddl-auto: create
=> 애플리케이션 실행시점에 테이블을 DROP하고, 다시 생성한다.
properties:
hibernate:
# show_sql: true => System.out에 하이버네이트 실행 SQL을 보여준다.
format_sql: true
logging:
level: -> 로그 레벨을 정해준다.
org.hibernate.SQL: debug -> org.hiber~를 디버그 모드로 쓴다
=> 이렇게 하면, 하이버네이트가 실행 SQL을 logger를 통해 남긴다.
++ 찾아보자
Entity 매니저가 필요하다.
EntityManager : 스프링부트가 @PersistenceContext 가 붙은 것을 주입해준다.
- 엔티티 매니저를 통한 데이터 변경은 모두 트랜잭션 안에서 이루어져야 한다.
- 테스트 실행하면, 자동으로 테이블이 만들어져 있다.
- @Transactional 이 Test에 있으면, 끝나고 테이블이 rollback된다.
@Rollback(false) 붙이면 다음과 같이 commit한다.
Assertions.assertThat(findMember).isEqualTo(member);
- 같은 트랜잭션 안에서 저장, 조회하면 영속성 컨텍스트가 같다.
- 영속성 entity에서 같은 식별자(id)면, 같은 entity로 식별한다.
- 그래서 select가 아닌 insert를 수행한 것이다.
쿼리 파라미터 로그 남기기
- 이처럼 파라미터가 ?로 남는다. 가끔 답답할 수 있다.
해결방법 1
- .yaml에 아래 코드 추가하면 다음과 같이 나온다.
org.hibernate.type: trace
해결방법 2
implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.6'
참고
쿼리 파라미터를 로그로 남기는 외부 라이브러리는 시스템 자원을 사용하므로, 개발 단계에서는 편하 게 사용해도 된다. 하지만 운영시스템에 적용하려면 꼭 성능테스트를 하고 사용하는 것이 좋다.
'프로그래밍 > Spring' 카테고리의 다른 글
[Spring boot / JPA] 3. 애플리케이션 구현 준비 (0) | 2023.06.30 |
---|---|
[Spring boot / JPA] 2. 도메인 분석 설계 (0) | 2023.06.29 |
[Spring Boot] 9. 빈 스코프 (0) | 2023.06.13 |
[Spring boot] 8. 빈 생명주기 콜백 (0) | 2023.06.11 |
[Spring boot] 7. 의존관계 자동 주입 (0) | 2023.06.05 |