==💾 데이터베이스 핵심 요약==

  • DBMS는 데이터베이스 관리를 위한 핵심 시스템으로, 쿼리 처리기와 저장 시스템으로 구성.

  • 트랜잭션의 ACID 특성은 데이터의 일관성과 무결성을 보장하는 핵심 원칙.

  • 대규모 데이터를 다루는 스케일업 및 스케일아웃 전략인 파티셔닝과 샤딩의 차이점을 상세히 설명.

개발자를 위한 데이터베이스 완벽 핸드북

1. 데이터베이스는 왜 존재하나: DBMS의 탄생 배경

오늘날 모든 애플리케이션의 근간에는 데이터베이스가 있다. 우리가 사용하는 소셜 미디어, 쇼핑몰, 뱅킹 앱 등은 모두 데이터를 저장하고 관리하는 체계적인 시스템에 의존한다. 그렇다면 데이터베이스가 없던 시절, 개발자들은 데이터를 어떻게 관리했을까.

초기 컴퓨터 시스템에서는 파일을 이용해 데이터를 저장했다. 사용자 정보는 user.txt, 주문 정보는 order.csv와 같은 개별 파일에 저장했다. 이 방식은 간단한 데이터를 다룰 때는 편리했지만, 몇 가지 심각한 한계를 노출했다.

  • 데이터 중복과 일관성 문제: 같은 정보(예: 고객의 이름과 주소)가 여러 파일에 중복 저장되면서, 한 파일을 수정해도 다른 파일이 업데이트되지 않아 데이터가 불일치하는 현상이 발생.

  • 동시성 제어의 어려움: 여러 사용자가 동시에 같은 파일에 접근하려 할 때, 한 사용자가 파일을 쓰는 동안 다른 사용자는 접근할 수 없는 문제가 발생.

  • 보안 및 복구 문제: 파일 단위의 접근 제어가 복잡하고, 시스템 오류 발생 시 파일이 손상되면 데이터 복구가 매우 어려웠다.

  • 데이터 종속성: 애플리케이션 로직이 파일 구조에 직접적으로 의존하여 파일 포맷이 변경되면 모든 애플리케이션 코드를 수정해야 했다.

이러한 문제를 해결하기 위해 등장한 것이 바로 데이터베이스 관리 시스템(DBMS, Database Management System) 이다. DBMS는 데이터와 애플리케이션의 중간에서 데이터를 체계적으로 저장, 관리, 제어하고 안전하게 접근하도록 돕는 소프트웨어 시스템이다. DBMS의 등장으로 개발자는 데이터 관리의 복잡성에서 벗어나 비즈니스 로직에만 집중할 수 있게 되었다.

2. 데이터베이스 관리 시스템 DBMS의 구조와 역할

DBMS는 단순히 데이터를 저장하는 창고가 아니라, 사용자의 요청을 처리하고 데이터를 효율적으로 관리하는 복잡한 시스템이다. DBMS의 내부를 들여다보면 크게 쿼리 처리기저장 시스템 두 부분으로 나뉜다. 이 두 시스템은 마치 레스토랑의 주문을 받는 매니저와 주방장처럼 유기적으로 협력한다.

쿼리 처리기 (Query Processor)

쿼리 처리기는 사용자가 보낸 SQL(Structured Query Language) 문을 해석하고 실행 계획을 수립하는 역할을 맡는다. 이는 다음과 같은 세부 단계로 이루어진다.

  1. 파서(Parser): 사용자의 SQL 문법이 올바른지 확인하고, 내부적으로 이해할 수 있는 트리(Tree) 형태로 변환.

  2. 옵티마이저(Optimizer): 이 단계가 쿼리 처리기의 핵심이다. 옵티마이저는 변환된 쿼리를 실행하는 데 가장 효율적인 방법을 탐색한다. 예를 들어, SELECT * FROM Orders WHERE CustomerID = 100 AND OrderDate > '2023-01-01'라는 쿼리가 있을 때, 어떤 인덱스를 먼저 사용할지, 테이블을 어떤 순서로 조인할지 등 수많은 경우의 수를 따져 최적의 실행 계획을 수립한다.

  3. 실행기(Executor): 옵티마이저가 수립한 최적의 실행 계획에 따라 실제로 데이터를 읽거나 쓰는 작업을 수행. 이 작업은 저장 시스템에 전달되어 최종적으로 완료된다.

저장 시스템 (Storage Engine)

