성능 개선을 목적으로 병렬 컴퓨팅을 통해 데이터 적재, 색인 빌드, 쿼리 평가 등의 데이터베이스 기능들을 수행한다.
특징
다수의 마이크로프로세서를 동시에 사용하여 데이터 처리를 고속으로 수행한다.
주로 멀티프로세서 구조를 통한 병렬 처리를 가리킨다.
그외에 공유 메모리 구조, 공유 디스크 구조, 비공유 구조 등이 있다.
데이터베이스 분할(파티셔닝)
데이터베이스를 여러 부분으로 분할하는 것이다.
목적
데이터베이스 분할은 중요한 튜닝기법으로 데이터가 너무 커져서, 조회하는 시간이 길어질 때 또는 관리 용이성, 성능, 가용성 등의 향상을 이유로 행해지는 것이 일반적이다. 분할된 각 부분을 '파티션'이라고 부른다.
특징
가장 일반적인 것은 분산 데이터베이스 분할 이다. 각 파티션은 여러 노드에 분산 배치되어 사용자가 각 노드에서 로컬 트랜잭션을 수행할 수 있다. 이것은 가용성과 보안을유지 하면서 특정 뷰에 관한 일반 트랜잭션의 성능을 향상시킨다.
파티션 각각이 작은 데이터베이스가 되도록 분할하는 방법과 하나의 테이블만 같이 선택된 요소만 분리하는 방법이 있다.
행과 열로 분할 기법 구분
수평 분할
하나의 테이블의 각 행을 다른 테이블에 분산시키는 것이다. 예를 들어 방대한 고객 데이터 테이블을 성별에 따라 '남녀'로 나누어 CustomerMen과 CustomerWomen 두 개의 테이블로 분할한다. 테이블은 2개로 분할되지만, 모든 고객을 나타내기 위해 양자를 결합한 뷰를 생성하면 된다.
수직 분할
테이블의 일부 열을 빼내는 형태로 분할한다. 관계의 정규화는 본질적으로 수직 분할에 관련된 과정이다. 수직 분할에는 여러 저장 장치를 사용할 수도 있고, 예를 들어 별로 사용되지 않는 열이나 매우 자릿수가 많은 열을 다른 장치에 두는 등의 조치를 생각할 수 있다. 명시적으로 하거나, 암묵적으로 하는 경우도 있지만, 이런 종류의 분할을 ‘열 분할’(row splitting)이라고도 부른다. 자주 묻는 수직 분할 열 내용의 사용 빈도에 따라 분할하는 것이다. 분할된 테이블들을 포함하는 뷰를 생성하면 원래의 경우보다 성능이 저하되지만, 사용 빈도가 높은 데이터에만 액세스할 경우 성능이 향상된다. 예를 들어, 뉴스를 서비스할 때, 고객들은 최근의 데이터를 가장 많이 조회할 것이다. 이 경우 1개월 전의 데이터를 다른 테이블에 두면, 훨씬 효율적으로 검색할 수 있을 것이다.
분할 키 기준 분할 기법 구분
범위 분할
분할 키 값이 범위 내에 있는지 여부로 구분한다.
예를 들어, 우편 번호를 분할 키로 수평분할하는 경우이다. 또한 일별, 월별, 분기별 등의 순차적인 데이터를 관리하는 테이블에 많이 사용된다.
목록 분할
특정 컬럼의 특정 값을 기준으로 파티셔닝을 하는 방식이다.
예를 들어, Country 라는 컬럼의 값이 Iceland , Norway , Sweden , Finland , Denmark 중 하나에 있는 행을 빼낼 때 북유럽 국가 파티션을 구축 할 수 있다.
특정 파티션에 저장 될 데이터에 대한 명시적 제어가 가능하며 주로 이질적인 값이 많지 않고 분포도가 비슷하고 대소문자를 구분하는데 허용문자 외 다른 문자를 입력시 에러가 발생한다. 다양한 SQL의 액세스 패스에서 해당 컬럼의 조건이 많이 들어오는 경우에 유용하게 사용된다.
해시 분할
특정 컬럼 값에 해시 함수를 적용하여 분할하는 방식으로, 데이터의 관리 보다는 성능 향상에 목적을 둔다.
예를 들어, 4개의 파티션으로 분할하는 경우 해시 함수는 0-3의 정수를 돌려준다.
레인지 파티셔닝은 각 범위에 따라 데이터의 양이 일정하지 않아 분포도가 일정하지 않은 단점이 있지만, 해시 파티셔닝은 이러한 단점을 보완하여 일정한 분포도를 가진 파티션으로 나누고, 균등한 분포도를 가질 수 있도록 조율하여 병렬 프로세싱으로 성능을 높인다. 실제로 분포도를 정의하기 어려운 테이블을 파티셔닝을 할 때 많이 이용하고 2의 제곱수로 파티셔닝하는 것이 일반적이다. 해시 파티셔닝으로 구분된 파티션들은 동일한 논리, 물리적 속성을 가진다. 또한 레인지 파티션과 달리 각 파티션에 지정된 값들을 데이터베이스 관리 시스템이 결정하므로 각 파티션에 어떤 값들이 들어있는지 알 수가 없다. 하지만 대용량의 분포도가 일정치 않은 테이블을 마이그레이션 할 때는 프로그램 병렬 방식과 유용하게 쓰일 수 있다.
합성 분할
상기 기술을 결합하는 것을 의미한다. 예를 들면 먼저 범위 분할을 하고, 다음에 해시 분할 같은 것을 생각한다. 컨시스턴트 해시법은 해시 분할 및 목록 분할의 합성으로 간주 될 수 있고 키 공간을 해시 축소하므로써 알람할 수 있게 한다.
라운드로빈 분할
라운드로빈 분할은 파티션에 행의 고른 분포를 원할 때 사용한다. 그러나, 해시분할과 달리 분할 칼럼을 명시할 필요가 없다. 라운드 로빈 분할로 회전하면서 새로운 행이 파티션에 할당된다. 테이블은 기본키가 반드시 필요하진 않다.
DevOps, CI(Continuous Integration), CD(Continuous Delivery) 가 무엇인지 알아보고 등장배경 및 필요성을 알아본다.
👬→🙍DevOps의 등장
전통적인 개발 조직은 개발자와 오퍼레이터 두 부류로 나뉘어 운영되었다. 개발자는 비즈니스 요구사항에 따라 코드를 완성합니다. 빠른 시간 내에 요구사항을 충족시켜, 필요로 하는 기능을 완성시키는 데 기여합니다. 그리고 오퍼레이트는 완성된 소스코드를 빌드하고 배포합니다. 시간을 준수하여 실수 없이 코드를 배포하는데 집중하며, 업무를 자동화 하는데 기여합니다. 이렇게 애플리케이션을 실제로 서비스하는데까지 두 역할이 서로 다른 목표를 위해 업무를 수행하다보니 시간이 오래 걸리는 이슈에 부딪히게 되었습니다. 그래서 이를 통합적으로 수행하고자 하는 니즈가 DevOps 문화이고 이를 실현하는 DevOps 조직이 출현하게 되었습니다.
🏭CI/CD 의 등장
그러나 소프트웨어 개발 수명 주기는 점점 복잡해지고 업데이트와 배포가 잦아지는 환경 속에서 업무 효율을 낼 수 있는 도구를 필요로 하게 되었습니다. CI/CD는 '자동화된' 지속적인 통합과 배포를 의미합니다. CI 단계에서는 자동화된 빌드 및 테스트가 수행된 후, 개발자가 코드 변경을 레포지토리에 정기적으로 병합하는 개발을 수행합니다. CD 단계에서는 코드 변경 사항을 레포지토리에서 고객이 사용 가능한 프로덕션 환경까지 자동으로 릴리스하는 개발을 수행합니다. (이 둘은 서로 다른 역할이지만 보통 함께 구축되기 때문에 CI, CD를 묶어서 부릅니다.) 이를 통해 응용 프로그램의 빌드, 테스트 및 배포의 자동화를 통해 애플리케이션을 더 짧은 주기로 고객에게 제공하게 됩니다.
👎온프레미스 상에서의 CI/CD 구축의 어려움
한 설문조사 결과 CI/CD를 업무에 도입하고 있지 못하는 가장 큰 이유로 스킬셋의 부족함, 툴 선정의 어려움, Best Practice에 대한 지식 부족, 전통적 개발 방식에서 벗어나기 어려움 등이 뽑혔습니다. 실제로 온프레미스 상에서 CI/CD 환경을 구축하는 것은 쉽지 않습니다. 여러 가지 제품 중에 우리 회사에 가장 적합한 제품을 조사하고 검증해야 합니다. 제품을 선택한 이후에는 수많은 환경을 구축하고 연계하고 운영까지 하는데 많은 시간과 공수가 들게 됩니다.
👍클라우드 상에서의 CI/CD 효과
하지만 클라우드에서라면 앞서 한 고민을 덜어줄 수 있습니다. 직접 구축할 필요 없이 클라우드 서비스 제공자가 만든 CI/CD 도구를 쉽게 사용할 수 있습니다. 빠르고 쉽게 리소스를 생성할 수 있는 클라우드의 장점을 누릴 수 있습니다. 온프레미스 상에서 존재했던 복잡한 방화벽 설정이 없고, 보안 환경을 간편하게 설정할 수 있습니다.
❌주의. 1.6.9 버전(websocket 설정하기 위해선 1.6.10 버전 이상으로 설치해야 한다.)
Dockerfile 생성
sudo vim Dockerfile # 파일 새로 만들기 (열기)
# Dockerfile 내용
FROM ubuntu
RUN apt-get update
RUN apt-get install -y mosquitto
RUN apt-get install -y mosquitto-clients
CMD mosquitto # mosquitto 실행 명령
cat Dockerfile # 파일 저장 확인
Dockerfile 이미지로 만들기
[issue]
error checking context: 'no permission to read from '/home/ubuntu/.Xauthority''.