분류 Nodejs

2021년 Node.js 개발자 로드맵

컨텐츠 정보

  • 조회 21 (작성일 )

본문

Node.js는 출시 이후 가장 큰 게임 체인저 중 하나였으며 Uber, Medium, PayPal 및 Walmart와 같은 대기업은 기술 스택을 Node.js로 전환했습니다.

실시간 추적 앱, 비디오 및 텍스트 채팅 엔진, 소셜 미디어 앱 등과 같은 Node.js로 정말 강력한 애플리케이션을 만들 수 있습니다. Node.js를 배우는 것은 개발자에게 가장 인기 있는 기술 중 하나가 되고 있습니다. 준비는 내 경험과 팁으로 어떻게 배웠는지에 기반합니다.

이 Node.js 로드맵에 대해 자세히 알아보기 전에 Node.js로 빌드 하려는 목표가 명확하고 간결한 지 확인하십시오. 그렇지 않으면 저와 마찬가지로 학습 경로 사이에서 포기하게 됩니다. 목표를 유지하면 학습이 필요한지 아닌지 파악하는 대신에 핵심 기술을 배우는 데 집중하는 데 도움이 됩니다.


전제 조건 


1 .JavaScript 


백엔드 기술을 습득하려는 프론트 엔드 개발자라면 Node.js 애플리케이션 빌드를 시작하기 전에 JavaScript를 배우는 데 엄청난 시간을 할애 할 필요가 없습니다. 그러나 가능한 최소 시간 내에 Node.js를 마스터하려는 완전 초보자인 경우 Node.js 환경에 대해 자세히 알아보기 전에 다음 개념을 배워야 합니다.

  • Arrow Functions
  • Types
  • Expressions
  • Functions
  • Lexical Structures
  • this
  • Loops and Scope
  • Arrays
  • Template Literals
  • Strict Mode
  • ES6/ES7

Node.js에서는 많은 비동기 프로그래밍을 처리하게 되며 이를 위해 다음 개념을 배우는 것이 좋습니다.

  • Timers
  • Promises
  • Closures
  • The Event Loop
  • Async programming and callbacks

2. NPM 


Node Package Manager는 800,000 개 이상의 코드 패키지가 있는 세계에서 가장 큰 소프트웨어 레지스트리입니다. NPM을 올바른 방법으로 사용하면 많은 종속성이 필요한 응용 프로그램을 개발하는 동안 NPM으로 패키지 관리가 매우 편리해 지므로 많은 도움이 될 수 있습니다.


NPM은 다음 세 가지 구성 요소로 구성됩니다.

  • 명령 줄 인터페이스 (CLI) : 컴퓨터의 터미널 환경에서 실행되며 대부분의 개발자가 NPM과 상호 작용하는 방식
  • 레지스트리 : JavaScript 소프트웨어 및 메타 정보의 대규모 공개 데이터베이스입니다.
  • 웹 사이트 : 새로운 패키지를 발견하고 npm 경험의 다른 측면을 관리 할 수 ​​있습니다.

NPM은 여러 버전의 코드 및 코드 종속성을 관리하고 패키지를 다운로드하지 않고 실행 (npx 사용)하는 데 사용됩니다.


3. Node.js Basics 


Event Emitters : 작업이 완료되었음을 알리는 메시지를 전송하여 이벤트를 트리거 하는 Node.js의 객체입니다. 이벤트 이미터의 이벤트를 수신하는 자체 코드를 작성할 수도 있습니다. 예를 들어 프런트 엔드 작업을 수행 한 경우 마우스 클릭, 키보드 버튼 누르기 및 기타 마우스 이동과 같이 애플리케이션에서 처리해야 하는 상호 작용의 양을 알고 있을 것입니다. 마찬가지로 Node.js의 백엔드 환경에서 이벤트를 처리하는 데 사용하는 EventEmitter 클래스를 제공하는 events 모듈을 사용하여 유사한 시스템을 구축 할 수 있습니다.


