2008년 구글이 V8 엔진을 사용하여 크롬을 출시, V8 엔진은 엄청 빨랐고, 오픈 소스로 코드도 공개 되었다. 그 기능을 좀 더 더해서 프로젝트를 시작했고, Node.js(V8)이 등장했다.
Non-blocking I/O 특징을 통해 Node.js로 구현하면, 요청이 많거나 오래 걸리는 요청이 있어도 멈추거나 요청 대기시간이 없다. (비동기식 이벤트 기반 아키텍처)
비동기식 이벤트 기반 아키텍처란?
Node.js는 이러한 비동기식 이벤트 기반 아키텍처를 기반으로 하고 있으며, 이를 통해 많은 동시 요청을 처리하고 높은 성능을 유지할 수 있다.
동기식(Synchronous) 예시
카페에 가서 커피를 주문한다고 가정하면, 동기식으로 주문하면 주문을 한 다음에 커피가 완성될 때까지 기다려야 한다. 다른 손님이 주문한 커피가 완성되기 전에는 새로운 주문은 처리되지 않는다.
비동기식(Asynchronous) 예시
주문하고 나면 다른 작업을 할 수 있고, 커피가 완성되면 알림을 받아 처리할 수 있다.
동기와 비동기를 나누는 가장 큰 차이점을 어떻게 실행 순서를 가지는 지에 있다.
Syncronous 동기는 요청을 보낸 후 해당 요청의 응답을 받아야 다음 동작을 실행하는 방식을,
Asynchronous 비동기는 요청을 보낸 후 응답과 관계없이 다음 동작을 실행할 수 있는 방식을 의미한다.
먼저 시작된 하나의 작업이 끝날 때까지 다른 작업을 시작하지 않고 기다렸다가 다 끝나면 새로운 작업을 시작하는 방식이다. 위 그림 Synchronous와 같이 작업이 직렬로 배치되어 실행되며 작업 실행의 순서가 확실히 정해져 있는 것을 동기식 처리라 부른다.
장점 : 설계가 매우 간단하고 직관적
단점 : 결과가 주어질 때까지 아무것도 못하고 대기해야 한다. (Block 상태로 대기)
동기식 방식과는 다르게 먼저 시작된 작업의 완료 여부와는 상관없이 새로운 작업을 시작하는 방식이다. 위 그림 Asynchronous와 같이 작업이 병렬로 배치되어 실행되며 작업의 순서가 확실하지 않아 나중에 시작된 작업이 먼저 끝나는 경우도 발생한다. 이와 같은 방식을 비동기식 처리라 부른다. (그림의 시작점은 1, 2, 3, 4 순서로 동기식으로 시작하기 때문에 시작 부분은 완벽히 동일하지는 않고 순차적이긴 함)
장점 : 결과가 주어지는데 시간이 걸리더라도 그 시간 동안에 다른 작업을 할 수 있으므로 자원들을 효율적으로 사용할 수 있다.
단점 : 동기보다 복잡한 설계
Node.js는 비동기 I/O를 지원하며 Single-Thread 기반으로 동작하는 서버이기 때문에 요청을 처리하면서 다음 요청을 받을 수 있다.
병렬처리를 Thread로 처리하지 않으므로 Multi-Thread가 갖는 근원적인 문제에서 자유로운 특징이 있다.
(멀티스레드는 스레드 1개의 오류가 전체 프로세스에 영향을 주는 등)
결론적으로, 요청을 보내는 순서는 동기적으로 진행되지만, 결과가 도착하는 순서는 비동기적으로 처리되기 때문에 다를 수 있음,이러한 비동기 처리 방식이 Node.js의 주요 특징 중 하나이며,
이를 통해 높은 성능과 효율성을 제공
두 용어가 나타나서 혼동될 수 있지만 풀어쓰면 명확해진다.
node에서 다양한 라이브러리를 다운로드하는 패키지 매니저로 보면 된다.
TypeScript는 타입 구문이 있는 JavaScript이다.
TypeScript는 JavaScript의 유연성, 확장성을 유지하면서도 정적 타입 시스템의 이점을 제공하여, 동적+정적 타입 언어의 특성을 모두 이해하는 더 나은 개발 경험을 제공
빈 프로젝트 폴더에서 아래 명령어 입력
npm init -y
이 폴더에서 JavaScript 프로젝트를 만든다는 뜻
TypeScript 설치
npm i typescript
i = install
TypeScript 사용 설정
npx tsc --init
let a:number = 10;
처럼 타입을 지정해준다.
객체는
let e:(객체이름) = {name : "Tom", age : 35};
interface (객체이름) {
name:string;
age:number;
}
interface로 형식을 지정해줘야 한다.
명시적 타입 선언 VS 타입 추론
마지막으로 내가 항상 헷갈리던 개념
const value = Math.random() < 0.5 ? "a" : "b";
조건 ? a : b
조건에 true면 a, false면 b라는 뜻이다.
오늘도 풀로 집중하여 수업을 다 듣고 운동도 갔다가 블로그 작성까지 맞쳤다.
다 하고 돌아오면 상당히 피곤하지만
돌아오는 만족감 또한 만만치가 않다.
이런 느낌 때문에 다들 하드하게 사는건가 인생을...
근육통 때문에 더 힘든거 같지만 다같이 파이팅합시다..!
저도 끝까지 해낼게요 ㅎㅎ
[Node.js] 타입스크립트의 제네릭과 모듈: 효율적인 코드 재사용과 관리 방법 (0) | 2025.01.10 |
---|---|
[Node.js] 클래스와 객체의 진화: 타입스크립트로 더 깔끔하고 효율적인 코드 만들기 (2) | 2025.01.10 |
[GitHub] Github와 NVM 설치 (1) | 2025.01.10 |
[GitHub] Git과 GitHub으로 팀 프로젝트 시작하기: 초보자가 배우는 필수 도구와 팁 (6) | 2025.01.08 |
이젠 좀 해라 코딩편 (5) | 2025.01.08 |