Paper: Main Memory Database Systems: An Overview

H. Garcia-Molina and K. Salem. 1992. Main Memory Database Systems: An Overview. IEEE Trans. on Knowl. and Data Eng. 4, 6 (December 1992), 509-516. (PDF)

요약

1991-1992년에 쓰여진 이 페이퍼는 당시 인메모리 데이터베이스 시스템에 대한 연구들과 프로토타입 인메모리 데이터베이스들에 대한 서베이 페이퍼라고 할 수 있다.

Introduction

먼저 인메모리 데이터베이스 시스템에 대한 흔한 질문들에 대해서 답하고 있다.

전체 데이터가 메인 메모리에 들어갈 것이라 가정하는 것은 합당한가?

  • 어떤 애플리케이션의 경우에는 데이터의 크기가 메모리 용량의 증가보다 더 느린 속도로 증가할 수도 있고, 어떤 애플리케이션의 경우에는 실시간 제약이 있어서 반드시 메모리 상에 적재되어야 한다.
  • 하지만, 메모리에 적재될 수 있는 애플리케이션도 존재하므로, 이러한 경우, 하나 이상의 데이터베이스 시스템에 저장하고 가장 액세스 빈도가 높은 종류의 데이터를 인메모리 데이터베이스에 저장하는 것을 고려할 수 있고, 실제로도 IMS의 사례에서 이를 보여주고 있다.

인메모리 데이터베이스와 매우 커다란 캐시를 가진 디스크 기반 데이터베이스의 차이점은 무엇인가?

충분히 커다란 캐시를 가지고 있다면 데이터가 항상 메모리 상에 존재하겠지만, 메모리의 장점을 전부 활용하지는 못한다.

  • B-tree와 같이 디스크 액세스를 위해 설계된 인덱스 구조를 가진다.
  • 디스크에 존재할 수 있는 데이터를 액세스하기 위해서, 메모리 상의 데이터를 액세스할 때에도 버퍼 매니저를 사용해야 한다.

특수한 하드웨어를 도입함으로써 메인 메모리가 nonvolatile하다고 가정할 수 있는가?

  • 배터리가 들어간 메모리 보드, UPS 등을 통해서 더 나은 신뢰성을 제공할 수 있지만, 장애의 가능성을 0으로 줄여주지는 못한다.
  • 하지만, 신뢰성이 높아진다면 백업의 빈도 등을 줄여줌으로써 성능 개선에 기여할 수 있다.
  • 배터리가 들어간 메모리 보드나 UPS는, 디스크와 달리 신뢰성을 보장하기 위해 어떤 일을 해야하는 ‘active’한 컴포넌트이므로 장애의 가능성에 기여한다.
  • 백업 메커니즘의 성능이 인메모리 데이터베이스 시스템에 있어서 매우 중요할 것이다.

Impact of Memory Resident Data

Concurrency Control

  • 인메모리 데이터베이스에서 트랜잭션은 디스크 기반 데이터베이스에 비해서 짧아지므로 lock contention도 상대적으로 적을 것이다.
  • 따라서, 인메모리 데이터베이스의 경우 좀 더 큰 lock granularity를 선택할 수 있고, 이를 통해 동시성 관리의 비용이나 CPU cache flush의 비용을 크게 줄일 수 있다.
  • 하지만, 여전히 짧은 트랜잭션과 수명이 긴 트랜잭션이 동시에 수행될 수 있도록 하기 위한 방법이나 멀티프로세서 시스템을 활용하기 위한 방법은 필요하다.
  • 전통적인 데이터베이스에서 lock table 대신, 오브젝트 자체의 1-2 bit를 사용해서 lock을 구현할 수 있다.

Commit Processing

  • 메모리는 volatile하기 때문에 commit 전에 디스크에 로깅을 하는 것이 필요한데, 디스크 액세스는 인메모리 데이터베이스 시스템에서 커다란 성능 bottleneck을 유발할 수 있다.
    • 디스크에 비해 상대적으로 빠르고 작은 stable memory를 도입해서 로그의 일부를 저장할 수 있다. 트랜잭션과 별도로 stable memory에 쓰여진 로그를 디스크에 기록하는 프로세스가 존재할 수 있다.
    • Precommitting – 로그가 디스크에 쓰여지기 전에 트랜잭션의 lock들을 릴리즈하는 방식 – 을 사용해서, lock contention을 줄여 다른 트랜잭션의 응답시간을 개선할 수 있다.
    • Group commit – 복수의 트랜잭션의 로그들을 메모리에 모아뒀다가 한번에 디스크로 flush하는 방식 – 을 사용해서 로깅 bottleneck을 완화할 수 있다.

Access Methods

  • 인메모리 데이터베이스의 인덱스 구조를 위해 여러가지 형태의 해싱과 T-tree와 같은 트리들이 제안되고 있다.
  • 그러한 인덱스 구조들은 공통적으로, 데이터 자체가 아니라 데이터로의 포인터를 저장함으로써 메모리의 이점을 잘 활용하고 있다.

Data Representation

  • 튜플은 데이터로의 포인터 집합으로 표현될 수 있다.
  • 커다란 데이터가 반복적으로 나타난다면 중복 저장하지 않음으로써 공간 효율을 높일 수 있다.
  • 가변 길이 데이터를 포인터로 표현함으로써 데이터구조 디자인을 단순화할 수 있다.

Query Processing

  • 데이터에 대한 포인터 메커니즘을 이용해서 어떤 오퍼레이션을 매우 효율적으로 수행할 수 있다.
    • 예를 들어, 두 테이블을 하나의 attribute를 기준으로 join하려는 경우 그 데이터를 사용하는 튜플로의 포인터를 통해서 엄청나게 효율적으로 join을 수행할 수 있다.
  • 전통적인 데이터베이스에서는 디스크 액세스를 줄이려고 했지만, 인메모리 데이터베이스에서는 CPU 비용을 줄이는 것에 집중해야한다.

