Skip to content

zinirun/Tomorrow-ToDo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

5 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Tomorrow-ToDo

Dynamic Todolist (Node.js, SQL)

๊ฐ„๋‹จํ•œ To-Do List์—์„œ <๋‚ด์ผ ํ•  ์ผ>๊นŒ์ง€

์นœ๊ตฌ๊ฐ€ ์ž๋ฐ” ์„œ๋ธ”๋ฆฟ ๊ธฐ๋ฐ˜์˜ TodoList ์›น์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๋ณด๊ณ , MySQL๊ณผ NodeJS๋ฅผ ํ™œ์šฉํ•˜๋ฉด ์ƒˆ๋กœ๊ณ ์นจ ์—†๋Š” TodoList๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์•„์„œ ๋ฐ”๋กœ ์ง„ํ–‰์— ๋Œ์ž…ํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋…ธ๋“œ๋ฅผ ์™„๋ฒฝํžˆ ๊ณต๋ถ€ํ•˜์ง€ ์•Š๊ณ  ์ ‘๊ทผํ•˜๋‹ค ๋ณด๋‹ˆ ์ง„์ž…์žฅ๋ฒฝ์ด ๊ฝค ๋†’์•˜๋‹ค. ํ”„๋ก ํŠธ์—”๋“œ์™€ ๋ฐฑ์—”๋“œ์˜ ์ž์—ฐ์Šค๋Ÿฌ์šด ์—ฐ๊ฒฐ์ด ๊ด€๊ฑด์ด์—ˆ๋‹ค. ์ด๋ฒˆ TodoList์˜ ํ•ต์‹ฌ์€ "์ƒˆ๋กœ๊ณ ์นจ์€ ์—†์–ด์•ผ ํ•œ๋‹ค"์˜€๋‹ค.

๊ทธ๋ ‡๊ฒŒ ์ ๋‹นํ•œ ์ด๋ฆ„์„ ์ง“๊ณ  ์‹œ์ž‘ํ• ๊นŒ ํ•˜๋‹ค๊ฐ€ "๋‚ด์ผ ํ•  ์ผ"์ด๋ผ๋Š” ๋…ธ๋ž˜์˜ ์ œ๋ชฉ์ด ๋งˆ์Œ์— ๋“ค์—ˆ๊ณ  ๊ฐœ๋ฐœ์— ๋Œ์ž…ํ–ˆ๋‹ค.

๊ธฐ๋Šฅ ๊ตฌํ˜„

๊ธฐ๋ณธ์ ์ธ ๋™์ž‘

์ด์ œ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋Š” ๋™์ž‘์€ ํ• ์ผ ๋“ฑ๋ก์„ ํ†ตํ•ด ์ผ์„ ์ถ”๊ฐ€ํ•˜๋ฉด ์ฒซ๋ฒˆ์งธ "ํ•  ์ผ" ๋ฐ‘์— ์ƒˆ๋กœ๊ณ ์นจ ์—†์ด ์ถ”๊ฐ€๋˜๊ณ , ๊ฐ๊ฐ์˜ ํ•  ์ผ๋งˆ๋‹ค ์˜† ์นธ(ํ•˜๊ณ  ์žˆ๋Š” ์ผ, ํ•œ ์ผ)์œผ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ™”์‚ดํ‘œ๋ฅผ ์—ญ์‹œ๋‚˜ ์ƒˆ๋กœ๊ณ ์นจ ์—†์ด ์˜ฎ๊ธธ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด์—ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ ํ•œ ์ผ๋กœ ๋“ค์–ด๊ฐ€๋ฉด ํ•ด๋‹น ํ•  ์ผ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๊ณ  ์‹ถ์—ˆ๋‹ค.

์ •๋ฆฌํ•˜๋ฉด "์ผ ์ถ”๊ฐ€ํ•˜๊ธฐ", "ํ•œ ์ผ ์˜ฎ๊ธฐ๊ธฐ", "๋๋‚œ ์ผ ์‚ญ์ œํ•˜๊ธฐ"๋ฅผ ์ƒˆ๋กœ๊ณ ์นจ ์—†์ด ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ. ๊ทธ๋ฆฌ๊ณ  ์ด ๋ชจ๋“  ๊ฒƒ์€ SQL์˜ ๋ฐ์ดํ„ฐ์™€ ์—ฐ๋™ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

Database ์„ ํƒ

