이 글은 Kousik Nath의 System Design: Design a Geo-Spatial index for real-time location search을 번역한 글로, 모든 저작권은 원저작자에 있습니다. 최대한 원문을 살리려 했으나, 이해를 돕기 위해 의역과 역주를 사용한 곳도 있습니다.
수정할 부분이 있다면 indigogurur골뱅이gmail.com으로 남겨주시길 바랍니다.
2부는 아키텍처 전략: 실시간 위치 검색을 위한 지리 공간 인덱스 설계 시리즈 두 번째 시간으로 샤딩으로 아키텍처 개선하기에 대해 다루었습니다.
- 개요 및 아키텍처
- 샤딩으로 아키텍처 개선하기
- Geo Hash를 이용하여 아키텍처 개선하기
소개
우리는 실생활에서 항상 실시간 위치 검색 서비스를 사용합니다. 음식 주문 앱이나 주문형 택시 예약 서비스는 요즘 어디서나 볼 수 있죠. 이 글의 목적은 실생활에서 지리 공간 인덱스(Geo-spatial Index)에 대한 백엔드 인프라를 설계하는 방법을 살펴보는 것입니다.
지난 1편에서는 로드밸런서와 캐시를 이용하여 부하를 배분 및 감소하는 전통적인 아키텍처를 설명했습니다. 
이번 시간에는 위 그림에서 더 개선된 아키텍처 접근법을 공유합니다. 더 나은 방법으로 캐시를 분할하는 방법을 알아보도록 하겠습니다.
계속 읽기mongodb가 혜성처럼 등장해 많은 사랑을 받은 이유가 여러가지 있다. 가장 큰 덕은 모바일의 폭발적인 성장이지만, 개발자에게는..
- auto-sharding
- schemaless + json 데이터 저장
- 자체적으로 가지고 있는 master-slave high availability 기능
정도 되지 않을까 생각한다.
sharding이라는 것은 꽤 귀찮은 작업으로 어떻게 데이터를 분배해야 할지 많은 고민을 해야 되는데, 굳이 크게 고민하지 않고 auto-sharding을 쓸수 있는 적당한 규모의 프로젝트라면 마다할 필요가 없다.
또한 High Availiability를 자체적으로 지원을 하는데
1) 별도의 watcher인 arbiter 를 셋업하여 master-slave를 감시하는 방법
2) watcher없이 master-slave가 서로 heartbeat 메세지를 보내고 문제를 감지해 failover를 처리하는 방법
이렇게 두가지를 지원한다. 개발자에게는 야호하고 소리를 지를수 있는 좋은기능! (단 죽은 master를 어떻게 살리지는 개발자 여러분의 몫 – 좋은 방법이 있으면 공유를…)
스터디 그룹을 위한 패턴 언어에는 총 4개의 파트로 구성되어 있으며, 정신(Spirit), 분위기(Atmosphere), 역할 (Roles), 관습(Customs) 으로 나뉜다 .
스터디 그룹을 위한 패턴 언어 – Sprit 편 ‘Spirit(정신)’ 부분에서는 1. (숫자는 해당 패턴 번호를 의미한다.) 스터디를 왜 해야 하는지, 2. 토론의 중요성에 관해, 3. 집중할 수 있는 분위기에서 진행하기, 4. 꾸준히 하기, 5. 인맥형성 부분이 있다.
스터디 그룹을 위한 패턴 언어 – Atmosphere 편 ‘분위기’ 부분에서는 큰 부분에서부터 점차 세부적으로 기술하고 있으며, 6. 스터디의 지역적 장소 설정, 7. 장소의 분위기 설정, 8. 자리배열 방법, 9. 웹 페이지 의 순으로 기술하고 있다.
스터디 그룹을 위한 패턴 언어 – Role 편 ‘역할’ 부분에서는 각 구성원의 역할에 대해 기술하고 있는데 10. 리더는 열정적으로, 11. 사회자는 의욕적으로, 12. 참가자는 적극적으로 임하고, 13. 참가자는 또한 준비를 해 와야 한다. 마지막으로 14. 잘하는 사람을 적극 영입해야 한다는 것으로 설명되고 있다.
이 자료에 대한 모든 권한은 1차적으로 Joshua Kerievsky에게 있으며, 편역된 이 post의 권한은 소프트웨어 마에스트로 멘티였던 김민수, 장성환, 이원희, 채경훈 님에게 있습니다. 사용하실 분이 있으면, 위 네 분에게 문의해서 답신을 드리겠습니다.
습관 (Customs) 편
지금까지 스터디를 유지시키는 마음가짐, 여러 가지 분위기 조성, 그리고 규칙들에 대해 알아보았다. <<자조론>>으로 유명한 영국의 저술가인 새뮤얼 스마일스는 “습관은 나무껍질에 글자를 새긴 것과 같다. 그 나무가 커감에 따라 글자가 커진다.”라는 말은 남겼다. 좋은 습관 하나하나가 모여 스터디를 원활하게 돌리는 원동력이 될 수 있는 것이다.
이어지는 글들은 스터디를 위한 7가지 Customs(습관)에 대한 패턴들이다.
15. 토론을 시작하는 질문 (OPENING QUESTION )**
Joshua Kerievsky는 대학 1학년 여름방학에 일리아드 오디세이를 읽고 독후감을 쓰는 숙제를 받았다고 한다. 밤낮을 가리지 않고 읽고 또 읽어 숙제를 마칠 수 있었는데, 당시 그 책은 전쟁에 관한 소설인줄 알았다고 한다.
학기가 시작한 이후 교수님께서 한 사람의 운명과 그 자신의 의지에 관한 질문을 던지셨다. 이 질문은 양을 치는 양치기가 언덕에 숨어서 전쟁을 보는 책의 장면과 연결이 되었다. 이 수업 이후 저자는 일리아드 오디세이를 운명에 순응하는 것과 개척하는 것에 대한 관점으로 바라볼 수 있었다고 한다.
사람들은 시작질문 없이 책을 읽으면 책의 진정한 내용을 알지 못하고 겉모양만 이해하게 된다. 하지만 이처럼 시작질문을 하게 되면 사람들의 관심을 끌 수 있게 되고 생각하기 어려운 부분들을 쉽게 접근할 수 있도록 해준다. 이 방법은 어려운 내용에 대해 공부할 때 더 유익하게 쓰일 것이다.
스터디 그룹을 위한 패턴 언어에는 총 4개의 파트로 구성되어 있으며, 정신(Spirit), 분위기(Atmosphere), 역할 (Roles), 관습(Customs) 으로 나뉜다 .
‘Spirit(정신)’ 부분에서는 1. (숫자는 해당 패턴 번호를 의미한다.) 스터디를 왜 해야 하는지, 2. 토론의 중요성에 관해, 3. 집중할 수 있는 분위기에서 진행하기, 4. 꾸준히 하기, 5. 인맥형성 부분이 있다.
스터디 그룹을 위한 패턴 언어 – Atmosphere 편
‘분위기’ 부분에서는 큰 부분에서부터 점차 세부적으로 기술하고 있으며, 6. 스터디의 지역적 장소 설정, 7. 장소의 분위기 설정, 8. 자리배열 방법, 9. 웹 페이지 의 순으로 기술하고 있다.
이 자료에 대한 모든 권한은 1차적으로 Joshua Kerievsky에게 있으며, 편역된 이 post의 권한은 소프트웨어 마에스트로 멘티였던 김민수, 장성환, 이원희, 채경훈 님에게 있습니다. 사용하실 분이 있으면, 위 네 분에게 문의해서 답신을 드리겠습니다.
역할 (Roles) 편

