programming study 72

통계

데이터베이스에서 쿼리를 실행할 때 옵티마이저가 통계정보를 참조하여 실행계획을 세웁니다. 그런데, 새로운 값 추가나 기존 값 삭제가 많이 이루어진 경우 통계정보가 정확하지 않을 수 있습니다. 정확하지 않은 통계정보를 참조하여 쿼리를 실행하는 경우 잘못된 실행계획을 세울 수 있고 쿼리에도 문제가 있을 수 있습니다.

모델링 작업

※ 실제 테이블 구조가 아닌 이해를 돕기 위해 간단하게 재구성 한 구조 입니다. 이해를 돕기 위해 변경 전 테이블 구조를 먼저 보여주고 고도화 요구사항을 설명하고 변경한 테이블 구조에 대해서 설명합니다. index, 데이터 양을 중점으로 생각해서 테이블을 설계하였습니다. 마지막에는 index에 대해서 정리한 내용을 설명합니다. 변경 전 테이블 구조 흐름 1. 고객 정보를 등록 2. 메신저를 보낸다 -> 소통 내용 태이블에 INSERT -> 소통 ID를 고객별 마지막 소통 ID 컬럼에 UPDATE 3. 고객별 대화 내용 조회 (쉽게 말해서 카카오톡에서 대화 목록을 보여준다고 생각하면 된다. 대화 목록에는 마지막으로 연락한 메세지 내용이 보인다.) -> 소통 내용에 많은 데이터가 쌓이기 때문에 LATEST_..

오라클 실행계획 보기

참고 https://bae9086.tistory.com/181 Oracle 무료 DB관리툴 SQL Developer - Plan/Trace 확인하기 (실행계획/트레이스) (tistory.com) Oracle SQL Developer에서 Trace(자동추적) oracle sql developer에서 F6 단축키 사용 - LAST_CR_BUFFER_GETS : SQL을 실행하면서 각 단계에서 읽어온 블록(Block) 갯수 - LAST_ELAPSED_TIME : 경과시간 => LAST_CR_BUFFER_GETS, LAST_ELAPSED_TIME 가 적을 수록 좋다 힌트 사용 1. 실행할 쿼리에서 select 뒤에 /*+Gather_pan_statistics */ 를 붙여서 실행계획을 읽는다. 2. SQL_ID..

JPA 관련 메모

Pageable 인터페이스 : 페이징 처리에 사용되는 인터페이스입니다. 페이지 번호, 페이지 크기, 정렬 조건 등을 설정하는 역할을 합니다. Sort 클래스 : Pageable 인터페이스이스에서 사용 되는 클래스입니다. 페이징 처리 결과를 정렬할 때 사용합니다. Order 클래스 : Sort 클래스의 내부 클래스입니다. 정렬 정보를 가지고 있는 클래스입니다. package org.springframework.data.domain; . . public class Sort implements Streamable, Serializable { private static final long serialVersionUID = 5737186511678863905L; private static final Sort UN..

코딩 메모

java ABean abean = Arrays.stream(리스트) .filter(조건) .findAny() .map(m -> { // 조건에 맞게 있으면 Bean 객체로 만들어서 반환 ABean abean = new ABean (); bean.setA(m.getA()); return abean } ).orElse(null); // 조건에 맞는 값 없으면 null stream().findAny() 스트림 병렬 스트림에서 여러 쓰레드가 동시에 작업하므로 먼저 처리된 요소가 반환될 수 있다. 스트림의 요소 순서가 중요하지 않거나 어떤 요소여도 상관 없을 때 사용합니다. 또한 빠르게 결과를 내고 싶을 때 사용합니다. 인터페이스에 중첩 추상클래스? interface A { abstract class Data {..

스프링 / JAVA / JPA / Network / DB / infra / 업무

스프링 스프링을 사용하는 이유가 뭔가요? 스프링은 자바 기반 어플리케이션을 개발하는데 도움을 주는 프레임워크이고 POJO 로 개발을 할 수 있게 AOP, IOC, PSA 같은 기술들을 지원해주기 때문에 사용합니다. 우선 스프링은 프레임워크이기 때문에 이미 만들어진 기술을 가져다 사용할 수 있고 정형화된 구조로 개발을 할 수 있다는 장점이 있습니다. 스프링은 자바로된 프레임워크이고 자바는 객체지향 언어입니다. 스프링 프레임워크는 객체지향 프로그래밍의 성질인 다형성을 이용해서 IOC, DI 기능을 지원하기 때문에 스프링을 사용합니다. 추가적으로 AOP 기능 , 스프링MVC 기능도 스프링을 사용하는 이유가 될 수 있습니다. spring 기본 요약 (사용 이유, 객체지향, IOC/DI/container, 빈 등..

공유 자원에 대한 동시성 처리(ex) 좋아요 기능, 재고 시스템 상품 구매, 주식 매매)

redis 분산 락을 사용하는 이유 (1) 토스ㅣSLASH 22 - 애플 한 주가 고객에게 전달 되기까지 - YouTube 상품을 구매하거나 주식을 매매하는 시스템에서는 재고나 잔고와 같은 공유자원을 동시에 갱신하는 트랙잭션이 여러개 발생합니다. 이 때 공유 자원에 대해서 각 사용자의 수정사항이 무시되지 않고 데이터의 일관성을 유지시키고 데드락을 방지하기 위해 안전한 동시성 처리가 필요합니다. 대표적인 방법으로는 디비 락을 걸어서 처리할 수 있습니다. 하지만 성능저하와 데드락이 많이 발생할 수 있고 MSA구조인 경우 각 서비스 모듈 간의 결합도가 올라갈 수 있고 스케일 아웃한 경우에도 각 서버들이 데이터의 일관성을 유지하기 위한 별도 처리가 필요하기 때문에 다른 방법을 사용합니다. 요청이 몰리는 경우 대..

캐시

- 캐시를 사용하는 이유 - 어떤 캐시 기술을 사용하는 것이 적합한지 - EhCache의 설정 옵션들 공부 예정 : 캐시 전략, 분산 캐시 - 캐시가 뭔지, 캐시를 사용하는 이유 캐시란 자주 사용되는 데이터를 일시적으로 저장할 수 있는 임시 저장공간입니다. 디스크 즉 DB에서 데이터를 얻어오는 것보다 훨씬 빠른 I/O성능을 얻을 수 있기 때문에 사용합니다. 데이터를 빠르게 읽어옴으로써 서버 부하를 줄이고 요청 속도를 높일 수 있습니다. - 어떤 캐시 기술을 사용하는 것이 적합한지 어떤 캐시 기술을 사용할지는 어플리케이션의 요구사항과 사용 목적에 따라서 선택해야합니다. 캐시 기술을 선택할 때는 캐싱속도, 캐시를 사용하려는 서버 구조, 캐시 데이터의 크기, 데이터의 유지성, 별도 비용 등을 고려해야합니다. ..