HTTP method
목적을 영어로 method
HTTP = 규약 = 정해둔 용어가 있다
"외울 필요는 없다 대신 적절한 메소드를 찾아서 사용"
생성(=등록) : post
조회 : GET
수정: PUT(덮어쓰기) / PATCH
삭제 : delete
head, option, connect, trace
cf.PATCH ; 일부변경? 부분 수정? EX. 마이 페이지 : 연락처, 이메일, 집주소, 이름 >> 부분수정
node.js를 왜 알아야 할까?
Node.js는 자바스크립트 하나로 빠르고 확장성 있는 서버를 만들 수 있는, 현대 웹 서비스의 핵심 백엔드 기술이다.
서비스를 만든다는 것은 단순히 화면을 구현하는 것을 넘어,
사용자의 요청을 처리하고 데이터를 주고받는 서버를 설계하는 것을 의미한다.
이때 Node.js는 현대 웹 개발에서 매우 중요한 역할을 한다.
1. 하나의 언어로 프론트엔드와 백엔드 개발
Node.js를 사용하면 JavaScript 하나의 언어로
브라우저(프론트엔드)와 서버(백엔드)를 모두 개발할 수 있다.
이는 개발자가 언어 전환에 들이는 비용을 줄이고,
프론트엔드와 백엔드 간의 소통과 유지보수를 훨씬 수월하게 만든다.
이러한 이유로 Node.js는 풀스택 개발의 입문 기술로 자주 선택된다.
2. 비동기 기반 구조로 높은 처리 성능
Node.js는 이벤트 루프(Event Loop) 기반의 비동기·논블로킹 구조를 사용한다.
요청 하나가 끝날 때까지 기다리지 않고,
여러 요청을 동시에 처리할 수 있어 대규모 트래픽에 유리하다.
이 구조 덕분에 Node.js는 다음과 같은 서비스에 특히 적합하다.
실시간 채팅 서비스
알림 시스템
예매·예약 시스템
스트리밍 서비스
3. 빠른 개발 속도와 생산성
Node.js는 서버 실행 속도가 빠르고 코드 구조가 단순하다.
짧은 코드만으로도 웹 서버와 API를 쉽게 구축할 수 있어
프로토타입 개발과 사이드 프로젝트에 매우 적합하다.
이러한 특성은 스타트업 환경이나 개인 프로젝트에서 큰 장점으로 작용한다.
4. 방대한 오픈소스 생태계 (npm)
Node.js는 **npm(Node Package Manager)**이라는 세계 최대 규모의 패키지 생태계를 보유하고 있다.
로그인, 인증, 결제, 파일 업로드와 같은 기능을
직접 구현하지 않고도 검증된 라이브러리를 통해 빠르게 적용할 수 있다.
이는 개발 시간을 줄이고, 서비스 완성도를 높이는 데 큰 도움이 된다.
5. 현대 웹 아키텍처에 적합한 기술
Node.js는 REST API와 JSON 기반 통신에 최적화되어 있으며,
프론트엔드, 모바일 앱, 외부 서비스와의 연동이 매우 쉽다.
또한 마이크로서비스 아키텍처 환경에서도
가볍고 독립적인 서버를 구성하는 데 적합하다.
논블로킹 실습, setTimeout
- 함수: 나중에 실행할 코드
- 시간: 밀리초(ms) 단위
(1000ms = 1초)
예시
→ 코드 실행 후 2초가 지난 뒤 콘솔에 메시지가 출력된다.
setTimeout은 비동기 함수다
setTimeout의 가장 중요한 특징은 비동기(asynchronous) 동작이다.
즉, 시간이 끝날 때까지 기다리지 않고 다음 코드부터 바로 실행된다.
실행 결과
이처럼 setTimeout은 코드 실행 흐름을 멈추지 않는다.
모듈이란?
모듈(Module)이란 프로그램을 구성하는 독립적인 기능 단위를 의미한다.
하나의 파일 또는 묶음으로 특정 역할만 담당하도록 분리한 코드라고 볼 수 있다.
즉, 큰 프로그램을 한 파일에 모두 작성하는 것이 아니라
기능별로 나누어 관리하기 위한 코드 단위가 바로 모듈이다
// math.js
export function add(a, b) {
return a + b;
}
// app.js
import { add } from "./math.js";
console.log(add(2, 3));
모듈은 단순한 코드 분리가 아니라,
프로그램을 체계적으로 설계하기 위한 핵심 개념이다.
특히 JavaScript와 Node.js 환경에서는
모듈을 잘 나누는 것이 곧 코드 품질을 결정한다.
모듈이란 하나의 책임을 가지는 독립적인 코드 단위로,
유지보수와 재사용성을 높이기 위해 사용된다.
라이브러리 vs 프레임워크
개발을 하다 보면 라이브러리와 프레임워크라는 용어를 자주 접하게 된다.
두 개념은 비슷해 보이지만, 코드를 누가 제어하느냐라는 핵심 차이를 가진다.
라이브러리는 개발자가 필요할 때 직접 호출해서 사용하는 도구 모음이다.
프로그램의 전체 흐름은 개발자가 직접 제어한다.
특징
- 필요한 기능만 선택적으로 사용
- 호출 시점과 흐름을 개발자가 결정
- 비교적 자유로운 구조
예시
- 날짜 처리
- 수학 계산
- 유틸리티 함수 모음
import _ from "lodash";
_.shuffle([1, 2, 3]);
프레임워크는 애플리케이션의 기본 구조와 실행 흐름을 미리 정해둔 틀이다.
개발자는 정해진 규칙에 맞게 코드를 작성하면,
프레임워크가 코드를 호출한다.
특징
- 정해진 구조와 규칙 존재
- 실행 흐름을 프레임워크가 제어
- 생산성과 일관성 향상
흐름을 누가 제어하는지가 두 개념의 본질적인 차이이다.
npm, figlet 사용해보기
**npm(Node Package Manager)**은
Node.js에서 사용하는 패키지(라이브러리)를 관리하는 도구이다.
개발에 필요한 기능을 직접 구현하지 않고,
이미 만들어진 패키지를 설치·관리·공유할 수 있게 해준다.
npm의 역할
- 외부 라이브러리 설치
- 프로젝트 의존성 관리
- 스크립트 실행
- 패키지 버전 관리
npm을 사용하는 이유
웹 개발에서는 다음과 같은 기능이 자주 필요하다.
- 서버 구축
- 인증 처리
- 날짜 계산
- 로그 출력
figlet은 텍스트를 ASCII 아트 형태의 큰 글씨로 출력해주는 도구이다.
주로 콘솔 로그를 꾸미거나, 서버 시작 메시지를 강조할 때 사용된다.
기능적으로 필수는 아니지만,
가독성과 시각적 효과를 높여준다.

