NEW 기획 디자인 개발 프로덕트 아웃소싱 프리랜싱

개발

앵귤러 vs 리액트, 2021년의 승자는?

본문은 위시켓과 번역가 윌리(Willy)가 함께 만든 해외 콘텐츠 기반 번역문입니다. 엘리란 엘나시(Eliran Elnasi)의 블로그에 발행된 글로 그는 미국의 네트워크 통신 회사, 시스코(Cisco)의 수석 소프트웨어 엔지니어입니다. 본문은 엔지니어인 작가가 앵귤러와 리액트에 대해 분석한 내용으로 어떤 프레임워크를 선택하면 좋을지 함께 고민해볼 수 있겠습니다.

 

제가 앵귤러(Angular)와 리액트(React) 모두를 전문적으로 다뤄봤다는 말을 들은 사람들은 항상 "앵귤러가 좋아요 리액트가 좋아요?"라고 물어봅니다. 이에 대한 저의 대답은 몇 년간 바뀌어 왔습니다. 왜냐고요? 한 번 알아보도록 하죠!

 

저의 웹 개발은 jQuery[1]가 자바스크립트(JavaScript) 라이브러리의 대세였던 2013년에 시작됐습니다. 재사용 가능한 코드를 작성하는 것은 극도로 힘들었고, 이로 인해 제 코드베이스[2]는 금세 지저분해지고 유지하기 어려워지곤 했습니다. 나중에 리액트와 앵귤러가 등장했지만, 사람들은 라이브러리의 성숙도가 올라온 2016년 전까지는 서둘러 새로운 기술을 받아들이지 않았습니다. 아래 차트는 이러한 트렌드를 보여줍니다.

Stack Overflow 트렌드 차트

 

 

나의 선택: 2016년

저는 앵귤러 2를 먼저 접했습니다. 2016년은 앵귤러 팀이 베타 버전을 출시한 해입니다. 이는 프론트엔드(Front-end)[3] 세계에 큰 변화를 가져왔으며 개인적으로 다음과 같은 개선 사항이 가장 마음에 들었었습니다.

  • 훌륭한 문서화: 앵귤러 문서는 그때나 지금이나 매우 간단명료합니다. 새로운 언어를 배움에 있어 매우 친절한 문서 덕분에 쉽게 시작할 수 있었습니다. 공식 가이드 문서인 Tour of Heroes[4]는 플랫폼을 무척 쉽고 재미있게 알려주고 있습니다.

 

  • 클래스(Class): “템플릿”을 사용하여 코딩할수록 버그를 만들 가능성이 작아지고 코드 상의 다른 서로 다른 부분을 쉽게 넘나들 수 있습니다. 개발자 모두가 클래스를 사용하여 코드를 구성해야 한다는 것을 숙지하고 있다면 각 모듈의 위치와 코드의 실행 흐름을 훨씬 쉽게 이해할 수 있습니다. 리액트에서는 클래스와 함수형 컴포넌트[5]를 같이 사용합니다. 만약 컴포넌트에서 상태를 관리할 필요가 있는 경우 이를 클래스로 변환해야 했습니다. 그러나 이후 상태 관리가 다시 필요 없어져서 상위로 이동하기 원한다면 이를 클래스 형태로 유지해야 할까요 아니면 함수형 컴포넌트로 돌아가야 할까요? 끊임없이 이러한 선택을 해야만 했습니다! 지금은 함수형 컴포넌트만 사용하는 것을 선호합니다. 코드가 간결하고 빠르며 클래스형 컴포넌트가 수행하는 모든 작업을 동일하게 할 수 있기 때문입니다.

 

  • 타입스크립트의[6] 통합: 새로운 앵귤러 앱을 만들면 기본적으로 타입스크립트(Typescript)가 사용됩니다. (아직까지 앵귤러와 자바스크립트를 같이 사용하는 사람은 없겠죠?) 이는 앵귤러와 같이 익혀야 하는 완전히 새로운 언어입니다. 저는 "와, 이게 프론트엔드야 자바야?"라며 자연스러운 구문과 클래스와의 환상적인 궁합에 감탄했습니다. 각 함수 또는 변수에 대한 출력 유형을 정의한다는 것은 누군가에게는 번거로운 일이지만 이는 그만한 가치가 있습니다. 빨리 실패하라(Fail-fast)는 코딩 방식은 함수를 생성한 엔지니어가 무엇을 원하는지 이해하기 쉽게 만들어주었습니다.

 

  • 의존성 주입(DI, Dependency Injection)[7]: 여러 컴포넌트 또는 특정 모듈에 대한 공유 서비스를 제공함으로써 훨씬 쉬운 개발이 가능할 뿐만 아니라 테스트 시 클래스를 격리하는데도 편리합니다.

 

  • RxJS: Observable을 사용하여 이벤트 기반 방식으로 HTTP를 다루게 된 것은 획기적인 변화였습니다. 쉽고 직관적인 방식으로 데이터 스트림을 다루고 처리할 수 있게 됨으로써 많은 시간과 코드를 절약할 수 있게 되었습니다!

 

