ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Node.js] NestJS๋ž€?
    ๐Ÿ“˜ Node.js 2026. 8. 17. 12:58

    1. NestJS๋ฅผ ์•Œ์•„๋ณด๊ธฐ ์ „์— ๐Ÿ‘

    Node.js๋กœ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„๋ฅผ ๊ฐœ๋ฐœํ•ด๋ดค๋‹ค๋ฉด ํ•œ ๋ฒˆ์ฏค Express.js๋ผ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ ‘ํ•ด๋ดค์„ ๊ฒƒ์ด๋‹ค.

    Express.js๋Š” Node.js์—์„œ ์„œ๋ฒ„๋ฅผ ๋งŒ๋“ค ๋•Œ ๋งŽ~์ด ์‚ฌ์šฉํ•˜๋Š” ์›น ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, ๊ฐ„๋‹จํ•œ API๋ถ€ํ„ฐ ๊ทœ๋ชจ๊ฐ€ ์žˆ๋Š” ์„œ๋ฒ„๊นŒ์ง€ ๋‹ค์–‘ํ•œ ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

     

    ๊ฐ„๋‹จํ•œ ์˜ˆ๋ฅผ ๋“ค์–ด Express์—์„œ๋Š” ์•„๋ž˜์ฒ˜๋Ÿผ ๊ฐ„๋‹จํ•˜๊ฒŒ API๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

    const express = require('express');
    
    const app = express();
    
    app.get('/hello', (req, res) => {
        res.json({
            message: 'Hello World'
        });
    });
    
    app.listen(3000, () => {
        console.log('Server started');
    });

     

    ์ฝ”๋“œ๊ฐ€ ๋น„๊ต์  ๊ฐ„๊ฒฐํ•˜๋ฉด์„œ ์ž์œ ๋„๊ฐ€ ๋†’๋‹ค๋Š” ๊ฒƒ์ด Express์˜ ์žฅ์ ์ด๋‹ค.

     

    ํ•˜์ง€๋งŒ ํ”„๋กœ์ ํŠธ์˜ ๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๋ฉด์„œ ๊ธฐ๋Šฅ์ด ๋งŽ์•„์ง€๋ฉด ์ด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค.

    src/
    โ”œโ”€โ”€ routes/
    โ”œโ”€โ”€ controllers/
    โ”œโ”€โ”€ services/
    โ”œโ”€โ”€ middleware/
    โ”œโ”€โ”€ models/
    โ”œโ”€โ”€ utils/
    โ””โ”€โ”€ ...

     

    ํ”„๋กœ์ ํŠธ์˜ ๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๋ฉด ์ปค์งˆ์ˆ˜๋ก ๋ณต์žก๋„๋Š” ์˜ฌ๋ผ๊ฐ„๋‹ค.

    ํ”„๋กœ์ ํŠธ์˜ ๊ตฌ์กฐ๋ฅผ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์ •ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํŒ€์ด๋‚˜ ํ”„๋กœ์ ํŠธ์— ๋”ฐ๋ผ ๊ตฌ์กฐ๊ฐ€ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ

    ๊ธฐ๋Šฅ์ด ๋งŽ์•„์งˆ์ˆ˜๋ก ์ฝ”๋“œ์˜ ์—ญํ• ์„ ๋ช…ํ™•ํ•˜๊ฒŒ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ด์ง„๋‹ค.

     

    NestJS๋Š” ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜์ด๋‹ค.

     

    2. NestJS๋ž€? ๐Ÿ’ก

    NestJS๋Š” Node.js๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์„œ๋ฒ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ๋‹ค.

    ํŠนํžˆ TypeScript๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์กฐํ™”๋œ ๋ฐฑ์—”๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋ผ๊ณ  ์ดํ•ดํ•˜๋ฉด ๋œ๋‹ค.

    NestJS๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ Express๋ฅผ ๊ธฐ๋ณธ HTTP ํ”Œ๋žซํผ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์„ค์ •์— ๋”ฐ๋ผ Fastify๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

    ์‰ฝ๊ฒŒ ํ‘œํ˜„ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

    Node.js
       ↓
    ์›น ์„œ๋ฒ„๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” JavaScript ๋Ÿฐํƒ€์ž„
       ↓
    Express
       ↓
    Node.js์—์„œ ์›น ์„œ๋ฒ„๋ฅผ ์‰ฝ๊ฒŒ ๋งŒ๋“ค๋„๋ก ๋„์™€์ฃผ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ
       ↓
    NestJS
       ↓
    ๋Œ€๊ทœ๋ชจ ์„œ๋ฒ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์กฐ์ ์œผ๋กœ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ

     

    ์ฆ‰, NestJS๋Š” ๋‹จ์ˆœํžˆ HTTP ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ๋งŒ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ,

    • ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ
    • ๋ชจ๋“ˆํ™”
    • ์˜์กด์„ฑ ์ฃผ์ž…
    • ์ธ์ฆ ๋ฐ ๊ถŒํ•œ ์ฒ˜๋ฆฌ
    • ์š”์ฒญ ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ
    • ์˜ˆ์™ธ ์ฒ˜๋ฆฌ
    • ํ…Œ์ŠคํŠธ

    ๋“ฑ์„ ์ฒด๊ณ„์ ์œผ๋กœ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค.

     

    3. NestJS๋Š” ์™œ ๋งŒ๋“ค์–ด์กŒ์„๊นŒ? ๐Ÿคท

    Express์˜ ๊ฐ€์žฅ ํฐ ์žฅ์  ์ค‘ ํ•˜๋‚˜๋Š” ์ž์œ ๋กญ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

    ๊ฐœ๋ฐœ์ž๊ฐ€ ์›ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

    ํ•˜์ง€๋งŒ ์ž์œ ๋กญ๋‹ค๋Š” ๊ฒƒ์€ ๋ฐ˜๋Œ€๋กœ ๋งํ•˜๋ฉด ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๋ฅผ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ๊ฒฐ์ •ํ•ด์•ผ ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๊ธฐ๋„ ํ•˜๋‹ค.

    ์˜ˆ๋ฅผ ๋“ค์–ด ๊ฐœ๋ฐœ์ž A๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

    src/
    โ”œโ”€โ”€ routes/
    โ”œโ”€โ”€ controllers/
    โ””โ”€โ”€ services/

    ๊ฐœ๋ฐœ์ž B๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌ์„ฑํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

    src/
    โ”œโ”€โ”€ api/
    โ”‚   โ”œโ”€โ”€ user/
    โ”‚   โ”œโ”€โ”€ auth/
    โ”‚   โ””โ”€โ”€ document/
    โ””โ”€โ”€ common/

    ๋‘˜ ๋‹ค ํ‹€๋ฆฐ ๊ตฌ์กฐ๋Š” ์•„๋‹ˆ๋‹ค.

    ํ•˜์ง€๋งŒ ์—ฌ๋Ÿฌ ๋ช…์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•จ๊ป˜ ๊ฐœ๋ฐœํ•˜๊ฑฐ๋‚˜ ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๋ฉด ์ผ์ •ํ•œ ๊ทœ์น™์ด ์žˆ๋Š” ๊ฒƒ์ด ๊ด€๋ฆฌํ•˜๊ธฐ ํ›จ์”ฌ ์ˆ˜์›”ํ•˜๋‹ค.

    NestJS๋Š” ์ด๋Ÿฐ ๋ถ€๋ถ„์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ผ์ •ํ•œ ๊ตฌ์กฐ๋กœ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค.

Designed by Tistory.