Recovery

  • 인메모리 데이터베이스에서는 트랜잭션들은 메모리 상의 데이터만을 이용하므로, 체크포인팅이나 복구가 디스크 상의 데이터를 액세스하는 유일한 이유다.
    • 따라서, 인메모리 데이터베이스에서는 체크포인팅에 최적화해서 매우 커다란 블럭 사이즈를 사용할 수 있다.
  • 복구할 때 많은 양의 데이터를 읽어들여야 하는 문제를 해소하기 위해서 필요한 데이터 블럭부터 로드하거나 여러 개의 디스크로부터 병렬적으로 로드하는 방법을 고려할 수 있다.

Systems

IBM에서 개발한 상용 제품인 Fast Path 이 외에 몇가지의 인메모리 데이터베이스 연구용 프로토타입들에 대해서 간단히 소개하고 있다.

내가 배운 것 & 생각한 것

  • 나도 품어왔던, 인메모리 데이터베이스에 대해서 가장 기본적인 질문들 – 특히, “충분히 많은 메모리 캐시를 가진 디스크 기반 DB를 쓰면 되잖아?” – 에 대해서 명확하게 답하고 있다.
  • 전통적인 데이터베이스 아키텍처 상의 각각의 모듈 또는 기능들에 대해서 인메모리 데이터베이스는 어떻게 다른지, 그리고 어떤 해결책을 고려할 수 있는지를 비교적 짧지만 매우 쉽게 이해할 수 있도록 쓰여져있다.
    • 인메모리 데이터베이스 시스템에서 고려해야할 빅 픽처를 이해하는 데 도움이 된다는 의미에서 도움이 되었다.
    • “OLTP Through the Looking Glass, and What We Found There” 리뷰에서 언급한 것과 마찬가지로, 구체적인 해결책에 대해서는 다양한 문맥에서 더 나은 진척들이 있기 때문에 이 페이퍼에 쓰여진 것만을 고려해서는 안된다.
  • 1992년 이후로 여러가지 변화 – 하드웨어의 발전, OS 및 프로그래밍 시스템의 발전, 인메모리 데이터베이스 분야의 연구 – 가 있었기 때문에, 몇몇은 현재 시점에서는 유효하지 않은 것 같다.
    • Optane DC Memory와 같은 non-volatile memory가 제품화되고 있으므로, 이제 ‘passive’한 메모리 하드웨어가 생겨났다고 할 수 있다.
    • 결국 many-core 시스템의 이점을 잘 활용하기 위해서는 여전히 lock granularity는 중요한 것 같다. 다만, 데이터베이스 lock granularity를 가진 KeyDB가 좋은 성능을 보여주는 것을 보면 완전히 틀린 말은 아니다.
    • optimistic concurrency control에 대해서는 많이 언급하지 않고 있다.
    • 이 페이퍼에서는 CPU 비용을 측정하는 것이 어렵다고 언급되어 있으나, 이후로 CPU 비용에 대해서 측정하는 방법이 많은 발전을 이루었다.

Paper: Main Memory Database Systems: An Overview 더 읽기"

Paper: OLTP Through the Looking Glass, and What We Found There


Stavros Harizopoulos, Daniel J. Abadi, Samuel Madden, and Michael Stonebraker. 2008. OLTP through the looking glass, and what we found there. InProceedings of the 2008 ACM SIGMOD international conference on Management of data(SIGMOD ’08). (PDF)

요약

이 페이퍼에서는 인메모리 데이터베이스 시스템에서 Logging, Locking, Latching, Buffer management 등의 기능을 하나씩 제거했을 때 어떠한 성능 변화가 일어나는지를 보여주고 그 결과로부터 미래의 OLTP 데이터베이스에 대해 시사하는 바가 무엇인지에 대해서 논하고 있다.

  • 하드웨어의 변화 그리고 수많은 데이터 중심 애플리케이션들로부터 나타난 다양한 요구 때문에, 표준적인 OLTP 데이터베이스 시스템에서 당연시 되어왔던 logging, concurrency (latching, locking), B-tree, buffer management와 같은 기능들의 일부분만을 가진 데이터베이스들 – Logless/Single-threaded/Transaction-less 데이터베이스들이 나타나고 있다.
  • Shore라는 표준적인 OLTP 데이터베이스 아키텍처를 가진 데이터베이스 시스템에 인메모리 워크로드를 실행하는 실험 셋업을 갖추고, logging, latching, locking, buffer management 등의 기능을 하나씩 제거하면서 instruction의 수가 어떻게 변화하는지를 측정했다.
  • 실험 결과를 통해 logging, latching, locking, buffer management와 같은 기능들이 전체 대비 상당히 높은 CPU 비용을 소비하는 것을 알 수 있었다.

