Skip to content

devsuzie/nodejs-playground

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

57 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

nodejs

REST API

  1. Uniform Interface
  • ํ•˜๋‚˜์˜ ์ž๋ฃŒ๋Š” ํ•˜๋‚˜์˜ URL๋กœ
  • URL ํ•˜๋‚˜๋ฅผ ์•Œ๋ฉด ๋‘˜์„ ์•Œ ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ
  • ์š”์ฒญ๊ณผ ์‘๋‹ต์€ ์ •๋ณด๊ฐ€ ์ถฉ๋ถ„ํžˆ ๋“ค์–ด์žˆ์–ด์•ผ ํ•จ
  1. Client-Server ์—ญํ•  ๊ตฌ๋ถ„
  • ๋ธŒ๋ผ์šฐ์ €๋Š” ์š”์ฒญ๋งŒ ํ•  ๋ฟ
  • ์„œ๋ฒ„๋Š” ์‘๋‹ต๋งŒ ํ•  ๋ฟ
  1. Stateless
  • ์š”์ฒญ 1๊ณผ ์š”์ฒญ 2๋Š” ์˜์กด์„ฑ์ด ์—†์–ด์•ผ ํ•จ
  1. Cacheable (๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์•Œ์•„์„œ ์ž˜ ํ•ด์คŒ)
  • ์„œ๋ฒ„์—์„œ ๋ณด๋‚ด์ฃผ๋Š” ์ •๋ณด๋“ค์€ ์บ์‹ฑ์ด ๊ฐ€๋Šฅํ•ด์•ผ ํ•จ
  • ์บ์‹ฑ์„ ์œ„ํ•œ ๋ฒ„์ „ ๊ฐ™์€ ๊ฒƒ๋„ ๊ด€๋ฆฌ ์ž˜ ํ•ด์•ผ ํ•จ
  1. Layered System
  2. Code on Demand

DB ์ข…๋ฅ˜

  1. ๊ด€๊ณ„ํ˜• DB
  • table ํ˜•์‹
  • MySQL | MariaDB | Oracle | My SQL Server
  • SQL ์ด๋ผ๋Š” ์–ธ์–ด๋ฅผ ์จ์•ผํ•จ (Query Language)
  • Relational์˜ ์˜๋ฏธ
    • ๋ฐ์ดํ„ฐ๋“ค ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์ •ํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋œป
    • ํ…Œ์ด๋ธ” ํ˜• DB์—์„œ๋Š” 3์ฐจ์› ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ ์–ด๋ ค์šด๋ฐ ์ด๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด ํ…Œ์ด ๋ธ”์„ ํ•˜๋‚˜ ๋” ๋งŒ๋“ค๊ณ , ํ…Œ์ด๋ธ”๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์ƒ์„ฑํ•œ๋‹ค๋Š” ๋œป์• ์„œ Relational DB๋ผ๊ณ ๋ถˆ ๋ฆผ
  1. NoSQL
  • SQL ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” DB
  • Dynamo | Oracle NoSQL | MongoDB | Redis | Cassandra
  • ์ข…๋ฅ˜
    • Key-value ๋ชจ๋ธ
    • Document ๋ชจ๋ธ: MongoDB๊ฐ€ ์—ฌ๊ธฐ์— ์†ํ•จ
    • Graph ๋ชจ๋ธ
    • Wide-column ๋ชจ๋ธ
  • Scaling์ด ์‰ฌ์›€
    • ๊ด€๊ณ„ํ˜• DB์—์„œ๋Š” ํ™•์žฅ์„ ์œ„ํ•ด Scale Up (์„œ๋ฒ„ ์„ฑ๋Šฅ ํ™•์žฅ)์„ ํ•จ
    • NoSQL DB์—์„œ๋Š” Scale Out ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์‚ฐ ์ €์žฅํ•จ
  • ์Šคํ‚ค๋งˆ ์ •์˜ ์—†์ด ์‚ฌ์šฉ ๊ฐ€๋Šฅ
    • ์Šคํ‚ค๋งˆ๋ฅผ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•ด Mongoose ์‚ฌ์šฉ

EJS

  • HTML ์‰ฝ๊ฒŒ ์“ธ ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ํ…œํ”Œ๋ฆฟ ์—”์ง„ (๋ฌธ์„œ)
  • HTML ์•ˆ์— ์„œ๋ฒ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ง‘์–ด ๋„ฃ์„ ์ˆ˜ ์žˆ์Œ
  • index.html -> index.ejs ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ejs ํŒŒ์ผ์€ views ํด๋” ์•ˆ์— ์žˆ์–ด์•ผ ํ•จ
  • ejs ํŒŒ์ผ ๋‚ด์—์„œ js ๋ฌธ๋ฒ• ์“ฐ๊ณ  ์‹ถ์œผ๋ฉด line ์˜ ์•ž, ๋’ค์— <% %> ๋ถ™์ด๋ฉด ๋จ

