인프라,데이터

데이터 중심 애플리케이션 설계 4장 정리

AimB 2022. 5. 29. 23:03

부호화와 발전

 

관계형 데이터베이스
일반적으로 모든 데이터베이스의 모든 데이터가 하나의 스키마를 따른다고 가정한다.

읽기 스키마(스키마리스) 데이터베이스
스키마를 강요하지 않으므로 다른 시점에 쓰여진 이전 데이터 타입과 새로운 데이터 타입이 섞여 포함될 수 있다.

 

데이터 구조

  • object, struct(구조체), list, array, hash table, tree 등
  • CPU에서 효율적으로 접근하고 조작할 수 있게 (보통은 포인터를 이용해) 최적화된다.

 

부호화

  • 인메모리 표현 -> 바이트열(ex : JSON 문서)로의 전환 - 직렬화, 마샬링이라고 함
    • 파이썬의 pickle, 루비의 Marchal
  • 바이트열 -> 인메모리 표현 : 복호화 - 파싱, 역직렬화, 언마샬링이라고도 함
  • 보통 특정 프로그래밍 언어와 묶여 있어 다른 언어에서 데이터를 읽기는 매우 어렵다. 
  • 자바의 내장 직렬화는 성능이 좋지 않고 비대해지는 부호화로 유명하다.

 

JSON과 XML, 이진 변형

JSON 

  • 자바스크립트의 일부이기 때문에 웹 브라우저에 내장된 지원, XML 대비 단순함
  • 하지만 이진 형식과 비교하면 많은 공간 사용
    -> JSON, BSON, BISON, XML 용으로 사용 가능한 다양한 이진 부호화의 개발로 이어짐

 

부호화된 데이터는 숫자 1,2,3과 같은 필드 태그를 포함

 

이진 스키마 기반 형식

  • 스리프트, 프로토콜 버퍼, 아브로

 

스키마

스키마 발전 : 스키마는 필연적으로 시간이 지남에 따라 변함

 

쓰기 스키마와 읽기 스키마

쓰기 스키마 

  • 스키마를 애플리케이션에 포함하고, 스키마로 데이터를 부호화함

 

읽기 스키마

  • 파일이나 데이터베이스/네트워크 등에서 읽은 데이터를 복호화

 

스키마의 장점

  • 자체한 유효성 검사 규칙을 지원
  • 스키마를 기반으로 한 이진 부호화의 장점
    • 필드 이름을 생략할 수 있기 때문에 크기가 훨씬 작을 수 있다.
    • 복호화를 할 때 스키마가 필요하기 때문에 스키마가 최신 상태인지를 확신할 수 있다.
  • 스키마 변경이 적용되기 전에 상위 호환성과 하위 호환성을 확인할 수 있다.
  • 컴파일 시점에 타입 체크를 할 수 있다. (정적 타입 프로그래밍 언어 사용의 경우)

 

마이그레이션

  • 데이터를 새로운 스키마로 다시 기록하는 작업
  • 대용량 데이터셋 대상으로는 값비싼 작업이기 때문에 대부분의 데이터베이스에서 가능하면 이런 상황을 피함
    • 대부분의 관계형 데이터베이스는 기존 데이터를 다시 기록하지 않고 null을 기본값으로 갖는 새로운 칼럼을 추가하는 간단한 스키마 변경을 허용

메시지 브로커 (메시지 큐)

  • 메시지를 직접 네트워크 연결로 전송하지 않고 임시로 메시지를 저장
  • 수신자가 사용 불가능하거나 과부하 상태라면 버퍼처럼 동작할 수 있음 -> 시스템 안정성 향상
  • 죽었던 프로세스에 메시지를 다시 전달할 수 있기 때문에 메시지 유실을 방지
  • 하나의 메시지를 여러 수신자로 전송할 수 있음
  • 논리적으로 송신자를 수신자로 분리
  • 메시지에 대한 응답을 기대하지 않는 비동기 통신 (메시지를 보낸 다음 잊는다)
  • RabbitMQ, Apache Kafka 등

 

큐와 버퍼의 차이

  • 버퍼 : 그릇같은 것
  • 큐 : 통로 

 


버퍼와 큐, 메시지 브로커의 차이가 나에겐 헷갈리는 점이었는데 그 부분을 구분할 수 있게 되어 좋았던 장이다.

그거 말고는 앞부분의 부호화 복호화 부분이 난해했다... 2회독 해도 좀 난해하다...