이러한 결과로부터 미래의 OLTP 데이터베이스 엔진에 대해 다음과 같은 방향성을 제시하고 있다.

  • 동시성 제어 (Concurrency Control)
    • dynamic locking은 disk-based OLTP 데이터베이스일 때 좋은 선택이었지만, 메모리 기반 워크로드의 경우에는 다시 따져볼 필요가 있고, optimistic concurrency control 방식이 더욱 나은 선택지가 아닌가 하는 의견을 제시하고 있다.
  • 멀티코어 지원 (Multi-core Support)
    • 많은 수의 코어를 가진 컴퓨터가 늘어나고 있고, 동시성이 높은 프로그램들이 성숙하고 있기 때문에, latching과 관련해 더 나은 구현과 멀티쓰레딩의 부담에 대해서 탐색해볼 필요가 있다고 얘기하고 있다.
    • 다른 옵션으로는, 각각의 머신은 하나의 코어를 가진 컴퓨터처럼 볼 수 있는 가상화 환경이 갖춰졌음을 언급하고 있는데, 아마도 각각의 데이터베이스 시스템은 싱글쓰레드 시스템으로 동작할 수 있게 된 것을 함축하고 있는 듯 하다.
    • 이러한 두가지의 접근을 보완해서, 하나의 쿼리를 병렬적으로 처리할 수 있는 시도에 대해서도 언급하고 있다.
  • 복제 관리 (Replication Management)
    • logging을 이용한 active-passive 복제의 경우 여러가지 문제점들을 가지고 있지만 이렇게 밖에 할 수 없었던 이유는 log를 실행하는 것이 복제본에서 트랜잭션을 실행하는 것보다 훨씬 적은 비용이 들었기 때문인데, 인메모리 데이터베이스 시스템에서는 트랜잭션의 비용이 매우 낮으므로, active-active 복제에 대해서 고려할 수 있다고 얘기하고 있다.
    • 이 때, two-phase commit을 이용하는 것은 추가적인 지연이 너무 크기 때문에 timestamp ordering등의 테크닉을 이용해야하리라고 제안하고 있다.
  • Cache-conscious B-trees
    • 데이터 구조를 최적화하기 보다는 이외의 부분 – 동시성 제어나 복구 – 을 최적화하는 것이 더 중요한 것 같다고 얘기하고 있다.
    • 하지만, 그러한 최적화 후에는 B-tree의 캐시 미스가 새로운 bottleneck일 수 있고, 다른 데이터 구조도 살펴봐야 한다고 얘기하고 있다.

내가 배운 것

  • 2008년 시점에 이미 학계에서도 전통적인 OLTP 데이터베이스로부터 다른 접근들이 나타나고 있었고, 인메모리 데이터베이스라는 커다란 트렌드가 이미 시작하고 있었던 것 같다. 그러한 트렌드를 정확히는 알지 못하지만, 적어도 여러 다른 페이퍼나 제품들의 역사를 보면 2000년대 후반부터 2010년에 중반까지 그러한 트렌드가 이어졌고 그 결과 현재와 같이 수많은 상용 인메모리 데이터베이스 제품들이 나오게 된 것 같다.
  • 전통적인 OLTP 데이터베이스 엔진에서 대부분의 logging, latching, locking, buffer management의 CPU 비용이 80% 이상에 이를 정도로 높은지에 대해서는 전혀 알고 있지 못했다. 기존에는 디스크 액세스가 커다란 bottleneck이었겠지만 적어도 인메모리 데이터베이스 시스템을 만든다면 이러한 기능들에 대해서 세심한 주의를 기울여서 디자인 선택을 해야할 것 같다.
  • 이 페이퍼에서 제시하고 있는 방향성에 대해서, 실제로 이 페이퍼에서 수행할 실험결과로부터 직접적으로 도출되는 방향성이라고 보기는 매우 힘들고, 다만 그 당시 시점의 트렌드나 분위기를 설명하고 있는 것으로 이해했다. 각각의 이슈에 대해서 더욱 엄밀하고 자세히 설명하고 있는 페이퍼들이 많으리라고 생각하므로 심각하게 받아들이지는 않아도 될 것 같다.
  • 이 페이퍼를 읽고 역시 2000년대 후반에 시작된 프로젝트인 레디스가 어떤 동기로 시작하게 되었을까 많이 생각을 해보았다. 이 페이퍼에서 얘기하고 있는 디스크 기반 데이터베이스 시스템과 멀티쓰레드 지원, 트랜잭션 지원 등의 오버헤드를 완전히 제거해버린 시스템이니까. 그리고, 인메모리 데이터베이스 시스템을 만든다면 레디스와 대비해 어떤 기능적인 장점을 가져야 하고 그러인한 성능 오버헤드에 대해 어느 부분을 신경을 써야하는 가에 대해서 고민하는 시발점이 되었다.

Paper: OLTP Through the Looking Glass, and What We Found There 더 읽기"

잉크젯 프린터 수리하기 vs. 새로 사기

약 2년 전에 아이들 사진을 집에서 좋은 품질로 인쇄하려고 잉크젯 프린터를 샀다. 그 전에는 사진을 인쇄하는 용도로는 소형 포토 프린터를 가지고 있었고, 텍스트를 -주로 논문들 – 인쇄하는 용도로는 레이저프린터를 가지고 있어서 수년 동안 잘 사용하고 있었는데 마침 토너가 다 떨어진 참이었다.

내가 산 모델은 Canon의 TS8030이라는 모델로 고화질 사진 인쇄, 스캐너, 복사가 가능한 가정용 복합기 개념의 제품이었다. 사진들의 인쇄 품질도 그럭저럭 마음에 들었다. 신분증 복사 같은 것들은 가족들을 위한 서류 작업 때문에 꽤나 자주 해야하는 일이고, 일이 바쁘게 진행되는 회사에서 시간을 내서 하기에 어렵다보니, 이를 집에서 할 수 있어서 매우 편리하게 활용할 수 있었다. 반면에 문서들의 인쇄 품질은 레이저 프린터에 비하면 읽기 싫을 정도로 마음에 들지 않았다. 종이 품질 때문에 그런지 모르겠지만 잉크가 살짝 퍼지면서 폰트가 조금 뭉개지는데 이게 레이저프린터의 깔끔한 느낌과는 매우 대조적이었다.

그럭저럭 한 1년 남짓 썼을까 갑자기 인쇄를 하려고 하면 내부에서 딱딱 소리가 나면서 아무것도 프린트되지 않는 현상이 나타났다. 몇번이고 헤드 청소도 하고 내부도 살펴보았지만 원인을 파악하기는 힘들었고, 워낙 정신없이 살아가다보니 수리 맡길 엄두조차 나지 않았다.

아내는 사진을 인쇄해서 집안 액자에 넣어 둔다든지 앨범을 만드는 것도 좋아하기에 내게 몇번이고 수리해달라고 부탁을 했었다. 오늘에야 드디어 생각이 미쳐서 수리를 알아봤더니, 고객이 딱히 포장해두지 않아도 택배를 통해서 포장-회수-수리-반납-대금납입을 해주는 캐논 재팬의 서비스가 있었다. 요금은 3240엔. 어딘가에 신경을 쓰는 것이 내게는 매우 부족한 자원이기에 돈을 들여서라도 신경을 덜 써도 되도록 해주는 것까지는 좋았다.

그런데 문제는 수리 비용. 보증기간 내에서는 수리 비용이 무료지만, 보증기간이 지나면 수리비용은 일률 14,040엔. 문제는 이 프린터를 구입한 가격이 19,000엔 가량이었다는 것이다. 게다가 새로 구입하는 비용은 TS8130이 14,000엔, TS8230이 28,000엔 정도다. 게다가 TS8130과 TS8230은 디자인이 다를 뿐 기능적으로 큰 차이도 없다. 잉크는 TS8030은 BCI-370/BCI-371 잉크를 사용하지만, TS8130/TS8230은 BCI-380/BCI-381을 사용한다. 과연 얼마나 차이가 날까.

결국은 TS8130을 구입하기로 했다. 논문 등 텍스트 인쇄의 품질은 레이저 프린터가 월등하기에 조금 고민이 되기는 했지만, 아내를 만족시키는 것이 아마 더 중요하겠지.

한편으로는 개별 수리 건들을 처리해야하는 인적 비용이 제품의 생산단가보다 더 비싸고, 매년 신규 모델을 내놓고 신규 모델에는 높은 가격을 책정한다거나, 잉크 모델을 바꿔버려서 이익을 보는 신기한 프린터 비즈니스의 세계를 조금 엿볼 수 있었다.

잉크젯 프린터 수리하기 vs. 새로 사기 더 읽기"

좋아하는 일만 하며 사는 법

소싯적에는 일터에서 역량이 올라가고 인정을 더 많이 받게 되면 내가 좋아하는 일을 더 많이 할 수 있을거라고 믿었던 적이 있다. 그런데 현실은 더 많은 책임을 지게 되면서 더욱 많은 사람들이 내게 요구를 하기 시작하고 그걸 하는 것만으로 내 인생은 흘러가버리고 있었다. 그렇게 느끼고 있을 즈음에 서점에서 골라든 책이 바로 이 책 “좋아하는 일만 하며 사는 법“이다.

이 책은 과학적인 연구결과를 바탕으로 독자를 설득하는 책이라거나 눈부신 성과와 업적을 쌓은 경영자가 쓴 책은 아니다. 저자인 고코로야 진노스케라는 분이 자신의 인생에서 느끼고 실천한 것들을 바탕으로 독자들에게 자신의 인생을 바라보는 ‘다른’ 관점을 제시하는 책이라고 할 수 있다.

나도 이 책을 읽고서야 비로소 나는 내가 좋아하는 일을 하는 것이 아니라, 다만 열심히 노력하고 있다는 것을 완전히 깨달을 수 있었다. 이 책을 읽기 시작한 것은 약 1년 전이지만, 물론 지금의 나도 그러고 있고, 내가 아는 많은 주변의 사람들도 자신이 좋아하는 일이 아니더라도 인내하고 고군분투하며 일을 하며 살아가고 있다.

이 책에서 이야기 하고자 하는 내용을 추려보면 그리 많지는 않고 책을 통틀어 여러가지 관점에서 독자들을 설득하기 위해서 비슷한 내용을 반복하고 있다. 미래의 나를 위해서 간략히 요약을 해보았다.

  • 노력이 항상 보상 받는 것은 아니다. 노력하지 않아도 보상받을 때도 있다.
  • 노력하지 않아도 자신에게 가치가 있다는 것을 믿어야 한다. 노력하지 않는 ‘나’는 가치가 없다고 생각하는 이유는 어렸을 때부터 부모님 혹은 선생님, 주변 사람들이 계속 노력을 강요했기 때문이다.
  • 쉬운 길이 있다면 이것을이용하자. 누구나 올라가는 에스컬레이터를 탈 수 있지만 노력하는 사람들은 타지 않는다.
  • 혼자 애쓰지 말자. 남의 힘을 빌릴 줄도 알아야 한다. ‘자신의 힘’만을 믿고 ‘남의 힘’을 믿지 못하면 그 힘은 결코 이용할 수 없다.
  • 내가 좋아하는 일을 하면 그로 인해 모두가 즐거워진다. 내가 좋아하는 일을 하면서 마음껏 즐기는 일이 누군가에게 용기를 주고, 인생의 새로운 가능성을 열어주기 때문이다.
  • 좋아하는 일을 하기로 작정했다면 다른 사람에게 폐를 끼치는 용기와 미움받을 각오가 필요하다.
  • 대다수의 일하는 사람들은 일이 너무 힘들어도 책임감 때문에 회사를 그만두지 않는다. 그런 책임을 느낄 필요는 없다. 가족의 행복을 위해서 아버지는 열심히 일하고 있지만, 아버지가 노력해서 회사에 계속 다니는 게 가족을 위한 행복이라고는 할 수 없다. 가족은 행복해도 아버지가 불행하다면 아무런 의미가 없다.
  • 지금까지와 다른 삶을 살려고 마음먹었다면, 애쓰며 사는 삶에서 벗어나기 위해 애쓰는 것도 좋은 방법이다.
  • ‘나도 다른 사람에게 폐를 끼칠 수 있고, 동시에 다른 사람들도 나한테 피해를 줄 수 있다.’ 이렇게 생각하면 오히려 피해는 줄어들고, 사람들은 좀 더 자유롭게 살아갈 수 있다. 문제가 생겼을 때는 진심으로 ‘미안하다’고 사과하면 의외로 문제는 쉽게 해결된다.
  • 평범한 인생을 살아갈지 대단한 삶을 살아갈지는 선택의 문제다. 안전을 추구하면 ‘즐거움’을 잊게 된다.