๋ชฝ๊ณ DB๋ฅผ ์‚ฌ์šฉํ• ์ง€ MySQL์„ ์‚ฌ์šฉํ• ์ง€ ๊ณ ๋ฏผํ•˜๋‹ค๊ฐ€ ๋น ๋ฅธ ์†๋„๋ณด๋‹ค๋Š” ์ €์žฅ๊ณผ view๊ฐ€ ์•ˆ์ •์ ์ธ(๋‚ด๊ฐ€ ๋ณด๊ธฐ์— ํŽธํ•œ) ๊ด€๊ณ„ํ˜• DB๊ฐ€ ๋‚˜์„ ๊ฒƒ ๊ฐ™์•„์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ MySQL์„ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.

Etc..

๊ตฌํ˜„ ์ค‘ ๊ฐ€์žฅ ์–ด๋ ค์› ๋˜ ๊ฒƒ์€ ์ผ์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋Œ€์ฒด ์–ด๋–ป๊ฒŒ ํ•  ์ผ์— ์ผ์ด ๋“ค์–ด๊ฐˆ ์ง€์˜€๋‹ค. appendChild ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ฐ๊ฐ์˜ node ๊ฐœ์ฒด์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๊ฐ€ ๋งค์šฐ ํž˜๋“ค์–ด์งˆ ๊ฒƒ ๊ฐ™๊ณ , css๋ฅผ ์ผ๊ด€๋˜๊ฒŒ ์„ค์ •ํ•˜๊ธฐ์—๋„ ๋ฌธ์ œ๊ฐ€ ๋งŽ์•˜๋‹ค. ํ•œ์ฐธ์˜ ๊ณ ๋ฏผ ๋์— Table์„ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. ejs์™€ table์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋‹ค์ด๋‚˜๋ฏนํ•œ ์›น์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์•˜๋‹ค.

ejs๋กœ ๋ Œ๋”๋งํ•˜๊ธฐ

ํ•  ์ผ ํŽ˜์ด์ง€์˜ Table ๋ถ€๋ถ„๋งŒ ๋ณด๋ฉด

<table>
                <% doneList.forEach(function(item, index){ %>
                <tr>
                    <td class="t_title" colspan="2"><%= item.title %></td>
                </tr>
                <tr>
                    <td class="t_detail">์ž‘์„ฑ <%= item.day %>, <%= item.who %>, <%= item.rank %>์ˆœ์œ„</td>
                    <td class="t_del" onclick="location.href = '/process/deltodo/<%= item.id %>'">
                        ร—
                    </td>
                </tr>
                <% }); %>
</table>

Node์—์„œ HTML๋กœ ejs๋ฅผ ๋ Œ๋”๋งํ•  ๋•Œ ๊ฐ๊ฐ์˜ todolist ๋ฐ์ดํ„ฐ๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ณด๋‚ด๊ณ , forEach ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐ๊ฐ ์˜ต์…˜(ํ•  ์ผ, ํ•œ ์ผ, ํ•˜๊ณ  ์žˆ๋Š” ์ผ)๋งˆ๋‹ค ์ผ์˜ ๊ฐœ์ˆ˜์— ๋งž๊ฒŒ ํ…Œ์ด๋ธ”์„ ์ •์˜ํ•˜๋ฉด ๋˜๋Š” ๊ฒƒ์ด์—ˆ๋‹ค.

MySQL์—์„œ mytodo DB๋ฅผ ๋งŒ๋“  ํ›„ todo์— ๋ฆด๋ ˆ์ด์…˜์„ ๋„ฃ๋Š”๋‹ค. ํ•œ ์ผ, ํ•  ์ผ์€ status ์ปฌ๋Ÿผ์˜ ์ˆซ์ž๋กœ ๊ตฌ๋ถ„ํ•˜๊ณ , ์ž‘์„ฑ์ผ์€ ๋…ธ๋“œ์—์„œ ์˜ค๋Š˜ ๋‚ ์งœ๋กœ sql์— ์‚ฝ์ž…ํ•œ๋‹ค.

After Making