JWT

  • json web token์ด ํ•„์š”ํ•œ ์ด์œ 

    • ๋กœ๊ทธ์ธ ํ•˜๊ณ  ๋‚˜์„œ post ์š”์ฒญ ๋“ฑ API ํ†ต์‹ ์„ ํ•  ๋•Œ ๋กœ๊ทธ์ธ ํ•œ ์œ ์ €์ธ์ง€ ์•„๋‹Œ์ง€ ์•Œ ๊ธฐ ์œ„ํ•ด์„œ (validํ•œ ์œ ์ €์ธ์ง€)
    • ๋กœ๊ทธ์ธํ•  ๋•Œ ํ† ํฐ ๋ฐœ๊ธ‰ ๋ฐ›๊ณ  ๋‚˜์„œ ๋‹ค์Œ ์š”์ฒญ ๋ณด๋‚ผ๋•Œ ๋งˆ๋‹ค ํ† ํฐ์„ ๋ณด์—ฌ์ฃผ๋ฉด ๋จ
  • token ๋งŒ๋“ค๊ณ  ๋‚˜์„œ ์ •๋ณด ๊ถ๊ธˆํ•˜๋ฉด

    • jwt debugger์—์„œ decoded ๋‚ด์šฉ ํ™•์ธ ๊ฐ€๋Šฅ
    • ๋‚ด๊ฐ€ payload์— ๋‹ด์•„์„œ ๋ณด๋‚ธ ๋‚ด์šฉ์ด ์ž˜ ๋‹ด๊ฒผ๋Š”์ง€ ๋“ฑ
    • ์—ฌ๊ธฐ์„œ ํ† ํฐ ์œ ํšจ ๊ธฐ๊ฐ„ ์„ค์ •๋„ ๊ฐ€๋Šฅํ•จ

Mongodb Operator (์—ฐ์‚ฐ์ž)

  • $set: ๊ฐ’์„ ๋ฐ”๊พธ๊ณ  ์‹ถ์„๋•Œ ์‚ฌ์šฉ
    {$set: {totalPost: ๋ฐ”๊ฟ€ ๊ฐ’}}
    
  • $inc: ๊ฐ’์„ ์ฆ๊ฐ€ํ•˜๊ณ  ์‹ถ์„๋•Œ ์‚ฌ์šฉ
    {$inc: {totalPost: ๊ธฐ์กด ๊ฐ’์— ๋”ํ•ด์ค„ ๊ฐ’}}
    

Javascript Ajax

  • ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” JS ๋ฌธ๋ฒ•
  • ์ƒˆ๋กœ๊ณ ์นจ ์—†์ด ์„œ๋ฒ„์— ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Œ (url ๋ณด๋‚ด์„œ API ์š”์ฒญํ•˜๋Š” ๋ฐฉ์‹๊ณผ ๋‹ค๋ฆ„)
  • HTML ์—์„œ ๋ถˆ๊ฐ€๋Šฅํ•œ DELETE ์š”์ฒญ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์คŒ
  • $.ajax ajax ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜

ํšŒ์› ์ธ์ฆ ๋ฐฉ๋ฒ•

  • session-based
    • ๋กœ๊ทธ์ธ์‹œ ์ฟ ํ‚ค ๋ฐœ๊ธ‰ ํ›„ session data๋ฅผ ์„œ๋ฒ„ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ
  • token-based (jwt)
    • ๋กœ๊ทธ์ธ์‹œ ์„œ๋ฒ„์—์„œ ์›น ํ† ํฐ์„ ๋ฐœ๊ธ‰ํ•ด์„œ ๋ธŒ๋ผ์šฐ์ €์— ์ „์†ก (์š”์ฒญํ• ๋•Œ๋งˆ๋‹ค ํ—ค๋”์— ํ†  ํฐ์„ ๋‹ด์•„์„œ ์ „์†ก)
  • Open Authentication (OAuth)
    • google ํ”„๋กœํ•„ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ด

๋ฏธ๋“ค์›จ์–ด

  • app.use(): ์š”์ฒญ๊ณผ ์‘๋‹ต์‚ฌ์ด์— ๋™์ž‘ํ•˜๋Š” ์ฝ”๋“œ

