๐Ÿ›ผ study/๐Ÿ“ฒ tech

[javascript] javascript ๊ธฐ๋ณธ ๊ฐœ๋…(feat. nodejs)

jcowwk 2024. 4. 15. 21:27

javascript ๊ธฐ๋ณธ ๊ฐœ๋…(feat. nodejs)


์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์›น ๊ฐœ๋ฐœ ๊ณต๋ถ€ํ•˜๋ฉด์„œ ์ •๋ฆฌํ•œ ๋‚ด์šฉ ์ž…๋‹ˆ๋‹ค !

์˜ค๋ฅ˜๊ฐ€ ์žˆ๋‹ค๋ฉด ๋Œ“๊ธ€๋กœ ๋‚จ๊ฒจ์ฃผ์„ธ์š” :)

 

1.  VanilaJs, jQuery, Vue, React

2. Ajax, Fetch

3.nodejs

4. ๋ชจ๋“ˆ

5. ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ, promise

6. ์›น ์„œ๋ฒ„ ๋งŒ๋“ค๊ธฐ(http, express)


1. VanilaJs, jQuery, Vue, React

- VanilaJs

ํ”„๋ ˆ์ž„์›Œํฌ ๋˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ ์šฉ๋˜์ง€ ์•Š์€ ๊ธฐ๋ณธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด

 

- jQuery

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ํ•จ์ˆ˜์˜ ์ด๋ฆ„์„ ์งง๊ฒŒ ๋ฐ”๊ฟ”์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

 

- Vue

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๊ธฐ๋Šฅ์„ ๋™์‹œ์— ๊ฐ€์ง„ ํ”„๋ ˆ์ž„์›Œํฌ

 

- React

์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

์ปดํฌ๋„ŒํŠธ๋Š” ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํšจ์œจ์ ์ด๋‹ค.

 

2. Ajax, Fetch

- Ajax

Ajax๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•˜๋Š” ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค.

XMLHttpRequest ๊ฐ์ฒด, fetch ํ•จ์ˆ˜, axios ํŒจํ‚ค์ง€๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

- Fetch

fetch ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Ajax ํ†ต์‹ ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

axios ํŒจํ‚ค์ง€(๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ)์™€ ๊ฐ™์ด ์™ธ๋ถ€ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜์ง€ ์•Š๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

3. nodejs

nodejs๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์•„๋‹Œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์‹คํ–‰ ํ™˜๊ฒฝ์ด๋‹ค.

 

4. ๋ชจ๋“ˆ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ ํ•œ ๊ฐœ๋ฅผ ํ•˜๋‚˜์˜ ๋ชจ๋“ˆ์ด๋ผ๊ณ  ํ•œ๋‹ค.

์ด๋Ÿฌํ•œ ๋ชจ๋“ˆ์ด ๋ชจ์—ฌ์„œ ํ•˜๋‚˜์˜ ํ”„๋กœ๊ทธ๋žจ์ด ๋œ๋‹ค.

 

- ์ง์ ‘ ์ž‘์„ฑํ•œ ๋ชจ๋“ˆ ์‚ฌ์šฉ

์šฐ์„  A์—์„œ B ๋ชจ๋“ˆ์„ ๊ฐ€์ ธ์™€์„œ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž.

 

A์—์„œ require('๋‹ค๋ฅธ ๋ชจ๋“ˆ์˜ ์ƒ๋Œ€ ๊ฒฝ๋กœ')๋กœ ๊ฐ™์€ ๋””๋ ‰ํ† ๋ฆฌ ์•ˆ์— ์กด์žฌํ•˜๋Š” ๋ชจ๋“ˆ์„ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ชจ๋“ˆ์„ ๋กœ๋“œํ•˜๋ฉด ๊ฐ์ฒด 1๊ฐœ๋ฅผ return ํ•˜๋Š”๋ฐ, ๊ฐ์ฒด๋ฅผ ๋‹ด์„ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ๋‹ด์•„์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ •๋ง ์—ฌ๊ธฐ๊นŒ์ง€๊ฐ€ ๋์ผ๊นŒ?!

