일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- redis
- Web Server
- 맛집
- springboot
- db
- linux
- IntelliJ
- tool
- jsp
- MySQL
- javascript
- elasticsearch
- laravel
- ReactJS
- devops
- Spring
- 요리
- Spring Batch
- Oracle
- Design Patterns
- Git
- AWS
- php
- jenkins
- it
- Gradle
- java
- ubuntu
- JVM
- Spring Boot
- Today
- Total
목록db (38)
아무거나
Spring Batch + Redis Pipeline 으로 구현한 성능 개선코드 참고는 https://github.com/bkjeon1614/java-example-code/tree/develop/spring-batch-mybatis-codebase 에서 참고 부탁드립니다.Redis Pipeline 이란Redis의 pipeline은 여러 개의 명령어를 한 번에 보내고, 그 결과를 한 번에 받아올 수 있는 메커니즘입니다. 이를 통해 네트워크 오버헤드를 줄이고 Redis 서버의 처리 성능을 최적화할 수 있다. 또한 주의해야할 점은, Redis 서버의 처리량(capacity)을 고려하여 pipeline의 chunk size를 결정해야 한다.주의사항Request Chunk Size: 먼저 요청하는 chunk s..
Spring Batch 성능 개선 사례 정리개선 항목 점검 Flow유지보수가 좋고 코드가 직관적인 범주 내에서 최적화를 진행이후에도 성능 이슈가 발생하면 멀티 스레드 / 파티셔닝과 같은 다양한 방식으로 진행즉, 직관적인 방식과 단계적으로 진행하는 편이 좋다.개선 항목단일 UPDATE -> WHERE IN (Nos..) UPDATE 로 변경하기 코드에서 단일로 UPDATE 를 실행하면 건별로 DB의 I/O 발생이 일어난다. 만약 WHERE IN 으로 변경시 예를 들어 1000개의 단 건일 경우 WHERE IN 으로 500개씩 나누어 처리하면 최대 2건의 I/O 발생// 단일UPDATE userSET grade = 'A'WHERE id = 1;UPDATE userSET grade = 'A'WHERE id =..
BatchGetItem (WHERE IN) 정의 다수의 테이블 아이템을 hashkey, rangedkey 를 지정해서 가져올 수 있으나 결과값이 100개로 제한된다, 특정 rangedkey 로 다수의 아이템 검색이 필요하면 query 과 권장된다. BatchGetItem 은 조건식을 사용할 수 없고 쿼리 결과를 수정할 수 없기 때문에 상황에 따라 GetItem 과 적절하게 선택하여 사용하는것이 좋다. WHERE IN 절과 비슷하게 사용할 수 있다. 사용법(SDK) [build.gradle] ... implementation 'com.amazonaws:aws-java-sdk-dynamodb:1.12.239' ... [DynamoDBConfig.java] ... import com.amazonaws.serv..
파티션 (partition) 대량의 데이터를 테이블에 저장할 때, 물리적으로 별도의 테이블로 분리해서 저장시키는 기법 (단, mysql 내부적으로 분리되어 처리되기 때문에, 파티션이 얼마나 있든 사용자는 하나의 테이블로 보인다.) 특정 DML과 Query의 성능을 향상시키고, 주로 데이터가 실시간으로 쌓이는 데이터베이스 환경에서 효율적이다. 특히 Full Scan에서 데이터의 접근 범위를 줄여 성능 향상을 가져올 수 있습니다. 물리적인 파티셔닝으로 인해 전체 데이터의 훼손 가능성이 줄어들며, 각 파티션 별로 독립적으로 백업하고 복구할 수 있다. 다만, 테이블 간 Join이 일어날 경우 비용이 증가 하며 테이블과 인덱스를 별도로 파티셔닝 할 수는 없다. 파티션 종류 기본적으로 파티셔닝은 수평 분할과 수직 ..
Spring Boot 에서 aws-java-sdk-dynamodb 를 활용한 AWS DynamoDB 연동 (+Credentials Setting 포함) 먼저 AWS Credentials 설정을 application.yml 기반으로 하게된다면 중요키들이 노출하게된다. 그래서 보통 KMS(=Key Management System)를 통한 관리, 키값 암호화 관리, 서버에 설정된 AWS CLI 를 통한 저장된 프로필 사용(Ex- ~/.aws/credentials) 등의 방법이 있으며 해당 내용에서는 서버에 설정된 AWS CLI 를 통한 저장된 프로필 사용 하는 방법으로 진행하도록 한다. aws-java-sdk-dynamodb 를 선택한 이유 (=spring-data-dynamodb 의 단점) 2020.03.0..
JDBC란 자바 프로그램이 데이터베이스와 연결되어 데이터를 주고 받을 수 있게 해주는 프로그래밍 인터페이스 JDBC 작동 순서 JDBC 드라이버 로드 jdbc.drivers 라는 시스템 환경변수에 등록된 내용으로 함 class.forName() 메서드를 이용해서 직접 해당 클래스를 로드하는 방법 (대부분 사용) 데이터베이스 연결 Java.sql.Connection 에 정보를 입력하여 연결 Statement 생성 데이터베이스 연결로부터 SQL문을 수행할 수 있도록 해주는 클래스 Statement: 데이터베이스 연결로부터 SQL문을 수행할 수 있도록 해주는 클래스 PreparedStatement: SQL문을 미리 만들어주고 변수를 따로 입력하는 방식 (효율성이나 유지보수 측면에서 유리) SQL문 전송 {St..
AWS RDS MySQL VS Aurora Aurora란 AWS가 MySQL과 Postgresql을 호환해서 만든 RDBMS이다. 둘의 가장 큰 차이점은 Storage이며 Aurora는 Shared Storage를 사용하며 MySQL은 Binary Log 기반의 Replication 기반이 아닌 Storage와 Page 기반의 Replication을 사용 Aurora 장점 기본적으로 MySQL 및 PostresSQL 호환 가능하다. 스토리지 용량이 64TB까지 자동 증가된다. (RDS MySQL은 EBS 볼륨 할당을 직접 해야함) 3개의 AZ (가용 영역)에 대해서 6방향 복제를 지원한다 (6개의 스토리지 지원) Read Replica (읽기 전용 복제본)을 15개까지 지원한다 Read Replica에 ..
ORA-01795 항목의 수가 1,000개 넘어갈 경우 발생하는 에러 IN 구문 사용시 항목의 수가 1,000개가 넘어가면 에러가 발생한다. 해결1: 복수 컬럼 SubQuery 사용 WHERE (0, 비교컬럼) IN ((0, 조건1), (0, 조건2), (0, 조건3), ...) 해결2: Mybatis 기준 foreach 구문을 사용하는 경우 WHERE (1, A1.PROD_NO) IN (1, #{prodNo})
Spring Boot 환경에서 DatasourceConfig 설정 (Multi Connection 또는 추가 설정시 유용) DataSourceConfig 추가 [DataSourceConfig.java] package com.example.bkjeon.base.config; import java.util.HashMap; import javax.persistence.EntityManager; import javax.sql.DataSource; import lombok.RequiredArgsConstructor; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.jdb..
DB 관련 로그 의존성 추가 [build.gradle] ... // DB Log implementation 'org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16' ... ../resources/log4jdbc.log4j2.properties 파일 생성 [log4jdbc.log4j2.properties] # log4jdbc spy의 로그 이벤트를 slf4j를 통해 처리 log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator # 로그를 표시할 줄의 제한 0은 무제한 log4jdbc.dump.sql.maxlinelength=0 # log4jdbc의 드라이브 클래스 설정 log4jdbc..