SQL 의 CAP 이론과 NoSQL 의 BASE

CAP 이론

분산 시스템 설계에 많이 인용되는 CAP 이론은 UC Berkeley 의 Eric Brewer 교수님이 제안한 개념이다. 분산 시스템 설계니 당연히 한 대의 서버로 이루어진 시스템이 아니라 여러 서버로 이루어진 시스템을 가정하는데, Consistency, Availability, Partition Tolerance 라는 세 가지 속성의 약자를 따서 CAP 라고 이름이지어진 이 개념은 Partition tolerance 한 시스템을 구현하기 위해서는 Consistency 나 Availability 둘 다를 얻을 수 없음을 의미한다. 좀 더 쉽게 말하면 C, A, P 이 세 속성 중에 기껏해야 두 개 밖에 취할 수 없다는 뜻이다.

여기서 Consistency 는 다른 서버에서도 가장 최근에 쓰여진 데이터가 읽혀야 됨을 의미한다. 예를 들어 A 와 B 라는 서버가 분산 시스템을 구성하고 있다면, A 라는 서버에 데이터를 쓰면 그 바로 뒤에 B 서버에서 누군가 그 데이터를 읽어들일 때 가장 최근의 데이터를 읽을 수 있어야 됨을 뜻한다.

Availability 는 보낸 요청에 대해서는 응답을 줄 수 있어야 됨을 의미한다. 그 응답이 가장 최근의 응답이 되었든, 아니면 살짝 이전의 데이터가 되었든말이다. 이 자체로는 너무 쉽고 당연한 것 같지만, 시스템이 “가장 최근의 데이터만을 줘야된다” 라는 제약이 붙게 되면, 가장 최근인지 아닌지 판단을 할 수 없는 경우 응답을 보내지 못할 수도 있게 된다는 점을 기억하자.

Partition tolerance 는 서버간의 통신에서 설령 네트워크가 끊긴 수준의 오류가 있더라도 시스템이 동작해야됨을 의미한다.

.

RDBMS 와 ACID 속성

RDBMS 는 Relational Database Management System 의 약자이다. 우리가 보통 DB 라고 말하는 것은 원칙적으로 DBMS 를 의미한다. 그러니 RDBMS 도 보통 RDB 라는 이름으로 부르기도 한다. R에 해당하는 Relation(al) 은 “데이터를 테이블 형태” 로 관리함을 의미한다. SQL 서버들이 테이블을 만들고 그 안에 데이터를 저장하는 것을 기억하는가? SQL 쿼리 문도 “CREATE TABLE …” 로 시작한다. 바로 SQL 이 RDB 이기 때문이다. 우리가 일반적으로 사용하는 DB 들은 이 RDB 형태들이다.

전통적인 RDB 에서는 Network Partition 을 크게 고려하지 않았다. DB 는 같은 데이터센터 안에, 심지어 같은 랙에 존재하고 있고 그 때문에 서버간 통신은 굉장히 잘 관리가 되는 안정적인 상황이었기 때문이다.

대신 RDB 에서는 ACID 라는 속성을 중요하게 생각해왔다. Atomicity, Consistency, Isolation, Durability 의 약자를 모아서 단어를 만든 것이다.

Atomicity 는 관련된 작업들은 전부 반영되거나 아니면 하나도 반영이 안되거나 해야된다는 것을 의미한다. “All or nothing” 인데, 쉽게 생각해서 우리가 SQL 에 transaction 을 만들면 그 안의 작업들이 모두 다같이 반영되어야 되는 것을 생각해보면 이해가 쉬울 것이다.

Consistency 는 CAP 의 consistency 와는 약간 다르다. CAP 에서는 서로 다른 서버라 하더라도 가장 최근 데이터를 반환함을 의미하지만, 여기서 consistency 는 DB 의 상태가 늘 일관된 상태를 유지해야됨을 의미한다. 예를 들어 DB 데이터의 속성이나 테이블 내 제약 등이 지정되어있는 경우 이를 준수하는 상황이 계속 일관되게 이어져야 된다는 것이다.

Isolation 은 여러 작업이 실행되더라도 그것이 순차적으로 실행된 것과 같은 결과를 내야됨을 의미한다. 만일 두 작업이 겹치는 것이 아예 없다면 이는 전혀 상관없이 동시에 실행될 수 있어야 되고, 만일 겹치는 부분이 있으면 순서대로 처리가 되어야지 겹쳐서 처리되어 데이터가 이상한 상태가 되어서는 안된다는 것을 뜻한다.

Durability 는 일단 작업이 완료 되었다고 리포팅이 되었다면 그게 DB 에 영구적으로 반영이 되어야 함을 의미한다. 설령 DB 가 크래쉬 하더라도 말이다.