저장 시스템은 실제 디스크에 데이터를 저장하고, 버퍼를 관리하며, 트랜잭션을 제어하는 역할을 한다. 이 시스템은 DBMS의 심장부와 같다.

  • 버퍼 관리자(Buffer Manager): 디스크는 메모리(RAM)에 비해 매우 느리다. 버퍼 관리자는 자주 사용하는 데이터를 메모리에 캐싱(Caching)하여 디스크 접근 횟수를 최소화함으로써 성능을 높인다.

  • 트랜잭션 관리자(Transaction Manager): 여러 쿼리가 동시에 실행될 때 데이터의 일관성과 무결성을 보장한다. 아래에서 자세히 다룰 트랜잭션의 ACID 특성을 제어하는 부분이 바로 여기다.

  • 파일 관리자(File Manager): 실제 디스크에 데이터를 어떻게 저장하고 읽어올지 관리한다. 파일의 할당, 해제, 인덱스 관리 등을 담당한다.

3. 데이터의 무결성 보증, 트랜잭션의 ACID 특성

트랜잭션(Transaction)은 데이터베이스에서 하나의 논리적인 작업 단위를 뜻한다. 즉, 여러 개의 연산(SQL 쿼리)이 묶여 하나의 작업으로 실행되거나 모두 실패해야 하는 경우를 말한다. 은행 계좌 이체 예시가 가장 대표적이다.

트랜잭션은 데이터의 일관성과 무결성을 보장하기 위해 다음과 같은 ACID 특성을 반드시 만족해야 한다.

  • Atomicity (원자성): “All or nothing”. 트랜잭션 내의 모든 작업은 전부 성공하거나, 전부 실패하여 아무 작업도 일어나지 않은 상태로 돌아가야 한다. 만약 중간에 오류가 발생하면, 트랜잭션은 롤백(Rollback)되어 이전 상태로 복귀한다.

    • 예시: 계좌 이체 시 송금자의 돈이 빠져나갔으나 수신자의 돈이 입금되기 전 시스템이 다운되면, 송금자의 돈도 원상 복귀되어야 한다.
  • Consistency (일관성): 트랜잭션이 성공적으로 완료되면 데이터베이스는 언제나 일관된 상태를 유지해야 한다. 즉, 데이터베이스의 규칙(무결성 제약조건 등)을 위반하는 트랜잭션은 허용되지 않는다.

    • 예시: 계좌 잔액의 총합은 이체 전후로 항상 같아야 한다는 규칙이 있다. 이체 트랜잭션이 완료된 후에도 이 규칙은 유효해야 한다.
  • Isolation (격리성): 동시에 실행되는 여러 트랜잭션은 서로 간에 영향을 미치지 않고 독립적으로 실행되어야 한다. 마치 각 트랜잭션이 데이터베이스를 독점적으로 사용하고 있는 것처럼 보여야 한다.

    • 심화: 실제 DBMS에서는 성능을 위해 완벽한 격리를 포기하고 여러 **격리 수준(Isolation Level)**을 제공한다.

      • Read Uncommitted: 커밋되지 않은 데이터도 읽을 수 있어 Dirty Read 문제가 발생.

      • Read Committed: 커밋된 데이터만 읽을 수 있지만, 같은 트랜잭션 내에서 두 번 조회 시 다른 결과가 나오는 Non-repeatable Read 문제 발생.

      • Repeatable Read: 한 트랜잭션 내에서 같은 데이터를 여러 번 읽어도 동일한 결과 보장. 그러나 새로운 레코드가 삽입되어 결과가 달라지는 Phantom Read 문제 발생.

      • Serializable: 가장 높은 격리 수준으로, 모든 문제가 해결되지만 동시성을 크게 떨어뜨린다.

  • Durability (지속성): 트랜잭션이 성공적으로 커밋되면, 그 결과는 시스템 장애(예: 정전)가 발생해도 영구적으로 보존되어야 한다. 이는 주로 디스크에 데이터를 저장하고, WAL(Write-Ahead Logging)과 같은 복구 메커니즘을 통해 보장한다.

4. 관계형 데이터베이스(SQL)와 비관계형(NoSQL)의 차이

데이터베이스는 크게 관계형(RDBMS)과 비관계형(NoSQL)으로 나눌 수 있다. 이 둘의 가장 근본적인 차이는 스키마에 있다.

  • 관계형 데이터베이스(SQL): 테이블에 데이터를 저장하기 전, 데이터의 구조와 형식을 엄격하게 정의하는 고정 스키마를 사용한다. 이 덕분에 데이터의 일관성이 강력하게 보장되지만, 스키마를 변경하려면 복잡한 과정을 거쳐야 한다.

  • 비관계형 데이터베이스(NoSQL): 정해진 스키마가 없어 데이터를 자유롭게 저장할 수 있다. 이는 유연한 데이터 모델을 가능하게 하고, 대규모 분산 환경에 유리하지만, 데이터의 일관성을 완벽하게 보장하기는 어렵다.

