시스템 설계 시 고려해야 하는 것 중에 데이터베이스의 다중화도 빠질 수 없다.도커로 직접 데이터베이스를 구성하여 운영을 했었는데 다중화는 꼭 해야 될 것이라고 생각했다. 찾아보니 MHA(Master High Availability)라는 솔루션을 알게 되었고, 혼자 구성하고 테스트를 하다가 Master 서버가 다운되었을 때 Slave 서버가 승격하지 못하는 상황에 부딪히고 원인과 해결 방법을 찾지 못한 채 더 이상 진행을 하지 못했었다. (다시 한번 도전해보도록..) - 관련 깃허브본 글에서는 데이터베이스의 다중화가 무엇이고 다중화를 진행하였을 때 동작 방식 그리고 장애가 발생하였을 때 어떻게 해결할 수 있는지에 대해 알아보려고 한다. 데이터베이스의 다중화와 필요성데이터베이스의 다중화는 말 그대로 데이터베..
오랜 기간동안 RDBMS는 데이터를 저장하고 관리하는데 표준적인 시스템으로 많이 사용되어 왔다.하지만 언제부턴가 NoSQL의 사용이 증가하기 시작했는데, 그 이유는 다음과 같다. 1. 2000년대 후반부터 데이터 저장 비용이 크게 감소했다.다음은 시간 흐름에 따른 데이터 MB 비용을 나타낸다. 가격은 1985년부터 점차 하락되기 시작해서 2000년대 쯤에는 크게 하락된 것을 볼 수 있다. (최근 2022년에는 1MB 당 0.000014 달러로, 계속 하락하고 있다는 것을 알 수 있다. - 참고 자료)데이터 저장 비용이 감소하면서, 중복 데이터를 저장하는 것이 비용 면에서 큰 부담이 되지 않을 수도 있다. 데이터 양이 많다고 가정하였을 때, RDBMS는 정규화 기법을 사용하고 데이터 중복을 최소화하여 저장..
이 글을 쓰기 이전에 . . 잘못된 쿼리를 작성하면서 데이터 조회 속도가 매우 느리다는 것을 알게되었다. (데이터를 가져오기 위해 다중 조인이 필요했고 복잡하다고 느꼈던 쿼리문에 대해서 동작에 이슈가 없는지만 체크했던게.. 😥) 성능 개선을 위한 여러가지 방법을 확인해봤지만 가장 쉽게 접근할 수 있었던 건 쿼리를 다시 작성하는 것이었다. 이 과정속에서 또 알아가는 건 내가 작성하는 쿼리의 실행계획을 확인할 수 있다는 것과 옵티마이저의 하는 일 이었다. . . . 옵티마이저는 쿼리를 최적으로 실행하기 위해 각 테이블의 데이터가 어떤 분포로 저장되어 있는지 통계 정보를 참조하고, 기본 데이터를 비교하여 최적의 실행 계획을 수립하는 작업을 담당한다. 종류 비용 기반 최적화(Cost-based optimizer..
내용을 읽기 전 용어에 대해 정의한다. 기본 테이블 : 물리적으로 실제 존재하는 테이블이다. 뷰 테이블 : 기본 테이블로부터 유도된 가상 테이블, 데이터 사전에만 있고 실제 데이터는 기본 테이블의 데이터를 사용한다. . . . 정의 하나 이상의 뷰 테이블은 기본 테이블로부터 유도되어 정의되는 가상 테이블이다. 기본 테이블처럼 로우와 컬럼을 포함하며, 컬럼은 기본테이블에 실제로 있는 컬럼이다. 장점 논리적 독립성 제공 뷰는 논리 테이블이므로 테이블의 구조가 변경되어도 뷰를 사용하는 응용 프로그램은 변경하지 않아도 된다. 사용자 데이터 관리 용이 복수 테이블에 존재하는 여러 종류의 데이터에 단순한 질의어 사용이 가능하다. 데이터 보안 용이 중요 보안 데이터를 저장 중인 테이블에는 접근 불허하며, 해당 테이블..
LOAD DATA 를 왜 썼을까에 대한 설명은 아래와 같다. 수십만건의 데이터를 특정 테이블에 입력해 달라는 요청이 왔다. 요청온 데이터는 그 많은 양의 insert 문이 담긴 sql 파일과 csv 파일이었다. 처음에 sql 파일을 보고 실행했더니 오랜 시간이 소요되어 LOAD DATA를 알아보게 되었다. . . . LOAD DATA 실행문은 텍스트 파일의 행을 빠른 속도로 테이블에 데이터를 입력한다. MySQL 서버의 LOAD DATA 명령도 내부적으로 MySQL 엔진과 스토리지 엔진의 호출 횟수를 최소화하고 엔진이 직접 데이터를 적재하기 때문에 일반적인 SELECT 명령과 비교했을 때 매우 빠르다고 한다. 내가 알고 있는 가능한 파일은 txt, csv 지만 더 다양한 파일을 활용할 수 있는지는 확인을..
컬럼에 배치 할 수 있는 값의 범위를 제어하는 제약 조건으로, 논리 표현식에서 값의 유효 여부를 결정한다. 문법 [CONSTRAINT [symbol]] CHECK (expr) [[NOT] ENFORCED] symbol 옵션이며, 제약조건의 이름을 명시한다. 최대 길이는 64자이다. expr 제약 조건을 각 행에 대하여 TRUE 또는 UNKNOWN(Null 일 경우)으로 평가해야 하는 Bool 표현식으로 지정한다. 조건이 FALSE로 평가되면 실패하고 제약 조건 위반(violation)이 발생한다. 특징 MySQL 5.7 에서 CHECK 제약 조건을 정의 할 수 있지만, 동작하지 않는다. The CHECK clause is parsed but ignored by all storage engines. MyS..
하나의 논리적인 작업 셋에 하나의 쿼리가 있든 두 개 이상의 쿼리가 있든 관계없이 논리적인 작업 셋 자체가 100% 적용되거나 아무것도 적용되지 않아야 함을 보장해 주는 것이다. 특징 원자성 (Atomicity) 트랜잭션이 DB에 모두 반영되거나, 전혀 반영되지 않아야 한다. 일관성 (Consistency) 트랜잭션의 작업 처리 결과가 항상 일관되어야 한다. 독립성 Isolation(Durability) 하나의 트랜잭션은 다른 트랜잭션에 끼어들 수 없고 독립적이어야 한다. 지속성 (Durability) 트랜잭션이 성공적으로 완료되면 영구적으로 결과에 반영되어야 한다. 상태 Active 트랜잭션이 실행중인 상태로, 모든 트랜잭션의 초기 상태이다. Partially Committed 트랜잭션이 부분적으로 커..
- Total
- Today
- Yesterday
- 정적변수
- syncronized
- nginx
- 추상클래스
- nosql
- JPA
- Security
- Hash
- Sticky Session
- spring boot
- Caching
- 오블완
- 티스토리챌린지
- 고정 세션
- 인터페이스
- HashSet
- object
- Red-Black Tree
- java
- 로드 밸런서
- fail-safe
- Spring
- 인스턴스변수
- HashMap
- @conditional
- AutoConfiguration
- fail-fast
- 자동구성
- Load Balancer
- 다중화
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |