GN⁺: 제프슨이 클로저로 작성된 이유
(aphyr.com)Jepsen이 Clojure로 작성된 이유는?
- Jepsen은 동시성 시스템, 주로 데이터베이스를 테스트하기 위해 구축됨.
- Clojure의 불변성 데이터 구조와 우수한 동시성 지원으로 올바른 동시 프로그램 작성 용이함.
- 다양한 데이터베이스 클라이언트 지원이 필요하며, Clojure는 Java와의 상호 운용성이 좋음.
테스트를 위한 언어 선택
- 실험적인 테스트 작업에 적합한 간결하고 유연한 언어 필요.
- Clojure는 간결하고 매크로 시스템을 통한 구문적 유연성 제공.
- 복잡한 데이터 구조를 다루는 테스트에 Clojure의 데이터 구조와 표준 라이브러리 함수가 매우 적합함.
성능과 안정성
- "충분히 좋은" 성능을 가진 언어 필요, Clojure는 Java에 비해 상대적으로 느리지만 성능 차이 해결 가능.
- JVM의 우수한 프로파일링 도구가 Clojure와 잘 호환됨.
- Clojure는 JVM 목표와 언어 자체에서 높은 안정성을 보임, 라이브러리의 빠른 부식이 적음.
단점과 결정
- Clojure는 작은 엔지니어링 커뮤니티와 널리 받아들여진 정적 타입 시스템이 없는 단점이 있음.
- Jepsen은 소규모 팀에서 유지 관리되고 사용되므로 이러한 단점이 크게 문제되지 않음.
- Clojure로 Jepsen을 프로토타이핑한 후 결정한 것은 꽤 좋은 절충안이었다고 생각함.
GN⁺의 의견
- Jepsen이 Clojure로 작성된 가장 중요한 이유는 Clojure의 불변성 데이터 구조와 강력한 동시성 지원 덕분에 복잡한 동시성 데이터베이스 시스템을 테스트하기에 적합하기 때문임.
- 이 글은 소프트웨어 엔지니어링, 특히 동시성 프로그래밍과 데이터베이스 시스템에 관심 있는 사람들에게 흥미로울 수 있으며, 특정 프로그래밍 언어의 선택이 실제 프로젝트에 어떤 영향을 미칠 수 있는지에 대한 실질적인 사례를 제공함.
Hacker News 의견
- 클로저(Clojure)와 클로저스크립트(ClojureScript)를 10년간 사용한 한 사용자는 클로저의 장점으로 도메인 코드를
.cljc
파일에 작성하여 서버와 클라이언트 양쪽에서 컴파일하는 이점, 트랜스듀서(transducers)의 성능과 재사용성, 그리고 클로저의 안정성과 오래된 호환성을 강조함. - 클로저 생태계의 문제점으로는 도구의 접근성과 사용성이 극단적으로 나뉘어 있으며, 좀 더 쉬운 도구나 프레임워크가 있으면 클로저가 더 널리 채택될 것이라는 의견 제시.
- 7년간 클로저만 사용한 한 개발자는 강력한 타입 시스템의 부재가 주된 불만이며, 클로저가 루비(Ruby)나 파이썬(Python)을 좋아하는 개발자들에게 더 많은 힘을 제공한다고 생각함.
- 클로저와 클로저스크립트로 개발하는 한 팀은 클로저의 접근성과 REPL 워크플로우의 장점을 언급하며, 작은 프로젝트나 작업에 대해 Babashka/nbb를 사용하는 것이 유용하다고 함.
- 클로저 초보자는 도구의 오류 상태가 난해하다고 느끼며, 클로저 생태계의 혁신적인 아이디어들을 가치 있게 여기지만, 괄호 사용과 nil 처리에 대한 개선 필요성을 언급함.
- 클로저 커뮤니티의 라이브러리 조합에 대한 거의 교리적인 욕구가 실제 웹 개발 팀의 작업 속도를 늦출 수 있다고 지적하며, 더 사용하기 쉬운 웹 프레임워크의 필요성을 언급함.
- 클로저의 작은 엔지니어링 커뮤니티와 정적 타입 시스템의 부재를 단점으로 보는 반면, 자바(Java)와의 상호 운용성을 강점으로 보는 의견 제시.
- 클로저 사용자 중 한 명은 클로저의 오류 메시지와 타입 힌트의 부족을 지적하며, 대규모 코드 리팩토링의 어려움을 토로함.
- 클로저 초보자를 위한 인터랙티브 튜토리얼 사이트를 추천하는 댓글 제공.
- 클로저를 좋아하지만, 복잡한 현대 애플리케이션에는 결국 생태계가 중요하다는 교훈을 얻었다고 말하는 사용자의 의견.