분류 전체보기 38

DB 테이블 파티셔닝

DB 파티셔닝 DB에서 테이블 파티셔닝은 대량의 데이터를 나누어 저장하고 관리해 쿼리 성능을 향상시키는 기술 중 하나이다. 파티션은 큰 테이블을 관리 가능한 작은 부분(파티션)으로 나누고, 각 파티션은 하나의 독립적인 테이블처럼 동작한다. 하지만 사용자의 관점에서는 하나의 테이블로 보여 쉽게 사용할 수 있게 해준다. 테이블 파티셔닝의 장점은 다음과 같다. 1. 데이터 관리 용이성 : 특정 파티션만 백업하거나 복구하는 것이 가능하고, 자주 사용하지 않는 데이터를 다른 파티션으로 이동하거나 삭제할 수 있다. 2. 성능 향상 : SQL 쿼리가 파티션의 일부만 스캔하면 될 경우, 파티션 프루닝을 실행하여 불필요한 파티션을 제거해 성능을 향상시킬 수 있다. 3. 데이터 접근 시간 단축 : 파티션을 통해 필요한 데..

DB 2023.06.07

리눅스 명령어 with chatGPT

npm build 에서 오류가 발생했는데 npm에서 제공하는 로그를 확인해봐도 뭐가 문제인지 정확하게 확인할 수 없었다.. 그러다가 리눅스에서 제공하는 명령어 dmesg를 통해 OOM이 난 것을 추후에 알게되었고, 뭔가 유용한 명령어가 더 있는지 chatGPT를 통해 알아보았다. 1. dmesg 시스템의 커널 메시지를 표시하는 데 사용한다. 시스템 부팅 이후에 커널이 출력한 모든 메시지를 확인할 수 있으며, 하드웨어 문제, 드라이버 문제, 시스템 충돌, 메모리 문제 등에 대한 정보를 제공한다. 전체 커널 메시지 확인하기: dmesg 명령어를 그냥 실행하면 부팅 이후의 모든 커널 메시지를 볼 수 있습니다. 이 메시지는 시스템의 하드웨어와 드라이버, 그리고 커널의 작동 상태에 관한 정보를 포함합니다. 시간 ..

Oracle RAC (Real Application Clusters)

DB 이중화 데이터베이스 이중화는 두 개 이상의 데이터베이스 시스템을 동일한 데이터로 유지하는 프로세스를 의미한다. 따라서 데이터의 신뢰성과 가용성을 보장할 수 있다. 일반적으로 DB 이중화 기술로는 HA(High Availability)가 있다. HA 구성은 기본적으로 하나 이상의 백업 시스템을 도입하여 주 서버가 다운되더라도 데이터베이스 서비스를 지속적으로 유지하는 방법이다. 즉, 한 대의 Active 서버와 한 대 이상의 Standby 서버를 두는 방식으로, 주 서버가 장애로 동작하지 않을 경우, 대기 서버가 주 서버의 역할을 수행한다. 대기 서버는 주 서버의 데이터를 지속적으로 복사하여 최신 상태를 유지하도록 한다. 고가용성을 제공하는 또 다른 방식으로는 여러 서버가 하나의 데이터베이스를 공유하게..

DB 2023.05.24

DBCP (Database Connection Pool)

DBCP는 데이터베이스 연결 객체를 효율적으로 관리하기 위한 기술이다. 데이터베이스 연결은 생성하고 종료하는데 상당한 시간과 리소스가 필요하다. 따라서 웹이나 애플리케이션 서버에서 많은 수의 동시 사용자 요청을 처리해야 하는 경우, 각 요청마다 새로운 데이터베이스 연결을 생성하고 종료하는 것은 매우 비효율적이므로 해당 문제를 해결하기 위해 DBCP가 만들어졌다. DBCP는 미리 정해진 수의 데이터베이스 연결 객체를 생성해두고 관리하며, 요청이 들어올 때마다 이미 생성되어 있는 데이터베이스 연결 객체를 제공하고, 요청 처리가 완료되면 연결은 종료되지 않고 다시 반환되어 재사용되는 방식이다. 일반적으로 자바에서 DBCP를 사용하지 않고 직접 데이터베이스 연결을 생성하고 사용하는 과정은 아래와 같다. 1. 드..

DB 2023.05.17

@Transactonal

