회원가입을 하면 원하는 문장을
저장할 수 있어요!
다음
AWS 이용 중이라면 최대 700만 원 지원받으세요
본문은 위시켓과 번역가 윌리(Willy)가 함께 만든 해외 콘텐츠 기반 번역문입니다. 엘리란 엘나시(Eliran Elnasi)의 블로그에 발행된 글로 그는 미국의 네트워크 통신 회사, 시스코(Cisco)의 수석 소프트웨어 엔지니어입니다. 본문은 엔지니어인 작가가 앵귤러와 리액트에 대해 분석한 내용으로 어떤 프레임워크를 선택하면 좋을지 함께 고민해볼 수 있겠습니다.
회원가입을 하면 원하는 문장을
저장할 수 있어요!
다음
회원가입을 하면
성장에 도움이 되는 콘텐츠를
스크랩할 수 있어요!
확인
본문은 위시켓과 번역가 윌리(Willy)가 함께 만든 해외 콘텐츠 기반 번역문입니다. 엘리란 엘나시(Eliran Elnasi)의 블로그에 발행된 글로 그는 미국의 네트워크 통신 회사, 시스코(Cisco)의 수석 소프트웨어 엔지니어입니다. 본문은 엔지니어인 작가가 앵귤러와 리액트에 대해 분석한 내용으로 어떤 프레임워크를 선택하면 좋을지 함께 고민해볼 수 있겠습니다.
제가 앵귤러(Angular)와 리액트(React) 모두를 전문적으로 다뤄봤다는 말을 들은 사람들은 항상 "앵귤러가 좋아요 리액트가 좋아요?"라고 물어봅니다. 이에 대한 저의 대답은 몇 년간 바뀌어 왔습니다. 왜냐고요? 한 번 알아보도록 하죠!
저의 웹 개발은 jQuery[1]가 자바스크립트(JavaScript) 라이브러리의 대세였던 2013년에 시작됐습니다. 재사용 가능한 코드를 작성하는 것은 극도로 힘들었고, 이로 인해 제 코드베이스[2]는 금세 지저분해지고 유지하기 어려워지곤 했습니다. 나중에 리액트와 앵귤러가 등장했지만, 사람들은 라이브러리의 성숙도가 올라온 2016년 전까지는 서둘러 새로운 기술을 받아들이지 않았습니다. 아래 차트는 이러한 트렌드를 보여줍니다.
저는 앵귤러 2를 먼저 접했습니다. 2016년은 앵귤러 팀이 베타 버전을 출시한 해입니다. 이는 프론트엔드(Front-end)[3] 세계에 큰 변화를 가져왔으며 개인적으로 다음과 같은 개선 사항이 가장 마음에 들었었습니다.
제 이야기로 돌아가서, 저는 여러 프로젝트를 맨바닥에서부터 앵귤러를 사용하여 개발하기 시작했습니다. 베타 버전 이후 API에 수많은 변화가 있었습니다. 앵귤러팀은 API를 훨씬 쉽게 만드는 동시에 컴포넌트, 서비스, DI, 유닛 테스트를 생성하고 서로 다른 모듈에 존재하는 이러한 요소들을 연결하는 데 필요한 반복적인 코드의 사용을 최소화시켰습니다.
리액트를 사용했던 그 당시, 제가 받은 느낌은 "공식적"이거나 명확한 개발 방식이 없다는 것이었습니다. 모두가 제멋대로 코드를 작성하고 있었고 애플리케이션의 구조는 프로젝트마다 완전히 달랐습니다. 타입스크립트에 대한 지원과 예제가 부족했고 리덕스[8](Redux - reducer, action, store 상태 관리를 위해 많은 파일이 필요함)를 사용하더라도 상태(state)를 관리하는 것은 힘들었습니다. 앵귤러에서는 이 모든 것이 코드 한 줄로 가능합니다(Service + RxJS).
하지만 그 이후로 리액트팀은 더 나은 타입스크립트와의 통합을 제공했고 훅(Hook)[9]과 컨텍스트 API를 도입하며 올바른 방향으로 나아가기 시작했습니다. 이는 상태 관리에 필요한 반복 코드의 양을 줄여주었기 때문에 저에게는 큰 변곡점이었습니다. 기본적으로 useState, useReducer, useContext가 제공되는데 왜 리덕스 같은 서드파티 라이브러리를 사용해야 할까요? React는 바야흐로 상태 관리 라이브러리가 되었습니다!
게다가 커스텀 훅의 사용으로 컴포넌트의 생성과 재사용이 그 어느 때보다 쉬워졌습니다. 상태를 관리하기 위해 클래스형 컴포넌트를 생성하거나 이를 함수형 컴포넌트와 혼용하여 사용해야 할 필요가 사라졌습니다. 함수형 컴포넌트를 정말 빠르게 생성하는 것이 가능했고 useState, useReducer 및 useContext를 통해 이러한 상태를 쉽게 연결할 수 있게 됐습니다.
이러한 개발 경험의 획기적인 향상으로 인해, 저는 앵귤러와 깊고 오랜 관계를 유지했고 더 많은 프로젝트에서 사용하기로 했음에도 불구하고 리액트와 사랑에 빠졌습니다. 위의 Stackoverflow 트렌드 차트를 보니 이런 생각을 하는 사람이 저뿐만이 아닌 것 같네요.
저는 엔터프라이즈급 애플리케이션에서 두 가지를 모두 사용했으며 한 가지는 확실히 말할 수 있습니다. 두 가지 모두 동일한 작업을 수행할 수 있으며 이는 전적으로 여러분이 어떻게 사용하는지에 달려있습니다. 앵귤러와 리액트 모두 코드의 반복 없이(DRY)[10] 깔끔하고 잘 정돈된, 그리고 좋은 성능을 얻을 수 있는 도구를 제공합니다. 또한, 컴포넌트를 가능한 한 작게 유지해야 한 다는 것을 명심해야 합니다. 결국 중요한 것은 각 프레임워크가 제공하는 에코시스템을 고려하여 여러분이 속한 팀 차원에서 더 편하고 자신 있게 사용할 수 있는 프레임워크를 선택해야 한다고 생각합니다.
마지막으로, 애플리케이션의 속도가 느리다고 꼭 사용 중인 라이브러리를 변경해야 하는 것은 아니며, 병목 현상의 원인을 찾아 적절한 최적화를 수행하는 것이 필요합니다. 이는 보통 너무 많은 요소를 한 번에 렌더링/재 렌더링 할 때 발생합니다.
[1] 2006년에 등장한 HTML의 클라이언트 사이드 조작을 단순화하도록 설계된 크로스 플랫폼의 자바스크립트 라이브러리.
[2] 특정 소프트웨어 시스템, 응용 소프트웨어, 소프트웨어 구성 요소를 빌드하기 위해 사용되는 소스 코드의 전체 집합.
[3] 웹에서 동작하는 UI(User Interface) 부분을 말하며, 사용자가 눈으로 보고 인식할 수 있는 영역.
[4] Angular 사이트에서 제공하는 공식 가이드 문서.
[5] 리엑트에서는 컴포넌트를 클래스형과 함수형 두 가지 방식으로 선언할 수 있다. 함수형 컴포넌트는 상태(state)와 라이프사이클을 갖지 않기 때문에 메모리 클래스형 컴포넌트에 비해 자원을 덜 사용하고 선언하기 편리하지만, 클래스형 컴포넌트는 함수형 컴포넌트와 달리 상태(state)와 라이프사이클을 가진다. 하지만 16.8 버전부터는 함수형 컴포넌트에서도 이를 지원하기 시작했다.
[6] 마이크로소프트에서 개발한 자바스크립트의 상위호환(Superset) 프로그래밍 언어.
[7] 하나의 객체가 다른 객체의 의존성을 제공하는 테크닉.
[8] 자바스크립트 애플리케이션에서 상태를 효율적으로 관리할 수 있게 도와주는 도구.
[9] 함수형 컴포넌트에서도 클래스형 컴포넌트의 기능을 사용할 수 있게 하는 기능.
[10] DRY 원칙은 Don't Repeat Yourself의 줄임말로, 동일 코드의 반복을 최소화하는 소프트웨어 개발 원칙.
> 이 글은 'Angular vs React: The 2021’s winner is…'을 각색하여 작성되었습니다.