Callbacks : 작업이 완료 될 때 호출되는 함수로, 모든 종류의 차단을 방지하는 동시에 나머지 코드가 실행되도록 허용합니다. Node.js에서 많은 비동기 작업을 처리해야 하므로 원활하고 빠른 애플리케이션을 만들기 위해 모든 곳에서 필요합니다. 예를 들면


Image for post 


Buffers : Node.js의 Buffer라는 클래스는 원시 바이너리 데이터를 처리하도록 설계되었습니다. V8 외부에 할당 된 일부 원시 메모리에 해당합니다. 버퍼는 이진 데이터를 위한 여러 메서드를 사용하여 크기를 조정할 수 없는 정수 배열입니다. 예를 들어 buffer의 정수는 0에서 255까지의 제한된 값을 가진 바이트를 나타내며 console.log()를 사용하여 Buffer 인스턴스를 인쇄하면 16 진수 값 체인이 수신됩니다.


Module System : Node.js 생태계의 일부로 Node.js에서 제공하는 모듈을 사용하여 복잡한 기능을 구현하기 위해 모듈을 사용하게 됩니다. 이들은 누구나 재사용 할 수 있는 모든 체계적이고 복잡한 기능을 포함하는 JavaScript 파일입니다. Node.js 애플리케이션.


개발 기술 


Version Control Systems (Git, GitHub) : 코드를 되돌리는 방법을 모르면서 코드에서 무언가를 엉망으로 만드는 상황을 원하지 않습니다. Git과 같은 VCS를 사용하면 대규모 프로젝트를 관리 할 수 ​​있으며 이미 VCS 사용에 익숙한 경우 버전 제어 시스템의 강력한 기초가 있는지 확인하십시오.


HTTP / HTTPS 프로토콜 : 전송 프로토콜을 사용하여 데이터가 전송되는 방법에 대한 기본적인 지식은 더 나은 Node.js 개발자가 될 수 있도록 합니다. HTTP 및 HTTPS 작동 방식을 잘 이해하면 모든 백엔드 개발자가 충분히 이해해야 합니다. HTTPS는 TLS (Transport Layer Security)라는 암호화 프로토콜을 사용하여 통신을 암호화합니다. 백엔드 환경에서 배울 것이 많고 웹이 어떻게 작동하는지 몰랐다면 약간 안개가 될 수 있습니다. 웹의 기본 통신을 담당하는 4 가지 요청 방법이 있습니다.

  • GET: 자원의 표현을 검색하는 데 사용됩니다.
  • POST: 새 리소스를 만드는 데 사용
  • PUT: 기능 업데이트에 사용
  • PATCH: 기능 수정에 사용
  • DELETE: URL로 식별되는 리소스를 삭제하는 데 사용됩니다.
  • OPTIONS: 주어진 URL 또는 서버에 대해 허용 된 통신 옵션 요청

웹 프레임 워크 


참고 : 이러한 모든 웹 프레임 워크는 Node.js로 개인 프로젝트를 빌드하는 경우 단일 프레임 워크를 고수하는 것이 좋습니다. 그렇지 않으면 여는 경로가 조용히 넓어집니다.


Express.js : 애플리케이션을 빌드하는 데 필요한 최소한의 인터페이스와 도구를 제공하고 사용하기에 매우 유연하며, Express에 직접 연결할 수 있는 npm에서 사용할 수 있는 수많은 모듈이 함께 제공됩니다.


Meteor.js : JavaScript 애플리케이션을 만들기 위한 훌륭한 프레임 워크로 GraphQL을 지원하는 내장 MongoDB 핸들러가 함께 제공됩니다. "meteor create myapp"을 실행하고 실행하면 HTML / JavaScript 웹 페이지가 MongoDB 백엔드와 함께 제공됩니다. Meteor.js를 프레임 워크 목록에서 효과적인 대안으로 사용하여 유지 관리의 용이성으로 개발 시간을 단축 할 수 있습니다. 그렇지 않으면 간단한 웹 앱을 구축하는 경우 Express를 고수하는 것이 좋습니다.


