References: What's Going On With Blaze, React, and Meteor?
** 해당 글은 미티어 프레임워크가 리액트를 공식 지원할 쯤에 작성된 글입니다.
** 필요에 의해 직접 번역하였습니다. 의역 오역이 많으니 원문을 보시면 더 잘 이해 할 수 있습니다.
What's Going On With Blaze, React, and Meteor?
최근 미티어에서 리액트, 블레이즈 그리고 프론트엔드 렌더링에 대해 많은 토론이 있습니다.
좀더 명확히하기 위해 여기 QnA형식의 빠른 입문서가 있습니다. 그리고 이건 제 의견을 표현한 것으로 MDG(Meteor Developer Group)에 의하여 보증되지 않습니다.
So What’s The Big Deal?
요약하자면 다음과 같습니다. 미티어는 2012년 출시된 이후로 항상 프론트엔드 렌더링 라이브러리로 최신판의 블레이즈를 보유하고 있습니다.
블레이즈의 역할은 기본적으로 앱의 로우 데이터와 로직을 가져와서 브라우저가 이해할 수 있도록(HTML 코드와 같이) 만드는것 입니다. 당신이 상상할수 있는것과 같이 이것은 꽤 큰 작업이고 블레이즈를 개발하고 유지하는것에 꽤 심각한 MDG의 자원이 사용됩니다.
리액트는 블레이즈와 거의 같은 역할을 수행합니다. 리엑트는 페이스북에 의해 개발되었으며 복잡한 웹 앱을 빌드하는 모든 이들에게 주요한 옵션으로 빠르게 자리 잡았습다.
질문을 요약하자면 다음과 같습니다: 미티어는 커뮤니티를 방해하는 것을 피하기 위해 자체 개발 프레임워크를 지켜야 하나요? 아니면 리액트를 수용하고 자원을 할당해야 할까요?
How Are Blaze And React Different?
인기와 자원적인 측면 외에도 블레이즈와 리액트는 몇 가지 주요 요소에서 서로 다릅니다.
우선 리액트는 블레이즈의 Spacebars와 같은 템플릿 구문을 갖고 있지 않습니다만 대신 JSX포맷 덕분에 자바스크립트와 HTML을 같은 파일에 섞을 수 있습니다.
리액트에는 Spacebars의 {{#if}} 나 {{#each}} 같은 게 없는 대신 {{#if}} 나 {{#each}}블록 내부에 있는 것이 무엇이든 간에 렌더링 하는 함수를 정의할 수 있고 그걸 자바스크립트의 if나 map 내에서 호출할 수 있습니다.
실제로 이건 더 복잡한 코드를 만들지만 코드를 컴포넌트화 하는데 이점을 줍니다.(리액트는 컴포넌트에 큰 관심을 가집니다.)
또 다른 주요한 차이는 블레이즈와 다르게 리액트는 엄격한 데이터 통제 메커니즘을 강요하는 것 입니다. 세부적인 내용을 제외하고 블레이즈는 템플릿간 데이터를 전달할 수 있습니다만 리액트는 훨씬 독선적이고 모범 사례를 따르도록 안내 하려고 합니다.
미티어 유저 Brent Anderson의 지적에 따르면
블레이즈는 지역 / 내부 상태를 처리 할 때 부족한 반면 리액트는 속성과 중첩 된 구성 요소 계층을 구성하고 상위 구성 요소에서 하위 구성 요소로 데이터가 이동하면서 매우 정확하게 처리됩니다.
이것은 리액트의 러닝커브가 훨씬 높다고 해석되지만 코드베이스의 효율성과 유지 보수 측면에서 확실한 이점이 됩니다.
마지막으로 블레이즈는 미티어의 반응 시스템인 Tracker하고 더 타이트하게 통합되어 있습니다. Discover Meteor의 Tom Coleman은 다음과 같이 말합니다.
블레이즈에서 리액트로 포팅하는데 있어서 진짜 문제는 문법을 변경하는 것이 아니라 반응이 동작하는 정신적인 모델의 변화이다. .getMeteorData()의 모든 반응 의존성을 준비한 다음 다른 곳의 컴포넌트에 반응하지 않도록 해야 합니다.
So Which One Is Better?
이 문제에 대한 명쾌한 해답이 있으면 좋았을 겁니다. 앞서 언급했듯이 두 프레임워크 모두 장단점이 있습니다.
블레이즈는 배우기 쉽고(몇시간 vs 몇일) 유용하며 복잡하지 않은 템플릿 언어이며 미티어 프레임워크와 잘 통합되어 있습니다(뛰어난 반응성 동작).
반면에 리액트는 주어진 작업에 대해 올바른 방향이 무엇인지 명확하게 만드는 가이드와 규칙을 지키도록 하기 때문에 좀 더 성숙한 느낌이 듭니다. 그리고 미티어와 아직은 긴밀하게 통합되어 있는 건 아니지만 훨씬 더 큰 전체적인 생태계를 갖고 있으며 또한 블레이즈가 하지 않는 몇 가지 추가적인 주요 기능을 제공한다(서버 측 렌더링과 같은).
그러므로 모두 다 합쳐보자면 리액트가 좀 더 강력하긴 하지만 블레이즈가 배우고 사용하긴 쉽습니다.
What’s The Big News?
두 달전 릴리즈된 미티어 1.2가 리액트와 앵귤러를 정식 지원합니다.
그런 다음 지난 주 Geoff Schmidt는 Meteor 포럼에서 블레이즈에 대한 MDG의 계획을 세웠습니다.
그래서 우리가 계획하고 있는 것은 React 위에 템플릿을 만들고 Blaze 사용자들에게 그것을 업그레이드하도록 장려하는 겁니다(또는 선호하는 사람들은 React JSX를 사용하십시오.).
다른 말로 블레이즈는 리액트 앞의 얇은 레이어가 되어 미티어의 반응성과 함께 잘 통합되도록 하는 템플릿 언어를 제공하며 리액트의 다른 모든 이점을 유지하면서 전반적으로 더 가깝게 하도록 할 것 입니다.
이건 두 프레임워크의 최고의 측면을 지키는 꽤 멋진 방식입니다.
Why Are Some People Unhappy?
만약 가까운 미래에 미티어 생태계에 뛰어들 계획이 있다면 이건 좋은 소식이지만, 이미 블레이즈에 큰 투자를 한 사람들에겐 몇 가지 문제를 제기합니다.
슬프게도 블레이즈에서 블레이즈 2.0으로의 전환은 아마 meteor update만 타이핑하는 정도의 문제가 아닐 것 입니다. 이러한 급진적인 변화는 아마 적어도 당신의 템플릿의 마크업과 로직을 다시 써야할 수도 있다.
이것은 다른 많은 것들 중에서 "useraccount" 또는 "Blaze components"와 같이 블레이즈 위에 구축된 Atmosphere projects가 어떻게 될 지에 대한 질문을 제기합니다.
What Should I Do Right Now?
MDG의 개발에 대한 느리고 섬세한 접근을 알고 있다면 이 새로운 블레이즈 2.0은 아마 6개월에서 1년은 빛을 보지 못할 것 입니다. 그러면 그때까진 뭘 해야 할까요?
가능하다면 리액트를 사용하세요. 리액트를 통달하는 것은 미티어 생태계를 뛰어넘는 즉각적인 혜택이 있을 것이며 리액트앱은 블레이즈 2.0이 출시될 때 어떠한 마이그레이션도 요구하지 않을 겁니다(블레이즈 2.0이 리액트 위에서 작동하기 때문에).
MDG의 Sashko는 다음과 같이 덧붙입니다.
내 생각에 100%확실한 방법은 지금 리액트를 시작하는 것이다. 블레이즈2는 리액트와 JSX 구문에 대해 세부적인 것을 다루고 싶지 않은 사람들을 위한 것이지만 만약 그게 네게 효과가 있다면 난 그게 갈 길이라고 말할 것이다.
그러나 물론 리액트를 사용하는 게 별로 실용적이지 못하다는 많은 이유가 있다. 레거시 블레이즈 코드를 갖고 있거나 리액트를 배울 수 있는 시간이 없거나 그냥 리액트를 좋아하지 않거나. 이 경우엔 블레이즈를 계속 사용해도 무방하다.
결국 블레이즈 2.0의 업그레이드 경로가 완전히 투명하지는 않겠지만 난 여전히 잘 관리 될 것이라고 믿는다.
'Programming > JavaScript' 카테고리의 다른 글
NodeJS - Meteor with React Tutorial (2) (0) | 2019.02.18 |
---|---|
NodeJS - Meteor with React Tutorial (1) (0) | 2019.02.18 |
NodeJS - Meteor Autopublish (0) | 2019.02.15 |
NodeJS - Meteor 프레임워크 사용해보기 (0) | 2019.02.15 |
NodeJS - Meteor 프레임워크 설치하기 (0) | 2019.02.14 |