이 책을 읽고 깨달음이 있어서 다른 사람들에게도 몇번 들려주었던 책 속의 이야기도 인용해본다.

그때까지 저는 혼자서 열심히 우물을 파고 있던 셈입니다. 우물을 파야만 물을 얻을 수 있다고 믿었으니까요. 그래서 다음 날도, 그다음 날도 열심히 곡괭이질하며 우물을 팠던 거죠. 가까이에 강이 흐르고 있었지만 내가 마실 물은 직접 우물을 파서 얻어야 한다는 착각에 빠져 강물은 거들떠보지도 않았습니다. 편하게 강물을 끌어와 마시는 사람을 보면 뻔뻔하다는 생각이 들어 화가 났습니다. 그런데 냉정하게 생각해보니 그렇지 않더군요.

‘저기 강이 있으니까 그 옆에 깊게 골을 파면, 힘들여 우물을 파지 않아도 저 녀석처럼 편하게 물을 마실 수 있잖아.’

그 사실을 깨닫고 나서 깊게 골을 파기로 결심했습니다. 예전의 나였다면 골을 파는 것도 전부 스스로 해야만 한다고 고집을 부렸을 겁니다. 하지만 그때는 ‘조금 기다려보자’고 마음 먹었습니다. 주변에는 사람이 많이 있었고 어쩌면 그들의 도움을 받을 수 있을지도 모르니까요.

저는 시험 삼아 “죄송합니다만, 깊게 골을 파려고 하는데 도와주실 수 있으세요?”라고 외쳐보았습니다. 그러자 “아아, 그러죠”라며 사람들이 다가오더군요. 제 주변에는 땅을 파고 싶어 하는 사람과 파는 것을 잘하는 사람, 좋아하는 사람이 많았던 겁니다. 그들의 도움으로 순식간에 골을 팔 수 있었습니다. 제가 기뻐하자 그들도 기쁘다고 말해주었습니다.

이 책을 읽은 이후에 삶을 바라보는 새로운 관점이 추가되기는 했지만, 정말로 이를 실행에 옮기는 것은 쉬운 일이 아니었다. 정신을 차려보면 항상 ‘노력하는 나’로 돌아가있었고 남들에게 폐를 끼치는 것, 미움 받는 것이 두려워서 남들이 요구하는 일만을 하고 있었다. 애쓰며 사는 삶에서 벗어나기 위해 매일 매일 적극적으로 노력하지 않으면 쉽지 않은 일인 것 같다.

나는 엔지니어로서의 일을 사랑하고 이 일을 통해서 ‘대단한 것’을 하고 싶다. ‘대단한 것’을 할 수 있었던 많은 사람들은 ‘좋아하는 일’을 했다는 것도 알고 있다. 그리고 그것을 할 수 있는 능력이 내게 있다는 자신감도 있다. 단 한가지 문제는 내가 여태껏 ‘좋아하는 일’을 ‘하지 않는’ 선택을 해왔을 뿐일 것이다. 다시 한번 ‘좋아하는 일을 하는 선택’을 해보자.

좋아하는 일만 하며 사는 법 더 읽기"

NVMe M.2 SSD

일을 하면서 서버들에서는 NVMe SSD 제품들을 많이 사용하면서 정작 한번도 눈으로 직접 볼 기회는 없었는데, 우연히 Consumer NVMe SSD제품들도 많이 나와있는 것을 보고 Samsung SSD 970 EVO NVMe M.2 제품을 구입해보았다. 집에 있는 PC에서 대단한 작업을 할리는 없기에 더 높은 성능의 SSD가 대단히 유용하게 쓰일 일은 많지 않겠지만, 얼마간의 돈을 들여서 얻는 경험으로는 좋은 경험이라고 생각되어서 사보았다.

다행히 2년 전에 구입했던 Z170 칩셋 보드가 M.2 슬롯을 하나 보유하고 있어서 SSD 자체 이외에 추가적인 비용이 들지는 않았다. 요즘 서버 시장은 어떤지 모르겠지만 Consumer NVMe SSD제품들은 대부분 M.2 인터페이스를 채용하는 것 같다.

Amazon 구입 기록을 찾아보니, OS용 디스크에 사용하고 있는 SSD인 Intel SSD 520 Series 240GB는 21,195엔에 구입했었고 (2012년 8월), 게임용 디스크에 사용하고 있는 Samsung SSD840EVO 250GB는 16,647엔에 구입했었다. (2013년 11월) 이번에 구입한 Samsung의 NVMe SSD 제품은 아마존 US에서 $277.99 (약 31,104엔)에 구입했다. 성능의 차이를 차치하더라도 용량이 4배가 되었는데 가격은 2배 밖에 안되니 5년동안 가격이 싸지긴 싸진 모양이다.

엄밀하게 디스크 성능을 테스트하려면 셋업 자체에 세밀하게 신경을 써야하겠지만, 그럴 여유는 없기에 CrystalDiskMark라는 벤치마크 도구의 기본 설정으로 테스트를 해보았다.

Samsung SSD 970 Evo NVMe M.2
Samsung SSD840EVO 250GB SATA
Seagate 2TB BarraCuda ST2000DM001 SATA (7200rpm)

이제는 익숙해져야 할텐데 옛날 사람이라 그런지 16만 IOPS는 놀랍기는 하다.