Sails.js : MVC 프레임 워크를 사용하면 REST API, 단일 페이지 앱 및 실시간 앱을 빠르게 빌드 할 수 있습니다. 몇 가지 진지한 기술을 습득하려는 경우 Sails.js를 사용하는 것이 좋습니다. WebSocket을 통한 실시간 지원과 같은 많은 이점을 얻을 수 있으며 "컨벤션 오버 구성"접근 방식을 사용합니다.


Koa.js : 미래에 대비하고 유지 관리가 쉬운 강력한 애플리케이션을 빌드 하려는 경우 Koa.js가 좋은 선택입니다. Koa 애플리케이션은 나중에 스택 방식으로 실행되는 일부 미들웨어 함수의 배열을 포함하는 객체입니다.


Nest.js : Angular에서 영감을 받아 TypeScript로 빌드되었으며 Express.js를 사용하여 대부분의 Express 미들웨어와 호환됩니다. 코드를 별도의 모듈로 구성하기 위한 훌륭한 모듈식 구조를 제공하므로 Nest.js로 효율적이고 확장 가능한 애플리케이션을 빌드 할 수 있습니다.


데이터베이스 관리 


Node.js를 배우는 동안 당신은 많은 지원을 받게 될 것이며 초보자라면 처음부터 MySQL이나 SQL을 고수해야 합니다. 백엔드 시스템을 설계하는 방법에 대한 명확하고 간결한 설명을 얻을 수 있으므로 새로운 유형의 프로젝트를 작업 할 때 SQL 또는 MySQL을 넘어서는 것은 사례에 따라 달라집니다. 다른 백엔드 항목을 배워야 할 가능성이 있습니다.


참고 : 대부분의 경우 관계형 데이터베이스로 작업합니다. 예를 들어, 테이블을 사용하여 제품, 카테고리, 태그 등과 같은 데이터를 모델링 합니다. 그리고 테이블에는 스프레드 시트에서와 마찬가지로 열과 행이 포함됩니다.


SQL Server : Microsoft에서 개발 한 관계형 데이터베이스 관리 시스템으로 ANSI SQL (표준 SQL 언어)을 지원합니다. 그러나 SQL은 자체 구현과 함께 제공됩니다.


MySQL : 관계형 데이터베이스를 관리 할 수 있는 또 다른 훌륭한 데이터베이스 관리 시스템입니다. Oracle에서 개발 한 오픈 소스 백엔드 소프트웨어와 MySQL도 함께 필요에 따라 소스 코드를 변경할 수 있으므로 선택의 유연성을 얻습니다. MySQL은 Oracle Database 및 Microsoft SQL 서버에 비해 매우 쉬운 대안입니다.


PostgreSQL : 오픈 소스이므로 전 세계 개발자 팀에서 개발했습니다. Linux, UNIX 및 Windows를 포함한 모든 주요 운영 체제에서 실행됩니다. PostgreSQL은 SQL 표준의 상당 부분을 지원하는 동시에 복잡한 SQL 쿼리, 외래 키, 트리거, 트랜잭션, MVCC (Multiversion Concurrency Control), Streatimg Repllicartons 등과 같은 몇 가지 훌륭한 기능을 제공합니다.


MariaDB : MySQL에서는 찾을 수 없는 다양한 내장 된 강력한 기능, 보안 및 성능 향상을 제공하는 향상된 MySQL 버전입니다. 대규모 애플리케이션을 위해 MySQL 대신 MariaDB를 선택해야 하는 몇 가지 이유가 있습니다. 예를 들어 MariaDB에는 최대 200,000 개 이상의 연결을 지원하는 더 큰 연결 풀이 있는 반면 MySQL에는 더 작은 연결 풀이 있습니다. 간단히 말해 MariaDB는 MySQL보다 빠릅니다.


클라우드 데이터베이스 서비스 


