# Prologue

세상에는 다양한 기술들이 있고 팀과 비즈니스에 따라서 비슷한 형태의 서비스라도 다른 기술 스택을 사용하게 됩니다. 이제부터 저희의 기술 스택(Tech Stack) 선정 기준과 배경을 설명하려고 합니다.

# 콘웨이의 법칙

Conway's Law
Any organization that designs a system (defined broadly) will produce a design whose structure is a copy of the organization’s communication structure.

1968년 멜빈 콘웨이는 “모듈 프로그래밍 국제 심포지움”에 가서 논문을 하나 발표합니다. 그 핵심 내용은 이렇습니다. 직역하면 "소프트웨어 구조는 해당 소프트웨어를 개발한 조직의 커뮤니케이션 구조를 닮게 된다." 라는 뜻인데 제 방식대로 해석하자면 "기술이 조직 구조에 종속되게 된다"는 뜻입니다.

기술과 조직 구조가 무슨 상관이지? 조금 더 풀어서 설명을 하겠습니다.

A라는 회사는 웹팀, 서버팀, 디비팀을 따로 운영합니다.
B라는 회사는 풀스택 개발자들로 프로그램팀을 한 팀으로 운영합니다.

A 회사는 웹팀은 서버팀과, 서버팀은 디비팀과 커뮤니케이션을 하게 되고, 각 팀에 맞는 최적의 기술을 사용하게 됩니다.
B 회사는 하나의 프로그램팀내에서 타스크 단위로 커뮤니케이션을 하고 풀스택 개발에 최적화 되어 있는 기술을 사용하게 됩니다.

결국 조직 구조에 맞춰서 기술 선정 기준이 달라지게 됩니다. 프로젝트의 성격이나 규모에 따라서 각자 팀의 전문성을 극대화 해야 하는 A 같은 회사도 있을 수 있고, 커뮤니케이션의 손실(Loss)를 최대한 줄이고 빠른 개발이 필요한 B 같은 회사가 있을 수도 있습니다. 그냥 다 할 줄 아는 풀스택만 뽑아서 팀을 구성하면 좋을 것 같지만 모든 분야의 전문성을 띈 풀스택 개발자는 찾기가 쉽지 않습니다.

여기서 얘기하고자 하는 것은 기술을 선정할때 기술로만 보아서는 안되고 조직 구조, 만들고자 하는 프로젝트, 기간, 개발 인력에 따라서 기술 선정 기준이 모두 달라 질 수 있으므로 종합적으로 고려하여 선정을 해야 한다는 것입니다. 또한 조직에 변화가 있는 경우 거기에 맞춰서 기술 스택도 맞춰 나가야 합니다.

# 린 스타트업

A startup is a human institution designed to create a new product or service under conditions of extreme uncertainty.

간단하게 “스타트업은 아주 불확실한 일을 하는 팀” 이라는 뜻으로 린 스타트업의 저자 에릭 리스의 스타트업에 대한 정의입니다. 스타트업은 기술을 선정함에 있어서 "페이스북, 애플, 아마존은 무슨 기술을 쓴다더라" 식으로 이미 체계화 되어 있고 자신들이 무엇을 하는지 아주 잘 아는 대기업들이 쓰는 기술을 맹목적으로 추종 할 것이 아니라, 목표로 하는 비즈니스의 불확실성을 항상 염두해두고 당사 기술이 그 유연성에 대응 할 수 있어야 한다는 것입니다. 이 원칙은 기술 스택을 정의함에 있어서 팀뿐만 아니라 기술도 린(Lean)하고 애자일(Agile)하게 하는 것을 목표로 합니다.

# 성공하는 스타트업

저희는 스타트업 회사로써 스타트업의 장단점을 그대로 가지고 있습니다. 보통 "성공이라는 희망" 아래 스타트업의 장단점이 잘못 포장된 경우가 많습니다.

다음은 일반적으로 사람들이 얘기하는 스타트업의 장점과 현실입니다.

# 주도적 개발

초기에 시스템 자체가 없기 때문에 자기가 편한 방식으로 사용해 보고 싶었던 최신 기술을 사용해서 마음대로 개발 할 수 있습니다. 하지만 현실은 체계나 인프라가 없기 때문에 반강제 주도적 개발을 하게 됩니다. 최신 기술을 사용하더라도 그것을 맞게 구현 했는지 잘못 구현했는지에 대한 검증도 하기가 힘듭니다. 스타트업이라고 할지라도 결국은 규모가 커져감에 따라 체계가 필요하고 주도적 개발이란 혼자 마음대로 하는 것이 아닌 팀이 같이 할수 있는 주도가 되어야 합니다.