Sequential Read (Q= 32,T= 1) : 3346.307 MB/s
Sequential Write (Q= 32,T= 1) : 2525.115 MB/s
Random Read 4KiB (Q= 8,T= 8) : 665.636 MB/s [ 162508.8 IOPS]
Random Write 4KiB (Q= 8,T= 8) : 491.191 MB/s [ 119919.7 IOPS]
Random Read 4KiB (Q= 32,T= 1) : 257.582 MB/s [ 62886.2 IOPS]
Random Write 4KiB (Q= 32,T= 1) : 184.670 MB/s [ 45085.4 IOPS]
Random Read 4KiB (Q= 1,T= 1) : 41.117 MB/s [ 10038.3 IOPS]
Random Write 4KiB (Q= 1,T= 1) : 101.777 MB/s [ 24847.9 IOPS]

Consumer 제품 중에 M.2 슬롯용이지만 SATA3를 지원하는 제품들도 있다. 이런 제품들은 SATA3의 제약 (6Gb/s) 때문인지 500MB/s 정도의 sequential access 성능을 가지고 있다.

내가 가진 메인보드를 포함해서 요즘 나오는 메인보드 칩셋들은 SATA Express를 지원한다고 하는데, 대충 찾아봐서 정확하지는 않지만, SATA Express 커넥터를 지원하는 SSD 제품을 찾아보기가 힘든 것 같다. 내가 가진 메인보드에서는 M.2 슬롯을 사용하게 되면 SATA Express는 사용할 수 없게 되는 식으로 되어있어서 인터페이스는 다르지만 PCIe lane을 공유하고 있는 것 같다. SATA Express용으로 배정된 SATA3 커넥터 2개를 SATA3으로도 사용하지 못한다고 하는데 이것은 정확히 확인해봐야할 것 같다.

References

  • https://en.wikipedia.org/wiki/NVM_Express
  • https://en.wikipedia.org/wiki/M.2
  • https://en.wikipedia.org/wiki/SATA_Express

NVMe M.2 SSD 더 읽기"

Daniel Ek on Focus

최근에 읽은 Spotify의 cofounder이자 CEO인 Daniel Ek의 인터뷰.

https://www.fastcompany.com/90213545/exclusive-spotify-ceo-daniel-ek-on-apple-facebook-netflix-and-the-future-of-music

DK: I’m really organized. I don’t do social calls. For so many people, you’re beholden to this social thing, if I don’t show up, someone is going to be sad. I’m just pretty ruthless in prioritizing. What I tell my friends is, I like to be invited, but I probably won’t come. The transparency helps. This is how I’m wired. It’s not a personal thing. It doesn’t mean that I don’t enjoy your company. It’s just means that I’m focusing on something.

DK: 저는 정말 잘 정리된 사람입니다. 저는 사교적인 모임을 나가지 않습니다. 매우 많은 사람들이 이러한 사교적인 것들에 잡혀 살고 있습니다. 만약 제가 그러한 모임에 모습을 보이지 않는다면, 누군가는 슬퍼할 거에요. 나는 다만 무자비하게 우선순위화를 하고 있을 뿐인데 말이에요. 친구들에게는, 난 초대 받고 싶긴 하지만 아마도 가지는 못할 것이라고 얘기하곤 합니다. 그렇게 투명하게 얘기하는 것이 도움이 됩니다. 이게 제가 사람들과 어울리는 방식이에요. 그건 개인적인 것이 아니고, 당신과의 만남을 즐기지 않는다는 이야기도 아닙니다. 단지 나는 지금 다른 뭔가에 집중을 하고 있다는 것을 뜻합니다.

사적인 모임 뿐만 아니라 우리는 우리가 필요없다고 믿는 미팅이나 심지어 메신저 챗에서조차 다른 사람들을 실망시키지 않으려는 이유로 나오지 못하는 경우들이 많다. 반드시 집중의 문제가 아니라고 하더라도 Clean Coder에서 로버트 마틴은 자신의 시간을 효율적으로 사용하는 것은 프로페셔널의 당연한 책임이라고 말하고 있다. 쓸데없는 양심의 가책을 느끼지 말자.

I also write out what my daily, weekly, monthly goals are, and every evening I check how I’m doing. And then I just over allocate my time [to match the goals]. People think that creativity is this free spirit that has no boundaries. No, actually the most creative people in the world schedule their creativity. That’s the irony. So I try to do the same. I just don’t have as many meetings as you think. Instead I have a lot of me time where I’m just thinking; I’m at a white board drawing by myself. Occasionally I might have someone with me. If I have a call or another meeting, I’ll just block it out if I’m in the zone. That’s unorthodox because it means that you’re breaking social contracts, you’re disappointing someone because you didn’t show up. But if you’re really, really focused, those are the times when the breakthroughs come.

그리고 저는 매일, 매주, 매달의 목표가 무엇인지를 기록해두고, 매일 저녁에 내가 얼마나 그러한 목표를 달성하고 있는지를 점검합니다. 그리고는 (그 목표들을 달성하기 위해서) 시간을 여유롭게 할당합니다. 보통 사람들은 창의성이란 제약이 없는 자유로운 정신이라고들 생각합니다. 그게 아니에요. 사실은 세상에서 가장 창의적인 사람들은 자신들의 창의성을 계획합니다. 그건 역설적이기는 합니다. 그래서 저도 똑같이 하려고 합니다. 저는 여러분들이 생각하는 것만큼 많은 회의를 가지고 있지 않아요. 대신 단지 생각하는 것에 많은 시간을 할당합니다. 혼자 화이트보드 그림 앞에 서서요. 가끔 누군가와 함께 하기도 해요. 만일 내가 전화나 다른 회의가 있는데, 내가 매우 집중하고 있는 상태 (in the zone)라면 그것들은 그냥 차단해버릴 겁니다. 그건 당신이 사회적인 계약을 어기고, 당신이 나타나지 않은 것으로 인해서 누군가를 실망시키는 것이기 때문에, 이례적인 것입니다. 하지만, 당신이 정말로, 정말로 집중하고 있다면, 그때가 바로 중대한 돌파구가 만들어질 때입니다.