figlet 뜯어보면서 콜백 함수 확인하기
const figlet = require("figlet");
figlet("HELLO", (err, data) => {
if (err) {
console.error(err);
return;
}
console.log(data);
});
이 코드에서 핵심은 두 번째 인자로 전달된 함수이다.
여기서 콜백 함수는 무엇일까?
(err, data) => {
if (err) {
console.error(err);
return;
}
console.log(data);
}
우리가 figlet을 이렇게 호출했다는 것은,
figlet("HELLO", 콜백함수);
figlet 내부에서는 다음과 같은 흐름으로 동작한다고 볼 수 있다.
function figlet(text, callback) {
// 내부에서 텍스트 변환 작업 수행
// 작업이 끝나면 callback 실행
callback(error, result);
}
즉,
- 우리는 “HELLO”라는 작업 요청만 전달
- 작업이 끝난 시점에 figlet이 콜백 함수를 실행
왜 콜백을 사용할까?
figlet은 내부적으로
- 폰트 파일을 읽고
- 텍스트를 변환하는 작업을 수행한다
이 과정은 즉시 끝나지 않을 수 있는 작업이다.
그래서 Node.js는 다음과 같은 방식을 사용한다.
“작업이 끝났을 때, 이 함수를 실행해줘”
이 역할을 하는 것이 바로 콜백 함수이다.
콜백 함수란, 다른 함수에 인자로 전달되어
그 함수의 작업이 끝난 뒤 실행되는 함수이다.

http 모듈 뜯어보면서 콜백 함수 다시 확인하기 (let, const 중괄호 스코프 포함)

