분류 전체보기 24

JPA Tips

엔티티 매니저는 트랜잭션 별로 생성된다(스프링 기본). 엔티티 매니저는 영속성 컨텍스트를 가지고 있고 1차 캐시의 역할을 하게 된다. 이로 인해 애플리케이션 수준의 반복 가능한 읽기가 가능하다(DBMS의 Repeatable Read와 별개로). 이를 위해 엔티티매니저를 통해 읽기를 할 때 1차 캐시에 이미 해당 영속성 객체가 있다면 DB에서 조회하지 않고 이를 반환한다. 또한, JPQL을 통해 쿼리를 하면 영속성 컨텍스트를 확인하지 않고 바로 DB에서 가져오는데 가져온후에 영속성 컨텍스트에 이미 해당 객체가 있다면 DB에서 가져온 객체를 버리고 영속성 컨텍스트에 있는 값을 반환한다. 영속성 컨텍스트에는 1차 캐시와 쓰기 지연 SQL 저장소가 있다. flush를 할 때 쓰기 지연 SQL에 있는 쿼리가 발생..

기타 2022.12.19

Vaadin - Component

Vaadin - Component Vaadin은 40개 이상의 컴포넌트를 지원한다. https://vaadin.com/docs/latest/components 각 컴포넌트는 custom element로 만들어지기 때문에 자바 코드가 아닌 클라이언트 사이드의 HTML로 컴포넌트를 추가 할 수 있다. Vaadin에서 제공하는 컴포넌트 외에 커스텀 컴포넌트를 만들어 사용할 수도 있다. 예를 들어 네이버맵 같은 라이브러리를 컴포넌트화 해서 사용할 수 있다.(이건 다음에 다른 꼭지로..) https://vaadin.com/docs/latest/create-ui/web-components Vaadin에서 제공하는 컴포넌트는 Vaadin의 테마 기능을 사용할 수 있다. 이 말은 내가 만든 테마를 추가해서 웹화면 전체..

Vaadin 2022.12.19

Vaadin - Layout

