728x90
๋ฐ์ํ
๐ก ์ค์ต ํฌ์ธํธ!
- ์ฑํ ๊ธฐ๋ฅ์ ๋ณธ๊ฒฉ์ ์ผ๋ก ๋ง๋ค๊ธฐ ์ ์, ๋๊ธ ๊ธฐ๋ฅ๋ถํฐ ์ถ๊ฐํด๋ณด์๋ค.
- ์ฌ์ค ๋๊ธ๊ณผ ์ฑํ ์ ์ ์ฌํ๋ค๊ณ ๋ ์๊ฐํด๋ณธ ์ ์ด ์์๋๋ฐ, ์ค์๊ฐ ์ํต์ด ๊ฐ๋ฅํ๋ฉด ๊ทธ๊ฒ ๋ฐ๋ก ์ฑํ ๊ธฐ๋ฅ์ด ๋๋ ๊ฒ์์ ์์ ์ ํตํด ์ ์ ์์๋ค.
- ๋ค๋ง, ์์ง ์ฝ๋ ์์ ์ด ํ์ํ ๋ถ๋ถ์ด ๋ง์, ์ผ๋ถ๋ง ๋ธ๋ก๊ทธ๊ธ๋ก ๊ฒ์ฌํ๋ค.
๐ ์ฑํ ๊ธฐ๋ฅ ๋ง๋ค๊ธฐ ์ ์
๐ค ๋๊ธ ๊ธฐ๋ฅ ๊ตฌ์ํด๋ณด๊ธฐ
- ๊ฒ์๋ฌผ์ ๋๊ธ์ ์ถ๊ฐํ๊ณ ์ถ๋ค๋ฉด ๋๊ธ ๋ฐํ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ฉด ๋๋ค.
- ๋ฐ๋ผ์, DB ์ ๋๊ธ์ ์ ์ฅํ collection ์ ์์ฑํด๋๊ณ , ์น ๋ธ๋ผ์ฐ์ ์์ POST ์์ฒญ์ ํ๋ฉด ํด๋นํ๋ collection ์ ์ ์ฅํด์ค๋ค.
- ์ด ๋, ์ ์ํ ์ ์ ์ด๋ ๊ฒ์๋ฌผ์ ๋จ ๋๊ธ์ธ์ง ๊ตฌ๋ณ์ด ๊ฐ๋ฅํด์ผ ํ๋ค๋ ๊ฒ์ด๋ค.
- ๋ฐ๋ผ์ ๋๊ธ์ ์ ์ฅํ ๋ ๋ถ๋ชจ ๊ฒ์๋ฌผ์ ์ ๋ณด๋ ๊ฐ์ด ์ ์ฅํด์, ์ถํ ๋๊ธ collection ์์ ๋๊ธ์ ๋ถ๋ฌ์ฌ ๋ ๋ถ๋ชจ ๊ฒ์๋ฌผ์ ํน์ ํด์ ๋ถ๋ฌ์ฌ ์ ์๊ฒ ํด์ฃผ์๋ค.
๐ค ์ฑํ ๊ธฐ๋ฅ์ผ๋ก ์๊ฐ ์ ํํด๋ณด๊ธฐ
- ๋๊ธ์ด๋ ์ฑํ ์ด๋ ์ฐ์ ์ด๋ค ๊ฒ์๋ฌผ ํน์ ์ด๋ค ์ฑํ ๋ฐฉ(์ฑํ ์๋)์ ๊ณจ๋ผ์ผ ํ๋ค.
- ๊ทธ๋ฆฌ๊ณ ํด๋น ๊ฒ์๋ฌผ, ์ฑํ ๋ฐฉ์ ํด๋ฆญํ์ ๋, ๋๊ธ ํน์ ์ฑํ ํ ๋ด์ฉ์ด ์ญ ๋์์ผ ํ๋ค.
- ๋ค๋ง, ๋ค๋ฅธ ๋ถ๋ถ์ด๋ผ๋ฉด ์ฑํ ์ ๊ฒฝ์ฐ ์๋ก๊ณ ์นจ ์์ด ์ค์๊ฐ์ผ๋ก ์ด๋ฃจ์ด์ง๋ฏ๋ก ์ด์ ๊ฑธ๋ง๋ ์ค์๊ฐ ์ ๋ฐ์ดํธ ๊ธฐ๋ฅ์ด ํ์ํ๋ค๋ ๊ฒ์ด๋ค.
๐ ์ฑํ ๋ฐฉ ๋ง๋ค๊ธฐ ์ ์ ํ ๋ฐ ๊ฐ์ด๋ ํ์ธ
๐ค ์ฌ์ฉ์ ๊ณ์ ์์ฑํ๊ธฐ
- ์ฑํ ๋ฐฉ ๊ธฐ๋ฅ์ ๋ง๋ค๊ธฐ ์ ์, ์๋ฎฌ๋ ์ด์ ์ ์ํด ๋ค์ํ ์ฌ์ฉ์ ๊ณ์ ์ ์์ฑํ์ฌ ๊ฐ ๊ณ์ ๋ค๋ก ๋ก๊ทธ์ธํ์ฌ ๊ฒ์๋ฌผ์ ๊ฒ์ฌํด๋์๋ค.
- ํ์ค์ ์๋ฒฝํ๊ฒ ๋ฐ์ํ ๊ณ์ ๊ณผ ํจ๊ป ํ ์ผ๋ค์ ๋ง๋ค์ด์ฃผ์๋ค.
- ๋ง์ง ๋ธ๋ก๊ทธ ๋งํฌ๋ฅผ ๋ณด๋ด๋ฉด์ ๋ง์ง ํฌ์ดํ์๊ณ ์กฐ๋ฅด๋ suin (suin - ๋์ ๋ง์ง ํฌ์ด)
- ์๋๋ค๊ณ ํ๋ฉด์ ๋ค ํด๊ฒฐํด์ฃผ๋ ์ถฉ๋จ ๋ด๋น ๊ฐ๋ฐ์ myeongsik (myeongsik - ์ถฉ๋จ ์์ฒญ ์ฒ๋ฆฌ)
- ๋ค์ง๊ณ ์ง ์นํฐ ์ถ์ฒํด์ค ๋ํ์ ๋ ๋ง๋ 12๋ ์ฐจ ๋ถ์ฐ ์น๊ตฌ huigyeong (huigyeong - ์นํฐ ์ ์ฃผํ)
๐ค ํ ์ผ๋ฆฌ์คํธ ํ์ด์ง ๋ด ๊ฒ์๋ฌผ์ ์ฑํ ํ๊ธฐ ๋ฒํผ์ ๋๋ฅด๋ฉด ์ฑํ ๋ฐฉ ๊ฐ์คํ๊ธฐ
- ํ ์ผ๋ฆฌ์คํธ ํ์ด์ง ๋ด ๊ฒ์๋ฌผ์ ์ฑํ ํ๊ธฐ ๋ฒํผ์ ๋๋ฅด๋ฉด ์ฑํ ๋ฐฉ์ด ๊ฐ์ค๋์ด์ผ ํ๋ค.
- ํด๋น ๊ธฐ๋ฅ์ ์๋์ ๊ฐ์ด๋์ ๋ฐ๋ผ ์งํํด๋ณด์๋ค.
- ํ ์ผ๋ฆฌ์คํธ ํ์ด์ง์ ์๋ ๊ฐ๊ฐ์ ๊ฒ์๋ฌผ ์์ '์ฑํ ํ๊ธฐ' ๋ฒํผ์ ๋ง๋ ๋ค.
- '์ฑํ ํ๊ธฐ' ๋ฒํผ์ ๋๋ฅด๋ฉด ์ฑํ ๋ฐฉ ๊ฒ์๋ฌผ์ด ์์ฑ๋์ด DB ์ ์ ์ฅ๋๋ค. (chatroom collection ์ ์ ์ฅ!)
- ๊ฐ ์ฑํ ๋ฐฉ ๊ฒ์๋ฌผ์ document ์ ๋ค์ด๊ฐ ์ ๋ณด๋ ๋ค์๊ณผ ๊ฐ๋ค.
{
member : [์ฑํ
์์ฒญ๋ฐ์ ์ฌ์ฉ์์ _id, ์ฑํ
์์ฒญํ ์ฌ์ฉ์์ _id],
date : ํ์ฌ ๋ ์ง,
title : ์ฑํ
๋ฐฉ์ด๋ฆ
}
- ์์ ๊ฐ์ ๊ฐ์ด๋์ ๋ฐ๋ผ ์ฝ๋๋ฅผ ์์ฑํ ๋ค์, ๋ธ๋ผ์ฐ์ ์์ ๋ก๊ทธ์ธํ ํ์ ๋ฆฌ์คํธ ํ์ด์ง ๋ด ๊ฒ์๋ฌผ์ ์ฑํ ํ๊ธฐ ๋ฒํผ์ ๋๋ ์ ๋ chatroom collection ์ ๊ฒ์๋ฌผ ํ๋๊ฐ ์์ฑ๋๋ฉด ๋!
๐ค ์ฌ์ฉ์๊ฐ /chat ๊ฒฝ๋ก๋ก GET ์์ฒญ์ ํ๋ฉด ์ฑํ ๋ฆฌ์คํธ ํ์ด์ง ๋ณด์ฌ์ฃผ๊ธฐ
- ์ฌ์ฉ์๊ฐ /chat ๊ฒฝ๋ก๋ก GET ์์ฒญ์ ํ๋ฉด ์ฑํ ๋ฆฌ์คํธ ํ์ด์ง๋ฅผ ๋ณด์ฌ์ฃผ๊ณ , ๊ทธ ์ฑํ ๋ฆฌ์คํธ ํ์ด์ง์๋ ๋ก๊ทธ์ธํ ์ฌ์ฉ์๊ฐ ์ํด์๋ ์ฑํ ๋ฐฉ ๊ฒ์๋ฌผ์ด ๋ณด์ฌ์ผ ํ๋ค.
- ํด๋น ๊ธฐ๋ฅ์ ์๋์ ๊ฐ์ด๋์ ๋ฐ๋ผ ์งํํด๋ณด์๋ค.
- ๋๊ตฐ๊ฐ๊ฐ /chat ๊ฒฝ๋ก๋ก GET ์์ฒญ์ ํ๋ฉด ์ฑํ ๋ฆฌ์คํธ ํ์ผ์ ๋ธ๋ผ์ฐ์ ๋ก ๋ณด๋ด์ค๋ค.
- ์ด ๋, chatroom collection ์์ ์ง๊ธ ๋ก๊ทธ์ธํ ์ฌ์ฉ์์ _id ๊ฐ ๋ค์ด์๋ ์ฑํ ๋ฐฉ ๊ฒ์๋ฌผ๋ค์ ์ฐพ๋๋ค.
- ์ฐพ์ ๊ฒ์๋ฌผ๋ค์ ์ฑํ ๋ฆฌ์คํธ ํ์ผ์ ์ ์ฉํด์ค๋ค.
๐ ํ ์ผ๋ฆฌ์คํธ ํ์ด์ง์ ์๋ ๊ฐ๊ฐ์ ๊ฒ์๋ฌผ ์์ '์ฑํ ํ๊ธฐ' ๋ฒํผ์ ๋ง๋ ๋ค.
<a style="color: white; text-decoration: none;" href="/chat">
<button class="btn chat" style="background: gold;"
data-writer="<%= post[i].์์ฑ์ %>"
data-num="<%= post[i]._id %>"
data-todo="<%= post[i].ํ ์ผ %>"
>์ฑํ
ํ๊ธฐ</button>
</a>
- ํ ์ผ๋ฆฌ์คํธ EJS ํ์ผ์ ์์ฑ์, ๊ธ๋ฒํธ, ํ ์ผ ์ ๋ณด๊ฐ ์จ๊ฒจ์ง ์ฑํ
ํ๊ธฐ ๋ฒํผ์ ์ถ๊ฐํด์ฃผ์๋ค.
(๊ฐ์์์๋ ์์ฑ์ ๋ถ๋ถ๋ง ๊ฐ์ ธ์๋๋ฐ, ๋๋ ๋ง๋ค๋ค๊ฐ ๋ค๋ฅธ ์ ๋ณด๋ ๊ฐ์ ธ์ค๋ฉด ์ข์ ๊ฒ ๊ฐ์์ ์ถ๊ฐํ ๊ฒ์ด๋ฏ๋ก ๊ธฐํธ์ ๋ฐ๋ผ ํ์ํ ์ ๋ณด๋ง ์จ๊ฒจ์ ๊ฐ์ ธ์ค๋ฉด ๋๋ค.)
- ์๋๋ '์ฑํ ํ๊ธฐ' ๋ฒํผ์ ๋๋ฅด๋ฉด ์ฑํ ๋ฐฉ๋ง ๊ฐ์คํ๋ ๊ฒ์ด ๋ชฉํ์๋๋ฐ, ์ฑํ ๋ฐฉ๋ง ๊ฐ์ค๋๊ณ ๋ง์ ์ฑํ ๋ฐฉ์ผ๋ก ์ด๋ํ์ง ์๋ ๊ฒ์ด ๋ถํธํด์, ์ดํ์ a ํ๊ทธ๋ก /chat ๊ฒฝ๋ก๋ฅผ ์ฐ๊ฒฐํด์ฃผ์๋ค.
- ์ด ๋, ์ฃผ์ํด์ผ ํ ์ ์ button ํ๊ทธ์ a ํ๊ทธ์ ์ข
์๊ด๊ณ์ด๋ค.
(๋ฐ์ดํฐ ์ ์ก์ด ์ ๋๋ก ์ ๋๋ ์์ธ์ด ์ด๊ฑฐ์ธ ์ค ๋ชฐ๋ผ์ ํ์ฐธ์ ํค๋งธ๋ค...ใ )- button ํ๊ทธ ์์ a ํ๊ทธ๊ฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ์๋ ์๋ฒฝํ๊ฒ ์์ญ์ด ๊ฒน์น์ง ์๊ณ ์์ญ ํฌ๊ธฐ์ ์ฐจ์ด๊ฐ ๋ฐ์ํ๋ค.
- ์ฆ, a ํ๊ทธ์ ์์ญ์ด button ํ๊ทธ์ ์์ญ์ ํฌํจ๋์ด ์๊ธฐ ๋๋ฌธ์ ์ ํํ๊ฒ a ํ๊ทธ์ ์์ญ์ ํด๋ฆญํ์ง ์์ผ๋ฉด ์ฑํ ๋ฆฌ์คํธ ํ์ด์ง๋ก ์ด๋ํ์ง ์๋๋ค.
- ๊ทธ๋ฆฌ๊ณ a ํ๊ทธ๋ฅผ ํด๋ฆญํด์ ์ฑํ ๋ฆฌ์คํธ ํ์ด์ง๋ก ๋ง์ ์ด๋์ ํ์ ๋๋ button ํ๊ทธ๋ฅผ ํด๋ฆญํ ๊ฑธ๋ก ์ธ์์ด ๋์ง ์์, button ํ๊ทธ์ ์ ๋ณด๊ฐ DB ๋ก ์ ์์ ์ผ๋ก ์ ์ก์ด ๋์ง ์์๋ค.
- ๊ทธ๋์ a ํ๊ทธ์ button ํ๊ทธ์ ์์น๋ฅผ ๋ฐ๊พธ์ด a ํ๊ทธ ์์ button ํ๊ทธ๋ฅผ ๋ฃ์ด์ฃผ์๋๋ ์์ญ ํฌ๊ธฐ๋ ์ผ์นํ๊ณ ๋ ๊ธฐ๋ฅ ๋ชจ๋ ์ ์์ ์ผ๋ก ์๋ํ๋ค. (์ ํํ ์์ธ ๋ถ์์ ๊ตฌ๊ธ๋ง์ ํด๋ด์ผ ํ ๊ฒ ๊ฐ๋ค.)
๐ '์ฑํ ํ๊ธฐ' ๋ฒํผ์ ๋๋ฅด๋ฉด ์ฑํ ๋ฐฉ ๊ฒ์๋ฌผ์ด ์์ฑ๋์ด DB ์ ์ ์ฅ๋๊ณ , DB ์์ ์ฑํ ๋ฆฌ์คํธ ํ์ด์ง๋ก ์ฑํ ๋ฐฉ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์จ๋ค.
$('.chat').click(function(e){
let writer = e.target.dataset.writer;
let num = e.target.dataset.num;
let todo = e.target.dataset.todo;
$.post('/chatroom', {์์ฑ์ : writer, ๊ธ๋ฒํธ : num, ํ ์ผ : todo}).then(()=>{
console.log('์ฑ๊ณตํ์ต๋๋ค.');
})
})
- '์ฑํ ํ๊ธฐ' ๋ฒํผ์ ์จ๊ฒจ๋จ๋ ๋ฐ์ดํฐ๋ค์ '์ฑํ ํ๊ธฐ' ๋ฒํผ์ ๋๋ฌ /chatroom ๊ฒฝ๋ก๋ก POST ์์ฒญ์ ํ ๋ ๊ฐ์ฒด์ ํํ๋ก ์ ์กํด์ฃผ์๋ค.
const {ObjectId} = require('mongodb');
app.post('/chatroom', doLogin, function(req, res){
let saveData = {
post : parseInt(req.body.๊ธ๋ฒํธ),
title : req.body.ํ ์ผ,
members : [ObjectId(req.body.์์ฑ์), req.user._id], // ๊ธ์์ฑ์์ ์ฑํ
์์ฒญ์
date : new Date() // ํ์ฌ ๋ ์ง
}
db.collection('chatroom').insertOne(saveData).then(()=>{
res.send('์ฑํ
๋ฐฉ ๊ฐ์ค ์๋ฃ')
})
})
- ๊ทธ๋ฌ๋ฉด POST ์์ฒญ์ ํ ๋๋ง๋ค JavaScript ํ์ผ์์ ๋ฐ์ดํฐ๋ค์ ๋ฐ์, chatroom collection ์ document ๋ก ์ ์ฅํ๋ค.
- ๊ฐ์ด๋์์ ์๊ตฌํ๋ document ์์์์ ๋ด๊ฐ ํ์๋ก ํ๋ ๋ถ๋ถ๋ค์ ์กฐ๊ธ ์ถ๊ฐํด์ ์์ฑํ๋ค.
app.get('/chat', doLogin, function(req, res){
db.collection('chatroom').find({members : req.user._id}).toArray().then((result)=>{
res.render('chat.ejs', {data : result})
})
})
- ์ด์ /chat ๊ฒฝ๋ก๋ก GET ์์ฒญ์ ํ๋ฉด chatroom collection ์ ์ ์ฅ๋์ด์๋ document ๋ค์ result ๋ก ๋ฐ์์์ data ๋ผ๋ ๋ณ์์ ๋ด๊ฒจ ์๋์ ์ฑํ ๋ฆฌ์คํธ EJS ํ์ผ์ ์ ์ฉ๋์ด ๋ ๋๋ง๋๋ค.
<h4 class="container mt-5 mb-4"><strong>์ฑํ
๋ฆฌ์คํธ</strong></h4>
<div class="container">
<div class="row">
<div class="col-3">
<ul class="list-group chat-list">
<% for (var i=0; i < data.length ; i++){ %>
<li class="list-group-item" data-id="<%= data[i]._id %>" data-writer="<%= data[i].members[0] %>">
<h6>๊ธ๋ฒํธ : <%= data[i].post %> </h6>
<h6>์ฑํ
๋ฐฉ : <%= data[i].title %> </h6>
<h6 class="text-small"> <%= data[i].members[0] %> </h6>
</li>
<% } %>
</ul>
</div>
<div class="col-9">
<div class="chat-room">
<ul class="list-group chat-content">
</ul>
</div>
<div class="input-group">
<input class="form-control" id="chat-input">
<button class="btn btn-secondary" id="send">์ ์ก</button>
</div>
</div>
</div>
</div>
728x90
๋ฐ์ํ
'[๊ฐ๋ฐ] Practice > Node.js MongoDB' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Node.js / MongoDB] ์ด๋ฏธ์ง ์ ๋ก๋ & ์ด๋ฏธ์ง ์๋ฒ ๋ง๋ค๊ธฐ (0) | 2022.03.16 |
---|---|
[Node.js / MongoDB] ํ์ ๊ธฐ๋ฅ์ ํฌํจํ ๊ฒ์ํ ๊ธฐ๋ฅ ๋ง๋ค๊ธฐ (0) | 2022.03.15 |
[Node.js / MongoDB] ๊ฒ์ ๊ธฐ๋ฅ ๋ง๋ค๊ธฐ (1) | 2022.03.14 |
[Node.js / MongoDB] ํ์์ธ์ฆ๊ธฐ๋ฅ ๋ง๋ค๊ธฐ (0) | 2022.03.14 |
[Node.js / MongoDB] ๊ธ ์์ ๊ธฐ๋ฅ ๋ง๋ค๊ธฐ (0) | 2022.03.12 |