.

NoSQL 등장의 배경

앞서 언급한 것처럼 DB 에서는 Partition 의 상황보다는 ACID 를 훨씬 중요한 가치로 생각을 하고 그쪽으로 많은 연구들이 이루어졌다. 그러나 구글이나 아마존, 페이스북 등 인터넷 회사들의 경우 데이터 센터가 여러곳에 분산되는 것이 일반적이다. 그런데 DB 는 한 곳에서만 가져다가 써야된다고 하면 이는 성능상의 큰 병목이 될 것이다. 그때문에 DB 역시 여러곳에 분산을 해야되는 상황이 되었고, 이 때문에 partition tolerance 를 중요한 가치로 인식하게 되었다.

앞에서 Partition tolerance 를 취하면 consistency 나 availability 둘 중 하나 밖에 취할 수 없다고 말을 했다. 그런데 실제 상황에서 consistency 가 그렇게까지 강하게 요구되지 않는 경우들이 많다는 것을 알게 됐다. 구글 검색을 했는데, 방금 crawler 가 긁어온 최신의 데이터를 꼭 보여줘야될 필요는 없지 않은가. 친구가 facebook 에 글을 쓰고 1-2초 지나서 내 화면에 뜬다고 문제가 될 건 없는 경우 등도 마찬가지다.

그래서 consistency 를 좀 약하게 보장하고 대신 시스템의  availability 를 좀 더 보장하는 방법들이 소개 되기 시작했다. 이 때 나온 개념이 eventual consistency 이다. 어느 한쪽이 데이터를 쓰더라도 다른쪽이 가장 최근의 데이터가 아니라 그 전의 데이터를 볼 수 있음을 의미한다. 이렇게 되면 “요청에 응답을 보내야 한다” 라는 availability 기준이 “이전 데이터라도” 보낼 수 있게 되니 크게 향상될 수 있다.

기존에 데이터를 쓰면 다음에 데이터를 읽는 쪽에서는 가장 최근의 데이터를 받아야 된다는 것은 이와 대비해서 strong consistency 라는 표현을 쓴다.  그리고 이런 속성의 DB 는 strong consistency 의 RDB 와는 사뭇 다르다. 그래서 기존의 SQL 과 다른 DB 로 NoSQL 이라는 이름을 얻게 되었다.

이런 속성으로 SQL 의 ACID 에 대응하는 NoSQL 의 주요 속성으로 BASE 를 이야기 한다. Basically Available, Soft-state, Eventual consistency 의 약자를 딴 것이다.

.

게임에서의 SQL 과 NoSQL 의 적용

NoSQL 이 처음 소개되었을 때에는 그것이 새로운 개념이다보니 기존 SQL 을 대체하는 우월한 개념처럼 잘못 인식되곤 했다. 하지만 SQL 과 NoSQL 은 가정하는 상황이 완전히 다른 별개의 솔루션들이다. 풀어야 되는 문제가 다르면 다른 솔루션을 적용해야되는 것처럼, SQL 과 NoSQL 역시 필요에 따라 다르게 사용하는 것이 바람직하다.

앞서 설명한 것처럼 SQL 은 strong consistency 를 보장한다. 그 때문에 consistency 가 중요한 상황에서는 SQL 이 더 적합하다. 그 때문에 많은 경우에 유저 데이터를 SQL 에 저장하는 것이다.

NoSQL 은 partition tolerance 와 availability 가 중요한 상황에서 유용하다. 디비가 먼 지역에 분산되어있고, 반드시 최신 데이터를 보여주지 않아도 되는 경우에 유용할 수 있다. 아니면 적어도 몇초 나 몇분 단위로 싱크만 맞아도 되는 경우라면 적합하다. 이런 이유로 많은 경우에 로그데이터를 NoSQL 에 저장하기도 한다.

이번 컬럼에서는 SQL 과 NoSQL 이 어떤 이유로 나오게 되었고 각각 어떤 것을 중요하게 생각하는지를 설명했다. 어떤 경우도 만능의 솔루션은 없다. 한 선택에 의한 트레이드 오프는 필연적이라고 할 수 있다. 각 솔루션의 배경에 맞게 적절하게 사용하는 것이 무엇보다 중요하다.

아이펀팩토리 문대경 대표

[이벤트] 아이펀 엔진 캐릭터의 이름을 공개합니다!

안녕하세요! 아이펀팩토리 사업팀입니다.
많은 분들의 참여로 ‘아이펀 엔진 캐릭터’의 멋진 이름을 선정할 수 있었습니다.
서버개발에 대한 소원지기 ‘엔지니’를 소개합니다!!
서버에 대한 당신의 소원, 고민! 엔지니가 해결해 드릴게요!