๋‚ด์ผ ํ•  ์ผ ํŽ˜์ด์ง€๋ฅผ ์™„์„ฑํ–ˆ๊ณ  ๋ญ”๊ฐ€ ๋” ์™„์„ฑ๋„์žˆ๋Š” ํ”„๋กœ์ ํŠธ๋กœ ๋๋‚ด๊ณ  ์‹ถ์–ด์„œ ๋กœ๊ทธ์ธ์„ ํ†ตํ•ด ์„œ๋น„์Šค ํ•  ์ˆ˜๋„ ์žˆ๊ฒŒ ๋งŒ๋“ค์–ด๋ณด์•˜๋‹ค. ํšŒ์›๊ฐ€์ž…์€ ๊ทธ๋ƒฅ ๋ง‰ ์‹œํ‚ค๋ฉด ์•„์ด๋””๊ฐ€ ๊ผฌ์—ฌ๋ฒ„๋ ค ์—„์ฒญ๋‚œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒƒ์ด๊ณ , ๊ฒ€์ฆํ•˜๋Š” ํ•จ์ˆ˜๊ฐ€ ํ•„์š”ํ–ˆ๋‹ค.

//ํšŒ์›๊ฐ€์ž… ๊ฒ€์ฆ ํ•จ์ˆ˜
var checkReg = function (id, pw, pw2, name) {
    if (pw != pw2) {
        return '๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.';
    } else if (pw.length < 4) {
        return '๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ 4์ž ์ด์ƒ ์ž…๋ ฅํ•˜์„ธ์š”.';
    } else if (id.length < 4) {
        return '์•„์ด๋””๋ฅผ 4์ž ์ด์ƒ ์ž…๋ ฅํ•˜์„ธ์š”.';
    } else if (name.length < 2) {
        return '์ด๋ฆ„์„ 2์ž ์ด์ƒ ์ž…๋ ฅํ•˜์„ธ์š”.';
    }
 
    return 1;
}

์ด๋ ‡๊ฒŒ ๊ธฐ๋ณธ์ ์ธ ํšŒ์›๊ฐ€์ž…์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ฆํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋ผ์šฐํ„ฐ๋ฅผ ํ†ตํ•ด ๊ฑฐ์ณ๊ฐˆ ์ˆ˜ ์žˆ๊ฒŒ ์ž‘์„ฑํ–ˆ๊ณ , ์•„์ด๋”” ์ค‘๋ณต ํ™•์ธ์€ (์ด ๊ฒฝ์šฐ๊ฐ€ ๊ฐ€์žฅ ๊นŒ๋‹ค๋กœ์› ๋‹ค)

//ํšŒ์›๊ฐ€์ž… ๊ฒ€์ฆ ํ•จ์ˆ˜์—์„œ ํ†ต๊ณผ๋˜๋ฉด
//์•„์ด๋”” ์ค‘๋ณต ๊ฒ€์‚ฌ
            mySqlClient.query('select userid from user where userid = ?', [paramId], function (error, row) {
                if (row.length > 0) {
                    fs.readFile('./public/register.html', 'utf8', function (error, data) {
                        res.send(ejs.render(data, {
                            focus: 'userid',
                            reginfo: '์ค‘๋ณต๋œ ์•„์ด๋””์ž…๋‹ˆ๋‹ค.',
                            username: paramName,
                            userid: paramId,
                            regroute: paramReg
                        }));
                    });
                    return true;
                } else { ...

์ด๋ ‡๊ฒŒ userid์— ๋Œ€ํ•œ row๊ฐ€ 0๋ณด๋‹ค ํฌ๋ฉด ์ค‘๋ณต๋œ ์•„์ด๋””๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— row ๊ฐœ์ฒด์˜ ๊ธธ์ด๊ฐ€ 0๋ณด๋‹ค ํฌ์ง€ ์•Š์€ ๊ฒฝ์šฐ ํšŒ์›๊ฐ€์ž…์„ ์ง„ํ–‰ํ–ˆ๋‹ค. ์›๋ž˜ ์ด ์ฝ”๋“œ๋ฅผ ๊ฒ€์ฆ ํ•จ์ˆ˜์— ๋„ฃ๊ณ  ์‹ถ์—ˆ๋Š”๋ฐ ๋น„๋™๊ธฐ์‹์œผ๋กœ ์ฝ”๋“œ๊ฐ€ ๋„˜์–ด๊ฐ€๋‹ค ๋ณด๋‹ˆ ๊ณ„์† ๊ผฌ์—ฌ๋ฒ„๋ ค์„œ ํšŒ์›๊ฐ€์ž… ๋ผ์šฐํ„ฐ์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ๋ฐ–์— ์—†์—ˆ๋‹ค.

๊ทธ๋Ÿด๋“ฏํ•œ ํ•  ์ผ ๋ฉ”๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ "๋‚ด์ผ ํ•  ์ผ" ์ œ์ž‘์ด ๋๋‚ฌ๋‹ค.

About

๐Ÿ“Dynamic Todolist (Node.js, SQL)

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published