목록STUDY/DATABASE (9)
공부해봅시당

데이터베이스 성능 최적화와 관리 효율성을 높이기 위한 다양한 전략은 아래와 같이 다양하다. 1) Denormalization(반정규화) 2) Partitioning(파티셔닝) 3) Sharding(샤딩) 4) Replication(리플리케이션) 5) Clustering(클러스터링) 이번 시간에는 리플리케이션에 대해 알아보자. 1. Replication(리플리케이션) 1-1. 배경 아주 단순한 Database를 구성할 때는 아래 그림처럼 하나의 서버와 하나의 Database를 구성하게 된다. 하지만 사용자는 점점 많아지고 Database는 많은 Query를 처리하기엔 너무 힘든 상황이 오게 된다. Query의 대부분을 차지하는 `select`를 어느 정도 해결하기 위해 Replication이라는 방법이 나..

데이터베이스 성능 최적화와 관리 효율성을 높이기 위한 다양한 전략은 아래와 같이 다양하다. 1) Denormalization(반정규화) 2) Partitioning(파티셔닝) 3) Sharding(샤딩) 4) Replication(리플리케이션) 5) Clustering(클러스터링) 이번 시간에는 파티셔닝, 샤딩에 대해 알아보자. 반정규화에 대해서는 링크를 참고하길 바란다. 1. Partitioning(파티셔닝) Database Table을 더 작은 Table들로 나눈 것 파티셔닝은 아래 두 가지 종류로 나뉜다. Vertical Partitioning Horizontal Partitioning `Column`을 기준으로 Table을 나누는 방식 `Row`를 기준으로 Table을 나누는 방식 1-1. Ver..

1. 정규화란? `정규화`란 이상 문제를 해결하기 위해 속성들 끼리의 종속 관계를 분석하여 여러개의 릴레이션으로 분해하는 과정이다. 일반적으로 테이블을 여러개로 분해하면 속도는 상대적으로 느려질 수 있지만, 분해하지 않으면 `이상 문제`들이 발생하게 된다. 아래에서 어떤 `이상 문제`들이 발생할 수 있는지 살펴보자. * 정규화? 정규형? 뀨? 뭐지? 여기서 정규화와 정규형이라는 용어가 혼동될 수 있는데, 정규화를 하면 정규형이 달성되는 것이다. 정규화는 과정이고, 정규형은 그 과정을 통해 도달하는 목표 상태 또는 단계를 지칭한다. 따라서 `제1정규형을 만족하기 위해 제1정규화를 진행한다`는 표현이 나오는 것이다. 2. 이상(Anomaly) 정규화를 거치지 않아 데이터베이스내에 데이터들이 불필요하게 중복되..

1. 데이터 독립성이란? `데이터 독립성`이란 데이터베이스의 구조와 데이터의 내용이 서로 영향을 미치지 않는 것을 의미한다. 데이터 독립성은 `논리적 데이터 독립성`과 `물리적 데이터 독립성`으로 나눌 수 있다. 1-1. 논리적 데이터 독립성 `논리적 데이터 독립성`은 데이터베이스의 논리적 구조가 변경되어도 응용 프로그램이나 사용자의 요구에 영향을 주지 않는 것을 말한다. 예를 들어, 테이블의 속성이나 관계가 추가되거나 삭제되어도 기존의 쿼리나 트랜잭션은 그대로 유지될 수 있다. 1-2. 물리적 데이터 독립성 `물리적 데이터 독립성`은 데이터베이스의 물리적 구조가 변경되어도 논리적 구조나 데이터의 내용에 영향을 주지 않는 것을 말한다. 예를 들어, 파일의 저장 방식이나 인덱스의 구성이 바뀌어도 데이터베이..

트랜잭션이란? 트랜잭션은 하나의 논리적 작업 단위를 구성하는 일련의 연산들의 집합이다. 다시 말해 '여러 읽기/쓰기를 논리적으로 하나로 묶은 것'을 말한다고 표현할 수 있다. (위 표현은 https://www.youtube.com/watch?v=urpF7jwVNWs 링크의 영상을 참고하였음) 트랜잭션의 가장 큰 특징은 진행 과정에 있다. 여기서 커밋은 데이터베이스에 결과를 반영하는 것이고, 롤백은 결과를 반영하지 않는 것을 말한다. 만약 트랜잭션이 없다면 문제가 발생하더라도 데이터베이스가 데이터 일관성을 보장할 수 없기 때문에 소프트웨어가 데이터 일관성을 보장해야 하는 문제가 생긴다. (이와 관련하여 자세한 사항은 이전에 작성한 https://study0304.tistory.com/3 글에서 참고하길 바..

JDBC란? JDBC는 Java Database Connectivity의 약자로 자바에서 데이터베이스에 연결하기 위한 인터페이스이다. 이전에 RDBMS를 지원하는 3대 DB에 대해 알아보았다. RDBMS를 지원하는 3대 DB에 따라 SQL문이 다를 수 있다는 것도 이미 설명한 바 있다. RDBMS를 지원하는 3대 DB의 특징은 이 뿐만이 아니다. 각 DB를 사용하기 위한 SQL문을 실행하기 위한 실행 도구는 DB Client 프로그램으로, 각 DB마다 연결/인증, 문장실행, 결과패치 순으로 진행된다. 하지만 DB Client 프로그램을 일반인이 사용하기란 쉽지 않다. SQL 언어를 알아야 사용할 수 있기 때문이다. 더해, 일반인은 업무용 프로그램만 사용할 수 있으면 되기 때문에 굳이 SQL 언어를 학습하..
InnoDB와 MyISAM InnoDB와 MyISAM은 모두 MySQL의 스토리지 엔진이다. 스토리지 엔진이 중요한 이유는 locking 방식 때문이다. locking 방식에 따라 스토리지 엔진이 달라질 수 있으므로 데이터베이스를 사용할 때 함께 고려해야 할 중요한 사안이라고 할 수 있다. 아래는 MyISAM과 InnoDB의 특징이다. MyISAM 한번에 대량의 Insert 작업을 할 때 유용함 읽기 위주의 간단한 작업에서 빠른 속도를 보임 -> Read Only 기능이 많은 서비스일수록 유용함 전문검색이 필요할 경우 유용함 트랜잭션이나 복구 등이 필요 없는 경우에 적합함 Row-level Locking(행 수준의 잠금)이 지원되지 않음 Row-level Locking(행 수준의 잠금) : 한 테이블 내..

대표적인 3대 DB를 알기 전에 먼저 대표적인 3대 DB란 기본적으로, 현재 가장 대중적으로 쓰이는 RDBMS를 효율적으로 사용하기 위한 언어를 제공하는 시스템을 말한다. 따라서 3대 DB를 알아보기 전에 간단하게 RDBMS이 무엇인지만 알고 넘어가려고 한다. RDBMS란? RDBMS란 Relational DataBase Management System의 약자로, 말 그대로 관계형 데이터 베이스 시스템을 뜻한다. 또한 이름에서부터 예상할 수 있겠지만 RDBMS는 DBMS의 한 종류이다. DBMS에는 한 가지만 있는 것이 아니라 여러 가지 종류가 있다는 것이다. 아래는 위 4가지 종류를 그림으로 간략히 표현한 것이다. 오늘의 목표는 대표적인 3대 DB를 알아보는 것인데, 대표적인 3대 DB 모두 RDBMS..