개발새발

Next learning language

0xff 2025. 3. 22. 20:19

몇년간 NodeJS, TypeScript만 해오다 보니 새로운 언어를 배울 필요성에 대해 느끼게 됐다.

 

TypeScript를 오랜 기간 사용해오면서 소위 말하는 '타입 장난질' 에 대해서 회의감을 느낀 바도 있고

내가 주력으로 사용할 수 있는 언어가 제한되어 있다는 점에 경각심이 들었다.

 

TS는 근본적으로 JS에 기생해서 살아간다는 점도 있고 말이다.

 

C# 도 능숙하게 사용할 수 있지만 사용하면 뭐하는가.

국내에서 게임만들때 말곤 쓰이지 않는데.

 

Why go?

Go를 선택하게 된 이유에 대해선 크게 두가지가 있다.

 

1. 언어의 철학

Go는 단순성, 효율성, 실용성을 지향하며 설계되었다.

 

JavaScript는 90년대, 웹이 등장하면서 혼돈과 같은 시대에서

웹의 동적인 기능을 지원하기 위해 단 10일만에 탄생된 언어이다.

 

이에 반해 Go는 2009년 만들어져 나름 따끈따끈하다.

또한 동시성 보장, 가벼운 스레드, 명쾌한 키워드 등 쿨한 요소를 많이 가지고 있다.

 

 

서비스를 만들 때 속도를 높이는 부분 중 하나는 컴파일 타임이다.

 

인터프리팅 언어의 경우 실시간으로 해석되어 코드가 돌아가기 때문에 컴파일 타임이 없다.

따라서 개발자 경험은 컴파일 언어와 비교해서 더 빠를 수 있다.

 

하지만 인터프리팅 언어는 런타임에서 코드를 해석 후 실행하기에 무겁고, 느리다.

 

 

TypeScript는 어떤가?

 

TypeScript는 컴파일과 인터프리터 둘의 특성을 모두 가지고 있다.

 

실행하기 위해서는 컴파일을 통해 JS로 빌드해야 한다.

그 뒤 JS로 컴파일된 결과물을 인터프리팅 한다.

 

컴파일 과정이 빠른것도 아니고, 컴파일을 함으로서 얻는 이점도 전혀 없다.

JavaScript를 보완하기 위해 출시되었다지만 이 부분은 근본적인 단점이다.

 

 

그렇다면 Go는 어떤가?

 

Go는 컴파일 언어다.

다만 Build output 자체가 컴팩트해서 컴파일 타임이 매우 빠르다.

아주 빠른 컴파일 타임으로 인해, 인터프리터처럼 사용이 가능하다.

 

코드 변경시 실시간으로 컴파일 후 재실행으로

인터프리팅 언어를 실행하는 것처럼 보이게 만드는 것이다.

 

소와 닭 모두를 잡지 못한 TS와 다르게 소와 닭 모두를 잡은 방법이라고 생각된다.

 

 

2. TypeScript와의 유사성

 

열흘 전, Microsoft에서 아래의 영상을 공개했다.

https://www.youtube.com/watch?v=pNlq-EVld70

 

핵심 내용은 typescript 컴파일러를 Go로 포팅했고, 이로 인해 컴파일 속도가 10배 빨라졌다는 점이다.

영상에서 내가 제일 주의깊게 본건 Go로의 포팅 과정이다.

좌측이 Go로 포팅된 컴파일러다.

 

TS와 Go는 언어적으로 유사한 부분이 많다.

실제로도 AI를 사용해서 포팅 후 검수만 하는 식으로 대부분 진행했다고 영상에서 밝혔다.

 

때문에 Go를 배우더라도 상대적으로 러닝커브가 낮을거라는 생각이 들었다.