Upgrade to Pro — share decks privately, control downloads, hide ads and more …

MongoDB in Banksalad

Sunghyun Hwang
September 06, 2019

MongoDB in Banksalad

[MongoDB.Local Seoul 2019] 행사에서 발표한 [MongoDB in Banksalad] 발표 자료를 공유합니다. 뱅크샐러드가 초기에 MongoDB를 선택한 이유와 이 의사결정이 뱅크샐러드의 성장에 어떻게 영향을 끼쳤는지를 소개합니다. 이 과정을 통해 스타트업에서 기술적인 의사결정을 내릴 때 활용할 수 있는 관점을 더할 수 있기를 희망합니다.

Sunghyun Hwang

September 06, 2019
Tweet

More Decks by Sunghyun Hwang

Other Decks in Technology

Transcript

  1. 황성현Sunghyun Hwang 2014–현재 Software Engineer at Banksalad 뱅크샐러드 초기 개발

    및 마이크로서비스 전반의 설계를 담당 sunghyunzz _sunghyunzz
  2. Goals & Non-Goals 뱅크샐러드가 MongoDB를 사용하게 된 계기와 까닭을 소개

    당시에 내렸던 의사결정을 현재 시점에서 돌아보기 MongoDB와 다른 NoSQL의 엄밀한 비교 MongoDB 자체의 엄밀한 기술적인 내용
  3. Goals & Non-Goals 뱅크샐러드가 MongoDB를 사용하게 된 계기와 까닭을 소개

    당시에 내렸던 의사결정을 현재 시점에서 돌아보기 MongoDB와 다른 NoSQL의 엄밀한 비교 MongoDB 자체의 엄밀한 기술적인 내용
  4. 고민 1. 표현력 내역transaction 데이터가 내부적으로는 지출, 수입, 이체로 나뉘고

    각각의 형태가 상이한 경우(가 제법 빈번) CREATE TABLE income_transaction ( income_id number NOT NULL, transaction_id number NOT NULL, PRIMARY KEY (income_id, transaction_id), FOREIGN KEY (income_id) REFERENCES income(income_id), FOREIGN KEY (transaction_id) REFERENCES transaction(transaction_id) ); CREATE TABLE income ( income_id number NOT NULL, . . . ); CREATE TABLE transaction ( transaction_id number NOT NULL, . . . );
  5. 고민 1. 표현력 내역transaction 데이터가 내부적으로는 지출, 수입, 이체로 나뉘고

    각각의 형태가 상이한 경우(가 제법 빈번) db.transactions { “_id”: . . ., “type”: “income”, “income_configuration”: { . . . } } { “_id”: . . ., “type”: “expense”, “expense_configuration”: { . . . } }
  6. 2017년의 뱅크샐러드 2015–2016 두 개의 뱅크샐러드 앱을 만들었다 모두 서비스

    종료 2017년은 (사실상) 마지막 도전이라 생각하는 분위기
  7. 2017년의 뱅크샐러드 2015–2016 두 개의 뱅크샐러드 앱을 만들었다 모두 서비스

    종료 2017년은 (사실상) 마지막 도전이라 생각하는 분위기
  8. 조직적 학습 복잡한 조직이 배운다는 것은 무엇을 의미하는가? 우리가 흔히

    알고 있는 학습은 개인이 주체가 되기 때문에 동일한 방식으로 조직이 학습 과정에 참여할 수는 없다. 게다가 개인이 학습한다고 해서 제품이나 서비스를 고객에게 전달하는 방식에서 변화가 있는 것도 아니다. [1] [1] 에이미 에드먼드슨, <티밍>; p.29
  9. 조직적 학습 복잡한 조직이 배운다는 것은 무엇을 의미하는가? 우리가 흔히

    알고 있는 학습은 개인이 주체가 되기 때문에 동일한 방식으로 조직이 학습 과정에 참여할 수는 없다. 게다가 개인이 학습한다고 해서 제품이나 서비스를 고객에게 전달하는 방식에서 변화가 있는 것도 아니다. [1] [1] 에이미 에드먼드슨, <티밍>; p.29
  10. 학습하는 조직 전통적인 조직 학습하는 조직 확실성/예측성 높음 낮음 목표

    달성 방안 명확 불투명 일하는 방식 분업 협업 활동 계획, 역할, 예산, 일정 실험, 측정, 방향, 투자
  11. 개발 전략 “어떻게 하면 방향을 빨리 조정할 수 있을까?” “이

    방향이 잘못된 방향이라면 어떻게 하면 이를 더 빨리 알 수 있을까?”
  12. 고민 2. 생산성 (개발) 우리가 잘 모르는 상태에서 내린 의사결정의

    비용을 최소화할 수 있는가? Python 개발 환경에서 충분히 편히 활용할 수 있는가? 개발하며 문제 해결에 도움이 되는 자료와 커뮤니티가 충분한가?
  13. 고민 2. 생산성 (개발) 우리가 잘 모르는 상태에서 내린 의사결정의

    비용을 최소화할 수 있는가? Python 개발 환경에서 충분히 편히 활용할 수 있는가? 개발하며 문제 해결에 도움이 되는 자료와 커뮤니티가 충분한가?
  14. 고민 2. 생산성 (개발) 우리가 잘 모르는 상태에서 내린 의사결정의

    비용을 최소화할 수 있는가? Python 개발 환경에서 충분히 편히 활용할 수 있는가? 개발하며 문제 해결에 도움이 되는 자료와 커뮤니티가 충분한가?
  15. 고민 2. 생산성 (운영) 회사 내에 DB 전문가 부재 앞으로도

    적시에 채용할 수 있을 확률 낮음 내부 개발 인원을 DB 전문가로 키울 형편도 아님
  16. 고민 2. 생산성 (운영) DB Instance 관리 확장에 대한 대응(scale-up)

    확장에 대한 대응(scale-out) 문제 해결에 대한 도움 현재 운영 인프라 지원 여부
  17. 고민 2. 생산성 (운영) DB Instance 관리 확장에 대한 대응(scale-up)

    확장에 대한 대응(scale-out) 문제 해결에 대한 도움 현재 운영 인프라 지원 여부
  18. 요약 우리가 다루는 문제 불확실성이 큰 문제 풍부한 표현력 비즈니스

    가설의 빠른 검증이 중요 개발 및 운영의 생산성