[Spring] JPA 벌크 연산이란?
·
Back-end/Spring
만약, DB에 Member Table이 있고, Salary라는 컬럼이 존재한다고 가정해보자. 연봉 3000 미만의 member들의 Salary를 수정한다고 가정했을 때, JPA 관점에서는 다음과 같은 순서로 진행될 것이다.  em.find() OR select 쿼리를 날려 영속성 컨텍스트에 엔티티 저장 후 반환반환 받은 엔티티의 값을 변경한다. -> 영속성 컨텍스트에 반영된다.Commit 시점에 변경 감지(Dirty Checking)가 일어나며 Update 쿼리를 날려 DB에 반영한다. 만약, salary를 변경할 member가 80만명이라면? 80만번의 더티 체킹이 일어나고, 80만번의 UPDATE 쿼리가 날아갈 것이다... 이를 해결할 수 있는 방안이 바로 벌크 연산이다.  Bulk 연산이란? 벌크 ..
[Spring] createdAt, updatedAt 사용하기
·
Back-end/Spring
Entity 설계 시 해당 데이터가 생성된 시점, 마지막으로 수정한 시점 등을 속성값으로 사용하고 싶을 때가 있다. 이 때 사용하는 것이 createdAt, LastModifiedAt 속성이다. 1. SpringApplication 설정@SpringBootApplication@EnableJpaAuditing // 추가public class DlinkApplication { public static void main(String[] args) { SpringApplication.run(DlinkApplication.class, args); }} 보통 Springboot 를 실행시키는 클래스 상단에 많이 사용한다.JPA Auditing(감시, 감사) 기능을 활성화하기 위한 어노테이션으로 createdDat..
[Spring] JPA Hibernate의 ddl-auto 속성 분석하기
·
Back-end/Spring
JPA의 구현체 중 하나인 하이버네이트는 다양한 기능을 제공하는데 그 중 엔티티를 등록하면 DDL(Data Definition Language)을 자동으로 작성하여 테이블을 생성하거나 수정해주는 ddl-auto라는 설정이 있다. 사용법- application.yml jpa: hibernate: ddl-auto: # create, none, validate, update, create-drop ddl-auto 속성ddl-auto에 올 수 있는 속성은 다음과 같다. 1. create2. create-drop3. update4. validate5. none createcreate는 단어 그대로 엔티티로 등록된 클래스와 매핑되는 테이블을 자동으로 생성(create)해준다. 이 과정에서 기존에 해..
[Spring] data.sql을 사용하여 서버 실행 시 데이터 삽입하기
·
Back-end/Spring
흔히 서버를 실행할 때 DB에 더미 데이터가 있으면 좋겠다는 생각을 하곤 한다. 매번 컨트롤러에서 직접적으로 넣어주는 방식으로 테스트를 진행했었지만, 더 좋은 방법이 있었다. jpa의 ddl-auto: create 옵션 설정으로 entity 생성하고 추가적인 ddl 스크립트를 만들어서 서버가 시작함과 동시에 데이터를 삽입하는 것! data.sql을 통해서 dml 작업을 진행해보도록 하겠다!  1. application.yml 수정먼저 data.sql을 사용하기 위해선 반드시 jpa.ddl-auto 속성값으로 create 또는 create-drop 으로 선언해야 한다! spring: jpa: database: mysql hibernate: ddl-auto: create # cre..
[Spring] JPA "Row size too large" 문제 분석하기
·
Back-end/Spring
간혹 가다가 Entity String Type의 속성 길이를 디폴트보다 길게 하고 싶을 때 다음과 같이 하는 경우가 있을 것이다.  Document entity의 content의 길이가 늘어나는 것을 대비해, @Column 어노테이션의 length = 50000으로 하여 길이를 늘리고 실행을 해보면 다음과 같은 에러가 발생한다engine=InnoDB" via JDBC [Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or B..