Azure CosmosDB : 전 세계적으로 배포되는 데이터베이스 서비스로, 데이터를 원격으로 관리 할 수 ​​있습니다. 클라우드 데이터베이스를 사용하면 확장 및 배포에 사용할 수 있는 도구를 통해 대규모 애플리케이션을 확장하고 관리하는 것이 약간 쉬워 지므로 많은 이점이 있습니다. Microsoft Azure.

또한 하나의 백엔드를 사용하여 여러 데이터 모델을 지원하므로 문서, 키-값, 관계형 및 그래프 모델에 사용할 수 있습니다. 스키마에 의존하지 않으므로 NoSQL 데이터베이스라고 부를 수 있지만 ACID 트랜잭션 지원을 통해 쿼리 언어를 지원합니다.


Amazon DynamoDB : 제가 아는 한 Amazon DynamoDB는 이미 SQL에 대한 경험이 있는 경우 훌륭한 대안이며, 놀라운 확장 성과 함께 더 빠르고 예측 가능한 성능을 제공하는 완전 관리 형 NoSQL 데이터베이스 서비스입니다. 원하는 양의 데이터를 저장 및 검색하고 모든 수준의 요청 트래픽을 처리 할 수 있는 데이터베이스 테이블을 만들 수 있습니다.


2. NoSQL Databases 


MongoDB : 다른 관계형 데이터베이스에 테이블과 행이 있기 때문에 대용량 데이터 저장에 특별히 사용되는 문서 지향 NoSQL 데이터베이스 인 MongoDB는 컬렉션과 문서를 사용합니다. 문서는 MongoDB의 기본 데이터 단위 인 키-값 쌍으로 구성되며 컬렉션에는 관계형 데이터베이스 테이블과 동일한 문서 및 기능 집합이 포함됩니다.


Redis : Redis를 사용하면 데이터베이스, 캐싱 및 메시지 브로 킹 작업을 할 수 있습니다. 문자열, 해시, 목록, 세트, ​​비트 맵, 하이퍼 로그 로그 및 지리 공간 인덱스와 같은 데이터 구조를 사용하여 키-값 쌍의 형태로 데이터를 저장합니다. Redix를 사용하는 곳이 혼란스러우면 여기에 그 예가 있습니다.


애플리케이션에서 애플리케이션 내에서 다른 작업을 수행 할 권한이 있는 사용자를 처리해야 한다고 가정 해 보겠습니다. 사용자를 인증 할 때마다 애플리케이션에서 액세스를 제어하기 위한 권한을 가져와야 합니다.이 접근 방식에는 버그가 없습니다. 핵심 자료를 안전하게 유지하면서 JOSE와 같은 좋은 표준을 가지고 있지만 애플리케이션에 두 개 이상의 인증이 있는 경우 동일하게 확장하기가 매우 어려워집니다. 그리고 사용자에게 인증 목록을 보내는 대신 사용자의 인증을 데이터베이스 형식에 저장하고 사용자에게 인증을 위해 보내야 하는 키-값 (토큰이라고 함)을 제공 할 수 있습니다.


Apache Cassandra 


단일 장애 지점 없이 많은 서버에서 많은 양의 데이터를 처리하도록 설계된 고성능 분산 데이터베이스로 확장 성이 뛰어납니다. 페이스 북에서 만든 것은 다른 관계형 데이터베이스 관리 시스템과 다릅니다. 분산 설계는 Amazon의 DynamoDB와 Google BigTable의 데이터 모델을 기반으로 합니다.


LiteDB 


서버리스 문서 저장소가 있는 매우 가볍고 빠른 .NET NoSQL 내장 데이터베이스. 사용자 당 계정 저장소 당 하나의 데이터베이스를 사용하는 소규모 데스크톱 응용 프로그램 및 소규모 웹 응용 프로그램에서 LiteDB를 사용할 수 있습니다.


3. Search Engines 