특징관계형 데이터베이스 (RDBMS, SQL)비관계형 데이터베이스 (NoSQL)
데이터 모델테이블 형태 (행과 열)문서, 키-값, 컬럼, 그래프 등 다양
스키마고정 스키마 (엄격)유연한 스키마 (동적)
확장성수직 확장(Scale-up)에 유리수평 확장(Scale-out)에 유리
트랜잭션ACID 트랜잭션 보장ACID 보장이 어렵고, BASE 모델을 지향
용도복잡한 쿼리, 일관성 중시대용량 데이터, 고속 읽기, 유연성 중시

NoSQL은 데이터 모델에 따라 여러 종류로 나뉜다.

  • 키-값(Key-Value) 모델: 가장 단순한 형태로, 키와 값의 쌍으로 저장. (예: Redis)

  • 문서(Document) 모델: JSON 또는 BSON 같은 문서 형태로 저장. (예: MongoDB)

  • 컬럼(Column) 모델: 컬럼 단위로 데이터를 저장. (예: Cassandra)

  • 그래프(Graph) 모델: 데이터 간의 관계를 그래프로 표현. (예: Neo4j)

5. 대용량 데이터 관리의 핵심, 스케일업과 스케일아웃

데이터의 양이 폭발적으로 증가하면, 기존 시스템의 성능 한계에 부딪힌다. 이 문제를 해결하기 위한 두 가지 전략이 **스케일업(Scale-up)**과 **스케일아웃(Scale-out)**이다.

  • 스케일업(수직 확장): 기존 서버의 하드웨어 성능을 높이는 방식이다. CPU, RAM, 디스크를 업그레이드하여 더 많은 데이터를 처리할 수 있도록 한다. 구현이 비교적 간단하지만, 하드웨어 성능의 물리적인 한계가 있고 비용이 매우 비싸다.

  • 스케일아웃(수평 확장): 여러 대의 서버를 추가하여 전체 시스템의 성능을 높이는 방식이다. 서버 한 대의 성능은 그대로 두고, 데이터베이스를 여러 서버에 분산하여 처리량을 늘린다. 이론적으로 무한 확장이 가능하고 비교적 저렴하지만, 분산 시스템을 관리하는 복잡성이 따른다.

파티셔닝과 샤딩은 바로 이 스케일아웃 전략을 구현하는 핵심 기술이다.

6. 파티셔닝과 샤딩 심층 분석 (수직 vs 수평 분할)

파티셔닝 (Partitioning)

정의: 하나의 테이블을 논리적으로 여러 개의 작은 테이블인 파티션으로 나누는 기법이다. 이 파티션들은 하나의 데이터베이스 서버 내에 존재한다. 파티셔닝은 대용량 테이블의 성능을 향상시키는 데 주로 사용된다.

  • 파티셔닝의 종류:

    • 레인지 파티셔닝(Range Partitioning): 특정 컬럼 값의 범위를 기준으로 파티션을 나눈다. (예: 연도별로 데이터 분할)

    • 리스트 파티셔닝(List Partitioning): 특정 컬럼에 지정된 값 목록을 기준으로 분할한다. (예: 지역별로 데이터 분할)

    • 해시 파티셔닝(Hash Partitioning): 해시 함수를 적용하여 나온 값을 기준으로 분할한다. 데이터가 균등하게 분산되는 장점이 있다.

  • 장점:

    • 성능 향상: 쿼리 대상이 특정 파티션으로 한정되어 전체 데이터를 스캔하지 않아도 된다.

    • 관리 용이: 파티션 단위로 백업, 복구, 삭제 작업이 가능해진다.

  • 단점:

    • 테이블 간 조인 비용: 서로 다른 파티션에 속한 데이터 간의 조인(JOIN) 쿼리는 비용이 증가한다.

    • 수직 확장 한계: 결국 하나의 물리적인 서버에 속해 있기 때문에 서버의 하드웨어 한계를 넘을 수는 없다.

샤딩 (Sharding)