요즘 들어서 매일 매일 발생하는 사건들과 커뮤니케이션에 묻혀서 정작 앞으로 나가지 못하고 있단 느낌을 많이 받았는데, 이 말 들로부터 굉장히 용기와 도움을 얻었다.

어제 1시간 정도 들여서 Yearly/Monthly/Weekly/Daily goal을 세워보았다. 매일 저녁 이를 평가하고 다시 목표를 업데이트하는 습관을 들이려고 한다. 그리고 이로부터 식별된 내 삶의 중요한 목표들에 내 시간의 대부분을 사용하고 싶다.

Daniel Ek on Focus 더 읽기"

가계동향조사 논란에 관한 글을 읽고

“가계동향조사와 통계청장 교체를 둘러싼 논란점 정리”

http://sovidence.tistory.com/968

외부의 시각이긴 하지만 나름대로 객관적으로 최근의 가계동향조사에 대한 관점을 얻을 수 있는 글. 인구조사라는 전혀 다른 도메인에 관한 얘기라서 흥미로왔다.

몇가지는 교훈으로 남겨볼만한 것 같아서 몇몇 부분을 인용해본다.

하나는, raw 데이터의 고도화된 수집, raw 데이터를 이용한 기술적인 통계, 어떤 의사 결정을 위한 분석은 모두 다른 분야이고 이를 성공적으로 달성하기 위해 필요로 하는 전문적인 역량도 꽤 다르지만 이 도메인 바깥에 있는 사람들 눈에는 하나로 보인다는 것이다. 이것이 잘못되었다는 것이 아니라 효율을 위해 사회나 조직 분화 과정에서 얻어지는 부산물이지만 때로 불필요한 오해나 잘못된 결정을 낳기도 한다.

일반적으로 착각하는 것 중의 하나가 (a) 통계 원자료 생산과 (b) 생산된 원자료 분석 능력이 같은 건줄 아는 것. 양자는 매우 다름. 대학 교수나 연구원들은 전자의 능력이 별로 없고, 통계청 직원들은 후자에 특화되어 있지 않음. 통계청의 원자료 분석은 대부분 기술 통계임.

데이터를 이용한 의사결정에 대한 강조는 굳이 여기서 할 필요도 없겠지만, 이것이 잘 이루어지려면 분석하기 편리한 환경이 중요하다. 순진하게 데이터를 다 퍼주어야 한다는 것이 아니라 데이터를 잘 보호하면서도 편리하게 이용할 수 있도록 하는 전문성이 필요하다. 한편, 데이터란 단어 자체가 너무 넓은 의미를 담고 있다보니 그 목적(의 일부)에 해당하는 증거라는 단어가 얘기하고 이해하기 좋겠다는 생각이 든다.

한국 통계청은 청와대에서 자료를 달라고 해도 정권이 통계 조작할려고 한다고 노조가 성명서를 발표하는데, 미국은 전세계 모든 인민들에게 자신들의 자료를 공개하고 있음. […] 정권이 통계를 조작하는 것은 결코 해서는 안되는 일이지만, 정권이 통계 원자료로 어떤 일이 벌어지는지 분석하는 것은 매우 권장해야 할 일임. “증거기반정책” 생산은 통계 분석없이 불가능함. 후자를 했다고 전자를 의심하고 공격하는 건 말이 안됨.

추가논의 1: http://sovidence.tistory.com/969

추가논의 2: http://sovidence.tistory.com/970

추가논의 3: http://sovidence.tistory.com/971

추가논의 4: http://sovidence.tistory.com/972

추가논의 5: http://sovidence.tistory.com/973

가계동향조사 논란에 관한 글을 읽고 더 읽기"

약어(abbreviation)를 쓰지맙시다

해당 도메인에서 널리 통용되는 약어가 아니라면 쓰지맙시다.

Rationale

  • 커뮤니케이션 비용의 중요성
    • 커뮤니케이션 비용은 조직이 커질수록 중요한 문제가 되어가고, 이걸 본질적으로 개선하기도 쉽지가 않음.
  • 되돌리기 힘듬
    • 약어를 한번 쓰기 시작하면 이걸 없애는 것은 쉽지가 않음.
  • 약어 사용의 비용
    • 특정 조직에서 사용되는 약어의 의미를 아는 사람은 약어를 쓰더라도 풀어 쓰더라도 크게 문제 없는 반면, 
    • 약어의 의미를 모르는 사람은 이 의미를 찾기 위해 굉장한 비용을 들여야함.
      • 비용을 들여서 찾을 수 있으면야 그래도 양호하지만, 못찾거나 안찾으면 정확히 이해하지 못한 상태로 남게되는 안습.
      • glossary 같은 거 만들 수는 있는데 만들고 유지하기도, 그걸 항상 참조하기도 쉽지 않다.
  • 약어 사용의 이익
    • 약어를 씀으로서 절약되는 비용이 그리 크지 않다고 생각함.
      • 발화할 때 시간이 절약되는 것, 문서를 쓸 때 시간이 절약되는 것, 기억하기 쉬운 것(question)
    • 하나의 문서 내에서 굉장히 빈번하게 언급되는 경우.
      • 문서의 앞머리에 그 용어를 정의하고 사용해라.
      • ‘빈번하게’ 예를 들어 10-20번 이상 언급된다면 …
  • 약어 사용의 비용과 이익의 관계
    • 조직이 커질 수록 약어를 사용 시 감소하는 비용 (이익)보다 약어를 이해하기 위한 비용이 커짐.
  • 약어를 사용하는 기준은?
    • 해당 도메인에서 널리 통용되는 단어: Acceptable
      • MAU
      • FSM
      • 그 분야의 기본적인 교육 또는 일정 수준의 업무 경험을 가지고 있다면 90% 이상 (적어도, 80% 이상) 알고 있으리라고 기대되는 약어들.
    • 전사적으로 통용되는 단어: Unacceptable?
      • 입사한 사람이라면 반드시 알고 있는 약어라면 그래도 큰 손실이 없을지도 모르겠다.
      • 그래도, 원래의 단어로 써도 된다면 원래의 단어를 쓰자.
    • 그 외에 전부 Unacceptable
    • 예외: 문서의 앞머리에 용어를 정의하는 경우
      • 어떤 경우에는 문서 또는 정보의 부분만 공유되는 경우 (예를 들어 JIRA issue의 sub-issue)가 있는데, 이 때에는 다시 약어 사용이 문제가 될 수 있으므로, 원어를 쓰도록 노력하자.
  • 연습
    • 일반적으로, 약어가 발견되면 우선 원래의 단어를 써보자.
    • 정말 원래의 단어가 너무 길고 위에서 얘기한 비용-이익 트레이드 오프에서 정말로 약어 사용의 이익이 더 큰지 일단 자신의 마음속에서 검증하자.
    • 그렇지 않다면 약어 사용을 중단하고 원래의 단어로 대체해나가자.
    • 기존의 약어를 없애는 것은 힘들다. 우선 새로운 약어를 만드는 것부터 자제해라!