๊ฒŒ์‹œ๋ฌผ ๋นจ๋ฆฌ ๊ฒ€์ƒ‰ํ•˜๊ธฐ

  • Binary Search: ๋งŽ์€ ์ˆ˜์˜ ๊ฒŒ์‹œ๋ฌผ ์ค‘ ๋น ๋ฅด๊ฒŒ ์ฐพ๋Š” ๋ฐฉ๋ฒ• (๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ ๋˜์–ด ์žˆ ์–ด์•ผ ์‚ฌ์šฉ ๊ฐ€๋Šฅ)
  • MongoDB๋Š” _id ์ˆœ์œผ๋กœ ๋ฏธ๋ฆฌ ์ •๋ ฌ๋˜์–ด ์žˆ์–ด์„œ Binary Search ๊ฐ€๋Šฅ
  • ๋ฌธ์ž์—ด (์ œ๋ชฉ)์— Indexing - ๋ฏธ๋ฆฌ ์ •๋ ฌํ•˜๋ฉด Binary Search ์ ์šฉํ•  ์ˆ˜ ์žˆ์Œ
    • mongoDB ์ฝœ๋ ‰์…˜์—์„œ Indexs ํƒญ์—์„œ text index ์„ค์ • ๊ฐ€๋Šฅ
    • ๋„์–ด์“ฐ๊ธฐ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋ฅผ ๋„์ถœํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฒ€์ƒ‰ํ•  ๋ฌธ์„œ ์–‘์„ ์ •ํ•ด๋‘๊ฑฐ๋‚˜ text index ๋งŒ๋“ค๋•Œ ๋‹ค๋ฅด๊ฒŒ ๋งŒ๋“ค๋ฉด ๋จ
    • searchIndex๋กœ ์ƒ์„ฑํ•˜๋ฉด ๋ฌธ์ œ ํ•ด๊ฒฐ: Index Analyzer๋ฅผ lucene.korean์œผ๋กœ ๋ณ€๊ฒฝ

Mongoose

  • validation ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์Šคํ‚ค๋งˆ ์ •์˜ ๊ฐ€๋Šฅ
  • ์˜ˆ์ „์—๋Š” MongoDB Native๊ฐ€ ๊ตฌ๋ ค์„œ ๋งŽ์ด ์‚ฌ์šฉํ–ˆ์œผ๋‚˜ MongoDB Compass๋กœ Validation ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ

๋Œ“๊ธ€ ๋˜๋Š” ์ฑ„ํŒ… ๊ธฐ๋Šฅ

  • ๊ฒŒ์‹œ๋ฌผ๊ฐ„์˜ ์ข…์† ๊ด€๊ณ„ ํ‘œํ˜„ํ•˜๊ณ  ์‹ถ์„๋•Œ ๋ถ€๋ชจ ์ •๋ณด๊นŒ์ง€ ์ €์žฅํ•ด์•ผํ•จ
  • ๊ธ€ & ๋Œ“๊ธ€ == ์ฑ„ํŒ…๋ฐฉ & ๋ฉ”์‹œ์ง€
  • ๋Œ“๊ธ€์ด ์—„์ฒญ๋‚˜๊ฒŒ ๋งŽ์•„์งˆ๋•Œ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ• ๊ฒƒ์ธ๊ฐ€
    • ์ปฌ๋ ‰์…˜์„ ๋งŒ๋“ค์–ด์„œ ์ €์žฅ

์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๋Š” ๋ฒ•

  • 1์ดˆ๋งˆ๋‹ค ์„œ๋ฒ„์— get ์š”์ฒญ ๋ณด๋‚ด๊ธฐ (๋ถ€ํ•˜ ์ƒ๊ธธ ์ˆ˜ ์žˆ์Œ / ๊ฑฐ์˜ DDos ๊ณต๊ฒฉ)
  • ์„œ๋ฒ„์™€ ์œ ์ €๊ฐ„ ์‹ค์‹œ๊ฐ„ ์†Œํ†ต ์ฑ„๋„ ์—ด๊ธฐ (Server Sent Events)
    • ํด๋ผ์ด์–ธํŠธ์—์„œ ์š”์ฒญ ์—†์ด ์„œ๋ฒ„์—์„œ ๊ณ„์†ํ•ด์„œ ์‘๋‹ต์„ ๋ณด๋‚ด์ค„ ์ˆ˜ ์žˆ์Œ
    • header content-type์— text/event-stream ์ถ”๊ฐ€
    • ์„œ๋ฒ„์™€ ์‹ค์‹œ๊ฐ„ ์ž๋ฃŒ ์ „๋‹ฌ์‹œ ๋ฌธ์ž๋งŒ ์ „๋‹ฌ ๊ฐ€๋Šฅ (JSON.stringify ์‚ฌ์šฉ ํ•ด์ค˜์•ผํ•จ)

MongoDB Change Stream

  • DB๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜๋ฉด ์œ ์ €์—๊ฒŒ ๋ณด๋‚ด์ค„ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์คŒ
  • collection.watch() ๋ฅผ ํ†ตํ•ด ์‹ค์‹œ๊ฐ„ ๊ฐ์‹œ
  • ํ•ด๋‹น ์ปฌ๋ ‰์…˜์— ๋ณ€๋™์‚ฌํ•ญ์ด ์ƒ๊ธฐ๋ฉด changeStream.on ์ฝœ๋ฐฑํ•จ์ˆ˜ ์ฝ”๋“œ ์‹คํ–‰๋จ

About

nodejs ๋†€์ดํ„ฐ ๐ŸŽข

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published