스프링의 트랜잭션 관리 스프링의 트랜잭션 관리는 선언적 트랜잭션과 프로그래밍 트랜잭션 두 가지 방법을 제공한다. 선언적 트랜잭션은 트랜잭션 관리를 "선언적"으로 처리하는 방법으로, 주로 애노테이션 또는 XML 설정을 이용해 트랜잭션의 범위, 롤백 규칙 등을 정의하는 방식을 말한다. "선언적"이라는 말은 트랜잭션 관리를 비즈니스 로직에서 분리하고, 트랜잭션 관련 설정을 외부에서 선언하게 함으로써 코드의 가독성과 재사용성을 높이는 장점이 있다. 프로그래밍 트랜잭션은 코드 상에서 트랜잭션을 명시적으로 시작, 커밋, 롤백하는 방식을 말하며, 주로 더 세밀한 제어가 필요한 경우에 사용하지만 일반적으로 사용하는 경우는 드물다. 관점 지향 프로그래밍 (AOP, Aspect-Oriented Programming) 애플..

Spring 2023.05.11

Database Lock, Isolation Level

Lock ? Lock은 다중 프로세스나 스레드에서 공유 자원에 대한 접근을 제어하기 위해 사용되는 동기화 기술을 말한다. 데이터의 무결성과 일관성을 지키기 위해 Lock을 사용한다. Database Lock은 크게 공유 락과 베타 락으로 나뉜다. 공유락 : 데이터를 읽을 때 사용하는 락으로, 다른 트랜잭션이 해당 데이터를 읽을 수 있도록 허락한다. 즉, 공유 락이 걸린 데이터를 다른 트랜잭션도 읽을 수 있지만, 하나의 트랜잭션이 쓰기 작업을 수행하려면 공유 락이 끝날 때 까지 기다려야 한다. 따라서 공유락을 사용하여 여러 개의 트랜잭션이 동시에 데이터를 변경하는 것을 방지한다. 베타 락 : 일반적으로 쓰기 작업이 필요한 경우 사용되며, 해당 락을 획득한 트랜잭션만이 데이터를 변경할 수 있다. 배타적 락이..

DB 2023.04.27

쿠버네티스 구성 요소

1. kubectl : 쿠버네티스 클러스터와 상호 작용할 수 있는 명령행 도구를 말한다. kubectl을 사용해 클러스터의 상태를 조회하거나 리소스를 생성, 업데이트, 삭제할 수 있다. 2. API 서버 : kubectl을 사용하여 명령을 내리면, 해당 명령은 API 서버에 전달되는데, API 서버는 클러스터의 중앙 집중식 관리 포인트 역할을 하며, 클러스터의 리소스를 생성, 수정, 삭제하고 조회하는 데 사용되는 RESTful API를 제공한다. 3. etcd : API 서버는 클러스터의 상태 정보를 etcd에 저장한다. 따라서 쿠버네티스 클러스터 내에서 모든 구성 요소가 일관된 상태를 유지할 수 있도로 한다. 4. 컨트롤러 매니저 : 클러스터의 상태를 지속적으로 모니터링하며, 현재 상태와 목표 상태 간..

k8s 2023.04.25

인덱스 스캔 종류

Oracle에서 인덱스는 B-Tree 자료구조로 구현되어 있다. 따라서 루트 노드(최상단 노드), 브랜치 노드(루트 노드와 리프 노드 사이의 중간 노드들), 리프 노드(트리의 최하단 노드로 인덱스 키와, ROWID를 가지고 있는 노드)로 이루어져 있다. 또 인덱스 트리는 DB 시스템에 따라 메모리 또는 디스크에 저장될 수 있는데, 일반적으로 트리의 일부는 메모리에 캐시되어 있어서 빠른 접근이 가능하고 나머지 부분은 디스크에 저장된다. 인덱스 스캔은 DB에서 인덱스를 사용하여 데이터를 검색하는 방식을 말한다. 일반적으로 전체 테이블 스캔보다 효울적이며, 인덱스 구조를 사용하여 데이터를 빠르게 찾을 수 있다. Oracle에서 사용하는 인덱스 스캔 방식에 대해 알아보자. 1. 인덱스 범위 스캔 (Index R..

DB 2023.04.12

백준 1613. 역사

https://www.acmicpc.net/problem/1613 1613번: 역사 첫째 줄에 첫 줄에 사건의 개수 n(400 이하의 자연수)과 알고 있는 사건의 전후 관계의 개수 k(50,000 이하의 자연수)가 주어진다. 다음 k줄에는 전후 관계를 알고 있는 두 사건의 번호가 주어진다. www.acmicpc.net fun Array.floydWarshall(): Array { val n = this.size - 1 for (k in 1..n) { for (i in 1..n) { for (j in 1..n) { if (i == j || this[i][k] == Int.MAX_VALUE || this[k][j] == Int.MAX_VALUE) { continue } if (this[i][j] > this..

algorithm 2023.01.30