제 이야기로 돌아가서, 저는 여러 프로젝트를 맨바닥에서부터 앵귤러를 사용하여 개발하기 시작했습니다. 베타 버전 이후 API에 수많은 변화가 있었습니다. 앵귤러팀은 API를 훨씬 쉽게 만드는 동시에 컴포넌트, 서비스, DI, 유닛 테스트를 생성하고 서로 다른 모듈에 존재하는 이러한 요소들을 연결하는 데 필요한 반복적인 코드의 사용을 최소화시켰습니다.

 

 

리액트의 반격: 2018년

리액트를 사용했던 그 당시, 제가 받은 느낌은 "공식적"이거나 명확한 개발 방식이 없다는 것이었습니다. 모두가 제멋대로 코드를 작성하고 있었고 애플리케이션의 구조는 프로젝트마다 완전히 달랐습니다. 타입스크립트에 대한 지원과 예제가 부족했고 리덕스[8](Redux - reducer, action, store 상태 관리를 위해 많은 파일이 필요함)를 사용하더라도 상태(state)를 관리하는 것은 힘들었습니다. 앵귤러에서는 이 모든 것이 코드 한 줄로 가능합니다(Service + RxJS).

 

하지만 그 이후로 리액트팀은 더 나은 타입스크립트와의 통합을 제공했고 훅(Hook)[9]과 컨텍스트 API를 도입하며 올바른 방향으로 나아가기 시작했습니다. 이는 상태 관리에 필요한 반복 코드의 양을 줄여주었기 때문에 저에게는 큰 변곡점이었습니다. 기본적으로 useStateuseReduceruseContext가 제공되는데 왜 리덕스 같은 서드파티 라이브러리를 사용해야 할까요? 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…'을 각색하여 작성되었습니다.

댓글 0

요즘IT의 번역글들

이 프로필을 만든 저만 해도 영어가 서툴러 영어로 된 기사는 읽는 게 더딥니다. 그래서 준비했습니다. 읽어볼만한 해외 소식들을 번역해 전합니다. We are the world.

이 회사는 디자인에 투자하고 있는 회사일까요?

디자인

애자일은 정말 디자인을 배제하나요?

디자인

평판 관리가 프리랜서 경력에 미치는 영향

프리랜싱

리액트 네이티브 개발자들이 겪는 가장 빈번한 5가지 문제와 해결책

개발

“솔직히 우리가 하는 것은 스크럼이 아닙니다!”

기획

데이터 시각화가 인류를 위기에서 구한 세 가지 역사적 사건

디자인

NFT의 장밋빛 미래는 사실일까?

기획

피그마 토큰으로 디자인 시스템 만들기

디자인

디자이너+개발자 = 슈퍼팀 만들기

기획

1인 개발자로서 테크 스타트업을 운영하며

기획

웹 디자이너가 PX대신 REM을 사용해야 하는 이유

디자인

100개의 스타트업을 멘토링하며 깨달은 성공의 비밀

기획

중화권 앱 UI가 영미권 앱 UI와 다른 점 알아보기

프로덕트

내가 테크 리더로 일하면서 얻은 8가지 교훈