Vaadin - Layout Layout Vaadin의 화면을 구성하기 위해서는 기본적으로 Layout을 알아야 한다. Layout 위에 컴포넌트가 구성되어 컴포넌트는 그 레이아웃의 특성에 맞게 배치된다. 또한 레이아웃 자체도 컴포넌트이기 때문에 레이아웃 안에 레이아웃을 추가할 수 있다. 그렇기 때문에 Vaadin에서 제공하는 여러 레이아웃의 조합을 통해 다양한 화면 구성이 가능하다. 기본 Layout DIV : HTML DIV 태그를 그대로 표현 Vertical : 내부 Component를 수직적으로 나열 @Route("basic-layouts/vertical-layout") public class BasicLayoutsVerticalLayout extends Div { public BasicLayou..

Vaadin 2022.12.19

Vaadin 소개

Vaadin - Intro Site : https://vaadin.com/ Overview 자바만으로 웹 앱을 제작 할 수 있다. 스프링 부트와 좋은 궁합을 보여준다. 개인이 쓰기에는 조금 비싼 가격이지만 Core Plan은 무료이고 Vaadin의 핵심 프레임워크라고 할 수 있는 Flow는 오픈소스이다. 또한 무수히 무료 Add-On들이 제공된다. 백엔드 개발자가 간단하게 관리자툴을 제작할 때 적절하다. 국내 자료가 거의 없다. 단 한권의 국내 서적. 그나마도 2017년에 나온 8버전. 현재 23버전. Get Started Vaadin 홈페이지에서 제공하는 퀵스타트 프로젝트를 통해서 간단하게 알아보자. https://vaadin.com/docs/latest/guide/quick-start Vaadin은 ..

Vaadin 2022.12.19

9장 ItemWriter -2

9장 ItemWriter -2 그밖의 출력 방식을 위한 ItemWriter ItemWriterAdaptor 기존 서비스를 ItemWriter로 사용하고자 할 때 사용. Write 대상이 기존 서비스이고 메소드 인자 타입이 아이템 타입을 그대로 사용할 수 있는 경우. 따라서, 처리중인 아이템 타입 하나의 인수만 받을 수 있다. 다른 인수 추가할 경우 아래와 같은 예외 발생 java.lang.IllegalArgumentException: No matching arguments found for method: logCustomer @Service public class CustomerService { public void logCustomer(Customer customer) { System.out.print..

7장 ItemReader - 1부 (~json)

7장 ItemReader - 1부 (~json) 청크 기반 스텝은 ItemReader - ItemProcessor - ItemWriter 로 구성. 스프링 배치는 거의 모든 유형의 입력 데이터를 읽을 수 있는 기반 코드를 제공함과 동시에 커스터마이징 할 수 있는 기능도 지원함. 7장에서는 ItemReader가 제공하는 다양한 기능을 알아본다. ItemReader 인터페이스 public interface ItemReader { @Nullable T read() throws Exception, UnexpectedInputException, ParseException, NonTransientResourceException; } 스프링 배치는 처리할 입력 유형에 맞는 ItemReader의 여러 구현체 제공 스텝..

5장 JobRepository와 메타데이터

5장 JobRepository와 메타데이터 Job Repository 상태관리 : 잡의 상태를 Repository에 저장 배치 잡 실행 중 오류 발생 시 복구 실행 중 오류 발생 시 처리 유무 잡이 다시 실행되면 상태 트랙킹 잡의 재시작 및 아이템 재처리 시 동작 수행 결정 모니터링 실행 중 값 파악 잡 처리 시간/ 오류로 재시작 된 아이템 수 등 잡의 실행 진행 파악 JobRepository 란? JobRepository Interface Source public interface JobRepository { /** * Check if an instance of this job already exists with the parameters * provided. * * @param jobName the ..

7.1 통계정보와 비용 계산 원리

7.1 통계정보와 비용 계산 원리 7.1.1 선택도와 카디널리티 선택도 : 전체 레코드 중 조건절에 의해 선택되는 레코드 비율 '=' 조건으로 검색 할 때 경우 선택도 = 1 / NDV NDV : 컬럼값 종류 개수(성별이라면 남/여 2) 카디널리티 : 전체 레코드 중에서 조건절에 의해 선택되는 레코드 개수 카디널리티 = 총 로우 수 * 선택도 = 총 로우 수 / NDV *옵티마이저는 카디널리티 값을 통하여 비용을 산출하고 비용을 통하여 옵티마이징 방식을 결정한다. 따라서 카디널리티값의 기초가 되는 선택도 값의 계산이 매우 중요하다. 7.1.2 통계정보 오브젝트 통계 테이블 통계 테이블 통계 조회 select num_rows -- 총 레코드 계수 ,blocks -- 테이블 블록 수 = &#3..

친절한SQL튜닝 2022.03.31

6장 소트 튜닝

6장 소트 튜닝 6.1 기본 DML 튜닝 DML 성능에 영향을 미치는 요소 인덱스 인덱스가 늘어나면 Insert / Delete / Update 시 부하가 늘어난다. 특히 Update 시에는 변경과 인덱스 수조 내에서 정렬을 다시해야 하는 이중적인 부하가 발생한다. 무결성 제약 무결성 제약 중 PK/FK 제약은 Check / Not Null 보다 성능에 더 큰 영향이 있다. 실제 데이터를 조회하기 때문이다. 조건절 2/3장에서 학습한 인덱스 튜닝 원리 참고. 서브쿼리 4장에서 학습한 조인 튜닝 원리 참고. Redo 로깅 DML 수행 시마다 Redo 로그 생성하기 때문에 DML에 성능에 영향을 끼친다. Undo 로깅 DML 수행 시마다 Undo 로그 생성하기 때문에 DML에 성능에 영향을 끼친다. Lock..

친절한SQL튜닝 2022.03.31

5장 소트 튜닝

5장 소트 튜닝 5.1 소트 연산에 대한 이해 소트 수행 과정 소트 연산은 메모리와 CPU를 많이 쓴다. 처리할 양이 많을 때는 디스크 I/O를 사용하기도 한다. 부분범위 처리가 불가해서 OLTP 환경에서 앱 성능을 저하시킨다. 따라서, 되도록 소트를 안하도록 SQL를 작성하고 불가피할경우 메모리내에서 수행이 완료되도록 한다. 소트 오퍼레이션 Sort Aggregate 실제 데이터를 정렬하진 않고 Sort Area 사용 SUM / MAX / MIN / COUNT Sort Order By 실제 소트 실행 Sort Group By 소팅 알고리즘을 사용해 그룹별 집계 수행 Sort Unique Unnesting된 서브쿼리가 M쪽 집합이면 메인 쿼리와 조인하기 전에 중복 레코드 제거 Sort Join 소트 머지..

친절한SQL튜닝 2022.03.31