Crystal 언어의 장기 프로젝트 관리: 변화와 정체성 유지의 도전

Martin Verzilli – Sometimes you need to change to stay the same

작성자
jeff
발행일
2025년 05월 02일

핵심 요약

  • 1 Crystal은 Ruby에서 영감을 받아 정적 타입 추론 및 Go 스타일 동시성을 결합한 컴파일 언어입니다.
  • 2 컴파일 속도 개선을 위해 인스턴스 변수 타입 명시를 도입하며 커뮤니티의 반발과 언어의 정체성 논란을 겪었습니다.
  • 3 변화를 통해 Crystal은 1.0 버전을 출시하며 프로덕션 레디 언어로 성장했으나, 여전히 빠른 컴파일 속도와 도구 지원은 과제로 남아있습니다.

도입

본 강연은 소프트웨어 산업에서 20년 이상의 경험을 가진 Martin Verzelli가 Crystal 프로그래밍 언어의 CTO로서, 13년이라는 긴 시간 동안 Crystal 프로젝트를 유지하고 발전시키며 겪었던 기술적 도전과 '변화' 그리고 '정체성'의 상호작용에 대해 다룹니다. 특히 장기 프로젝트에서 지속적인 관련성을 유지하기 위한 적응과 의도적인 변화의 중요성을 강조하며, 특정 변화가 프로젝트의 본질을 훼손할 수 있다는 근본적인 질문을 던집니다.

Crystal 언어의 특징과 탄생 배경

  • Ruby에서 영감: Crystal은 Ruby와 유사한 문법을 가지며, Ruby의 표준 라이브러리를 거의 그대로 복사하여 개발자들에게 친숙함을 제공합니다.
  • 정적 타입 추론: Ruby의 동적 타이핑 감성을 컴파일 언어에서 구현하기 위해 컴파일러가 변수의 타입을 자동으로 추론하는 기능을 제공하며, nil 값으로 인한 ‘100만 달러짜리 실수’를 방지하고자 합니다.
  • Go 스타일 동시성: Go 언어에서 영감을 받은 CSP(Communicating Sequential Processes) 기반의 코루틴 및 그린 스레드를 통한 견고한 동시성 모델을 내장하고 있습니다.
  • C 언어 라이브러리 연동: C 라이브러리와의 쉬운 바인딩을 지원하여 기존 코드 재사용 및 성능 최적화를 가능하게 합니다.
  • 탄생 배경: 2011년 아르헨티나의 Manas에서 Ruby on Rails 개발 중 성능 문제에 직면하자, ‘컴파일되는 Ruby’를 목표로 실험적으로 개발을 시작했습니다. 초기에는 단순한 장난감 프로젝트였으나, Hacker News에서 큰 반향을 얻으며 본격적인 개발로 이어졌습니다.

정체성 위기와 변화

  • 초기 목표와 모토: “Fast as C, Sleek as Ruby”라는 모토 아래, Ruby와 유사한 문법, 변수/메서드 인수의 타입 명시 불필요, C 라이브러리 호출 용이성, 컴파일 타임 코드 생성 등을 목표로 했습니다. 그러나 초기부터 빈 컬렉션의 타입 명시는 필요하여 ‘타입 명시 불필요’ 원칙에서 벗어나는 부분이 있었습니다.
  • 컴파일 속도 문제: 전역 타입 추론으로 인해 대규모 Crystal 프로그램의 컴파일 시간이 매우 길어지는 문제가 발생했습니다. 이는 컴파일러가 모든 파일 간의 의존성을 메모리에 유지하며 타입을 추론해야 했기 때문입니다.
  • 논쟁적 변화: 이 문제를 해결하기 위해 개발팀은 인스턴스 변수에 대한 타입 명시를 요구하는 변경을 제안했습니다. 이는 ‘타입 명시 불필요’라는 Crystal의 핵심 정체성과 충돌하며 커뮤니티 내에서 큰 반발을 불러일으켰습니다.
  • 정체성 재정의: 개발팀은 Crystal의 존재 이유와 이 변화 없이는 프로젝트가 생존할 수 없다는 판단하에 변경을 강행했습니다. 이 과정에서 “Ruby 호환성은 목표가 아니다”라는 점을 명확히 하고, 모토를 “A language for humans and computers”로 변경하여 타 언어와의 비교보다는 Crystal 자체의 지향점을 강조했습니다.

결론

이러한 정체성 재정의 과정을 거쳐 Crystal은 4년 전 1.0 버전을 출시하며 단순한 실험 단계를 넘어 프로덕션 환경에서 사용되는 성숙한 언어로 자리매김했습니다. 현재 많은 기업들이 Crystal에 의존하여 비즈니스를 운영하고 있으며, 이는 개발팀에게 큰 책임감과 보람을 안겨주고 있습니다. 그러나 여전히 빠른 컴파일 속도와 현대적인 개발 도구 지원을 위한 추가적인 성능 개선은 과제로 남아있습니다. 강연자는 장기 프로젝트에서 발생하는 변화의 필요성과 그 변화가 프로젝트의 정체성에 미치는 영향을 인지하고, 의식적인 결정을 내리는 것이 중요하다고 강조하며 강연을 마무리합니다.

댓글 0

댓글 작성

0/1000
정중하고 건설적인 댓글을 작성해 주세요.

아직 댓글이 없습니다

첫 번째 댓글을 작성해보세요!