GoSuda

AI 시대의 모던 언어

By Rabbit Princess
views ...

모던 언어

모던 언어란 과거의 언어들에 비해 더 높은 생산성, 안정성, 보안성, 유지보수성을 제공하는 언어를 의미한다. 이러한 언어들은 최신 기법과 개념을 적극적으로 도입하며, 개발자에게 더 효율적이고 안전한 개발 도구를 제공한다. 대표적인 모던 언어로는 Java, Rust, Python, TypeScript 등이 있으며, 이들은 다음과 같은 특징을 갖는다.

1. 객체지향 설계 ( OOP )

모던 언어는 대부분 객체지향 개념을 기반으로 설계되었다. 객체지향은 캡슐화, 상속, 다형성과 같은 원칙을 지원하며, 복잡한 시스템을 작은 단위의 객체로 나누어 관리함으로써 프로그램의 구조를 명확하고 유연하게 만든다. 이는 특히 대규모 소프트웨어 개발 시 개발 비용과 공수를 통제하고, 유지보수 시 발생할 수 있는 문제를 줄이는 데 효과적이다.

2. 문법 설탕 및 표현식

모던 언어는 코드의 가독성과 개발 생산성을 높이기 위해 다양한 문법 설탕과 표현식 기반 문법을 제공한다. 삼항 연산자, 람다 표현식, 패턴 매칭 등의 기능은 보일러플레이트 코드를 줄이고, 코드를 예측 가능하게 하며, 개발자의 생산성을 향상시킨다.

3. 모듈 시스템

모던 언어는 모듈 시스템을 통해 프로그램을 여러 단위로 분리해 관리할 수 있게 한다. 이는 코드의 재사용성과 의존성 관리를 용이하게 하며, 프로젝트 규모가 커져도 유지보수를 수월하게 만든다. 대표적인 예로는 Java의 Maven/Gradle, Rust의 Cargo, TypeScript의 npm/yarn 등이 있다.

4. 중간 언어 및 가상 머신

모던 언어들은 플랫폼 독립성과 성능 최적화, 보안성을 위해 중간 언어와 가상 머신을 도입한다. 대표적인 예로 JVM, LLVM, WASM, GraalVM 등이 있다.

AI 시대의 개발과 모던 언어의 한계점

모던 언어는 사람이 대부분의 코드를 작성한다는 전제하에 생겨났다. 자연스럽게 모던 언어의 목적은 반복 작업을 줄이고 생산성을 높이며, 개발자들이 협업할 수 있는 구조를 통해 대형 소프트웨어를 효과적으로 구현하는 것이다. 그러나 AI 시대에 이러한 전제가 점점 무너지고 있다. Copilot, Cody 등과 같은 AI 기반 도구는 코드 작성의 많은 부분을 자동화하고 있으며, 한 명의 개발자가 생산할 수 있는 코드의 양이 비약적으로 증가하고 있다. 이로 인해 과거에는 장점으로 느껴지던 모던 언어의 특징이 점차 구시대적인 단점으로 변하고 있다.

객체지향 설계

AI는 하나의 함수나 모듈 안에서 모든 정보가 명시된 구조는 빠르고 정확하게 분석할 수 있다. 반면에, 컨텍스트가 증가할수록 추론할 구간이 늘어나기 때문에 AI 의 생산성과 정확도는 낮아진다. OOP 로 짜여진 코드는 로직을 한 곳에서 관리하기보다는 여러 객체에 분산시키며, 이는 결과적으로 AI 에게 더 많은 컨텍스트를 요구하게 된다. 아래 코드를 보자.

 1public class AnimalHandler {
 2    public void handle(Animal animal) {
 3        animal.speak();
 4    }
 5}
 6
 7public class Main {
 8    public static void main(String[] args) {
 9        AnimalHandler handler = new AnimalHandler();
10
11        Animal a1 = new Dog();
12        Animal a2 = new Cat();
13        Animal a3 = new Horse();
14
15        handler.handle(a1);
16        handler.handle(a2);
17        handler.handle(a3);
18    }
19}

