0.1. 앞으로 배울 내용
강의를 진행하면서 웹 애플리케이션을 만드는 데 도움이 되는 새로운 웹 개발의 개념, 전문 용어, 코딩 기술을 습득.
앞으로 나올 개념 중 많은 부분은 다른 주요 플랫폼/프로그래밍 언어에도 적용된다.
웹 개발은 다른 소프트웨어 공학에서 다루는 개발과는 조금 다르다.
코딩 콘셉트와 함께 프로젝트가 동작하는 인터넷 백본이 어떻게 동작하는지를 설명할 예정.
다음은 각 부에서 배울 내용이다.
- 0부: 시작에 필요한 배경지식, Node.js 개발 도구 설치.
- 1부: 기본적인 웹 개발 개념, Node.js에서 첫 번째 웹 애플리케이션을 작성할 수 있는 지침 제공.
- 2부: 웹 프레임워크 Express.js 소개, 제공하는 것/작동 방식/사용자 정의 기능 등에 대해 학습.
또한 MVC(Model-View-Controller) 애플리케이션 아키텍처 패턴 학습. - 3부: 애플리케이션을 데이터베이스에 연결하는 과정.
또한 새로운 도구 설치, 몽고DB로 데이터베이스를 구조화하는 방법 학습. - 4부: 데이터 모델을 작성하는 방법. 데이터 생성/읽기/수정/삭제를 하는 CRUD 작업.
- 5부: 사용자 계정을 나타내는 코드 작성. 사용자를 위한 데이터 보안, 로그인 양식 작성 방법.
- 6부: API 제작. API의 구성 요소/API의 보호 방법/REST 아키텍처를 사용해 API를 디자인하는 방법.
- 7부: 애플리케이션에 실시간 채팅 구축 방법. Socket.io를 사용해 폴링, 웹 소켓과 같은 데이터 브로드캐스팅 기능.
- 8부: 배포 프로세스. 배포를 위해 필요한 도구와 계정.
0.2. Node.js의 이해
Node.js는 Javascript 코드를 해석하고 애플리케이션을 실행하기 위한 플랫폼이다.
- Javascript는 수십년간 사용/개선을 통해 클라이언트 측 스크립팅 언어에서, 서버 측 프로그래밍 언어로 전환됐다.
- Node.js는 구글 크롬의 Javascript 엔진으로 제작되었기 때문에, Javascript를 서버 측 언어로 지원한다.
- 클라이언트 측 Javascript는 웹 페이지 상호작용을 돕고, 들어오는 애플리케이션 데이터와 데이터베이스 통신을 처리하는데 사용할 수 있다.
- Node.js를 사용하면 Javascript를 사용해 웹 애플리케이션을 빌드할 수 있다.
! 클라이언트 사이드 vs 서버 사이드
- 클라이언트 사이드(프론트엔드): 사용자가 자신의 웹 브라우저에서 볼 수 있는 결과를 작성하는 코드를 실행한다.
일반적으로 Javascript는 웹 페이지 로드시 사용자 경험을 애니메이션화하는데 사용된다. - 서버 사이드(백엔드): 애플리케이션 로직(데이터 구조화, 데이터베이스에 저장)에 사용되는 코드를 실행한다.
로그인 페이지에서 사용자를 인증하고, 클라이언트 사이드 코드가 사용자까지 도달하는 과정을 보장하는 역할을 한다.
! 클라이언트-서버 상호 연동
- 클라이언트는 보통 웹 브라우저로 표현된다.
- 클라이언트는 서버로 요청을 보내고, 어떤 데이터를 주고받을지 알려준다.
- 서버는 사용자로부터 받은 데이터를 처리하고 가공한다.
- 페이지 읽어들이기/데이터 보내기를 통해, 서버는 사용자에게 피드백을 보낸다.
해당 용어는 애플리케이션 개발에 많이 사용되었지만, Javascript 언어가 두 가지 개발 유형 모두에 적용되면서 구별은 사라지고 있다.
때문에 풀 스택 개발 (Javascript를 사용해 서버/클라이언트 뿐만 아니라 장치/하드웨어/아키텍처에서도 사용된다는 새로운 개념) 이 정의되었다.
Node.js는 단일 스레드를 사용해 이벤트 루프에서 작동된다.
- 스레드: 프로그래밍된 작업을 실행하는 데 필요한 컴퓨터 성능과 리소스의 묶음이다. 일반적으로 작업 시작과 완료를 담당한다.
동시에 실행해야 하는 작업이 많을수록, 더 많은 스레드가 필요하다. - 다른 소프트웨어에서 하는 여러 작업은 보통 컴퓨터가 동시에 제공할 수 있는 스레드 풀에 의해 처리된다.
하지만, Node.js는 한 번에 하나의 작업만 처리하며, 주 스레드에서 처리할 수 없는 작업에 관해서만 스레드를 추가적으로 만들어 사용한다. - 이런 단일 스레드 처리 방식은 계산 집약적 작업(많은 처리 능력이 요구되는 작업)이 필요하지 않다면, 오히려 모든 작업을 신속하게 관리하고 실행할 수 있게 한다.
Node.js 이벤트 루프
Timers > Poll > Callbacks > Check > (반복)
- Timers > Poll
Node.js는 사용자가 만든 애플리케이션의 환경과 설정을 준비한다. - Poll
빌드가 완성되면 테스크(콜백 함수들)가 큐에 쌓이게 되고, 처리를 위해 순차적으로 Poll 상태로 들어간다. - Callbacks
큐로부터의 콜백 함수들은 이 단계에서 실행된다. 여기에서 추가된 콜백은 테스크 큐로 쌓이게 된다. - Callbacks > Check
루프의 종료 시점 근처에서 수행하도록 지정된 테스크는, 이때 실행된다. - Check > Timers
시간 간격 내의 테스크인지, 시간을 초과한 테스크인지 이때 평가한다.
- Node.js의 이벤트 루프는 새로운 작업이나 다른 작업의 완료를 알리기 위해 서버가 트리거한 Javascript 이벤트를 수신해, 루프를 반복한다.
- 작업 수가 증가함에 따라 작업은 대기열에 정렬되고, 이벤트 루프에 의해 점진적으로 처리된다.
- 따라서 Node.js는 데이터 처리를 지속적으로 수행하는 실시간 애플리케이션을 만드는 데 널리 사용된다.
- 이벤트 루프는 일련의 태스크들을 처리하며, 한 번에 하나의 태스크를 처리하고 컴퓨터 처리 능력을 사용해 이벤트 루프가 작업 목록을 단축하는 동안 더 큰 작업은 홀딩된다.
- 대부분의 다른 플랫폼에서 들어오는 작업은 새 프로세스에 할당되어 각 작업에 대한 이벤트 루프를 만든다. 그러나 작업 수를 늘리는 것은 한정된 공간에서 직원 수를 늘리는 것과 같기 때문에, 비용/컴퓨터 성능/공유 리소스 등의 새로운 문제가 발생한다.
! 프로세스와 스레드
Node.js 이벤트 루프는 모든 스레드를 관리하기 위해 단일 스레드를 사용하지만, 각 스레드를 완료할 때만 해당 스레드를 사용해야 하는 것은 아니다.
실제로 Node.js는 좀 더 큰 작업을 호스트 컴퓨터에 전달하도록 설계됐으며, 컴퓨터는 이러한 작업을 수행하기 위해 새로운 스레드와 프로세스를 만들 수 있다.
- 일반적으로 스레드가 처리하는 작업은 간단하고 빠르다. 때문에 Node.js 이벤트 루프는 다른 모든 작업의 관리자로 작동하는 하나의 스레드만 있으면 된다.
스레드는 컴퓨터 프로세스를 통해 사용할 수 있고, 일부 집중적 작업은 자체 프로세스를 실행해야 한다. - 프로세스: 스레드에 의해 처리되는 것보다 큰 작업을 위해, 작업의 실행에 사용되는 컴퓨터 성능과 리소스의 묶음이다. 각 Node.js 애플리케이션이 자체 프로세스에서 실행됨을 의미하는 스레드를 생성하는 프로세스가 있어야 한다.
- Node.js가 단일 스레드일지라도, 프로세스의 여러 인스턴스를 병렬로 실행하여 들어오는 요청/작업을 처리할 수 있다. 때문에 Node.js는 확장성이 좋다.
- 모든 작업에 대해 새 프로세스를 생성하는 대신 필요한 경우에만 추가 스레드와 프로세스를 사용해, 작업을 비동기적으로 예약한다.
- 즉, Node.js는 동시 프로세스의 수를 최소화하며 수행하는 데 최적화되어 있다.
스레드와 프로세스는 혼재되어 사용될 수 있다. Node.js가 주어진 시간에 단일 태스크 핸들러에 의존한다는 것을 알면 된다.
0.3. 왜 Node.js로 개발하는가?
Node.js를 배우는 이유는
- 애플리케이션 유지를 위해 여러 언어를 배우는 대신 Javascript 하나로 개발의 핵심 언어로 사용할 수 있다.
- 데이터 연속적 스트리밍/채팅 기능의 구현 시, Node.js가 다른 플랫폼보다 더 좋은 성능을 보인다.
- Node.js는 구글 V8 Javascript 인터프리터에 의해 지원되기 때문에, 성능/기능 면에서 널리 지원/성장할 것으로 예상되며, 바로 없어지지도 않을 것이다.
- Node.js는 웹 개발 커뮤니티에서 많이 사용되는 언어이기 때문에, Node.js로 개발한 다른 개발자를 만나고 지원을 받을 수 있다. 또한 Node.js에 대한 오픈소수 도구가 구축중이다.
- Javascript 기술 경험이 있는 개발자는 훨씬 유리하게 작업할 수 있고, 프론트엔드/백엔드 어딘에나 적용할 수 있다.
0.4. 준비 사항
Node.js에 기본 웹 서버를 구축하는 프로세스를 통해 웹 개발을 소개한다.
대부분의 연습 문제는 컴퓨터의 터미널(커맨드라인)을 사용하도록 한다. Node.js는 윈도우, 맥, 리눅스 컴퓨터에서 실행할 수 있는 멀티 플랫폼을 지원하지만, 여기서는 유닉스 관점에서 가르치게 된다. 때문에 윈도우 사용자는 유닉스 명령을 사용하는 터미널 윈도우인 Git Bash를 설치하는 것이 좋다.
다음을 명심한다.
- 소스 파일은 Javascript로 작성되며, *.js 파일로 저장된다.
- 모든 예제에서 사용되는 메인 애플리케이션 파일은 다른 정의가 없는 한 main.js로 불린다.
0.5. 요약
책의 구조, Node.js가 무엇인지, 왜 중요한지 전달했다.
다음 장에서는 코딩에 필요한 도구를 설치한다.
'교재 정리 > Node.js' 카테고리의 다른 글
Lesson 6. 라우트와 외부 파일 (0) | 2024.05.22 |
---|---|
Lesson 5. 수신 데이터 다루기 (0) | 2024.05.22 |
Lesson 4. Node.js에서 웹 서버 만들기 (0) | 2024.05.17 |
Lesson 03. Node.js 모듈 생성 (0) | 2024.05.16 |
Lesson 02. Node.js 애플리케이션 실행 (0) | 2024.05.16 |