참고 : 검색 엔진이 필요한 이유를 생각하고 계신다면 여기에 예가 있습니다. Google을 검색 엔진으로 사용하지만 그 자체가 전체 웹 기반 애플리케이션입니다. Solr 및 ElasticSearch는 백엔드 프레임 워크이며, 데이터 세트 유형이 제공되면 그 위에 인덱스를 생성하고 해당 데이터를 서버에서 검색 할 수 있도록 합니다. Solr을 검색 엔진으로 사용하면 백만 명의 사용자가 있는 웹 사이트를 유지할 수 있습니다.


ElasticSearch 


Apache Lucene에 구축되고 Java로 개발 된 검색 및 분석 엔진입니다. ElasticSearch를 사용하면 방대한 양의 데이터를 실시간으로 저장하고 분석 할 수 있습니다. 텍스트를 검색하는 대신 인덱스를 검색하므로 ElasticSearch에서도 뛰어난 검색 성능을 얻을 수 있습니다. 핵심은 데이터 저장 및 검색을 위해 광범위한 REST API와 함께 제공되는 테이블 및 스키마 대신 구조 기반 문서를 사용합니다. ElasticSearch는 JSON 요청을 처리하고 JSON 데이터를 돌려주는 서버로 생각할 수 있습니다.


Solr 


필드 검색, 부울 쿼리, 단계 쿼리, 퍼지 쿼리, 맞춤법 검사, 자동 완성 등과 같은 고급 실시간 검색 기능을 제공합니다.


Caching 


캐싱은 네트워크 호출을 줄여서 더 빠른 네트워크 응답을 위해 액세스 할 수 있도록 캐시 메모리에 파일 사본을 저장하는 프로세스입니다.


Memory Cache 


이 기술은 대부분의 경우 캐싱이라고도 하며 캐싱은 서버의 메모리와 관련됩니다. 이 기술에서 서버 메모리의 일부는 애플리케이션에서 네트워크 호출을 줄이는 데 필요한 모든 데이터를 저장하는 캐시로 사용됩니다. Node.js에는 Node 서버에서 메모리 캐시를 처리하기 위한 훌륭한 라이브러리로 node-cache와 memory-cache가 있습니다.


Distributed Cache 


이 캐싱 기술에서 우리는 여러 네트워크의 메모리를 단일 메모리 데이터 저장소로 결합하여 나중에 데이터에 대한 빠른 액세스를 증명하기 위해 최종 데이터 캐시로 사용합니다. 이 기술은 특히 대량의 데이터에 사용되며 동시에 엄청난 수의 네트워크 호출을 통해 클러스터에 서버 메모리를 추가하여 증분 확장 및 확장이 가능합니다. Redis는 분산 캐싱과 관련하여 가장 잘 알려진 것 중 하나이지만 Memcached를 배우면 그 이상을 할 수 있습니다.


Image for post 



Template Engines 


템플릿 엔진을 사용하면 애플리케이션에서 정적 템플릿 파일을 사용할 수 있으며 런타임에 이 템플릿 엔진은 템플릿 파일의 변수를 실제 값으로 대체 한 다음 템플릿을 클라이언트에 전송되는 HTML 파일로 변환합니다. 다음은 인기 있는 템플릿 엔진 중 일부입니다.

  • Mustache.js
  • Handlebars
  • EJS

Real-Time Communication 


Socket.io 


백엔드 개발자로 막 시작하는 경우 Socket.IO의 실시간 통신을 이해하는 데는 많은 것이 있습니다. 실시간 통신의 기본 논리는 클라이언트와 서버 사이에 있습니다. 클라이언트와 서버 간의 양방향 데이터 흐름을 허용하며, 양방향 데이터 흐름을 실시간 통신 동작을 달성하기 위해 두 터미널 간의 데이터의 동기 흐름으로 생각할 수 있습니다. 이러한 유형의 동작은 클라이언트는 Socket.IO 패키지와 통합 된 서버와 함께 브라우저에 Socket.IO를 가지고 있습니다. 그리고 데이터는 JSON 요청의 형태로 보낼 수 있습니다.


