머리말
nodeJ를 배우지 않으면 우리는 늙어버릴 것입니다... HTML5가 붐이 일 때 많은 조상들이 NodeJ의 여정을 시작했고, 저는 그 당시에도 여전히 서버사이드 프로그램을 하고 있었습니다
나중에 프론트엔드로 전환했는데 이미 저와 계층 사이의 거리가 매우 컸습니다. 서버측 언어를 알고 오랫동안 일해왔기 때문에 이제 막 NodeJ를 배우기 시작했고 앞으로 나아가고 있습니다. 완전한 프런트엔드
이번 NodeJ 학습 계획은 다음과 같습니다.
① 기초지식을 익히는데 1~2주
② 약 1주일 만에 간단한 프로젝트 개발
③ NodeJ를 활용해 모바일 단말 디버깅 도구 세트 개발
④ 포장 관련 (조금 멀 수도 있음)
NodeJ 기능
① 비동기식
파일 읽기부터 네트워크 요청까지 NodeJs는 비동기적으로 완료되며 콜백 함수가 중요한 역할을 합니다. 프로그래밍 모델 측면에서는 Node가 선두를 달리고 있습니다
② 이벤트 콜백
이벤트 콜백은 프로그램을 경량화하지만 세부 사항은 여전히 프로그래머에게 달려 있습니다. 하지만 콜백 함수는 실제로 읽기가 상당히 어렵습니다
3단일 스레드
노드가 싱글 쓰레드라면 언어가 너무 깊어서 프로세스 내 통신에 대해 물어보는 게 귀찮을 텐데, 쓰레드에 교착 상태나 다른 문제는 없습니다
하지만 멀티코어를 사용할 수 없기 때문에 성능에 문제가 있습니다.
모듈 메커니즘/CommonJ
저희는 서버사이드 개발을 했는데요, 코드가 잘 정리되지 않으면 추후 유지관리가 매우 힘들기 때문에 MVC와 3티어 아키텍처가 있습니다
이제 프런트엔드의 비즈니스 로직은 점차 백엔드에 가까워지고 있습니다. 단일 페이지 애플리케이션의 경우 백엔드의 프로그램 로직을 능가합니다.
지속적인 페이지뷰 증가로 인해 js코드의 양도 급증하게 되는데, 프론트엔드 코드를 어떻게 잘 관리해야 하는지가 문제가 되면서 requireJs가 등장하게 되었습니다...
추신: 이 단락은 nodeJ와 관련이 없습니다...
JavaScript에는 모듈식 시스템이 없으므로 CommonJs는 js에 대규모 애플리케이션 개발을 위한 기반을 제공하기 위해 제안되었습니다
모듈 참조
수학적 계산과 같은 모듈을 참조하려는 경우:
var math = require('math');
모듈 정의
자체 모듈을 정의하고 싶다면 이렇게 하면 됩니다.
이 함수를 수학으로 정의하면 사용할 수 있습니다
math.add();
모듈 ID
모듈 식별자는 require에 전달되는 매개변수입니다. 카멜 표기법으로 이름을 지정해야 하며, 이는 requireJS와 매우 유사합니다.
모듈 구현
Node에서의 모듈 구현은 두 가지 범주로 나뉘는데, 하나는 시스템 수준의 핵심 모듈이고 다른 하나는 사용자가 작성한 파일 모듈입니다
핵심 모듈은 컴파일 프로세스 중에 바이너리 파일로 변환됩니다. 노드 프로세스가 시작된 후 일부 핵심 모듈은 메모리에 직접 로드됩니다(파일 위치, 컴파일 및 실행)
파일 모듈을 동적으로 로드해야 하는데, 이는 상대적으로 느립니다
하지만 일단 로드되면 해당 파일은 캐시되고 캐시된 파일(컴파일된 파일)은 다시 소개될 때 읽혀집니다.
여기서 좀 더 자세히 살펴보겠습니다. 밑줄을 사용하면 HTML을 컴파일하여 템플릿 함수를 형성합니다(실제로는 함수일 뿐입니다).
프로젝트 배포 전 컴파일된 함수를 저장하고 html 템플릿 파일을 제거하세요(최적화 효과는 알 수 없음)
노드에서 각 모듈은 객체입니다.
컴파일 및 실행 중 파일 모듈 도입의 마지막 단계입니다. 특정 파일을 찾은 후 노드는 새 모듈 객체를 생성한 다음 경로에 따라 로드하고 컴파일합니다
성공적으로 컴파일된 각 모듈은 해당 파일 경로를 Module._cache
각 모듈 파일에는 require, imports, module이라는 세 가지 변수가 있지만 파일에 정의되어 있지 않습니다. (__filename__ 및 __dirname__ 변수도 마찬가지입니다.)
실제로 컴파일 프로세스 중에 Node는 자바스크립트 파일 head와 tail의 내용을 래핑합니다(사용자 정의 함수를 창에 전달하는 것과 동일).
이런 식으로 모듈은 격리되어 서로 영향을 주지 않습니다. 이는 밑줄 컴파일과 다소 비슷합니다...
패키지 및 NPM
노드는 자체 핵심 모듈을 구성하므로 타사 파일 모듈을 순서대로 작성하고 사용할 수 있지만 타사 모듈에서는 모듈이 여전히 다양한 위치에 해싱됩니다.
모듈 아웃소싱과 NPM은 서로 직접 참조할 수 없습니다.
추신: 여러 모듈이 패키지를 구성하게 됩니다. 이 패키지의 개념은 Java 패키지의 개념과 유사하므로 #assemblies의 개념도 유사해야 합니다.
패키지 구조의 압축을 풀면 여러 파일이 형성됩니다.
① package.json 설명 파일
② bin 실행 가능한 바이너리 디렉터리
③ lib 자바스크립트 코드 디렉토리
④ 문서문서(거의 없음)
⑤ 테스트 데모
위는 CommonJS 패키지의 사양 중 일부이지만 (초보자의 경우) NPM을 마스터해야 관리 패키지를 능숙하게 설치할 수 있습니다.
종속성 패키지 설치
종속성 패키지를 설치하는 것이 일반적인 방법입니다.
npm 익스프레스 설치
실행 후 현재 디렉터리에 node_modules 디렉터리가 생성되고, 그 아래에 express 디렉터리가 생성됩니다...
추신: express는 NodeJs에서 널리 사용되는 웹 개발 프레임워크로, 웹 애플리케이션을 빠르게 개발하는 데 도움이 됩니다
설치가 완료된 후 호출할 수 있습니다:
결론
이 섹션은 짧게 끝나고 실제 프로젝트 프로세스는 나중에 점차 심화될 예정입니다