Connection 관리하기
·
스프링
서버에서 데이터베이스에 접근하기 위해 Connection Pool을 사용하며, Connection을 필요로 할 때 Connection을 얻지 못해 기다리게 된다면 응답속도에 치명적으로 영향을 주게 됩니다.현재 다니는 회사에서 CSP sdk를 활용하는 작업이 많아 CSP sdk작업이 끝난 후 후처리 작업을 해줘야합니다.위 과정에서 Connection을 길게 점유하면 안 되므로, Connection을 어떻게 관리헀는지 정리해 보겠습니다.1. LazyConnectionDataSourceProxy@Transactional 함수는 AOP를 활용하여 함수 실행 전 Connection을 먼저 점유합니다.아래와 같은 순서를 통해 Connection을 점유합니다. 코드가 아래와 같다고 한다면, CSP sdk작업을 한 후..
ThreadPoolTaskScheduler 알아보기
·
자바
Spring에서 실행 가능한 일(Runnable)을 주기적으로 수행하는 기능을 지원하기 위해 @Scheduled Annotation을 활용합니다.Spring이 실행된 후, 동적으로 실행 가능한 일을 주기적으로 수행하는 기능을 추가해야 할 경우가 있습니다.저의 경우엔 모니터링할 데이터베이스가 동적으로 추가된다면, 모니터링을 위해 모니터링 데이터 추출을 주기적으로 실행해야 했습니다.이를 위해, ThreadPoolTaskScheduler를 활용하여 동적으로 모니터링 데이터 추출하는 일을 주기적으로 수행하는 기능을 지원할 수 있습니다.지금부터ThreadPoolTaskScheduler에 대해 알아보겠습니다. ThreadPoolTaskScheduler 실행하기ThreadPoolTaskScheduler를 사용하려면 ..
Spring Bean 살펴보기
·
스프링
이번 포스팅에선 Spring에서 Bean이란 무엇이고, Bean을 관리하는 방법에 대해 알아보겠습니다.먼저, Spring에서 Bean이란 무엇인지 공식 문서에서 알아보겠습니다.공식 문서에서 Bean이란 스프링 IoC(Inversion of Control) 컨테이너에 의해 생성되고 관리되는 객체를 의미합니다.Introduction to the Spring IoC Container and Beans :: Spring Framework그렇다면, Bean에 대해 더 알아보겠습니다. 우선, Bean을 정의하기 위해서 BeanDefinition이 존재하는데, BeanDefinition은 여러 메타 정보를 포함합니다.Bean의 메타정보여기에서의 메타 정보는 Class, Name, Scope, Lazy initiali..
Deadlock in Oracle with Insert query
·
DB
이번글은 Oracle Insert 시 발생하는 데드락 문제 분석과 해결 방안에 대해 작성해보았습니다.데드락이 발생한 상황 가정상품(Product)과 사은품(Gift) 두 개의 테이블이 있다고 가정해 보겠습니다.여기서 상품 테이블의 기본 키(PK)는 사은품 테이블의 기본 키(PK)이자 외래 키(FK)로 설정되어 있으며, 상품 테이블의 PK는 시퀀스(sequence)를 통해 생성됩니다.상품 및 사은품 Insert 쿼리는 다음과 같은 흐름으로 이루어집니다.아래 흐름은 하나의 트랜잭션에서 동작합니다.상품 sequence의 LAST NUMBER로 return_id를 지정상품 insert. PK는 sequence의 NEXT_VAL로 지정한다.1)에서 return_id를 가져와 사은품의 PK로 지정하여 insert...
Connection Pool
·
DB
웹 애플리케이션에서 데이터베이스와 연결을 맺을 때마다 Conenction을 생성한다면 많은 비용이 들뿐만 아니라, Connection 관리를 직접해줘야 되는 단점이 존재한다.이를 해결하기 위해 Connection Pool을 사용하는데, 여러 오픈 소스 라이브러리가 존재한다.(Apache Commons DBCP, Tomcat-JDBC, HikariCP)또한, Connection Pool을 적절히 사용하기 위해선 구조와 원리에 대해 알고 있어야 한다.사내에서 Apache Commons DBCP사용하므로 이에 대해 알아보자.Commons DBCP 속성 설정initialSize : 최초 시점에 getConnection() 를 통해 커넥션 풀에 채워 넣을 커넥션 개수 (default = 0)maxTotal (1...
추상 팩토리 패턴과 전략패턴 활용
·
자바
데이터베이스 모니터링 아키텍처를 설계 중 여러 데이터베이스의 Collector, Loader를 사용하기 위해 추상 팩토리 패턴, 전략패턴을 활용하여 아키텍처를 설계해보았습니다.추상 팩토리 패턴객체 생성 패턴 중 하나로, 관련된 객체들을 하나의 팩토리(Factory)에서 생성하도록 하는 디자인 패턴입니다.객체 생성에 대한 구체적인 클래스를 감추고, 상위 인터페이스만을 통해 객체를 생성함으로써 코드의 유연성과 확장성을 높이는 데 도움이 됩니다.추상 팩토리public interface MonitoringFactory { Collector createCollector(); Loader createLoader();}public class OracleMonitoringFactory implements Monit..
blkid를 활용하여 Mount시 Volume 고정하기
·
DevOps
AWS에서 인스턴스에 EBS를 여러 개 연결하면 Mount 시 EBS의 파일 크기가 작은 순으로 할당되는 것을 막기 위해, blkid 명령어로 EBS의 UUID를 얻어 Mount 시 EBS 연결을 UUID를 통해 할당되게 만들 수 있습니다./etc/fstab 파일에 마운트할 디스크나 블록 디바이스의 파일 시스템 명( /dev/sda1 등)을 적는 것보다 UUID를 적는 것이 더 유리합니다.blkid란?blkid는 디스크 블록 장치의 파일 시스템 종류와 함께 파일 시스템의 UUID 값을 출력합니다. 이 UUID 값은 이후 파일 시스템을 시스템에 자동 마운트하는 과정에서 사용됩니다.파일 시스템 생성아래 명령어를 사용하기 위해서는 파일 시스템을 디스크 블록에 먼저 생성해야 합니다.mkfs.xfs -f /dev..
JNI 사용하기
·
자바
JNI(Java Native Interface)는 자바와 Native Code(C,C++)를 연결하는 데 사용되는 프레임워크이다. JNI를 통해 자바 Application에서 Natice Library를 호출하거나, Native Application에서 Java Method를 호출 할 수 있다.이를 통해, 성능 향상, 기존 Native Library 재사용을 할 수 있다.자바에서 사용하는 방법Native method자바는 Method 구현이 native code에서 제공될 것임을 나타내는데 사용되는 native keyword를 제공한다.공유 라이브러리 : Java 코드 내에서 라이브러리에 대한 참조만 있다. 실행 파일을 실행하는 환경이 프로그램에서 사용하는 libs의 모든 파일에 액세스 할 수 있어야 한..