위 코드에서 AI는 speak() 메서드가 실제로 어떤 동작을 할지 알기 위해 다음과 같은 추론을 반복해야 한다

  1. animal은 어떤 구체 클래스의 인스턴스인지?
  2. 그 클래스에서 오버라이드된 speak() 메서드는 어디에 정의되어 있는지?
  3. Dog과 Cat 클래스의 정의는 어디에 있으며, 그 내부의 동작은 무엇인지?
  4. Dog 와 Cat 클래스가 다른 클래스에서 오버라이드될 가능성은 없는지?

이러한 정보는 한 파일 혹은 한 함수에 모여 있지 않고, 클래스 파일들 간의 관계와 상속 구조를 따라가야만 이해할 수 있다. 더군다나, 리플렉션 또는 동적 로딩 처럼 런타임에 결정되는 요소들은 AI 입장에서 블랙박스와도 같아, 사실상 분석이 불가능하다.

문법 설탕 및 표현식

AI 는 암시적인 동작보다 명시적인 동작을 선호하며, 복잡한 구조를 가져다가 쓰기 보다는 단순한 구조를 조합해 하나의 정답을 만드는 것을 선호한다. 그에 반해, 문법 설탕은 다양한 표현을 허용하면서도, 그 내부 동작은 동일하거나 유사한 경우가 많다. AI는 이 다양한 표현의 의미를 일일이 학습해야 하며, 특정 상황에서 어떤 문법을 추천해야 하는지 우선순위를 판단하기 어려워질 수 있다.

중간언어 및 가상머신

AI는 대부분 소스코드를 기반으로 학습한다. 반면, 중간 언어(bytecode)는 컴파일 과정에서 변수명 등의 의미가 제거되며, 실행 시점에 가상 머신이 재해석해야 한다. 이는 AI가 이해하거나 변환하기 매우 어려운 작업이다. 예를 들어 AI 에게 TypeScript에서 Go로의 변환은 가능하지만, V8 engine의 바이트코드를 JVM의 바이트코드나 기계어로 변환하는 것은 사실상 불가능에 가깝다.

AI 시대의 진짜 모던 언어

위 내용을 통해 우리는 모던 언어의 특징들이 실제로는 AI 시절에 적합하지 않은 구시대적인 요소라는 것을 알 수 있다. 그렇다면 어떤 언어가 AI 시대의 가장 적합한 모던 언어가 될 수 있을까? 이는 과거 모던 언어들이 배척했던 요소들에서 힌트를 얻을 수 있다. AI 시대의 모던 언어는

  1. 명시적인 문법과 자연스러운 흐름을 가져야 한다.
  2. 과도한 OOP 구조를 벗어나 평면적이고 단순한 구조를 가져야 한다.
  3. 불필요한 문법설탕이나 암시적 패턴보다는, 한정된 기본 키워드만으로 여러 기능을 제작한다.
  4. 복잡한 빌드 시스템이 아닌 단순하고 예측가능한 빌드 시스템을 가져야 한다.

이러한 기준에 가장 부합하는 언어는 Golang이다. Go언어는 최소한의 핵심 키워드와 단순한 문법 조합만으로도 실용적인 대부분의 기능을 구현할 수 있도록 설계되었으며, 불필요한 추상화와 암시적 동작을 철저히 배제한다. 이는 개발자뿐만 아니라 AI가 코드를 해석하고 생성하는 데에도 유리한 구조이다.

이처럼 예측 가능하고 평면적인 구조, 명시적인 흐름, 일관된 문법을 지향하는 Go의 특성은, 인간 개발자를 기준으로 설계된 기존 모던 언어들과 달리, AI가 적극 참여하는 개발 환경에 더 잘 어울린다. 한때는 구시대적이라고 여겨졌던 Go의 보수적 설계 철학이, 오히려 AI 시대에는 가장 앞선 선택이 되는 셈이다.