본문 바로가기

카테고리 없음

Isomorphism vs Universal JavaScript

https://medium.com/@ghengeveld/isomorphism-vs-universal-javascript-4b47fb481beb#.ldhznr24c

 

TL;DR: Isomophism은 상태 손실 없이 클라이언트 측 렌더링과 서버 측 렌더링 간에 원활하게 전환하는 기능적 측면입니다. Universal은 JavaScript 코드의 특정 부분이 여러 환경에서 실행될 수 있다는 사실을 강조하기 위해 사용되는 용어입니다. 

 

Airbnb의 Spike Brehm이 Isomorphic JavaScript라는 용어를 대중화한 이후로 사람들은 Isomorphic JavaScript 애플리케이션이 있다는 것이 정확히 무엇을 의미하는지, 그리고 애플리케이션을 구축하는데 필요한 것이 무엇인지에 대해 혼란스러워 했습니다. 

 

처음부터 용어에 반대하는 사람들이 있었고, 그것이 의미하는 바가 무엇이든 간에 monomorphic 또는 polymorphic과 같은 대안을 제안했습니다. 결국 Michael Jackson이 Universal JavaScript라는 용어를 제안했고 대부분의 사람들은 이 용어를 선호하는 것 같고 "Isomorphic"은 죽었다고 선언합니다. 

 

토론을 재개하기 위해 JavaScript 전문가인 Dr.Axel Rauschmayer는 최근에 다음과 같은 질문을 했습니다. "Isomorphic JavaScript는 좋은 용어인가요?" 저는 이미 제 견해를 설명하는 댓글을 남겼지만 조금 더 설명하고 싶습니다. 저는 Functional Isomorphism과 Technical Isomorphism을 구분하곤 했습니다. 서버가 첫 페이지 로드 시 HTML을 렌더링하도록 하는 것은 더 나은 사용자 경험을 제공하는 기능적인 부분입니다. 기술적인 부분은 사용자가 요청한 적이 없지만 개발자의 삶을 더 쉽게 만드는  두 환경에서 동일한 코드를 사용하는 것입니다. 

 

요즘에는 Isomorphism 대 Universal JavaScript라고 생각합니다. 혼란은 사람들이 isomorphism을 자바스크립트로 생각하기 시작했을 때 시작되었습니다. 내 생각의 동형은 단순히 웹 애플리케이션이 여러 플랫폼에서 렌더링 될 수 있다는 사실을 의미합니다. (브라우저와 서버에서 모두) Isomorphism 자체는 순전히 JavaScript가 아닙니다. 

 

Dart에서 동형 애플리케이션을 빌드하거나 두 가지 다른 언어/스택을 사용하여 동일한 결과를 렌더링할 수도 있습니다. 실제로 PHP, Java또는 Ruby를 사용하여 서버에서 전체 HTML 문서를 렌더링하고 JavaScript 및 AJAX를 사용하여 브라우저에서 풍부한 사용자 경험을 생성하는 "isomorphic" 애플리케이션이 많이 있습니다. 이것은 단일 페이지 애플리케이션이 등장하기 전에 수행되던 방식이었습니다. 

isomorphic이 자바스크립트에 묶여 있는 유일한 진짜 이유는 자바스크립트가 브라우저에서 광범위하게 지원되는 유일한 언어이기 때문에 전체 언어 중 적어도 일부는 자바스크립트를 사용할 것이기 때문입니다. 동형 자바스크립트 같은 것은 없고 동형 애플리케이션만 있습니다. 

 

코드 중복을 피하기 위해 브라우저와 서버에서 동일한 코드를 실행하는 것은 매우 다른 문제입니다. 코드 복제를 피하는 것은 좋은 개발 관행의 문제일 뿐입니다. 그러나 이는 동형 애플리케이션에만 국한되지 않습니다. Lodash와 같은 유틸리티 라이브러리는 "universal"이지만 "isomorhpic"과 관련이 없습니다. 환경 간에 코드를 공유한다고 해서 동형 애플리케이션이 제공되는 것은 아닙니다. 우리가 Universal JavaScript와 관련하여 언급하는 것은 단순히 환경에 구애받지 않는 JavaScript 코드라는 사실입니다. 어디에서나 실행할 수 있습니다. 실제로 대부분의 JavaScript 코드는 모든 JavaScript 플랫폼에서 잘 실행됩니다. 

 

거기에 붙여진 "universal"이라는 꼬리표는 불필요하지만 장점이 있습니다. 이제 환경에 구애받지 않는 JavaScript 코드를 지칭하는 일반적으로 알려진 용어가 있으므로 라이브러리 작성자가 이를 기능으로 나열하고 유행에 따라 사용할 수 있습니다. 

 

개발자가 런타임 환경에 대한 종속성에 대해 생각하게 해주기 때문에 "universal"이라는 용어가 유행하는 것에 만족합니다. 결국 이것은 JavaScript 생태계가 성숙하고 라이브러리가 모든 곳에서 사용될 수 있도록 도울 것입니다. Isomorphsim과 Universal JavaScript는 서로 다르지만 관련이 있습니다. 실제로 브라우저와 서버에서 동일한 코드를 실행하지 않고 isomorphic 애플리케이션을 만드는 것은 매우 비실용적입니다. 리팩토링은 말할 것도 없고 코드를 두 번 작성하는 작업이 더 많고 변경 사항을 동기화하기 어렵습니다. 결국 당신은 당신의 Isomorphic Application을 작성하기 위해 많은 Universal JavaScript를 사용하게 될 것입니다.