Image for post 

API Clients 


REST 


REST 이전에 API는 원격 프로 시저 호출 (RPC)을 중심으로 개발되었으며 API는 로컬에서 실행되는 코드처럼 보였습니다. 많은 기술이 RPC와 유사한 스택을 사용하여 이 문제를 해결하여 루트 문제를 숨기고 그 후 REST를 도입하여 웹 기반 API를 더 나은 방식으로 구축하려고 했습니다.


REST에서 아키텍처는 COBRA, COM +, RPC와 같은 복잡한 옵션 대신 통신을 위한 간단한 HTTP 호출로 스타일이 지정됩니다. REST에서 호출은 메시지 기반이며 이러한 메시지를 설명하기 위해 HTTP 표준에 의존합니다. Node.js 생태계에서 노드-레스트-클라이언트와 Axios로 갈 수 있으며, 둘 다 더 빠른 웹 애플리케이션을 위해 꽤 좋은 서비스를 제공합니다.


GraphQL 


REST의 훌륭한 대안 인 GraphQL은 클라이언트가 요청한 데이터를 정확하게 제공하는 데 우선 순위를 두는 API를 사용합니다. GraphiQL로 알려진 IDE에서도 배포 할 수 있으므로 유연하고 개발자 친화적인 대안입니다. 또한 기존 쿼리에 영향을 주지 않고 필드를 추가하거나 사용하지 않고 선호하는 방법으로 API를 빌드 할 수 있는 이점도 있습니다.


Testing 


Unit Testing Frameworks 


단위 테스트에서 개별 단위 / 구성 요소를 격리하여 테스트합니다. 여기서 단위는 응용 프로그램에서 테스트 가능한 코드의 가장 작은 부분이 될 수 있습니다. Node.js에서 최고의 단위 테스트 프레임 워크 중 하나는 다음과 같습니다.


  • Jest : 단순함으로 유명하고 Facebook에서 개발 한 매우 인기 있는 테스트 프레임 워크입니다. 모든 테스트 프레임 워크 중에서 Jest는 병렬 테스트를 지원하는 최고의 문서를 가지고 있습니다. 즉, 성능을 극대화하기 위해 자체 프로세스에서 각 테스트를 실행할 수 있습니다.
  • Mocha : 노드 애플리케이션을위한 단위 테스트 프레임 워크의 이전 표준을 제공하고 콜백, 고도로 확장 가능하고 사용자 정의 가능한 어설 션을 약속하는 비동기 작업을 지원합니다.
  • Chai : Mocha와 함께 사용할 수 있으며 JavaScript를 기반으로 하는 모든 테스트 프레임 워크와 페어링 할 수 있는 Node.js 용 TDD / BDD 어설 션 라이브러리로 사용할 수 있습니다.

Mocking 


단위 테스트에서 테스트는 수행하기 위해 작고 가벼워 야하지만 다른 개체에 대한 종속성이 있는 테스트 중인 개체가 있습니다.


예를 들어, 서버와 통신하거나 웹 서비스와 통신해야 하는 객체는 빠르고 가벼운 방식으로 테스트를 실행할 수 있는 능력을 잃어 버리기 때문에 Mocking이 실행됩니다. Mocking에서는 테스트를 실행하기 위해 어떤 종류의 실제 데이터베이스 나 연결이 필요하지 않으며 예상 된 결과와 함께 객체를 반환합니다. 따라서 실제 결과를 시뮬레이션 하는 간단한 개체 만 있어 제한 없이 테스트를 더 빠르게 실행할 수 있습니다.


Sinon과 Jasmine을 사용하여 조롱을 수행하는 방법을 이해하기 위해 몇 가지 훌륭한 게시물을 나열했습니다.

Node.js에 대해 알아두면 좋은 라이브러리 

  • Async.js
  • PM2
  • Commander.js
  • Nodemailer

https://js.plainenglish.io/node-js-developer-roadmap-for-2021-2ae9c057bff4