- Uniform Interface
- ํ๋์ ์๋ฃ๋ ํ๋์ URL๋ก
- URL ํ๋๋ฅผ ์๋ฉด ๋์ ์ ์ ์์ด์ผ ํจ
- ์์ฒญ๊ณผ ์๋ต์ ์ ๋ณด๊ฐ ์ถฉ๋ถํ ๋ค์ด์์ด์ผ ํจ
- Client-Server ์ญํ ๊ตฌ๋ถ
- ๋ธ๋ผ์ฐ์ ๋ ์์ฒญ๋ง ํ ๋ฟ
- ์๋ฒ๋ ์๋ต๋ง ํ ๋ฟ
- Stateless
- ์์ฒญ 1๊ณผ ์์ฒญ 2๋ ์์กด์ฑ์ด ์์ด์ผ ํจ
- Cacheable (๋ธ๋ผ์ฐ์ ๊ฐ ์์์ ์ ํด์ค)
- ์๋ฒ์์ ๋ณด๋ด์ฃผ๋ ์ ๋ณด๋ค์ ์บ์ฑ์ด ๊ฐ๋ฅํด์ผ ํจ
- ์บ์ฑ์ ์ํ ๋ฒ์ ๊ฐ์ ๊ฒ๋ ๊ด๋ฆฌ ์ ํด์ผ ํจ
- Layered System
- Code on Demand
- ๊ด๊ณํ DB
- table ํ์
- MySQL | MariaDB | Oracle | My SQL Server
- SQL ์ด๋ผ๋ ์ธ์ด๋ฅผ ์จ์ผํจ (Query Language)
- Relational์ ์๋ฏธ
- ๋ฐ์ดํฐ๋ค ๊ฐ์ ๊ด๊ณ๋ฅผ ์ ํด์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๋ค๋ ๋ป
- ํ ์ด๋ธ ํ DB์์๋ 3์ฐจ์ ๋ฐ์ดํฐ๋ฅผ ํํํ๊ธฐ ์ด๋ ค์ด๋ฐ ์ด๋ฅผ ๊ทน๋ณตํ๊ธฐ ์ํด ํ ์ด ๋ธ์ ํ๋ ๋ ๋ง๋ค๊ณ , ํ ์ด๋ธ๊ฐ์ ๊ด๊ณ๋ฅผ ์์ฑํ๋ค๋ ๋ป์ ์ Relational DB๋ผ๊ณ ๋ถ ๋ฆผ
- 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 ์ฌ์ฉ
- HTML ์ฝ๊ฒ ์ธ ์ ์๋๋ก ๋์์ฃผ๋ ํ ํ๋ฆฟ ์์ง (๋ฌธ์)
- HTML ์์ ์๋ฒ ๋ฐ์ดํฐ๋ฅผ ์ง์ด ๋ฃ์ ์ ์์
- index.html -> index.ejs ์ฌ์ฉ ๊ฐ๋ฅ
- ejs ํ์ผ์
views
ํด๋ ์์ ์์ด์ผ ํจ - ejs ํ์ผ ๋ด์์ js ๋ฌธ๋ฒ ์ฐ๊ณ ์ถ์ผ๋ฉด line ์ ์, ๋ค์
<% %>
๋ถ์ด๋ฉด ๋จ
-
json web token์ด ํ์ํ ์ด์
- ๋ก๊ทธ์ธ ํ๊ณ ๋์ post ์์ฒญ ๋ฑ API ํต์ ์ ํ ๋ ๋ก๊ทธ์ธ ํ ์ ์ ์ธ์ง ์๋์ง ์ ๊ธฐ ์ํด์ (validํ ์ ์ ์ธ์ง)
- ๋ก๊ทธ์ธํ ๋ ํ ํฐ ๋ฐ๊ธ ๋ฐ๊ณ ๋์ ๋ค์ ์์ฒญ ๋ณด๋ผ๋ ๋ง๋ค ํ ํฐ์ ๋ณด์ฌ์ฃผ๋ฉด ๋จ
-
token ๋ง๋ค๊ณ ๋์ ์ ๋ณด ๊ถ๊ธํ๋ฉด
- jwt debugger์์ decoded ๋ด์ฉ ํ์ธ ๊ฐ๋ฅ
- ๋ด๊ฐ payload์ ๋ด์์ ๋ณด๋ธ ๋ด์ฉ์ด ์ ๋ด๊ฒผ๋์ง ๋ฑ
- ์ฌ๊ธฐ์ ํ ํฐ ์ ํจ ๊ธฐ๊ฐ ์ค์ ๋ ๊ฐ๋ฅํจ
- $set: ๊ฐ์ ๋ฐ๊พธ๊ณ ์ถ์๋ ์ฌ์ฉ
{$set: {totalPost: ๋ฐ๊ฟ ๊ฐ}}
- $inc: ๊ฐ์ ์ฆ๊ฐํ๊ณ ์ถ์๋ ์ฌ์ฉ
{$inc: {totalPost: ๊ธฐ์กด ๊ฐ์ ๋ํด์ค ๊ฐ}}
- ์๋ฒ์ ํต์ ํ ์ ์๊ฒ ๋์์ฃผ๋ 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์ผ๋ก ๋ณ๊ฒฝ
- mongoDB ์ฝ๋ ์
์์
- validation ์ฝ๊ฒ ํ ์ ์๋๋ก ์คํค๋ง ์ ์ ๊ฐ๋ฅ
- ์์ ์๋ MongoDB Native๊ฐ ๊ตฌ๋ ค์ ๋ง์ด ์ฌ์ฉํ์ผ๋
MongoDB Compass
๋ก Validation ์ฒ๋ฆฌ ๊ฐ๋ฅ
- ๊ฒ์๋ฌผ๊ฐ์ ์ข ์ ๊ด๊ณ ํํํ๊ณ ์ถ์๋ ๋ถ๋ชจ ์ ๋ณด๊น์ง ์ ์ฅํด์ผํจ
- ๊ธ & ๋๊ธ == ์ฑํ ๋ฐฉ & ๋ฉ์์ง
- ๋๊ธ์ด ์์ฒญ๋๊ฒ ๋ง์์ง๋ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ๊ฒ์ธ๊ฐ
- ์ปฌ๋ ์ ์ ๋ง๋ค์ด์ ์ ์ฅ
- 1์ด๋ง๋ค ์๋ฒ์ get ์์ฒญ ๋ณด๋ด๊ธฐ (๋ถํ ์๊ธธ ์ ์์ / ๊ฑฐ์ DDos ๊ณต๊ฒฉ)
- ์๋ฒ์ ์ ์ ๊ฐ ์ค์๊ฐ ์ํต ์ฑ๋ ์ด๊ธฐ (Server Sent Events)
- ํด๋ผ์ด์ธํธ์์ ์์ฒญ ์์ด ์๋ฒ์์ ๊ณ์ํด์ ์๋ต์ ๋ณด๋ด์ค ์ ์์
- header content-type์
text/event-stream
์ถ๊ฐ - ์๋ฒ์ ์ค์๊ฐ ์๋ฃ ์ ๋ฌ์ ๋ฌธ์๋ง ์ ๋ฌ ๊ฐ๋ฅ (JSON.stringify ์ฌ์ฉ ํด์ค์ผํจ)
- DB๊ฐ ์ ๋ฐ์ดํธ๋๋ฉด ์ ์ ์๊ฒ ๋ณด๋ด์ค ์ ์๋๋ก ํด์ค
collection.watch()
๋ฅผ ํตํด ์ค์๊ฐ ๊ฐ์- ํด๋น ์ปฌ๋ ์
์ ๋ณ๋์ฌํญ์ด ์๊ธฐ๋ฉด
changeStream.on
์ฝ๋ฐฑํจ์ ์ฝ๋ ์คํ๋จ