요즘IT
위시켓
최근 검색어
전체 삭제
최근 검색어가 없습니다.

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

회원가입을 하면 원하는 문장을
저장할 수 있어요!

다음

회원가입을 하면
성장에 도움이 되는 콘텐츠를
스크랩할 수 있어요!

확인

개발

앵귤러 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
작가
465
명 알림 받는 중

작가 홈

작가
465
명 알림 받는 중
요즘 해외 개발자들은 어떻게 일할까요? 기획자나 디자이너는요? 그래서 준비했습니다. 읽어볼만한 해외 소식들을 번역해 전합니다. "We are the world."

좋아요

댓글

스크랩

공유

공유

요즘IT가 PICK한 뉴스레터를 매주 목요일에 만나보세요

요즘IT가 PICK한 뉴스레터를
매주 목요일에 만나보세요

뉴스레터를 구독하려면 동의가 필요합니다.
https://auth.wishket.com/login