React.js Conf 2015 Keynote - Introducing React Native중에서
Learn once, write everywhere는 Reactconf의 키노트에서 나온 말로 Sun Microsystems에서 Java를 홍보할 때 사용한 Write once, run anywhere(WORA) 혹은 Write once, run everywhere (WORE)라는 문구를 변형한 것이다. 간단히 말하면 "한번 작성하고 여러 곳에서 실행해라."이라는 개념 대신 "한번 배우고 여러 곳에서 작성해라."이라고 할 수 있다.
React Native
이 말은 React Native를 공개하면서 나온 내용이다. React에 대해서는 그전에도 이름 정도는 알고 있었지만 별로 아는 내용은 없다가 2013년에 HTML5 Developer Conference에서 Rect에 대한 발표를 들으면서 꽤 흥미를 느꼈다. 당시 조만간 써봐야지 했지만, 지금까지도 써보지 못하고 있다.(난 React에 대해서는 잘 모르므로 React 자체를 설명하려는 글은 아니다.)
이번 Reactconf는 React 진영에서 맘먹고 준비해서 공개해서 Angular.js가 주류인 판도를 바꿔버리려고 했다는 느낌이 강하고 실제로 꽤 강력했다고 생각하고 있다. 이번 콘퍼런스에서 많은 것을 발표했지만, React Native에 꽤 흥미를 느꼈고 이는 "이제 네이티브 앱을 만들어 봐야겠다."라기 보다는 React Native가 접근한 Learn once, write everywhere라는 부분이 상당히 맘에 들었기 때문이다.
React Native는 React의 뷰 기법을 그대로 사용하면서 HTML 대신 네이티브의 뷰랑 매핑하고 이를 네이티브로 구현한 렌더링 엔진이 뷰를 생성하는 방법을 사용하고 있다. 그래서 웹뷰를 사용함으로써 생기는 성능저하를 피하고 React를 배우고 나면 그 기술만 사용해서 iOS 앱이든 Android 앱이든 만들라는 것이다.
Learn once, write everywhere
물론 웹 기술로 네이티브 앱을 만들고자 하는 시도는 수없이 많았다. 대표적으로 PhoneGap이나 Apache Cordova가 있고 Titanium 등 수많은 접근이 있었고 하이브리드 앱이 주는 장점도 있지만, 대부분에서는 한계를 느꼈다고 생각한다. 사실 새로운 하이브리드 프레임워크가 나오더라도 크게 신경을 쓰지 않을 정도로 많이 속아왔다고(?) 생각한다.(물론 하이브리드로 가능한 혹은 유용한 영역의 앱은 여전히 존재한다.)
직접 하이브리드 앱을 만들어서 런칭한 적은 없지만 웹 개발을 하다 보니 자연히 관심은 가지고 있었는데 Learn once, write everywhere라는 말은 기존 하이브리드 앱의 문제를 잘 파악하고 있어서 괜찮은 접근을 취하고 있다고 생각하기 때문이다.
하이브리드 앱 대부분의 접근은 HTML, CSS, JavaScript 등의 웹 기술을 이용해서 네이티브 앱을 만들겠다는 것이고 여기에서 핵심은 하나의 뷰(혹은 코드)를 만들어서 이를 여러 곳에서 쓸 수 있다라는 것이다. 즉, 아이폰, 안드로이드 따로 만들지 말고 하나만 만들어서 두 개 다 배포하면 개발 생산성을 높일 수 있다는 것이다.(수정할 때도 하나만 수정하면 되니까...) 이는 "Write once, run anywhere"와 일맥상통한다고 할 수 있다.
React.js Conf 2015 Keynote - Introducing React Native중에서
하지만 실제로 개발해 보면 이게 잘 동작하지 않음을 알 수 있다. 각 프레임워크의 기술적 한계나 웹뷰를 이용한 성능의 한계 혹은 각 플랫폼 간 웹 렌더링 엔진의 차이에 대응하느라고 결과적인 생산성이 생각보다 좋지 않다는 등의 문제는 제쳐놓고라도 이제는 iOS와 안드로이드의 UI가 너무 달라져서 제각각의 길을 가고 있다는 부분이 하이브리드 앱의 접근에 제일 큰 문제라고 본다. 앱 UI로 두 플랫폼을 대상으로만 만들어봐도 금세 느껴지지만, 구현 기술과 상관없이 같은 UI를 가지고 두 플랫폼을 커버한다는 접근 자체에 큰 한계가 있다. 간단한 예로 왼쪽 위에 "뒤로 가기"버튼을 넣을지 말지조차도 문제가 된다. 이는 네이티브앱을 따로 개발할 때도 UI 설계에서 고민될 부분이라 둘 다 커버할 수 있는 UI로 점점 가고는 있지만 그렇다고 UI가 완전히 같아지지는 않는다. 그렇다면 결국은 다른 UI를 각각 만들어야 하는데 이렇게 되면 하이브리드 앱을 사용하고자 했던 이유가 없어지게 된다.
그런 면에서 "Learn once, write everywhere"라는 접근은 내가 보기에는 꽤 그럴 듯 해 보인다. 물론 React Native가 이를 실제로 잘 해결했는가 하는 것은 별개의 문제고 이 접근 자체가 꽤 합리적이라는 것뿐이다. React Native는 오픈 소스로 공개될 예정이지만 아직은 콘퍼런스 참가자들한테 공개된 상태이고 발표 영상과 사람들이 얘기하는 것 외에는 공개된 부분이 없어서 판단하기는 이르기도 하고 아직 자세히 파보지도 못했다. 좀 더 넓은 범위에서는 JavaScript가 웹 프런트 앤드 외에도 서버나 데스크톱 등 다양한 영역으로 확장되고 있는 상황도 "Learn once, write everywhere"라고 볼 수 있다.
어쨌든 올해 React의 움직임을 주목해서 볼만하다고 생각 중이다.
Comments