약어(abbreviation)를 쓰지맙시다 더 읽기"

The Logistician “청렴결백한 논리주의자”

16Personalities란 사이트에서 테스트를 해보니 ISTJ-A가 나왔다. 사이트 상에 소개된 이론에 따르면, MBTI의 네이밍을 차용해왔지만 모델은 다르다고. 뭐가 다른진 솔직히 잘 모르겠다. 그나저나 블로그를 뒤져보니 2002년에는 ISFTP, 2005년에는 INTP로 MBTI 결과가 나왔더랬다.

The Logistician “청렴결백한 논리주의자” 더 읽기"

젊은 엔지니어들에게 조언

꼰대성이 포함된 문서입니다.

이 문서는 저자의 꼰대성이 포함되어 있거나 그렇게 여겨질 가능성이 있는 문서이므로 읽기 전에 주의를 요합니다.

  • 저자의 꼰대성이 유감없이 발휘된 경우
  • 넓은 범위의 사물이나 일들을 일반화하다보니 어쩔 수 없이 꼰대성으로 여겨질 수 밖에 없는 경우

1. 도그마에 도전

어떤 범주 (이론, 회사, …)든 도그마라는 게 있음. (이미 확립된 수학 이론에 도전하는 이야기는 아님.)
그런데 도그마를 당연시 하기 보다는 항상 도그마가 정말 옳은 것인지 검증하고 이해하려고 노력.
이해하려고 노력하는 과정에서 많은 것을 배움.
만약 그 과정에서 그 도그마가 틀렸다는 것을 증명한다면 혁신을 가져옴.
틀렸다는 것을 증명하는 과정도 단순히 근거를 마련하기 위한 노력 뿐만 아니라 다른 사람에게 그것을 설명 또는 설득하기 위한 공부가 됨.

2. 껍데기보다는 본질을 공부

트위터를 매일 읽으면서 오픈소스 프로젝트들 뉴스들.

트위터 읽지말란 이야기가 아님. 새로운 프로젝트들의 동향은 아는 것도 경쟁력을 유지하기 위한 감각을 체화하기 위해 그 자체로 매우 중요한 것임.
다만, 그것만 하지 말라는 것임.

오픈소스 프로젝트들의 코드를 보고, 그 프로젝트와 다른 프로젝트와 다른 것은 무엇인지 파악.
엔지니어링 필요에 따라 오픈 소스 프로젝트를 익힌다거나 하는 것은 필요.
하지만, 시간이 지나면 스러질 프로젝트나 프로덕트에만 자신의 시간을 투입하는 것은 덧없는 일임.
‘사용자’가 되기 보다는 장기적인 기술, 본질적인 기술에 집중.
– 언어의 쓰임새, 언어의 메타범주에 해당하는 이론이나 프랙티스를 공부.
– 머신러닝 라이브러리 사용법도 유용하겠지만 머신러닝 이론을 익히기.

세상에는 이런 사람도 필요하고 저런 사람도 필요함. 하지만, 한쪽에 전도되어서 한쪽을 너무 소홀히 하지 말자는 이야기.

3. 멋보다는 가치에 집중

멋-불요론이 아니라, 멋도 가치를 위한 것이 되어야 함.
엔지니어링에서 멋이 추구해야하는 본질이라기보다는 수단임.

안타깝지만 예를 들어보자.
ghe doc vs. Wiki doc.
ghe doc에 쓰더라도 이것을 어떻게 실제로 사용자들에게 알릴지 고민하는 것이 가치에 집중하는 행위임.

4. 당장의 돈보다는 실력을 기를 수 있는 환경에 집중.

어떤 사람들은 첫 연봉이 미래의 연봉을 결정한다고는 하는데, 그러한 이야기도 물론 일리는 있겠지만, 소프트웨어 엔지니어로서는 약간 특수성이 있다고 생각한다. 바로 초기 기술 스택이 나중의 기술 커리어를 결정한다는 것. 이를테면 한번 서버 엔지니어 하던 사람이, 10년쯤 하다가 클라이언트로 경력 전환한다거나 그 반대의 경우들은 쉽게 찾아보기 힘들다는 것. (그런데 그런 걸 가능케하는 능력자들이 가끔씩 있기는 하다.) 물론 실력이라는 것도 한계효용은 체감하지만, 그러한 시점까지는 실력을 기를 수 있는 환경에 집중하는 것이 실질적인 미래의 연봉에 큰 영향을 미친다고 믿고 있음.

젊은 엔지니어들에게 조언 더 읽기"