왜 우리는 Go와 TypeScript를 선택했는가

김동현
당근 테크 블로그
4 min readJul 17, 2020

당근마켓에서 Ruby를 많이 사용한다는 이야기를 많이 들으셨을 텐데요. 현재는 생각보다 많은 서비스들이 Go와 Typescript뿐만 아니라 Java로도 포팅, 신규 프로젝트들은 Ruby를 포함해서 여러 가지 언어 중 특성에 맞는 것으로 작성되고 있어요.

면접을 할 때면 몇몇 분들은 이런 질문을 주시곤 하셨어요.

당근마켓은 Ruby를 하는 회사로 알고 있는데 TS 개발자 채용이 생긴 것인지 궁금해요

현재는 TS뿐만 아니라 Golang 또한 사용하고 있는데 이런 전환을 하게 된 이유를 설명드리고자 해요.

개발 속도 보다 응답 속도

초기 당근마켓은 Ruby on Rails로 적은 인원임에도 불구하고 빠른 개발 속도를 낼 수 있었어요. 하지만 필요로 하는 기능들은 많아지고 모놀리틱한 서비스이기에 그 크기는 점점 비대해지는데 늘어가는 유저분들께 더 빠른 속도를 제공하기 위해서는 매우 많은 인스턴스들이 필요했어요.

여러 가지 언어 중에 Javascript라는 언어는 Ruby 만큼의 유연성이 있었고 Node.js는 가볍고 빠른 속도와 함께 꽤나 많은 회사에서 사용하고 있어서 엔진 자체의 안정성 측면에서도 나쁘지 않다는 판단을 했어요.

게다가 Typescript가 있었기에 개발할 것이 많고 내부 구성원이 증가해가는 과정 속에서 Ruby보다 더욱 안정성 있는 제품을 만들기에 적합하다고 생각되어서 TS 사용에 대해서 긍정적으로 보기 시작했어요.

풍부한 채용 풀

Rails의 빠른 생산성과 편리함이 큰 관심을 받던 시기가 있었어요. 하지만 기하급수적으로 늘어가는 모바일 디바이스, 그로 인해 생기는 많은 트래픽을 감당하기에는 조금은 아쉬웠을까요? 여러 가지 언어와 프레임워크들에 밀려 현재는 아주 커다란 서비스를 운영하기에는 Rails보다는 Node.js를 선택하는 상황이 아닐까 합니다.

이러한 트렌드를 여타 개발자들도 따라가기 마련인데요. 아래는 당근마켓의 10월 채용 그래프예요.

핑크색이 TS, 보라색이 Rails이에요. 이러한 모습을 보면서 Rails보다는 Node.js가 좀 더 트렌드 이구나 하는 것이 체감되더라고요.

플랫폼은 Go, 사업 서비스는 Typescript

이러한 과정 속에서 당근마켓은 Go와 Typescript로 기존 Rails의 기능들을 MicroService처럼 포팅 해가거나 신규프로젝트를 만들고 있어요.

그중에서도 플랫폼 성향을 띠는 채팅, 피드, 이미지 등등 비즈니스 로직이 비교적 정형적이고 다른 서비스들이 필요한 요소들은 Go 언어로 하고 있어요. 반대로 광고, 커머스, 동네 홍보 등등 유저의 접점이 있는 사업 서비스 같은 경우에는 TS를 사용하고 있는데요.

유저의 접점이 있으려면 프론트엔드 또한 필요하게 되는데 클라이언트와 서버가 동일한 언어를 사용할 수 있는 Typescript가 아주 제격이더라고요!

전통적인 견고함은 Java, 물론 Rails도 계속 사용하고 있어요.

결제 플랫폼, 커머스 플랫폼의 경우에는 Java로 만들고 있어요. Java의 견고함이 결제라는 도메인에 맞는다는 판단을 했거든요.

위의 글처럼 계속해서 커져가는 서비스에서 Rails를 사용하는 것이 부적합 한 것처럼 보일 수 있지만 빠른 개발 속도를 가진 Rails의 강점 또한 필요한 곳에 사용되고 있어요.

최적의 효과를 좇아요.

당근마켓에서는 Golang, Node.js, gRPC, K8S 여러 가지 기술들을 사용하고 있는데요. 여러 가지 요구 사항들과 이에 좋은 효과를 낼 수 있는 것들을 찾고 선택하는 것에 집중하고 있어요. 이런 선택이 모이고 모여 더 큰 당근마켓을 만드리라는 생각에 동참하고 싶으신가요?

그렇다면 저희가 알 수 있게 👉 https://dngn.kr/join-us-dev 로 알려주세요 🙂

--

--