Skip to content

언어 · 런타임

제품을 만들다 보면 "이 작업은 어느 언어가 편할까"를 매번 고민하게 돼요. 화면을 그리는 데 제일 빠른 건 TypeScript고, AI 파일을 정리하는 자동화는 Python이 편하고, 자율에이전트처럼 꼼꼼하고 빨라야 하는 핵심은 Rust가 유리해요. 레거시나 엔터프라이즈 규모에선 Kotlin/Java가 여전히 힘을 발휘하고요. 그래서 데이터스케쳐스는 한 언어로 통일하기보다, 역할에 맞게 나눠 쓰는 쪽을 선택했어요.

기술 목록

  • TypeScript (🟢 운영) — JavaScript에 타입을 얹은 언어예요. 프론트엔드와 백엔드 모두에서 도메인을 타입으로 고정해서, 코드가 커져도 잘못된 호출을 컴파일 시점에 잡아줍니다. Node.js 런타임 위에서 프론트/백엔드 공통 언어로 씁니다.
  • Rust (🟢 운영) — 메모리 안전과 성능을 동시에 잡는 시스템 언어예요. 자율에이전트처럼 속도와 안정성이 중요한 핵심 처리에 씁니다. 컴파일 타임에 메모리 오류를 막아줘서 "느리게 터지는" 버그를 줄여줘요.
  • Python (🟢 운영) — 문법이 간결한 스크립트 언어예요. 데이터 처리·AI·자동화 쪽에서 생태계가 가장 풍부해서, 스크립트나 모델 연동에 씁니다.
  • Kotlin (🟢 운영) — JVM 위에서 도는 현대적인 언어예요. Spring Boot와 잘 어울리고, 자바보다 문법이 간결해서 백엔드 서비스 작성에 씁니다.
  • Java (🟢 운영) — 오랜 역사를 가진 JVM 언어예요. Kotlin의 기반이자, 엔터프라이즈·레거시 시스템에서 견고함으로 쓰입니다.
  • JavaScript (🟢 운영) — 웹 브라우저에서 기본으로 돌아가는 언어예요. TypeScript로 옮기기 전의 기반이자, 브라우저에서 바로 실행되는 언어로 여전히 씁니다.
  • Node.js (🟢 운영) — JavaScript를 브라우저 밖, 서버에서 실행하는 런타임이에요. NestJS 같은 백엔드 프레임워크와 프론트 빌드 도구가 여기서 돌아갑니다.
  • C# / .NET (⚪ 역량) — 마이크로소프트 진영의 언어와 플랫폼이에요. 팀이 다룰 줄 알지만 아직 제품엔 안 쓰이는 상태죠. 엔터프라이즈 쪽 솔루션에서 쓸 일이 생기면 대비하고 있어요.

런타임 배치

언어 아래에는 각각 도는 런타임이 달라요.

  • Node.js — TypeScript/JavaScript 백엔드와 프론트 빌드 도구의 런타임이에요.
  • JVM (Kotlin/Java) — Spring Boot 기반 서비스가 도는 런타임이에요. 오래 쌓인 자바 생태계를 그대로 끌어다 씁니다.
  • CPython — Python 스크립트가 도는 런타임이에요. 편의성 높은 표준 라이브러리와 AI 생태계가 여기서 작동해요.
  • LLVM target (Rust) — Rust는 컴파일된 네이티브 바이너리로 돌아가요. 별도 런타임 오버헤드가 적어서 속도가 중요한 지점에 씁니다.

선택 기준

언어를 고를 때는 세 가지를 함께 봐요.

  • 생산성 — 코드를 얼마나 빨리, 안전하게 늘릴 수 있나. TypeScript·Python 쪽이 유리해요.
  • 성능 — 처리 속도와 메모리 사용이 중요한가. Rust·JVM 계열이 유리해요.
  • 생태계 — 필요한 라이브러리와 커뮤니티가 있는가. 각 언어가 강한 영역이 달라요.

역할이 정해지면 이 기준이 방향을 잡아줘요. 물론 "이 영역은 이 언어"라고 딱 정해진 건 아니고, 매번 상황에 맞춰 다시 고르는 편이에요.

사용 사례 / 실제 적용

현재 배치는 명확하게 나뉘어요.

  • 프론트/백엔드 전반은 TypeScript + Node.js. React, Next.js, NestJS가 모두 이 계열이라, 한 언어로 프론트와 백엔드를 오가며 개발할 수 있어요. 타입 정의를 그대로 공유해서 클라이언트·서버 계약이 어긋나는 것도 줄여주죠.
  • AI·자동화는 Python. 스크립트와 데이터 처리가 자유로워서, LLM 모델을 다루거나 파일을 자동 정리하는 부분에서 씁니다.
  • 자율에이전트 성능의 핵심은 Rust. 에이전트처럼 연산과 상태 처리가 잦은 부분은 속도가 곧 체감 품질이에요. Rust는 여기서 "느리고 불안정한" 문제를 줄여줍니다.
  • 레거시/엔터프라이즈는 Kotlin/Java. Spring Boot 기반의 안정성을 요구하는 서비스에서 씁니다. Kotlin은 Java 위에서 동작하니 기존 JVM 생태계를 그대로 쓸 수 있어요.

언어를 무엇으로 고르든 버전과 런타임은 정확히 관리해야 해요. 각 서비스의 런타임(Node.js, JVM 등)이 다르기 때문에 배포 환경에서 버전 충돌이 나지 않도록 고정합니다.

외국 사례를 보면 언어를 목적에 맞게 나눠 쓰는 "폴리글랏(polyglot)" 전략이 실제로 많이 쓰여요. Netflix는 Spring(Java)으로 핵심 서비스 안정성을, GitHub는 Rails(Ruby)로 API 생산성을, 그리고 Dropbox는 성능이 중요한 동기화 엔진을 Rust로 다시 썼어요. 우리도 "모든 걸 하나로"가 아니라, 안정성이 필요한 곳은 JVM 계열, 속도가 필요한 곳은 Rust, 생산성이 중요한 곳은 TypeScript/Python으로 갈라서 씁니다.

더 알아보기