본문 바로가기

CS/Database30

[GPDB Administrator 교육 2일차] 보호되어 있는 글 입니다. 2022. 12. 14.
[GreenplumDatabase 교육 1일차] GreenplumDatabase - greenplum은 구조적으로 병렬 아키텍처 1. Greenplum Fundamental Concepts 1) Greenplum Architecture (0) 스케일업과 스케일 아웃 Scale up - 시스템 리소스에 대한 요구가 증가하게 될 경우, 하나의 물리 서버의 리소스 크기(CPU, Memory)를 늘리는 방법 Scale Out - (Greenplum Architecture) - 시스템 리소스에 대한 요구가 증가하게 될 경우, 여러 서버를 증설하는 방법 - 하나의 서버는 각 서버와 독립적으로 테스크를 수행 - Scale Out 구조의 GPDB를 정상적으로 동작하게 하려면 운영 방법에 대한 이해가 필요 https://dheldh77.tistory.com/entry.. 2022. 12. 13.
[데이터베이스] 객체관계매핑(ORM, Object-Relational Mapping) 영속성(Persistence) 1) 영속성(Persistence) - 데이터를 생성한 프로그램의 실행이 종료되더라도 사라지지 않는 데이터의 특성 - 영속성을 갖지 않는 데이터는 단지 메모리에서만 존재하고 프로그램 종료돠 동시에 사라지게 됨 2) 영구적인 객체(Object Persistence) - 메모리 상의 데이터를 파일 시스템, RDB 등을 활용해 영속성을 부여해 영구적으로 존재하는 데이터 3) 영속성을 부여하는 방법 (1) JDBC (2) Persistence Framework 4) Persistence Layer - 프로그램 아키텍처에서 데이터에 영속성을 부여하는 계층 5) Persistence Framework - JDBC 같은 복잡한 프로그래밍 없이 간단한 작업만으로 영속성을 부여할 수 있도록.. 2020. 6. 24.
[데이터베이스] Statement와 Prepared Statement Statement와 Prepared Statement - SQL문을 실행할 수 있는 객체 - 가장 큰 차이점은 캐시 사용 여부 1) SQL 실행 단계 (1) 쿼리 문장 분석 (2) 컴파일 (3) 실행 2) Statement String sqlstr = "SELECT name, memo FROM TABLE WHERE name = " + num Statement stmt = conn.credateStatement(); ResultSet rst = stmt.executeQuery(sqlstr); - 쿼리문을 수행할 때마다 SQL 실행 단계 1) ~ 3)의 과정을 거침 - SQL문을 수행하는 과정에서 매번 컴파일을 하게 때문에 성능상 이슈 발생 - 실행되는 SQL 문을 확인 가능 3) Prepared State.. 2020. 6. 24.
[데이터베이스] 인덱스(Index) 데이터베이스 인덱스(Database Index) - 지정한 column을 기준으로 메모리 영역에 일종의 색인을 생성하는 것. - 데이터베이스의 레코드가 늘어날수록 table full scan의 속도는 느려진다. 인덱스를 사용하면 빠른 탐색이 가능하다. - 하지만 인덱스는 키 값을 기준으로 정렬된 상태를 유지하기 때문에 검색속도는 빨라질 수 있지만, 삽입, 삭제, 갱신을 느려진다. 1) 인덱스 구조 (1) B-Tree 인덱스 - B-Tree 인덱스는 역트리 형태의 자료구조 - Root와 Branch 노드에는 키 값으로 하위노드들의 데이터 값 범위가 저장되며, value에는 하위노드를 찾는데 필요한 주소 정보가 저장된다. - Leaf노드의 key 값으로는 해당 데이터의 인덱스 키 값이 저장되며, value에.. 2020. 6. 24.
[데이터베이스] 샤딩(Sharding) 샤딩(Sharding) - 수평 파티셔닝 - 데이터베이스 테이블에 저장된 레코드의 수가 늘어남에 따라 검색 성능이 떨어지거나 용량에 커짐 - 샤딩이란 테이블을 row 단위로 나눠서 저장해 DB 용량을 줄이고 검색을 성능을 올리는 기법 - 즉, 기존 테이블와 똑같은 스키마를 가지는 샤드라는 작은 단위로 나눠 저장하는 방식이다 - '샤드키'는 나눠진 샤드 중 어떤 샤드를 선택할 지 결정하는 키로, 샤드키 결정 방식에 따라 샤딩 방법이 나뉘게 된다. 1) 해시 샤딩(Hash Sharding) - 해시 함수를 사용해 샤드 키를 나누는 방식 (+) 구현이 간단 (-) 샤드가 늘어나게 되면 해시 함수를 재설정해야하고, 해시 함수를 바꾸게 되면 기존에 저장된 샤드 키도 전부 바꿔야함 (-) 즉, 확장성이 좋지 않음 .. 2020. 6. 24.
[데이터베이스] 파티셔닝(Partitioning) 파티셔닝(Partitioning) - Scale Out 방법 중 하나 - 큰 테이블이나 인덱스를 관리하기 쉬운 Partition이라는 작은 단위로 분할 1) 종류 (1) Pysical Partitioning - 서버를 여러 개 두어 부하 분산 (2) Logical Paritioning - 한 테이블의 각 레코드 또는 컬럼을 여러 테이블로 분산 2) 장점 - Partition 단위의 백업 및 복구 가능 - Partition 단위의 삽입/삭제/갱신으로 부하를 줄임 - 데이터 가용성 향상 3) 단점 - Table 간 Join 비용 4) 파티셔닝 방법 (1) 수평 파티셔닝(Sharding) - 테이블을 행 단위로 분할 - 하나의 테이블의 각 행을 여러 테이블에 분산 저장 - 스키마가 같은 테이블을 두 개 이상 .. 2020. 6. 24.
[데이터베이스] SQL Injection SQL Injection - 대표적인 웹 해킹 기법 - 웹 애플리케이션에서 데이터베이스에 질의하는 과정에 악의적인 SQL 문을 삽입해 인증을 우회하거나, 악의적인 쿼리문을 수행하는 공격법 1) 공격 유형 (1) 인증우회(AB, Auth Bypass) - 일반적으로 로그인 페이지를 타겟 - SQL 문의 True / False 논리적인 연산의 오류를 이용 - ex. 패스워드에 "or 1 = 1"을 삽입해 인증을 우회 (2) 데이터 노출 - 해당 웹 애플리케이션의 데이터 절취를 목적 - 악의적인 쿼리문으로 에러를 유발시켜 데이터나 데이터베이스의 정보를 노출시킴 2) 방어 방법 (1) 특수문자 검사 - 로그인 페이지처럼 사용자의 입력을 통해 쿼리문을 수행할 때, 특수문자 여부를 검사하는 로직을 수행 - 자바스크.. 2020. 6. 24.
[데이터베이스] 데이터베이스 풀(Database Pool) 데이터베이스 풀(Database Pool) - Connection Pool - 애플리케이션의 스레드에서 데이터베이스에 접근하기위해 Connection이 필요 - 데이터베이스와 Connection한 객체들을 미리 생성해 Pool에 저장해두었다가, 클라이언트의 요청이 들어올 때마다 사용/반환하는 방식 1) 데이터베이스 접근 과정 (1) 웹 컨테이너가 실행되면 데이터베이스와 연결된 Connection 객체들을 미리 생성해 Pool에 저장 (2) 클라이언트 요청 시 Pool에서 Connection 객체를 가져와 데이터베이스 접근 (3) 요청 처리가 끝나면 사용된 Connection 객체를 다시 Pool에 반환 2) 장점 - 매 연결마다 Connection 객체를 생성/제거하는 비용 감소 - 미리 생성된 Conn.. 2020. 6. 24.
[데이터베이스] 옵티마이저(Optimizer) 옵티마이저(Optimizer) 인덱스의 유무, 데이터 분산 또는 편향 정도의 통계 정보를 참조해 여러 실행 계획을 세우고 비용의 연산해 가장 낮은 비용을 가진 실행 계획을 선택하는 DBMS의 핵심 엔진 1) 실행 계획 - SQL에서 요구한 사항을 처리하기 위한 절차와 방법 - 동일한 SQL에 대해 결과를 내는 방법은 여러 가지지만 각 비용은 서로 다름 2) 사용 이유 - DB에서 데이터 조회나 저장에 많은 시간을 소모 - 그러므로 옵티마이저를 통해 쿼리에 소요되는 시간을 줄이고 DB 성능을 향상 3) 한정된 통계 자료로 최적화를 못할 경우? 수동으로 해줘야함 4) 옵티마이저의 목표 a. 전체 처리속도 최적화 b. 최초 응답속도 최적화 5) SQL 최적화 과정 a. 쿼리 수행을 위해 후보군이 될만한 실행 .. 2020. 6. 24.
[데이터베이스] 클러스터링(Clustering) 클러스터링(Clustering) - DB 분산 기법 중 하나로 DB 서버를 여러 개 두어 서버 한 대가 죽었을 때 대비할 수 있는 기법 1) Active - Active Clustering DB 서버를 여러 개 구성하는 데, 각 서버를 Active 상태로 둠 (+) 서버 하나가 죽더라도 다른 서버가 역할을 바로 수행하므로 서비스 중단이 없음 (+) CPU와 메모리 이용률을 올릴 수 있음 (-) 저장소 하나를 공유하게 되면 병목현상이 발생할 수 있음 (-) 서버를 여러대 한꺼번에 운영하므로 비용이 더 발생 2) Active - Standby Clustering 서버를 하나만 운영하고 나머지 서버는 Standby 상태로 둠 운영하고 있는 서버가 다운되었을 시에 Standby 상태의 서버를 Active상태로 .. 2020. 6. 24.
[데이터베이스] 레플리케이션(Replication) 레플리케이션(Replication) - DB Storage가 손상 또는 손실되었을 때의 대안으로 Storage를 복제하는 기법 1) 단순 백업 - Master DB에 CRUD Operation이 수행될 때마다 Slave DB에 바이너리 로그를 전달해 데이터 동기화 하는 방식 - Master DB가 손실되었을 때, Slave DB를 Master DB로 승격시키므로써 백업 기능을 수행 2) 부하 분산 - 기존 단순 백업 모델에서 Select 작업을 Slave DB에서 수행함으로써 Master DB의 부하를 분산 2020. 6. 24.