# 빠른 성장과 인사이트

적은 인력으로 개발을 하다보니 반강제적으로 넓은 스팩트럼으로 일하기 때문에 여러가지를 함께 공부할 수 있습니다. 성장의 기회가 많은 것은 사실이나 빠른 성장은 경험이 많은 사수나 멘토링을 통하는 것이 훨씬 효율이 좋습니다. 물론 프론트엔드나 백앤드처럼 한 분야만 집중적으로 개발하는 것보다는 서비스의 전체적인 흐름을 이해하는 인사이트에는 많은 도움이 됩니다.

# 최신 트렌드 기술

먼저 최신 트렌드 기술들이 왜 트렌드 기술이 되었는가를 이해해야 합니다. 대부분의 요즘 트렌드 기술들은 주로 생산성과 유지보수에 초점이 맞춰져 있습니다. 무작정 최신 기술을 도입하기 보다는 어떻게 생산성과 유지보수성을 높일 것인가에 무게를 두어야 합니다.

성공하는 스타트업이 되기 위해서는 전문성 있고 실력있는 개발자 확보가 최우선입니다. 주도 개발, 빠른 성장, 최신 트렌드 모두 이런 고급 개발자에 의해 이루어집니다. 아이러니하게도 이런 고급 개발자는 스타트업에서 구하기 쉽지 않습니다.

TIP

아쉽게도 기술력은 기술에서 나오는 것이 아니라 경험에서 나옵니다.

# 스타트업의 기술 선정

저희 회사의 기술 선정 기준입니다. 기술 선택은 팀과 비즈니스를 고려해야 하지만 대부분 일반적인 스타트업들의 공통적인 기준이 아닐까 싶습니다.

  • 러닝 커브가 낮은 기술
  • 생산성이 높은 기술
  • 유지보수가 쉬운 기술
  • 비용 효율적 기술
  • 개인에게 동기부여가 되는 기술

러닝 커브가 낮아서 업무에 바로 투입 될 수 있고, 생산성이 높아서 빠른 개발이 가능하며, 유지보수가 쉬워서 관리 코스트가 낮고, 팀원의 공백에도 서로 커버가 가능하여 안정적인 개발이 되며, 비용 효율적이라 서버 비용도 타 기술 대비 현저히 저렴하고, 회사 뿐만 아니라 개인에게도 동기 부여가 되서 회사 성장과 함께 개인 성장이 가능한 마법 같은 기술입니다.

아쉽게도 세상에 이런 기술은 없습니다. 다만 이런 선정 기준을 가지고 최대한 저희 서비스와 팀에 맞게 기술 선정을 할 것이며 다양한 기술 중 선택을 하는 상황에 있어서 가이드가 되어 줄 것입니다.

TIP

세상에 좋고 나쁜 기술은 없습니다. 상황에 따라 같은 기술이 좋을 수도 나쁠 수도 있고 바뀔 수도 있습니다. 특히 회사 규모나 조직 구성이 달라지면서 많은 변화가 일어나기 마련입니다. 객관적이나 중립적이지 않고 필자의 지식과 경험을 바탕으로 글을 쓰는 시점에서 저희 상황에 맞는 기술을 선정했음을 참고 바랍니다.

필자 기술 스택

참고로 간단히 필자의 기술 스택을 정리해보았습니다. 대부분 상용화하였거나 심도 있는 기술만 추렸습니다.

  • Language: C++, C#, JAVA, JavaScript, Python, Go, Swift, PHP, HTML, CSS(LESS, SASS, Stylus)
  • DBMS: MSSQL, MySQL, MariaDB, PostgreSQL, DynamoDB, RedShift, Athena, Redis, Firestore, BigQuery
  • Cloud: AWS, GCP, Azure, Firebase
  • Frontend: Bootstrap, jQuery, React, Angular, Vue, vuetifyjs, quasar-framework
  • Backend: Nodejs, Serverless, Micro Service, Apache, Nginx, RESTful, GraphQL, Low-level IOCP & TCP/UDP Socket, Lock-free, Seamless
  • DevOps: Docker, Kubernetes, Jenkins, git, CI/CD
  • Multi-platform & Game: Cordova, Electron, Unity, Cocos2d-X, Direct-X, OpenGL
  • Web, Mobile, Windows, Linux, Android, iOS
  • Global Service, CCU 1M, 200M+ User Database
Last Updated: 10/29/2020, 11:41:00 AM