기획

모두가 즐길 수 있는 디자인 검토 회의 만들기

디자인

프로덕트 매니저에서 프로덕트 마스터로

기획

10배 이상 뛰어난 개발자가 되는 법

개발

제품 디자인 관점에서 바라보는 NFT 아바타 열풍

디자인

에어비앤비: 대규모 iOS 앱 개발 생산성을 위해 바꾼 것들

개발

스포티파이: 맞춤형 플레이리스트 개발 비하인드 스토리

개발

프리랜서가 일하게 될 15가지 유형의 프로젝트

프리랜싱

슬랙: 제품 원칙을 통해 다시 태어난 알림 기능

프로덕트

페이팔: 실시간 그래프 데이터베이스 분석을 통해 사기를 방지하는 방법

개발

트위터: 수십억 개의 이벤트를 실시간 처리하기

개발

슬랙: 4가지 애자일 가치와 방법

기획

스퀘어: 모바일 우선을 넘어 웹에서 누리는 모바일앱 경험

디자인

스포티파이: 카피를 언어로 만드는 UX 라이팅

기획

마이크로소프트: 디자인의 미래를 위한 4가지 원칙

디자인

메타: AR/VR 경험까지 고려한 디자인 청사진

프로덕트

슬랙: 훌륭한 마케팅 카피를 위한 5가지 원칙

기획

2022년 UX/UI 디자인 트렌드

디자인

구글: 가변 폰트의 놀라운 활용법

디자인

에어비앤비: 위기 상황에서의 디자인 원칙 5가지

디자인

어떻게 두 명의 인턴이 수백만 개의 코드들을 보호할 수 있었나

개발

Lattice로 마이크로 프론트엔드를 구축하는 법

개발

Cool Cats NFT를 구축하면서 배운 것

개발

웹 컴포넌트가 프론트엔드 프레임워크를 대신할까?

개발

당신이 NFT에 대해 알아야 할 모든 것

개발

우리에겐 이상하지만 개발자들에겐 일상인 일들

개발

Next.js 12에서 주목해야 할 5가지 변화

개발

스벨트 vs 리액트, 누가 더 뛰어날까?

개발

개발자를 위한 iOS 15의 새로운 기능

개발

내가 오픈소스를 싫어하는 이유

개발

프로덕트 매니지먼트 고객 여정 5단계

기획

클럽하우스의 인기는 모두 거품이었다?

프로덕트

데이터 기반 의사결정의 장점

기획

시각 디자인의 폐쇄성 법칙이란?

디자인

사용자 경험(UX) vs 서비스 디자인

기획

프로덕트 매니저는 하루 종일 무슨 일을 할까?

기획

제품 주도 성장은 어떻게 이루어지는가?

기획

UX를 망치지 않는 설득력 있는 배너 디자인

디자인

팝업(Pop-up)으로 불리는 것들에 대하여

디자인

드롭다운(Drop-down)으로 불리는 것들에 대하여

디자인

당신의 생각을 표현하는 새로운 이모지

디자인

가장 똑똑한 소프트웨어 엔지니어에게 배운 10가지 교훈

개발

성공적인 UX 프로젝트를 위한 가장 중요한 질문

디자인

2021년, UI 디자이너가 모바일 앱에서 흔히 저지르는 실수

디자인

IT 매니저가 되는 방법과 성공하기 위한 요소

기획

슬랙(Slack) 같은 앱을 만들려면 비용이 얼마나 들까?

개발

아웃소싱이 이토록 인기를 얻게 된 이유는?

아웃소싱

마케터가 UX 관련 역량을 키워야 하는 이유

기획

미니멀리즘 디자인의 핵심적인 요소들

디자인

새로운 소프트웨어 개발사가 필요하다는 7가지 신호

아웃소싱

2021년을 이끌어가는 프론트엔드 개발 트렌드 5가지

개발

PM을 성장시키는 학습 프레임워크

기획

UI 카피라이팅, 어떻게 써야 하나요?

기획

트렌드 예측: 경쟁에서 앞서는 방법

기획

제품 사고(product thinking)의 힘

기획