앞서 두 파트를 통해 스터디를 유지시키는 마음가짐, 여러 가지 분위기 조성에 대해서 알아보았다면, 이제는 스터디 팀원들 개 개인의 역할에 대해 설명하는 패턴언어이다.
‘역할’ 부분에서는 각 구성원의 역할에 대해 기술하고 있는데 10. 리더는 열정적으로, 11. 사회자는 의욕적으로, 12. 참가자는 적극적으로 임하고, 13. 참가자는 또한 준비를 해 와야 한다. 마지막으로 14. 잘하는 사람을 적극 영입해야 한다는 것으로 설명되고 있다.
지난 주말 (2012년 5월 20일) 코엑스에서 스마트 개발자 협회가 주관하는 글로벌 커뮤니티 써밋에 EVA 커뮤니티 연사로 발표를 했습니다.
먼저 이번 발표에 많은 도움을 준 소프트웨어 마에스트로 멘티인 오유환, 강미경, 김나래, 손윤정 4 멘티에게 감사드립니다. 이 4명이 아니였다면 이러한 좋은 자료는 나오지 못했을 겁니다.
프리젠테이션이 다루는 내용은 다음과 같습니다.
Android 이해
- 구글이 꿈꾸는 Android의 미래 (Modu 사 특허 인수와 Android@Home)
- Binder ( Broker 패턴 )과 Intent
오픈소스 그리고 사례
- Simple Framework
- Logcat보다 Microlog4Android
- 불편하지 않은 화면 갱신 (Publisher-Subscriber)
분석 방법
- Localytics로 사용자 행동 패턴 분석
- STAN을 이용한 Android App 분석방법
이번 발표는 소프트웨어 마에스트로 멘토로 활동하면서, 멘티들과 같이 만들어 낸 작품입니다. 비록 여러가지 상황(취업, 학업등)으로 모든 멘티가 다 2단계에 진출은 하지 못했지만, 지금도 열정을 내뿜으며 같이 성과를 만들어내고 좋은 팀웍을 유지하고 있습니다.
스터디 그룹 언어 패턴 Sprit (정신) 편에 이어 Atmosphere (분위기) 편을 나누고자 합니다. ( 이 포스트를 쓸수 있게 흔쾌히 허락해준 김민수, 장성환, 이원희, 채경훈님의 지식 나눔에 정말 감사를 표합니다.)
Atmosphere (분위기) 편