์•„๋‹ˆ๋‹ค.

 

B ๋ชจ๋“ˆ์˜ ๋‚ด๋ถ€ ๋‚ด์šฉ์„ ์™ธ๋ถ€๋กœ ๊ณต๊ฐœํ•ด์ค˜์•ผ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

B ๋ชจ๋“ˆ์˜ ๋งˆ์ง€๋ง‰์— exports.๋ชจ๋“ˆ ์™ธ๋ถ€๋กœ ๊ณต๊ฐœํ•  ์ด๋ฆ„ = ๋ชจ๋“ˆ ๋‚ด๋ถ€์—์„œ ์ด๋ฆ„; ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผํ•œ๋‹ค.

์™ธ๋ถ€๋กœ ๊ณต๊ฐœํ•˜๊ณ  ์‹ถ์€ ๋ชจ๋“  ๊ฒƒ๋“ค์„ ๋ชจ์€ ๊ฐ์ฒด๋ฅผ ์™ธ๋ถ€์— ๊ณต๊ฐœํ•  ๋•Œ๋Š” module.exports = ๋ชจ๋“ˆ ๋‚ด๋ถ€์—์„œ ์ด๋ฆ„; ์„ ํ•˜๋ฉด ๋œ๋‹ค.

 

- ์ด๋ฏธ ๋งŒ๋“ค์–ด์ง„ ๋ชจ๋“ˆ ์‚ฌ์šฉ(์ฝ”์–ด ๋ชจ๋“ˆ, ์„œ๋“œ ํŒŒํ‹ฐ ๋ชจ๋“ˆ)

์ฝ”์–ด ๋ชจ๋“ˆ์€ node.js์•ˆ์— ์ด๋ฏธ ํฌํ•จ๋œ ๋ชจ๋“ˆ๋กœ require('๋ชจ๋“ˆ ์ด๋ฆ„')๋กœ ๋ชจ๋“ˆ์„ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋‹ค.

์„œ๋“œ ํŒŒํ‹ฐ ๋ชจ๋“ˆ์€ ์ œ3์ž๊ฐ€ ๋งŒ๋“  ๋ชจ๋“ˆ๋กœ npm install์„ ํ†ตํ•ด ์„ค์น˜ํ•˜๊ณ , require('๋ชจ๋“ˆ ์ด๋ฆ„')๋กœ ๋ชจ๋“ˆ์„ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋‹ค.

 

5. ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ, promise

๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ํŠน์ • ์ž‘์—…์ด ์™„๋ฃŒ ๋˜์—ˆ์„ ๋•Œ ์‹คํ–‰ํ•  ์ฝœ๋ฐฑ์„ ๋“ฑ๋กํ•ด๋‘๊ณ  ๋ฐ”๋กœ ๋‹ค์Œ ์ฝ”๋“œ๋กœ ์‹คํ–‰์„ ๋„˜๊ธด๋‹ค.

nodejs๋Š” ๋น„๋™๊ธฐ ์‹คํ–‰ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋˜๊ณ , ๋น„๋™๊ธฐ ์‹คํ–‰ ๋ฐฉ๋ณ์€ ์ฝœ๋ฐฑ๊ณผ ์ด๋ฒคํŠธ๊ฐ€ ์žˆ๋‹ค.

 

- ์ฝœ๋ฐฑ

ํŠน์ • ์ด๋ฒคํŠธ(์š”์ฒญ)์„ ๋ฐ›์•˜์„ ๋•Œ ์‹คํ–‰(์‘๋‹ต)ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

- ์ด๋ฒคํŠธ

const EventEmitter = require('events');๋กœ ๋ชจ๋“ˆ์„ ๋กœ๋“œํ•˜๊ณ  const myEmitter = new EventEmitter();๋กœ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋กœ ๋งŒ๋“ค์–ด ์ค€ ํ›„์— ์‚ฌ์šฉํ•œ๋‹ค.

 

on์€ ๊ฐ์ฒด ์ด๋ฆ„.on('์ด๋ฒคํŠธ ์ด๋ฆ„', () => { ์ฝœ๋ฐฑํ•จ์ˆ˜; }); ๋กœ ํ•ด๋‹น ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒ ์‹œ ์‹คํ–‰ํ•  ์ฝœ๋ฐฑ์„ ์„ค์ •ํ•˜๊ณ ,

