Spring application properties

아이작·2022년 2월 28일
0

CS 공부

목록 보기
7/10

application.properties 속성을 알아보자

spring 공식 문서를 참조하였다.(공식문서 애용하자)
https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html#appendix.application-properties.data

공식문서가 부담스러우면, 기업 기술 블로그를 참고하자
https://techblog.woowahan.com/2695/


데이터 관련 속성

datasource

spring.datasource.url= DB의 JDBC URL
spring.datasource.username = 연결 DB의 유저 id
spring.datasource.password = 연결 DB의 비밀번호
spring.datasource.driverClassName = JDBC의 드라이버 이름(전체적으로 검증된)
spring.datasource.generate-unique-name = false


jpa

spring.jpa.database-platform = 사용하고자하는 DB의 이름.
---database property로 대체 가능.
---(spring.jpa.database)

  • spring.jpa.properties: jpa provider에 native 속성값 세팅.

spring.jpa.properties.hibernate.show_sql=true, SQL문을 log에 남길 것인지 설정.
spring.jpa.properties.hibernate.format_sql=true, 하이버네이트가 날리는 SQL문을 예쁘게 log 에 남기는 것.
spring.jpa.properties.hibernate.jdbc.batch_size=20, 한번에 데이터베이스로 보낼 최대 구문 수
spring.jpa.properties.hibernate.jdbc.fetch_size=50

spring.jpa.properties.hibernate.order_inserts=true,
spring.jpa.properties.hibernate.order_updates=true,

==> batch 기능의 옵션으로, batch를 더욱 효율적으로 만들어주는 기능이다.

 연관관계 상황. 
 주인놈을 먼저 넣어야, 자식놈을 넣을 수 있다. 
 주인놈/자식놈, 주인놈/자식놈, 이렇게 순서가 번갈아가면서 쿼리가 날아갈 것이다. 
 ** batchKey 는 엔티티의 이름을 입력받아 생성. (따라서 같은 엔티티에 관한 구문끼리 묶는다.)
이때, 주인놈 구문만, 자식놈 구문만으로 묶어서 일괄처리를 할 수 있게 만든다. 
 즉, 같은 구문끼리 정렬을 통해, 일괄처리 기능을 더욱 효율적으로 만든다. 
 

왜 더 효율적인가???

배치 작업시 이전의 batchKey와 다른 값을 받으면, 그동안 쌓아두었던 preparedStatement 가 실행되고 preparedStatement는 초기화 된다.

batchKey가 변경되지 않으면, 최대치만큼 preparedStatement를 쌓을 수 있기에
쿼리수를 줄일 수 있어 효율적이다.


spring.jpa.properties.hibernate.jdbc.batch_versioned_data=true

--> 동일한 엔티티에 대해 동시 쓰기 방지를 위한 것.
낙관적 잠금(optimistic lock): 직접 DB에 lock을 거는 것이 아니라,
@Version이 적용된 필드에 대해서, update 쿼리의 반환값과 실제로 변경된 엔티티의 수를 비교한다. 이때 양값이 다르다면, 어플리케이션단에서 예외를 발생시켜 동시 쓰기를 방지.

--하이버네이트 5버전부터는 defalut로 true

spring.jpa.hibernate.ddl-auto=create, DDL 자동생성 기능
spring.jpa.show_sql=false, JPA 가 날리는 SQL을 로그에 남길 것인지 결정

번외.

  • 차이점은?
    (spring.jpa.show_sql) VS (spring.jpa.properties.hibernate.show_sql)
  1. jpa 는 인터페이스!
  2. jpa 인터페이스의 구현체로 hibernate를 선택한 것!. 그것의 속성을 정하는 것.
    따라서, jpa 구현체로 hibernate가 아닌 다른것을 선택하면, 2번째는 무용지물!

중요!

@GernatedValue(strategy = GenerationType.IDENTITY): id 값 자동증가

batch "insert"를 지원하지 않는다. (select, update,delete 가능)
id는 db에 저장되면서 자동 생성되기에, persistContext 내부에서는 식별할 수 없다.

0개의 댓글