인하우스 vs 아웃소싱, 소프트웨어 개발 어떻게 하나요?

개발

그림을 못 그리는 사람도 쉽게 와이어프레임 그리는 방법

기획

스타트업 기업들에게 아웃소싱이 중요한 이유

아웃소싱

제품과 기능, 성공적으로 종료하는 방법 (下)

기획

제품과 기능, 성공적으로 종료하는 방법 (中)

기획

제품과 기능, 성공적으로 종료하는 방법 (上)

기획

UX 디자이너에게 반드시 필요한 12가지 스킬

디자인

패스워드 없는 세상이 오고 있다

개발

디자이너를 쉽게 잃는 방법 10가지

디자인

프론트엔드 코딩 작업에 영감을 줄 8가지 아이디어

개발

구글이 아웃소싱을 하는 이유: 아웃소싱 성공사례 5가지

아웃소싱

일 잘하는 PM이 되기 위한 로드맵 도구 5가지

기획

이제는 말할 수 있다! 아웃소싱에 대한 오해 11가지

아웃소싱

디자인 트렌드, 모던 미니멀 스타일의 UI 가이드

디자인

MVP 개발을 아웃소싱으로 해도 될까요?

개발

온보딩 효과를 높이는 '좋은' 귀차니즘 3가지

기획

게임처럼 즐겨라, 게임화 기법 TOP3

기획

시니어 소프트웨어 엔지니어는 어떻게 일할까?

개발

프로덕트 매니저가 글을 잘 써야 하는 이유

기획

2030년엔 사라질 수도 있는 프로그래밍 언어 5가지

개발

고객들이 언제나 옳은 것은 아니다

기획

유저 스토리는 무엇인가?

기획

고객 성공을 위한 14계명

기획

8px 그리드의 시대가 끝나고, 4px 그리드의 시대가 열릴까?

디자인

모바일 앱은 더 이상 스타트업에게 좋은 아이디어가 아니다

기획

과연 구글의 UX 강좌는 도움이 될까요?

디자인

프로덕트 매니저 여러분, ‘소비자의 요구사항 수집’을 그만두십시오

기획

고객 여정과 경험 지도의 차이점

기획

내가 AI 업계를 떠난 이유 5가지

기획

모달윈도우(팝업)를 디자인할 때 생각할 9가지 원칙

디자인

대기업 vs 중소기업, B2B SaaS 스타트업을 위한 시장은?

기획

내가 개발 인터뷰에서 면접자에게 감동한 이유

개발

HTTP의 새로운 메서드, 서치(SEARCH)에 대하여

개발

세상의 모든 프로덕트 디자이너를 위한 5가지 심리학 원칙

디자인

2021년 테스트 자동화 트렌드 리포트 (下)

개발

2021년 테스트 자동화 트렌드 리포트 (上)

개발

아마존과 스포티파이는 어떻게 사용자를 유지하고 측정할까?

기획

UX 디자이너라면 필수적으로 알아야 할 5가지 법칙

디자인

2021년, SaaS 스타트업 시작을 위한 놀라운 아이디어 10가지

기획

디지털 제품 관리에서 B2B와 B2C 사이의 차이점은?

기획

빠르게 실행할 수 있는 ‘제품 요구사항 문서(PRD)’ 만들기

기획

더 나은 제품을 위한 프로덕트 메트릭스 가이드

기획

노 코드(No Code) 트렌드로 프로그래머들은 일자리를 빼앗길까?

개발

넷플릭스의 플랫폼: 코스모스(Cosmos)에 대하여

프로덕트

비즈니스와 애자일 조직은 어떻게 친해질 수 있을까요?

기획

효과적인 제품 전략 세우기: 다수의 전략적 트랙(MuST) 활용

기획

1년 만에 이메일 마케팅 효과를 극대화했던 방법

기획

솔루션 아키텍트를 위한 팁: 아키텍처 다이어그램의 5가지 유형

개발

새로운 맥 OS ‘빅서’에 대한 UX 디자이너의 생각

디자인

디자인 트렌드, 뉴모피즘의 정석

디자인

스스로 학습하는 UI/UX 디자이너가 되기 위한 2021년 로드맵, 3편