멋진 이름으로 이벤트에 참여해 주신 모든분들 감사합니다!!

엔지니 이름발표-4.jpg

[오피스N_굿피플] 아이펀팩토리 김진욱 CTO 인터뷰

굿피플 직무의 시작

Intro

6명의 뇌섹남이 모여서 문제를 푸는 프로그램인 <문제적남자>. 어느새 100회가 지났을 만큼 일요일 저녁을 책임지는 프로그램으로 성장했다. 이런 인기를 끌 수 있는 이유는 흔히 말하는 퀴즈쇼와는 다르기 때문이다. 쉽게 볼 수 없는, 정말 풀기 어려운 문제들이 나온다. 그리고 6명의 뇌섹남은 가장 먼저 문제를 풀려고 한다. 그 과정에서 감탄하는 장면은 매회 나온다. 왜냐면 그들의 목표는 뚜렷하기 때문이다. 바로 ‘문제를 빨리 그리고 잘 푸는 거다’. 지금 소개하는 사람 역시 이와 같은 목표를 가졌다. 그는 자신이 관심 있는 분야 그리고 하는 일에서 생기는 문제를 잘 풀고 싶다고 했다. 게임서버 전문개발사 아이펀팩토리의 김진욱 CTO의 이야기를 지금 시작한다. By 굿피플 헌터.

b022491e-2883-4bec-8156-4f95a458099a

 나는 어릴 적부터 컴퓨터로 문제 풀이하는 것을 좋아했어. 그래서 대학교에서 컴퓨터 공학을 전공했고, 대학원에서 이동통신망 연구실에서 학위를 받았어. 이 과정을 마치고는 NC소프트에서 사회생활을 시작했어. 5년간 캐주얼 게임의 *프레임워크를 개발했는데, 개발에 사용되는 기본적인 설계와 기능이 재사용 되게끔 제공하는 툴을 제작하는 일이야.

그러다 대학교에서 만난 문대경 대표님(아이펀팩토리)의 권유로 넥슨으로 이직했어. 당시 대표님은 신규개발실장님이셨고, 현재 아이펀팩토리의 서비스를 개발 중이셨지. 1년간 함께 프로젝트를 진행했지만, 회사가 전반적으로 조정이 일어나면서 우리가 가고자 하는 방향과 맞지 않게 됐어. 그래서 대표님을 포함한 몇몇 직원과 함께 해당 프로젝트를 가지고 나와서 아이펀팩토리를 시작했어.

* 프레임워크: 소프트웨어 애플리케이션이나 솔루션의 개발을 수월하게 하기 위해 소프트웨어의 구체적 기능들에 해당하는 부분의 설계와 구현을 재사용 가능하도록 협업화된 형태로 제공하는 소프트웨어 환경을 말한다. (네이버 지식백과)

굿피플 인터뷰 본문 더보기>

[오피스N_굿피플] 아이펀팩토리 문대경 대표 인터뷰

굿피플 직무의 시작

Intro
마크 저커버그 대표는 컴퓨터공학과 심리학을 전공하여 페이스북을 창업했다. 김봉진 대표는 9년간 디자이너로 활동하여 우아한 형제들을 창업했다. 두 대표의 공통점은 자신이 가진 장점을 살려서 회사를 창업하고 운영했다는 점이다. 이처럼 대표는 한 분야에 커리어를 가진 전문가가 되어야 한다. 얼마 전 만난 문대경 대표 역시 10년 이상 소프트웨어 엔지니어로 활동하여 게임 서버 전문개발사 아이펀팩토리를 창업했다. 그는 사업 초기에 기술 영역의 실무자로도 활동했다. 이제는 그 단계를 넘어 경영에 집중하는, 그의 이야기를 시작한다.  By 굿피플 헌터.

 

IMG_2310

나는 사회생활을 일찍 시작했어. 대학교에서 컴퓨터 공학을 전공했고, 3학년 때부터 넥슨에서 일했거든. 그렇게 7년 가까이 넥슨에서 경력을 쌓았어. 그 시간 동안 넥슨은 여러 변화가 일어났어. 20명이던 구성원이 400여 명으로 늘어났고, 거기서 오는 문화적인 충돌이 생겼지. 기존 멤버는 스스로 하는 것이 익숙했지만, 성장하면서 다른 회사에서 이직한 사람은 분업화를 지향했기 때문이야. 이 과정을 지켜보면서 스스로에게도 변화를 줘야겠다고 생각했고, 미국으로 유학을 갔어.