스타벅스의 CEO Howrad Schultz는 그의 저서에서 편안한 만남의 장소의 중요성을 언급하면서 미국에서 사적인 교류의 시간이 줄어들고 있다고 지적했다. 1990년대 들어서 커피숍이 미국인의 사교의 장소로써 중요한 역할을 차지 하게 되었다. 이러한 장소는 집이나 회사의 일에 간섭 받지 않는 “제 3의 장소” 역할을 담당했기 때문이다.
이번 파트부터는 Atmosphere(분위기,장소)에 관한 이야기이다. 분위기나 장소의 선정도 스터디를 오래 이끄는 데 필수적인 요소이다. 큰 장소를 선정하고 그 장소내의 분위기 자리배열방법, 온라인 공간을 만드는 것에 대해 나누고자 한다.
여러분에게 의미있는 패턴들을 공유해서 무척 기쁩니다. 패턴을 활용한 리펙터링 (Refactoring to Patterns)이라는 서적을 통해 우리나라에 알려진 Joshua Kerievsky의 스터디 그룹 패턴 언어를 번역은 아니어도 약식을 통해 편역을 해 공개해 드립니다.

삼성 소프트웨어 맴버십 후배이자, 소프트웨어 마에스트로 멘티인 김민수, 장성환, 이원희, 채경훈님에게 정말 감사드립니다. 정말 이 4친구에게 감사의 메세지를 보내며, 지식 나눔에 정말 감사를 표합니다. 훗날 따로 이 친구들에 대해 포스팅을 하도록 하겠습니다.
또한 이 편역된 자료를 다듬어 준 EVA 식구 분들에게 감사드립니다. 아무런 댓가 없이 열심히 다듬어 주셔서 감사드립니다.
소프트웨어 설계가 아니라. 스터디를 성공적으로 이끄는 패턴이라 의아해 하시는 분이 있을지 모르지만, 모든 것들이 사람이 모여 만드는 결과 이므로 사내 동호회나 커뮤니티에서 스터디를 이끄시는 분에게는 도움이 될듯 합니다.
이글을 읽기 전 2010년 PLoP에서Joshua Kerievsky가 발표한 “A Timeless way of Communicating”을 보시면 여러므로 도움이 되실 듯 합니다.
이 자료에 대한 모든 권한은 1차적으로 Joshua Kerievsky에게 있으며, 편역된 이 post의 권한 김민수, 장성환, 이원희, 채경훈 님에게 있습니다. 사용하실 분이 있으면, 위 네 분에게 문의해서 답신을 드리겠습니다.