디자인

스스로 학습하는 UI/UX 디자이너가 되기 위한 2021년 로드맵, 2편

디자인

2021년 모바일 UX 트렌드 10가지

디자인

스스로 학습하는 UI/UX 디자이너가 되기 위한 2021년 로드맵, 1편

디자인

앱 설정 기능의 UX를 개선하는 효과적인 방법

디자인

다크모드 UI 디자인의 원칙

디자인

온라인 고객 경험을 개선하기 위한 5가지 방법

기획

신생 스타트업에서 일하는 프로덕트 매니저를 위한 현실적인 조언

기획

웹 개발자와 소프트웨어 개발자의 차이는 무엇인가요?

개발

랜딩 페이지 디자인을 개선하는 13가지 꿀팁

디자인

오프라인 비즈니스가 온라인에서 존재감을 가져야 하는 이유 5가지

기획

상향식 가격 책정 및 패키징 정책: 사용자 여정을 가이드로 활용하기

기획

B2B 제품의 UX, 그것은 숨겨진 영역인가요?

기획

상단 내비게이션 vs 사이드 내비게이션, 어느 것이 더 나을까?

디자인

자동완성 검색 기능 UX 설계를 위한 8가지 팁

디자인

프로덕트 매니저는 전문적인 IT 기술을 갖춰야 하나요?

기획

실리콘밸리 51개 기업들이 말하는 프로덕트 매니저의 역할 9가지

기획

아웃소싱에 대한 모든 것

아웃소싱

앱 디자인 가이드, 사람들이 즐겁게 사용할 수 있는 앱을 만드는 법

디자인

처음부터 완제품이 아니라 ‘MVP’를 만들어야 한다

기획

플러터 vs 리액트 네이티브 vs 네이티브, 성능이 더 우수한 것은?

개발

스타트업 프로덕트 매니저로 성장하는 법, 30-60-90일 플랜

기획

당신의 두뇌는 진보하고 있다: 성취감을 위한 3가지 전략

기획

디자이너들을 편하게 해주는 HTML/CSS 마법 10가지

디자인

코딩의 미래는 ‘노 코드(No Code)’이다

개발

내가 엔지니어링 매니저로 일하면서 저지른 실수들

개발

내가 롬 리서치(Roam Research)를 좋아하는 이유와 실제 사용법 (下)

기획

내가 롬 리서치(Roam Research)를 좋아하는 이유와 실제 사용법 (上)

기획

프로그레시브 웹 앱(PWA)이란 무엇이며, 왜 필요한가?

개발

PWA vs 네이티브 앱, 어떤 것을 선택해야 할까?

개발

UI 디자인에 여백을 활용하는 8가지 팁

디자인

마이크로소프트와 링크드인의 새로운 시도, 프리랜서 마켓에 도전장을 던지다

기획

토마스넷은 왜 가입자 수를 폭발적으로 늘려준 테스트 결과를 거부했을까?

기획

잘 팔리는 기업용 소프트웨어 디자인하기

디자인

파이어베이스(Firebase)란 무엇인가? 파이어베이스 심층 탐구 : 하편

개발

파이어베이스(Firebase)란 무엇인가? 파이어베이스 심층 탐구 : 중편

개발

파이어베이스(Firebase)란 무엇인가? 파이어베이스 심층 탐구 : 상편

개발

업워크(Upwork)가 조사한 요즘 가장 인기 좋은 개발 기술 15가지

개발

일자리 산업이 휴먼 클라우드(human cloud)에 적응하는 방법

기획

팬데믹 이후 세계에서의 디지털 가속화는 어떤 모습일까?

기획

같은 분야를 다룬 글들을 권해드려요.

요즘 인기있는 이야기들을 권해드려요.

일주일에 한 번!
전문가들의 IT 이야기를 전달해드려요.

[구독하기] 버튼을 누르면 개인정보 처리방침에 동의됩니다.

일주일에 한 번! 전문가들의 요즘IT 이야기를 전달해드려요.

[구독하기] 버튼을 누르면 개인정보 처리방침에 동의됩니다.