미국 UC버클리에서 컴퓨터공학의 석사와 박사를 마쳤고, 구글, 마이크로소프트리서치, 시스코 등에서 인턴을 했어. 내게는 글로벌 회사의 문화를 배운 소중한 경험이야. 이를 계기로 스타트업에서 제품 개발에 참여했는데, 끝까지 하지는 못했어. 예전부터 하고 싶은 게임 서버 엔진을 이제는 진행해야겠다고 판단했거든. 그러려면 지원을 받아야 했고, 다행히 넥슨에서 일할 때 알던 분들께서 도와주신다고 하셨어. 그렇게 난 넥슨으로 돌아왔어.

세상일이라는 게 참 쉽지가 않나 봐. 내가 넥슨으로 돌아올 때가 기업 상장 직전의 상황이었어. (웃음) 그러다 보니 지원받기는 쉽지 않았고, 그냥 창업하는 게 낫겠다는 판단에 2013년에 아이펀팩토리를 시작했어.

굿피플 인터뷰 본문 더보기>

[공고] 게임 운영 플랫폼 아이펀 디플로이 무상지원 사업 공고

안녕하세요,  아이펀팩토리 사업팀입니다!

게임서비스 런칭이 얼마 안남았는데, 운영툴을 고민중이세요?

아이펀팩토리와 한국모바일게임협회가 중소개발사를 위한 운영플랫폼(아이펀디플로이)을 무상으로 지원하는 사업을 시작했습니다. 아래 신청서 작성 후 이메일로 지원하시면 신청 끝! 간단하죠?

① 모바일게임협회 회원사 신청하러 가기! (goo.gl/CN8txp)

② 신청서 다운로드 하러 가기 (http://goo.gl/qmskhW)

③ 바로 이곳으로 보내주시면 되요! (kmga@k-mga.or.kr)디플로이 안내문 시안_20170316

 

[이벤트] 아이펀 엔진 캐릭터 이름 공모전 경품 당첨자 발표

안녕하세요! 아이펀팩토리 사업팀입니다.

경품에 당첨되신 분들 모두 축하합니다!!!

당첨되신 분들에게는 페이스북 메시지를 통해 개별 안내 드리도록 하겠습니다^^

아쉽게 당첨되지 못하신 분들 너무 실망하지 마세요! 더 재밌고 즐거운 이벤트로 다시 돌아오겠습니다.

참여해 주신 모든 분들에게 감사 인사 드립니다!

경품 추첨 페이스북 라이브 방송 보러 가기

당첨자 발표 이미지

경품 당첨자 경품지 사진_20170316

[인벤기고컬럼 11] 게임 서버 엔진 사업을 하면서 경험하고 느낀 점



■ “구글 캘린더의 경쟁 상대가 누구라고 생각합니까?”.

나는 구글 본사에 입사를 하기로 되어있었다. 하지만 연봉 협상까지 마친 상태였으나, 결국 마지막 단계에 구글 대신 SDN 이라는 영역을 개척하던 실리콘밸리의 다른 스타트업으로 갔다. 박사 졸업을 하면서 유일하게 입사 지원한 회사가 구글이었다는 점을 생각하면 상당히 과격한 결정이었다.

내가 구글만을 지원했던 이유는 그 회사의 문화와 제반 인프라 때문이었다. 미국에서는 여름에 인턴십을 하는 것이 정말 중요한 과정 중 하나이다. (빌 클린턴과 당시 인턴이었던 모니카 르윈스키의 스캔들 때문에 “인턴” 이라는 표현이 무언가 부정적인 느낌을 준다고 해서 “인턴십을 한다” 라고 돌려 말하는 것이 좋다던 시절이었다) 나는 시스코와 마이크로소프트 리서치와 구글에서 인턴을 했지만, 그중에서 구글에서의 기억이 가장 좋았다. 그때 결혼까지 약속했던 여자친구와 처참한 이별을 했던 기간임에도, 가장 좋았던 기억으로 남은 걸 보면 구글에서의 기억이 얼마나 인상적이었는지 상상할 수 있을 것이다.

구글에서 인턴을 포함한 신입 직원들이 들을 수 있는 많은 강연들이 있었는데, 나는 구글 캘린더 개발자가 했던 강연이 지금까지도 기억에 남는다. 그 발표자는 구글 캘린더의 경쟁 상대가 누구일 것 같냐는 질문을 했다. 많은 사람들이 MS Outlook 같은 타사 제품을 언급했다. 하지만, 그는 “구글 캘린더의 경쟁 상대는 종이 캘린더”라는 말을 했다. 나는 이 말에 상당히 충격을 받았다.

인벤기고컬럼 본문 더보기>