Node.js 학습형 1주차

송채원·2025년 3월 29일

Node.js

목록 보기
1/3

npm과 패키지 관리

-패키지 찾기: npm.jsorg
-패키지 설치: npm i 패키지이름
-패키지 관리 파일(관리자): package.json

*초기화: 터미널 창> cd.. (가장 상위 폴더로 이동) > npm init


자바스크립트 기초 문법

자바스크립트 기초 문법 (1)

템플릿 리터럴
백틱을 사용해 변수 삽입 → ${변수}
*문자열과 변수를 연결해서 사용할 때는 백틱을 사용하자!

📩폴더 이동 (터미널):

-cd 폴더명

-cd 후 폴더 끌어다 놓기(절대 경로)

함수 선언 방식

  1. 선언적 함수: function 함수이름(매개변수) {}

  2. 함수 표현식: let greeting = function(name) {}

  3. 즉시 실행 함수: (function(a, b) { ... })(100, 200);

  4. 화살표 함수: let 변수 = () => {} (return 생략 가능)

▪️앞에 괄호: 어떠한 값을 받는지 매개변수를 나타냄 , 받을 인자가 있으면 입력
▪️중괄호: return 값 입력 {return '안녕하세요'} ==> return을 생략하고 '안녕하세요'; 로만 나타내도 됨.

매개변수와 인수의 차이
-매개변수: 함수 선언 시 받는 값
-인수: 함수 호출 시 전달하는 값

함수 중간에 시간이 지연되는 작업이 포함되어 있을 경우
-> 빨리 처리할 수 있는 작업부터 하고, 시간이 걸리는 작업은 나중에 처리함.
자바는 동시작업되지 않는 언어이기 때문.


자바스크립트 기초 문법(2)

비동기 처리와 콜백 함수
시간이 걸리는 작업(예: 파일 읽기)은 비동기적으로 실행
콜백 함수: 특정 함수가 실행된 후 실행될 함수를 매개변수로 전달

function displayB(callback) {
    console.log("B 실행");
    callback();
}
displayB(displayC);

노드.js 모듈 시스템

▪️CommonJS (Node.js 기본 모듈 시스템)
▪️ES 모듈 시스템 (ECMAScript 표준)
▪️path 모듈: 경로 관련 기능 제공
__dirname → 현재 파일의 경로
path.join() → 경로 합치기

fs 모듈: 파일 시스템 관리
Node.js의 fs(File System) 모듈은 파일을 읽고 쓰거나, 디렉토리를 관리하는 기능을 제공함.

파일 처리 방식

  • 동기식 처리 (Blocking)
    • 코드 실행이 완료될 때까지 다음 줄로 진행되지 않음.
    • 예제:
      const fs = require('fs');
      const data = fs.readFileSync('example.txt', 'utf8');
      console.log(data);
  • 비동기식 처리 (Non-blocking, 콜백 함수 사용)
    • 코드 실행 중에도 다음 줄이 실행됨.
    • 예제:
      const fs = require('fs');
      fs.readFile('example.txt', 'utf8', (err, data) => {
          if (err) throw err;
          console.log(data);
      });

fs 모듈 주요 함수

  1. 폴더 내 파일 목록 읽기 (readdir)
    fs.readdir('./', (err, files) => {
        if (err) throw err;
        console.log(files);
    });
  2. 파일 읽기 (readFile)
    fs.readFile('example.txt', 'utf8', (err, data) => {
        if (err) throw err;
        console.log(data);
    });
  3. 파일 쓰기 (writeFile)
    fs.writeFile('example.txt', 'Hello, Node.js!', (err) => {
        if (err) throw err;
        console.log('파일 저장 완료!');
    });

HTTP 모듈로 서버 만들기

Node.js의 http 모듈을 이용하면 간단한 웹 서버를 만들 수 있음.

개발자 도구 (DevTools) 열기

  • 단축키: Ctrl + Shift + I
  • 개발자 도구에서 네트워크 요청 확인 가능

기본 서버 생성 (http 모듈 사용)

const http = require("http");

const server = http.createServer((req, res) => {
    console.log("요청 발생");
    res.writeHead(200, { "Content-Type": "text/plain" });
    res.end("Hello, World!");
});

server.listen(3000, () => {
    console.log("서버가 3000번 포트에서 실행 중...");
});
  • localhost:3000 접속 시 "Hello, World!" 응답 확인 가능
  • 서버 중지: Ctrl + C

라우팅 (Routing)

라우팅이란 클라이언트가 요청한 URL에 따라 적절한 응답을 보내는 것.

요청 정보 확인

  • req.url: 요청 경로

  • req.method: 요청 방식 (GET, POST 등)

  • 예제 (http 모듈 사용)

    const server = http.createServer((req, res) => {
        console.log(`요청 경로: ${req.url}, 요청 방식: ${req.method}`);
        res.end();
    });
    
    server.listen(3000);

구조 분해 할당으로 요청 처리

const server = http.createServer(({ url, method }, res) => {
    if (url === "/" && method === "GET") {
        res.writeHead(200, { "Content-Type": "text/plain" });
        res.end("홈페이지");
    } else {
        res.writeHead(404);
        res.end("페이지를 찾을 수 없음");
    }
});

server.listen(3000);

Express.js로 웹 애플리케이션 서버 구축

Express는 Node.js의 웹 프레임워크로, HTTP 서버를 쉽게 만들 수 있음.

Express 설치

npm i express

기본 Express 서버 생성

const express = require("express");
const app = express();

app.get("/", (req, res) => {
    res.send("Hello, Express!");
});

app.listen(3000, () => {
    console.log("서버가 3000번 포트에서 실행 중...");
});

nodemon 설치 및 실행

  • nodemon은 서버를 자동으로 재시작해주는 도구
  • 설치:
    npm i nodemon --save-dev -g
  • 실행:
    nodemon app.js

Express 라우팅 (Routing)

라우팅 기본 구조

app.get("/", (req, res) => res.send("홈페이지"));
app.post("/submit", (req, res) => res.send("데이터 제출됨"));
app.put("/update", (req, res) => res.send("데이터 수정됨"));
app.delete("/delete", (req, res) => res.send("데이터 삭제됨"));

라우트 파라미터 사용

  • :id처럼 변수를 URL에 포함 가능
  • 예제:
    app.get("/user/:id", (req, res) => {
        res.send(`사용자 ID: ${req.params.id}`);
    });
  • localhost:3000/user/123 요청 시 "사용자 ID: 123" 응답

라우터 미들웨어

미들웨어는 요청과 응답 사이에서 특정 기능을 수행하는 함수.

라우터 객체 생성

const express = require("express");
const router = express.Router();

router.get("/", (req, res) => res.send("홈페이지"));
router.get("/about", (req, res) => res.send("소개 페이지"));

module.exports = router;

app.js에서 라우터 등록

const express = require("express");
const app = express();
const router = require("./routes");

app.use(router);

app.listen(3000, () => {
    console.log("서버 실행 중...");
});

Express 미들웨어

미들웨어는 요청을 가로채 처리하거나 응답을 수정할 수 있음.

기본 미들웨어 설정

app.use(express.json()); // JSON 요청을 받을 수 있도록 설정
app.use(express.urlencoded({ extended: true })); // 폼 데이터 처리

사용자 정의 미들웨어

app.use((req, res, next) => {
    console.log(`요청 경로: ${req.url}`);
    next(); // 다음 미들웨어로 전달
});

질문

  1. 파일을 읽고 쓸 때 비동기 방식이 필요한 이유는?
  2. module.을 입력하면 자동으로 다음과 같이 바뀜..

0개의 댓글