정의: 데이터베이스를 여러 대의 독립된 서버로 분산하여 저장하는 기법이다. 이는 물리적인 스케일아웃 전략으로, 각 서버를 샤드(Shard) 라고 부른다. 샤딩은 파티셔닝의 수평적 확장 버전이며, 진정한 의미의 분산 시스템을 구축한다.

  • 샤딩의 핵심: 샤드 키(Shard Key): 데이터를 어떤 샤드에 저장할지 결정하는 기준이 되는 컬럼이다. 사용자 ID나 지리적 위치 등이 샤드 키가 될 수 있다. 샤딩의 성능은 샤드 키의 설계에 달려 있다.

  • 샤딩 전략:

    • 해시 기반 샤딩 (Hash-based Sharding): 샤드 키에 해시 함수를 적용하여 샤드를 결정한다. 데이터가 균등하게 분산되는 장점이 있지만, 샤드 개수가 변경되면 모든 데이터의 위치를 다시 계산해야 하는 데이터 재분배(Resharding) 문제가 발생한다.

    • 범위 기반 샤딩 (Range-based Sharding): 샤드 키의 범위를 미리 정해 각 샤드에 할당한다. (예: 사용자 ID 1100은 샤드 A, 101200은 샤드 B). 특정 범위에 트래픽이 몰리는 핫스팟(Hotspot) 문제가 발생할 수 있다.

    • 일관된 해싱 (Consistent Hashing): 해시 기반 샤딩의 재분배 문제를 해결하는 고급 기법. 샤드 노드가 추가되거나 제거될 때, 전체 데이터가 아닌 일부 데이터만 재배치하면 된다.

  • 장점:

    • 무한에 가까운 확장성: 서버를 추가하는 만큼 성능을 선형적으로 확장할 수 있다.

    • 장애 격리: 하나의 샤드에 문제가 발생해도 다른 샤드에는 영향을 미치지 않는다.

  • 단점:

    • 복잡한 시스템 관리: 여러 서버를 관리해야 하며, 샤드 간 트랜잭션이나 조인 쿼리 구현이 매우 복잡하다.

    • 데이터 불균형: 샤딩 키 설계에 실패하면 특정 샤드에만 데이터가 몰릴 수 있다.

이 핸드북을 통해 데이터베이스의 핵심 개념과 기술을 깊이 있게 이해하는 데 도움이 되었기를 바랍니다. 혹시 트랜잭션의 격리 수준에 대해 더 자세히 알아보고 싶거나, 샤딩을 직접 설계하는 방법에 대해 논의하고 싶다면 언제든 말씀해 주세요.

1. 💽 DBMS (Database Management System)

  • ==정의==: 데이터베이스 내 데이터 접근을 돕는 시스템
  • ==역할==:
    • 사용자의 쿼리문(SELECT, INSERT, UPDATE 등) 해석 및 실행
    • 데이터와 사용자 사이에서 중개 역할 수행
  • ==구성 요소==:
    • 질의 처리기: 쿼리 해석, 캐싱 등 수행
    • 저장 시스템: 데이터 입력/출력 관리

2. 🔄 트랜잭션 (Transaction)

  • ==정의==: ==모두 처리되거나, 모두 처리되지 않아야 하는 일련의 작업 묶음==
  • ==예시==: 은행 시스템에서 계좌 이체 작업
  • ==ACID 특성==:
    • ==원자성 (Atomicity)==: 작업은 부분적으로 실행되거나 중단되지 않아야 함.
    • ==일관성 (Consistency)==: 트랜잭션 완료 후, 일관적인 DB 상태 유지.
    • ==격리성 (Isolation)==: 동시 실행 트랜잭션 간 상호 영향 방지.
    • ==지속성 (Durability)==: 트랜잭션 결과는 영구적으로 반영.

3. 🚀 NoSQL (Not Only SQL)

  • ==정의==: SQL을 보완하는 데이터 관리 접근 방식
  • ==특징==:
    • 스키마 없음 (유연한 데이터 구조)
    • 관계형 데이터베이스와 달리 테이블 간 관계를 명시적으로 저장하지 않음
  • ==장점==:
    • 빠른 데이터 조회/삽입 속도
    • 대량의 분산 데이터 저장에 적합

4. ✂️ 파티셔닝 (Partitioning)

  • ==정의==: 테이블을 컬럼(세로) 단위로 분할
  • ==종류==: 버티컬 파티셔닝
  • ==장점==: 업데이트, 삽입 작업 분산으로 성능 향상
  • ==단점==:
    • 테이블 간 조인 비용 증가
    • 인덱스를 파티션 별도로 구성 불가