emit์€ ๊ฐ์ฒด ์ด๋ฆ„.emit('์ด๋ฒคํŠธ ์ด๋ฆ„'); ๋กœ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๊ฒƒ์ด๋‹ค.

 

- promise

fetch ํ•จ์ˆ˜๊ฐ€ ๋ฆฌํ„ดํ•˜๋Š” ๊ฐ์ฒด์ด๊ณ , ์–ด๋–ค ์ž‘์—…์— ๊ด€ํ•œ pending, fulfilled, rejected์˜ 3๊ฐ€์ง€ ์ƒํƒœ ์ •๋ณด๋ฅผ ๊ฐ–๊ณ  ์žˆ๋‹ค.

์ž‘์—…์ด fulfilled๊ฐ€ ๋˜๋ฉด ์ž‘์—…์˜ ์„ฑ๊ณต ๊ฒฐ๊ณผ๋ฅผ ๊ฐ–๊ฒŒ ๋˜๊ณ , rejected๊ฐ€ ๋˜๋ฉด ์ž‘์—…์˜ ์‹คํŒจ ์ •๋ณด๋„ ๊ฐ–๊ฒŒ ๋œ๋‹ค.

 

6. ์›น ์„œ๋ฒ„ ๋งŒ๋“ค๊ธฐ(http, express)

- http ์ฝ”์–ด ๋ชจ๋“ˆ๋กœ ์„œ๋ฒ„ ๋งŒ๋“ค๊ธฐ

const http = require('http');

const server = http.createServer((req, res) => {
  res.end('HTTP ์„œ๋ฒ„๊ฐ€ ๋™์ž‘ ์ค‘์ž…๋‹ˆ๋‹ค!\n');
});

server.listen(3000);

 

const http = require('http');๋กœ http ๋ชจ๋“ˆ์„ ๋ถˆ๋Ÿฌ์™€์„œ http ๋ณ€์ˆ˜์— ํด๋ž˜์Šค๋ฅผ ๋‹ด์•„์ค€๋‹ค.

๋‹ค์Œ์œผ๋กœ const server = http.createServer((req, res) => { res.end(); });๋ฅผ ํ†ตํ•ด ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ๋“ฑ๋กํ•œ๋‹ค.

server.listen(3000);์„ ํ†ตํ•ด localhost:3000์œผ๋กœ ์„œ๋ฒ„๋ฅผ ์š”์ฒญํ•˜๋ฉด ์„œ๋ฒ„๊ฐ€ ์‘๋‹ตํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

- express ์„œ๋“œ ํŒŒํ‹ฐ ๋ชจ๋“ˆ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ์„œ๋ฒ„ ๋งŒ๋“ค๊ธฐ

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

app.get('/', (req, res) => {
  res.send('Express ์„œ๋ฒ„๊ฐ€ ๋™์ž‘ ์ค‘์ž…๋‹ˆ๋‹ค!');
});

app.listen(3000);

 

const express = require('express');๋กœ express ๋ชจ๋“ˆ์„ ๋ถˆ๋Ÿฌ์™€์„œ express ๋ณ€์ˆ˜์— ํด๋ž˜์Šค๋ฅผ ๋‹ด์•„์ค€๋‹ค.

const app = express();๋ฅผ ํ†ตํ•ด app ๊ฐ์ฒด๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค๊ณ , app.get('/', (req, res) => { res.end(); });๋ฅผ ํ†ตํ•ด ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ๋“ฑ๋กํ•œ๋‹ค.

app.listen(3000);์„ ํ†ตํ•ด localhost:3000์œผ๋กœ ์„œ๋ฒ„๋ฅผ ์š”์ฒญํ•˜๋ฉด ์„œ๋ฒ„๊ฐ€ ์‘๋‹ตํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค.


๋‹ค์Œ ํฌ์ŠคํŒ…์—์„œ ๋งŒ๋‚˜์š” !