Materialized View
·
CS/데이터베이스
1. 구체화된 뷰Materialized View(이하 mv로 표기)는 이름 그대로 구체화된 뷰를 뜻한다. view가 가상 테이블로서 조회 요청이 들어오면 기본 테이블에서 실시간으로 데이터를 계산하여 데이터를 반환한다면, mv는 쿼리의 결과를 물리적 테이블로 저장해놓고 조회 요청이 들어오면 즉시 결과를 반환한다. view와는 다르게 물리적으로 저장된 상태이기 때문에 인덱스를 설정할 수 있고, 이로 인해 성능적인 면에서 이득을 볼 수 있다. 하지만 실시간으로 변경되는 데이터가 필요하다면, 새 result set 구성을 위해 refresh를 해야만 한다. 2. 실무에서의 MV 활용처음 mv의 존재를 알게 된 것은 현재 회사에 입사하고 시스템을 익히기 시작한 무렵이었다. mv에 대해 실습을 하기에 앞서,..
HTTP 변천사
·
CS/네트워크
HTTP(Hypertext Transfer Protocol)는 웹에서 데이터를 주고받는 서버-클라이언트 모델의 프로토콜이다. 여기서 데이터란 본래 HTML 문서와 같은 HyperText를 칭하였지만, 현재는 이미지, 오디오, 비디오 등 다양한 형태의 데이터를 전송할 수 있다. 오늘은 이 HTTP의 발전 과정을 살펴보고자 한다. 1. HTTP/0.9 (1991)문서화된 최초의 HTTP 버전은 0.9이다. 상태 코드, 헤더가 존재하지 않았으며, 지원되는 메소드 또한 GET뿐이었다. 그리고 HTTP의 이름에 걸맞게 HTML 파일만 전송 가능하였다. HTTP의 초기 버전답게 가장 단순한 형태를 갖고 있다. 2. HTTP/1.0 (1996)이어서 등장한 HTTP/1.0은 인터넷 인프라가 빠르게 변화하면서 더 다..
리플리케이션 실습
·
CS/데이터베이스
지난 포스팅에 이어 오늘은 리플리케이션 실습을 진행해보기로 한다.1. Replication with Docker간단한 실습을 위해 docker를 통해 replication을 구성해보기로 한다. docker-compose.yml다음과 같이 master 노드 1개와 slave 노드 2개로 구성한다.services: mysql-master: image: mysql:8.0 container_name: mysql-master restart: always environment: MYSQL_ROOT_PASSWORD: 1234 MYSQL_DATABASE: test MYSQL_USER: user MYSQL_PASSWORD: 1234 ports: ..
리플리케이션
·
CS/데이터베이스
1. ReplicationDB 리플리케이션은 데이터베이스에서 데이터의 복제본을 생성하여 여러 위치에 저장하는 과정을 의미한다. 많은 DBMS에서 이러한 리플리케이션을 지원하며, 일반적으로 서버 사이에 master-slave 관계를 설정하고 데이터 원본은 master에, 사본은 slave에 저장하는 방식이다. 이때, 쓰기 연산은 마스터 서버에서만 지원하고, 슬레이브 서버는 읽기 연산만을 지원하게 된다. 쓰기 연산이란 데이터의 상태를 변경하는 Insert, Update, Delete를 칭하며 이들은 마스터 서버에게만 전달된다. 대부분의 애플리케이션은 쓰기 연산보다 읽기 연산의 비중이 훨씬 높으므로 일반적으로 슬레이브의 수를 더 많이 두게 된다. 장점리플리케이션의 장점은 다음과 같이 정리할 수 있다.1..
유일키 생성 전략
·
CS/데이터베이스
분산 환경에서 똑같은 ID로 데이터를 저장하면 무슨 일이 발생할까?데이터에 접근할 때마다 노드에서 다른 결과를 받거나 업데이트 시에 충돌이 일어나는 등 여러 곤란한 문제가 생길 것이다. 따라서 여러 데이터베이스를 사용하는 샤딩 환경에선 해당 데이터의 ID가 유일성을 가진다는 것을 보장해야 한다. 1. 샤딩스피어 중복 ID 테스트이전 포스팅에서 다뤘던 샤딩스피어에선 중복ID로 데이터를 저장하면 어떻게 처리될까?? 다음과 같이 ID 생성 전략을 쓰지 않고 임의의 ID 값으로 Order를 저장해보도록 하겠다.@Transactionalpublic Order createOrder() { Order order = new Order(); order.setOrderId(12405L); return order..
샤딩 실습 (ShardingSphere)
·
CS/데이터베이스
1. 다양한 샤딩 솔루션들샤딩 기법을 정리해보면 크게 3가지 유형으로 나눠지게 된다. 1.1. DB에서 처리지난 포스팅에서 다뤘던 MongoDB, Cassandra의 경우가 이에 해당한다.물론 NoSQL뿐만 아니라 RDBMS에서도 이러한 샤딩 기능을 이용할 수 있는 방법들이 존재한다. ex) Spider, MySQL Fabric, PostgreSQL Citus 등 1.2. 애플리케이션 서버에서 처리DB에서 샤딩을 하게 된다면 특정 DBMS 종속적이게 된다는 단점이 생기게 된다. 이에 애플리케이션 서버에서 샤딩 로직을 구현하는 방법이 있다. Spring의 경우 DataSource 설정을 직접 커스텀하여 사용하는 사례를 찾아 볼 수 있었다. 우아한 형제의 DB 샤딩 사례: https://techblog.wo..
파티셔닝과 샤딩
·
CS/데이터베이스
0. 데이터베이스 분할의 필요성하나의 데이터베이스 테이블에 데이터가 계속 쌓여서 볼륨이 너무 커지게 되면, 읽기/쓰기 성능은 감소하게 된다. 이때 하나의 테이블이나 데이터베이스 서버를 분할함으로써 이러한 문제를 해결할 수 있다. 1. Partitioning 파티셔닝은 매우 큰 테이블을 여러 개의 테이블로 분할하는 작업이다. 큰 데이터를 여러 테이블로 나눠 저장하기 때문에 쿼리 성능이 개선될 수 있다. 이때, 데이터는 물리적으로 여러 테이블로 분산하여 저장되지만, 사용자는 마치 하나의 테이블에 접근하는 것과 같이 사용할 수 있다. 파티셔닝은 다음과 같이 row 기준으로 데이터를 나누는 수평 파티셔닝과 column 기준으로 데이터를 나누는 수직 파티셔닝이 존재한다. 1.1. 수평 파티셔닝모든 파티션은 동일..