근래에 회사 신규 프로젝트에 적용할 기술을 관해서 리서치를 진행했다. 구글 빅쿼리를 최우선으로 염두에 두고 조사를 진행하다가 다음 포스트를 발견했다. 우선 좀 더 읽기 쉽게 직접 영문을 번역하고 포스팅을 작성해준 블로그 주인장님께 소소한 감사를 표한다. 해당 포스트는 빅쿼리의 작동 원리 및 구조에 관해 설명하는 글이다. 정말 이해하기 쉽고 간단하게 작성된 글이니 일독을 권한다.
일단 글을 읽고 나니, Jeff Dean이라는 미친 사람에 관한 경외...를 느꼈다. 물론 그가 혼자 설계한 건 아니겠지만 저 방대한 빅쿼리를 포함한 구글은 대용량 데이터 처리 핵심 기술들을 거의 다 주도했다니 미친 사람이란 말이 아주 적당한 것 같다. 직원들도 비슷하게 생각했는지 Jeff Dean을 구글링하면 제프 딘에 관한 진실이란 말로 우스갯소리가 돌아다니는데 그 내용은 다음과 같다.
- 컴파일러는 제프 딘에게 경고하지 않는다. 제프 딘이 컴파일러한테 경고한다.
- 모든 포인터는 제프 딘을 가리킨다.
- 제프 딘은 1969년 12월 31일 오후 11시 48분에 태어났다. 그리고 그가 타임카운터를 구현하는데 12분이 걸렸다.
...ㅋㅋㅋㅋㅋ 하나같이 정신나간 것들 밖에 없다. 이것도 찾아보면 재밌으니 한 번 찾아보길 권한다.
두 번째는 생각보다(기대한 것보다) 엄청난 기술은 아니란 생각이 들었다. 물론 대단한 기술은 맞다. 이건 무려 수 백 GB 단위를 초 단위로 쿼리를 가능케 하는 기술이다. 다만, 그 구성요소를 오밀조밀 하나하나 따져보니 상상도 못할 별천치에나 있는 그런 기술은 아니더라~ 이런 뜻이다. 예를 들어 컬럼 기반으로 저장해 압축효율을 높인다던가, 물리적 파티션을 분할해 쿼리하고 유니온으로 합친다던가 하는 것은 기본적인 압축 알고리즘을 알고 기본적인 동작 원리를 이해하면 해낼 수 있는 발상들이다. 또한 노드들을 트리 구조로 쪼개 쿼리를 분할한다던가 하는 것도 자료구조를 공부하면 구상할 수 있다. 물론(..) 더 자세하고 복잡한 디테일은 훨씬 많겠지만 중요한 건 이들도 기본적인 컴퓨터공학의 기초에서 크게 멀지는 않다는 것이다. 별천지 발상으로 만들어진 게 아니라.
역시 기본이 중요하다. 자료구조, 알고리즘, 네트워크 등등....