- http.createServer() 호출
- 콜백 함수를 등록
- 서버 실행
- 클라이언트 요청 발생
- http 모듈이 콜백 함수 실행
- (req, res) 전달
- 콜백 함수 내부 코드 실행
- 응답 종료
http 모듈에서 콜백 함수는 요청이 발생할 때 실행되며,
콜백 함수의 중괄호는 독립적인 스코프를 형성하고
let, const는 이 블록 스코프를 기준으로 동작한다.
http 모듈을 통해 다음 개념을 한 번에 이해할 수 있다.
- 콜백 함수는 등록만 하고 실행은 라이브러리가 한다
- 요청 발생 시 콜백 함수가 실행된다
- 콜백 함수는 독립적인 실행 단위
- let, const는 중괄호 기준 스코프를 가진다
- Node.js 서버는 이 구조 위에서 동작한다
let, const 값 변경 가능, 템플릿 문자열
- let : 값 변경이 필요한 변수
- const : 재할당 방지용 상수 (객체 내부 변경은 가능)
- 템플릿 문자열 : 가독성과 유지보수를 높이는 문자열 문법
좋은 JavaScript 코드는
const를 기본으로 하고,
let은 꼭 필요할 때만 사용한다.
npm 좀 더 뜯어보기 - -g, uninstall, is odd설치/제거, package.json 뜯어보기
- 로컬 설치: 프로젝트에서 코드로 사용할 라이브러리 (npm i is-odd)
- 전역 설치(-g): 터미널에서 쓰는 CLI 도구 (npm i -g nodemon)
- 삭제(uninstall): 설치했던 방식대로 제거 (npm uninstall ..., npm uninstall -g ...)
- package.json: “이 프로젝트가 어떤 패키지를 쓰는지” 선언하는 파일
npm을 제대로 이해하면,
설치/삭제로 환경이 꼬이는 문제를 크게 줄일 수 있다.
Node.js의 동작 원리
Node.js는 싱글 스레드이지만 동시에 많은 요청을 처리할 수 있다.
이것이 가능한 이유는 **이벤트 루프(Event Loop)**와 비동기·논블로킹 I/O 구조 덕분이다.
Node.js는 이벤트 루프를 기반으로 비동기 작업을 처리하여,
싱글 스레드 환경에서도 높은 동시성을 제공한다.
Node.js는 싱글 스레드다
Node.js는 기본적으로 하나의 메인 스레드에서 JavaScript 코드를 실행한다.
- 요청마다 스레드를 새로 만들지 않음
- 대신 이벤트 기반으로 작업을 처리
그래서 메모리 사용량이 적고,
많은 요청을 효율적으로 처리할 수 있다.
이벤트 기반(Event-driven) 구조
Node.js는 이벤트가 발생하면 등록된 함수(콜백)를 실행하는 방식으로 동작한다.
예시:
- 요청(request) 이벤트 발생
- 해당 이벤트에 등록된 콜백 함수 실행
논블로킹 I/O (Non-blocking I/O)
Node.js는 파일 읽기, 네트워크 요청 같은 **시간이 오래 걸리는 작업(I/O)**을
기다리지 않고 다음 코드부터 실행한다.
출력:
I/O 작업이 메인 흐름을 막지 않는다.
이벤트 루프(Event Loop)란?
이벤트 루프는
“지금 실행할 코드가 있는지 계속 확인하고 실행하는 관리자”라고 생각하면 된다.
이벤트 루프의 역할
- 실행할 콜백이 있는지 확인
- 콜 스택이 비어 있으면
- 큐에 대기 중인 작업을 실행
Node.js 내부 동작 흐름 (순서)
전체 흐름 요약
- 클라이언트 요청 발생
- Node.js가 요청을 받음
- 시간이 오래 걸리는 작업이면 → 백그라운드로 위임
- 메인 스레드는 다른 작업 계속 처리
- 작업 완료 시 → 콜백이 큐에 들어감
- 이벤트 루프가 콜백 실행
콜 스택 & 큐 개념
콜 스택(Call Stack)
- 현재 실행 중인 함수가 쌓이는 공간
- 하나의 스레드 → 한 번에 하나씩 실행
콜백 큐(대기 큐)
- 실행을 기다리는 콜백 함수들
- 이벤트 루프가 관리
왜 Node.js가 빠른가?
Node.js가 빠른 이유는 다음 조합 때문이다.
- 싱글 스레드
- 이벤트 루프
- 비동기·논블로킹 I/O
요청마다 스레드를 생성하지 않음
컨텍스트 스위칭 비용 감소
대량 트래픽에 강함
Node.js에 적합한 서비스
- 실시간 채팅
- 예매·예약 시스템
- 스트리밍 서비스
- API 서버
- IoT 서버
반대로 CPU 연산이 많은 작업에는 적합하지 않다.
마무리 정리
Node.js는 단순한 서버 기술이 아니라,
비동기 처리 철학을 가진 런타임 환경이다.
이벤트 루프와 논블로킹 구조를 이해하면
왜 Node.js가 실무에서 많이 쓰이는지 자연스럽게 이해할 수 있다.
Node.js의 핵심은
“기다리지 않고 맡기고, 끝나면 다시 처리한다”는 구조이다.
'pgms' 카테고리의 다른 글
| [3주차] - [9기] 타입스크립트로 함께하는 웹 풀 사이클 개발(React, Node.js) 10회차 - 13 (0) | 2026.01.21 |
|---|---|
| [3주차] - [9기] 타입스크립트로 함께하는 웹 풀 사이클 개발(React, Node.js) 10회차 - 12 (0) | 2026.01.20 |
| [2주차] - [9기] 타입스크립트로 함께하는 웹 풀 사이클 개발(React, Node.js) 10회차 - 10 (0) | 2026.01.15 |
| [2주차] - [9기] 타입스크립트로 함께하는 웹 풀 사이클 개발(React, Node.js) 10회차 - 9 (0) | 2026.01.13 |
| [2주차] - [9기] 타입스크립트로 함께하는 웹 풀 사이클 개발(React, Node.js) 10회차 - 8 (0) | 2026.01.12 |