5. 🔪 샤딩 (Sharding)

  • ==정의==: 테이블을 로우(가로) 단위로 분할
  • ==종류==: 홀리젠탈 파티셔닝
  • ==구현 방식==:
    • ==해시 샤딩==: 해시 함수 결과에 따라 데이터 분배
    • ==다이나믹 샤딩==: 데이터 범위에 따라 분할, 확장 용이

대본

[음악] 네 안녕하세요 자오 입니다 4 이번시간은 데이터베이스 시간입니다 자 설명을 조금 최대한 께 간결하고 쉽게 해서 끝내려고 인데 아 이게 계속 찍다 보니까 개도 영상이 길어지네요 그래서 이번엔 한번 최대한 간결하게 한번 찌 떨어 노력을 1매 오겠습니다 네 그럼 시작해볼게요 자 우선은 dbms 요자 tv ms 는 페이 db 데이터베이스 매니지먼트 시스템으로 데이터베이스의 내에 있는 데이터에 접근 하도록 도와주는 시스템이에요 자 쉽게 어떻게 내면은 사용자가 이렇게 써요 내가 이렇게 사용자가 셀렉트 뭐 인써트 업데이트 이렇게 쓰 져 분명히 에 데이터가 2 케이스 데이터와 금형 누군가 이 네가 쓴 그 쿼리문을 해석을 해 주고 돌려 줘야 될거 아니에요 그걸 하는 것이 dbms 에 교역이 가운데서 dbms 뭐 우리가 흔히 말하는 db 를 db 가 dbms 를 보시면 되요 작은 dbms 뭐 아시는 마이 sql 오라클 뭐 이런것들이 있겠죠 그래서 dbms 는 데이터베이스 안에 있는 데이터에 접근 하도록 도와주는 시스템이 자금 dbms 잠깐 말아 먹어 볼게요 4 dbms 잠깐 보면은 dbms 는 크게 어 서버 라 디 비밀 서버 라고도 해요 이거 왜냐하면 은 서버 라는게 하나의 컴퓨터를 의미하기도 하지만 컴퓨터 내 하나의 응용 프로그램을 의미 하기도 하거든요 그래서 우리가 보통 dbms 아마 해보신 분 날 거에요 마이스 께 설치하고 그거 엄호 포트 따가 주고 거기에 아이디 패스워드 따가지고 로그인 하잖아요 그 tv mysql 이나 오라클 그런 것들이 1 마이 스케일이나 오라클 그런 것들이 하나의 극히 빔의 서버 에요 아무튼 아무도 그런 서버 가 있는데요 2 서버 가 아니죠 아무튼 그런 dbms 가 인데 db 벨스 크게 지려 처리와 저장식 이때 뭐죠 지려 처리기가 재커리 를 가지고 해서 그래요 해서 그래서 이제 이것을 자기 느낄 있을 수 있는 그런 기 기어를 바꿔 주거든요 그리고 그것을 캐싱을 했네요 그러니까 어 비슷한게 나오는 바로 밭에 쓸 수 있게 이런식으로 질이 이어 처리를 하고요 그래서 뭐 인서트 코리아 면은 저장 시스템 데이터를 입력을 하고 그리고 뭐 출 뭐 셀렉트 하면은 여기서 가 테이터 가져와서 사용 저한테 보여주고 이런씩으로 사용 저한테 보여줄 이런식으로 된게 dbms 입니다 그래서 만약에 온 면접관이 dbms 가 뭐에요 라고 볼 보면은 dbms 는 어 데이터베이스 4 데이터에 접근 하도록 좋아 주는 시스템입니다 dms 는 크게 질의 처리기 와 저장 시스템으로 이루어져 있습니다 라고 대답하게 써요 4 다음은 트랜잭션 특징 갈게요 새로운 패션이 뭔지 잘 모르고 있는 분들도 계실 거 같은 액션을 깔끔하게 간단하게 설명하도록 할게요 자 은 에이미의 요 뱅킹 시스템이 있다고 해 볼게요 내가 친구한테 난 오늘 성공할 거에요 근데 내 계좌에 라이너스 만원이 찍혔어요 그리고 친구 통장에 플러스 만원이 되었는데 그때 정리가 닦다가 버린 거에요 그래서 내 통장에 만 - 10,000원 찍혔어요 이런 돼요 안 되죠 그러면 차라리 이게 안됐으면 돼 것도 안돼 야 되죠 그래서 이렇게 연산 들 내가 작업해야 되는 것들이 모두 한번에 처리 되거나 처리 되지 않아야 되는 이런 하나의 작업들을 모아 놓은 것들을 트랜잭션 이라고 해요 예 그러면 표현 직선의 는 이 4가지 특징 있는데요 2 4 맛이 특징 이 중요하고 잘 물어봐요 내가 스 특징을 갖고 보면은 원자 썰 일관성 경우 있어 지속성 이에요 자 그럼 잠깐 잠깐 다같이 한번 볼게요 4 이제 특성 이렇게 4가지 특징 있는데요 서원 작성을 먼저 보면은 이제 부분적으로 실행되거나 중단되지 않는 것 작으니까 이게 무슨 말이냐면 oo 하나씩 아까 말했던 모두 되거나 아님 후 도 되지 않아야 되는 거 가 밀고 권 작성 있구요 다음은 이번 서비스 콜 시스터 주시구요 이 완료되면 은 일관적인 뒤 상태를 유지해야 등 게요 무슨 문제가 되요 그냥 외우세요 내 일관성은 일관적인 db 상태를 유지하는 거구요 경리 성은 자의 트랜잭션이 하나만 실행되지 않을 거 아니에요 동시에 여러 개가 실행될 수도 있잖아요 그럼 이 서로가 이 서로의 영향을 주지 않아야 된다는게 경리 성 이에요 그 지속성은 한 번 트랜잭션이 반영되며 는 영원히 반영되어야 한다는 거구요 그래서 이렇게 4가지 acid 는 배워 주세요 그래서 이제 왼쪽과 니 어트랙션 특징 내어 지를 말씀해주세요 라고 하면 저는 4 데이터베이스의 무료 선과 1건 썩을 위해서 트랜잭션은 4가지 특징을 만족해야 되는데요 원자 성은 이제 탄 편지 액션 낸시랭은 작업은 모두 성보 하거나 실패 야 되는거구요 일관성 은 일관성 있는 데이터베이스를 유지시키는 것입니다 그리고 경리 성은 동시에 실행된 편지 액션은 서로 영양 지지 않아야 되고요 그리고 지속성은 트랜잭션 완료시 결과가 영구적으로 반영되어야 합니다 라고 말하겠어요 자 노예 스켈 은 다 돈이 sql 약자로 그래서 nosql 이에요 그리고 sql 보완한다는 의미를 가지고 있어요 자 sql 이 있고 노 의 스킬도 있는데요 sk 는 보토 read books 그러니까 관계형 데이터베이스를 뜻하기도 해요 그래서 sql 과 노예 숲길 가장 큰 차이는 스키마 의 스키마가 있냐 없냐 를 가지고 이제 큰 큰 차이를 가거든요 큰 차이를 들기도 하거든요 스키나 뭐냐면 이 테이블 그 데이터를 저장하는 퀴 치기 라고 보시면 되요 자 예를 들면 은 어이 스킹 에서부터 테이블로 데이터를 저장 하잖아요 그래서 고객이라는 테이블이 있다고 쳐볼까 예요 4 고객 번호와 이름을 이렇게 저장을 할게요 그래서 나는 1번에 잔고를 널 거에요 근데 이렇게 저장을 위해 쭉쭉 저항이 되겠죠 근데 나는 장만 조금 특이한 뭘 표시 하고 싶어 우수고객 이런걸 표시 하고 싶어 여기에다가 우수고객 표시할 수 있나요 못하죠 이것은 지금 번호와 이름으로만 데이터를 저장하게 정해놓은 스키마가 있기 때문에 이렇게 저장 못해요 그리고 스킨만 어떤 규칙이 라고 했죠 역 이번 호에는 숫자가 들어가고 이름에는 이 글자가 들어가는 어이 규칙도 스키마 에요 근데도 sql 은 스키마가 없다고 했잖아요 이런건 어떻게 정 되냐며 는 어떻게 꼭 쌀을 그저 않는데 번호는 1번 그리고 이 이름은 장 국 이렇게 하고 이렇게 테이블 데이터 알았어 난 거예요 여기는 머언 오는 2벌 뭐 이름은 너 고장 뭐 이런식으로 쭉 하는 거죠 근데 만약에 내가 장모의 뭐 얼추 하고 싶고 여기에다가 뭐 이렇게 찍고 뭐 우수 고개 5 수호 개 때로 깽 트로 뭐 이런식으로 저장할 수 있어요 이런식으로 별도의 스키마가 없는게 너의 스킬이 에요 자금도 에 숙제를 조금 더 잘 해볼게요 4 이제 지금 보고 계신 거는 이제 스퀘어 일인데요 엄격한 스키마를 가지고 있죠 그랬어 이렇게 어 이런 식으로 어떤 구조를 가지고 규칙을 가지고 데이터가 저장되는 것을 의미하고 요 그리고 두 번째 중요한 특징은 관계의 황개 관계는 뭐냐면은 어 뭐 여기서 사용하는걸 여기서 참조 에서 사용할 수 있다는 거죠 자 보면은 자 여기는 지금 사용자 구요 위는 상품이에요 그래 이거는 주문 이에요 그래서 일본 사용자가 일본 상품 을 사용했을때 주문 쓸 때는 이렇게 1번 일본말 쓰면 되요 그래서 내가 만약에 이 이본 주문 번호 에 대한 고객 이름을 알고 싶어요 그럼 이 일본을 찾아가서 간 다음에 1번에 곡의 이룰 이렇게 쓰고 근데 너 sk 를 보면 알겠지만 루이스 캐럴은 이런게 없어요 이런 관계를 따로 저장 하지 않고요 바로 이 필요한 것들을 모두 저장 해요 그래서 오노 에 거기 유저의 아이디 이메일 이런 것들을 모두 저장을 해야 되요 그래서 광경 데이터베이스는 어떤 특징을 어떤 스키마를 가지고 있지 않다 이에 가장 큰 특징이에요 그래서 데이터에 조에 나 400 속도가 빨라 자 그리고 대량의 데이터를 이제 저장하는데 더 좋구요 자 그래서 정리를 하자면 네 제가 만약에 왼쪽 빵 저한테 언 또 스케일에 대해 설명을 해 보세요 라고 하면 저는 뭐 이 시계를 나 논의 sq 약자로 sql 을 보아야 한다는 의미를 가지고 있습니다 뭐에 논의 스케일은 스키마 없어서 데이터를 조회하고 사용하는 속도가 빠릅니다 또한 대량의 대해 본산 데이터를 저장하는 데 특화되어 있습니다 라고 말하겠어요 4 다음은 파티션은 갈게요 파티셔닝 은 자 우리가 데이터를 이렇게 테이블에 저장 을 하잖아요 이런식으로 이렇게 이렇게 이렇게 해서 데이터를 캐처 잘할 거에요 근데 이 데이터가 놈 커진다 고생을 했어요 그러면은 1 저장할 때 하나 찾을 때 엄청 물에 걸릴 거에요 암 등 미국 워싱턴 성능이 떨어질 거란 말이죠 그때 이거를 나누어서 저장 하는 건데요 여기를 이렇게 설렁 단위로 나누는 것을 파티션 이라고 하구요 이렇게 가로로 나누는 것을 샤링 이라구요 자의 새로워 보자 버티 커리 줘 버파 tg 어닝 은 버티컬 파티셔닝 이라고 하구요 이렇게 새로 가루로 나누는 2샷 잉 을 홀이 전 탈 패션이라고 뭐예요 자 우선 그러면 파티션이 먼저 알아보면 요 자 파티셔닝 은 이렇게 어 데이터가 이렇게 단어 있는것을 새로 로 나눠서 저장하는 것을 위해 요 근데 이렇게 되면은 어 내가 만약에 업데이트나 인써트 를 할때 이렇게 같다 나눠 가지고 이제 작업을 분산할 수 있어요 그래서 서로 향상 되거든요 근데 단점은 내가 만약에 엄한 이 아에 전화 번호를 알고 싶어 그럼 어떻게 되냐면 요 마리아의 4번을 자꼬 4번에 이처럼 분을 찾아야 되요 기존에는 그냥 말에 를 찾고 거기에 전화번호 을 찾으면 되는데 이것을 이 이거를 위치시킨 이쪽 미용이 추가된 거죠 그리고 하나는 이거는 인덱스 라는게 있어요 테이블에 인덱스가 이제 이 속도를 빠르게 해주는 건데 여기서 하나만 사용했던 것을 여기는 각자 따로 할 살롬 할 수가 없어요 그래서 그것들이 단점이에요 자 그래서 이렇게 알아 봤구요 파티션 님은 정리하면 은 면접관의 파티션이 뭐예요 라고 물어 부분에 저는 파티 장님은 테이블을 컬럼 단위로 나누어 나누는 기법 인데요 장점은 이제 업데이트 난 있어 때 같은 작업이 분산되어 성능이 향상되고 요 단점은 이제 페이블 간 쪼인 비용이 증가하게 되고 그리고 인덱스를 별도로 파트 지아 논할 수 없다는 단점을 가지고 있습니다 라고 말하겠어요 자 다음은 샷 잉 이에요 샷 인간 아까 많은 것처럼 테이블을 니켈로 당인 이과로 쪼개서 저장하는 방법 이에요 자 그러면 이제는 어떻게 되냐면 데이터가 이런식으로 저장이 되요 이렇게 안할 이렇게 1 자 그러면 내가 데이터를 추가할 때 여기에 저장 할까요 여겨져 할까요 둘다 저장을 하면 돼요 왜냐하면 은 이 두개는 지금 데이터 공간을 아끼려고 그리고 이제품 사비 너무 오래 걸리는 걸 방지하기 위해서 이렇게 나노 소장 하는 거잖아요 그렇기 때문에 5 둘다 저장을 하면 안되고 하나만 저장을 해야 되거든요 그래서 이렇게 저장을 하는 방법에 따라서 이 샷 1 종류와 나뉘게 되요 그럼 그것들을 조금 더 자세히 볼게요 네 우선 샷 잉 이란 이렇게 아까 보신 것처럼 샷 잉 이라 이렇게 테 데이터를 가로로 쪽에서 나누는 것을 의미에요 이렇게 하면은 어 데이터를 더 분산해 나눌 수 있겠죠 근데 이 샷 을 하려면 은 어 데이터를 저장하려면 각자 다른 곳에 저장을 해야 되잖아요 그럼 그 다른것을 저장하기 위한 귀 치기 있어요 뒤치기 뭐 귀 치게 어떻게 전 여행의 따라서 샤드 의 종류와 나눠지는데요 그때 이 규칙을 나누는 가장 핵심이 키에 요키 그래서 내가 어떤 규칙으로 키가 결정돼 가지고 그 키에 해당하는 테이블에 저장 될 지가 중요하거든요 자 첫번째는 그 방법 중의 하나는 해쉬 샤 등 이에요 그래서 각각 이런식으로 모카 패 c 키를 가지고 있는 어이 이 테이블이 있구요 이제 이거는 여기선 규칙을 나누기 나머지로 있네요 4로 나눈 나머지를 이렇게 여기다 저장하도록 100 열려 때가 알리가 100 일자리 아이디를 저장을 하려고 하면 은 이사로 나눔은 일이 넘쳐 그럼 이제 여기에 저장을 하는 거에요 이런 식구 이루어지죠 근데 시장 의 단점을 어 데이터가 많아 질때 요 데이터와 이 꽉 찼을 까 다 꽉 찼어요 그럼 이것을 좀 확장을 해야 되잖아요 확장을 해야 되는데 5 일러서 4번을 사용할 수 있는 4번을 못살아 맞아 왜냐면 4로 나눔은 0이 되고 4 루라 어서 나머지 가사로 되는 경우는 없잖아요 그래서 이거 어케 사용하지 못하고 아예 규칙을 바꿔야 되요 그럼 여기에는 전체를 인 데이터를 다시 계산을 해 줘야 되요 이 단점이 해 샷 인이란 점이에요 다음은 이제 다 이 남자 등인데요 다이나 미샤 딩 은 이렇게 테이블을 미리 정해서 어디부터 어디까지 는 뭐 쓰고 어디부터 어디까지 먹었어요 그럼 데이터와 1 격이 거쳐서 4번을 추 하려고 하면 은 여기에 4번을 추가한 다음에 뭐 9시부터 110 까지는 여기 저장하고 110 부터 나머지는 4번에 저장하자 라고 하면은 3번에 있는 것만 4번에 옮겨 주면 되잖아요 이런식으로 5 좀더 어허 확장을 하기가 더 평화적 다이나 미샤 되나요 네 그래서 이렇게 샤드 샤링 까지 알아 봤구요 작한 면접관의 다시 차등 임원이 뭐예요 라고 물으면 저는 차량은 테이블을 로우 단위로 오픈 3 에서 수상하는 방법입니다 꼴에 잔 탈 디자인 이라고도 하는데요 샤드 키를 정하는 방법에 따라서 차드 좋은걸 결정되는 데 크게 nc 자리와 달라 미샤 병이 있습니다 라고 알겠어요 4 이렇게 데이터베이스 까지 한번 왔는데요 자 이제 절만 했어요 면접 잘 발 자 너 무지 치실 수 있을 것 같은데 쪽 그래도 거의 다 왔으니까 쪼끔만 더 힘을 내서 같이 화이팅해요 그렇죠 바 있습니다 안녕 [음악]