์๊ฐ์ ์ฒญ ์ฌ์ดํธ์
๋๋ค. ๋ก๊ทธ์ธ, ํ์๊ฐ์
๊ธฐ๋ฅ, ๊ฐ์๋ชฉ๋ก ํ์ ๋ฐ ๊ฒ์, ๊ด์ฌ๊ณผ๋ชฉ ๋ฑ๋ก ๋ฐ ์ญ์ , ์๊ฐ์ ์ฒญ ๋ฐ ์ ์ฒญ๋ชฉ๋ก ์ญ์ , ์๊ฐํ ๊ทธ๋ฆฌ๊ธฐ ๋ฑ ๊ธฐ๋ฅ์ด ์์ต๋๋ค.
์ด ๊ธฐ๊ฐ : 2023.03.27 (์) 15:00 ~ 2023.03.30 (๋ชฉ) 21:00
๊ธฐํ ๋ฐ ์ค๊ณ : 2023.03.27 (์) 15:00 ~ 2023.03.28 (ํ) ์๋ฒฝ
์ ์ : 2023.03.28 (ํ) ์๋ฒฝ ~ 2023.03.30 (๋ชฉ) 21:00
๋ฐํ : 2023.03.30 (๋ชฉ) 21:00 ~ 21:10
๋ชจ๋๊ฐ ์ผ๋จ๊ฒฐ์ Full-stack ๊ฐ๋ฐ
๊ฐ์ฌํ
- ์๊ฐํ ๋ก์ง ๊ตฌํ, JWTํ ํฐ, API๋ช ์ธ, DB์ค๊ณ๊น์ํธ
- ํ์๊ฐ์ , ๋ก๊ทธ์ธ, JWTํ ํฐ๊นํจํ
- ๊ฐ์๋ชฉ๋ก, ๊ฒ์๊ธฐ๋ฅ, ์ฌ์ด๋๋ฐ, JWTํ ํฐ์ ๋ฏผ์ฒ
- ๊ด์ฌ๊ฐ์, JWTํ ํฐ์์ ๋ฏผ
- ์ ์ฒญ๋ด์ญ, JWTํ ํฐ
*์์
์๊ฐ ๋ณ์ : [{'day' : '์์ผ',
'start_time' : '1400',
'end_time' : '1530'}]
draw_info : [{'class_name' : '๊ณผ๋ชฉ์ด๋ฆ',
'class_color' : '๊ณผ๋ชฉ์๊น',
'class_pos' : [111,112,113,114]
}]
db.user_list = {'user_name' : '์ด๋ฆ',
'user_id' : '์์ด๋',
'user_pw' : '๋น๋ฐ๋ฒํธ'}
db.user_info = {'user_id' = '์์ด๋',
'wishlist' : ['๊ณผ๋ชฉ์ฝ๋๋ค'],
'enrollment' : ['๊ณผ๋ชฉ์ฝ๋๋ค']}
data['result']['enrollment'] = ['STAT420', 'STAT520', 'COSE423]
db.class_list = {'class_name' : '์์
์ด๋ฆ',
'instructor' : '๊ฐ์ฌ ์ด๋ฆ',
'class_time : *์์
์๊ฐ๋ณ์,
'class_code' : '๊ณผ๋ชฉ์ฝ๋',
'class_max' : '์ต๋์๊ฐ์ธ์'
'class_now' : 'ํ์ฌ์ ์ฒญ์ธ์'}
- ํ์๊ฐ์ ๊ธฐ๋ฅ
- ๋ก๊ทธ์ธ ๊ธฐ๋ฅ
- ๋ก๊ทธ์ธ ์ธ์ฆ ๊ธฐ๋ฅ
- ๊ฐ์๋ชฉ๋ก ํธ์ถ ๊ธฐ๋ฅ
- ๊ฐ์๋ชฉ๋ก ๊ฒ์ ๊ธฐ๋ฅ
- ๊ด์ฌ๊ฐ์ ๋ด๊ธฐ ๊ธฐ๋ฅ
- ๊ด์ฌ๊ฐ์ ํธ์ถ ๊ธฐ๋ฅ
- ๊ด์ฌ๊ฐ์ ์ญ์ ๊ธฐ๋ฅ
- ์๊ฐ์ ์ฒญ ๊ธฐ๋ฅ
- ์ ์ฒญ๋ด์ญ ํธ์ถ ๊ธฐ๋ฅ
- ์ ์ฒญ๋ด์ญ ์ญ์ ๊ธฐ๋ฅ
- ์๊ฐํ ๊ทธ๋ฆฌ๊ธฐ ๊ธฐ๋ฅ
๊ฐ์ฌํ
-
ormData์ body์ ๋ฆฌ์คํธ๋ฅผ ํ์ธ ์ ์๋ ๋ฌธ์ ๋ฐ์
โ ๋ฐ๋ณต๋ฌธ์ผ๋ก ํด๊ฒฐ -
myclasspage์์ ํ ์๊ฒ๋์ค๋ ๋ฌธ์
โ ์๊ฐํ table์ ๋ด๊ณ ์๋ ํ๊ทธ์ css๊ฐ ๋๋ฝ๋์ด์์์ -
์๊ฐํ ํ๋ฒ ๋ ๋๋ฅด๋ฉด hide
โ table์ ๊ธฐ๋ณธ display๋ฅผ hide ํ, ๋ฒํผ์ ๋๋ฅด๋ฉด table์ display์ต์ ์ ๋ณ๊ฒฝ, button ์์ฒด์ onclick event์ innerHTML๋ ์์ ํ์ฌ ๋ฒํผ์ ๊ธฐ๋ฅ, ๋ชจ์์ ๋ฐ๊ฟ์ค - ๊ทธ๋ ค์ง ์๊ฐํ์์ ํ ๊ฐ์ ์์ boarder๋ฅผ ์ง์์ฃผ์ด ์ํ์ฒ๋ผ ๋ง๋ค๊ณ , ๊ฐ์๋ช
์จ์ฃผ๊ธฐ (๊ตฌ์กฐ๋ณ๊ฒฝํ์)
โ tableํ๊ทธ๋ ์ข์์ ์ฐ๋ก ๊ทธ๋ ค์ง๊ธฐ ๋๋ฌธ์ ์ด๋ ๊ฒ ์ ์ฉํ๋ ค๋ฉด ๋ง์ด ๋ณต์กํ๋ค. ์ ์ด์ ๊ธฐ๋ฅ ๊ตฌํ ์ ์ ์ค๊ณ๋ฅผ ์ ํด์ ๊ฐ ๊ตฌ์ญ์ div๋ก ์ก์์ผ๋ฉด ์ข์์ํ ๋ฐ...... ์ถํ ๋น์ทํ๊ฑธ ์งํํ๊ฒ ๋๋ฉด ์์ผ์์๋๋ก ๊ทธ๋ ค์ง๊ฒ ํ๊ณ , ๊ฐ ์์ผ์ div์ class๋ id๋ก ์ก์์ ํ๋ฉด ์ข์๊ฑฐ๊ฐ๋ค. -
API ๋ช ์ธ ๊ฐ์ ํ์
โ GET, POST ์์ฒญ๋ค์ด ์ด๋ค object๋ฅผ ์ฃผ๊ณ ๋ฐ๋์ง, ๊ฐ ํ๋๋ช ๊ณผ ๋ฐ์ดํฐ ํ์ ์ ๋ฌด์์ธ์ง ๋ช ์ํ์ฌ ๊ฐ์ ํจ
<ํ๊ธฐ>
์ฒซ ํ๋ก์ ํธ์ด์ github์ ์ฌ์ฉํ ์ฒซ ํ์
๊ฒฝํ์ด์๋๋ฐ, ์ฌ๋ฌ๋ช
์ด ๊ฐ์ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ณ ์ด๋ฅผ ํฉ์น ๋ ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ๋ฅผ
๋ง์ด ๊ฒฝํํ ์ ์์ด ์ข์๋ค. ํ๋ก์ ํธ ์ฃผ์ ์์ฒด๊ฐ ํฌ๋ง๊ณผ๋ชฉ ๋ด๊ธฐ, ์๊ฐ์ ์ฒญ, ์๊ฐํ ๊ทธ๋ฆฌ๊ธฐ ๋ฑ์ ๊ธฐ๋ฅ์ผ๋ก ๊ฐ๊ฐ์ ๊ธฐ๋ฅ ๊ฐ์
๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ผ์ด ๋ง์ ์ด๋ฌํ ๊ฒฝํ์ ํ๊ฒ๋ ๊ฒ ๊ฐ๋ค. ์ฌ๋ฐ๋ ๊ฒฝํ์ด์๋ค.
๊น์ํธ
-
๋ก๊ทธ์ธ ํ์ด์ง ๋ก๊ทธ์ธ๋ฒํผ /ํ์๊ฐ์ ๋ฒํผ ๋ง๋ค๊ธฐ
โ html์ ํ๊ทธ ๊ธฐ๋ฅ์ ์ดํดํ๊ณ onchlick๋ฒํผ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ํด๊ฒฐํ ์ ์์๋ค. -
ํ์๊ฐ์ ์๋ฃ ์ ๋ก๊ทธ์ธํ์ด์ง๋ก ์ด๋
โ window.location.reload() ๋ฅผ ์ฐธ๊ณ ํด์ ์ ๊ทผ
โ window.location.herf(โ/์ด๋ํ ํ์ด์งโ) ํด๋น ์ฝ๋๋ฅผ ํตํด ํด๊ฒฐํ ์ ์์๋ค.
โ ํ์๊ฐ์ ์ ๋ก๊ทธ์ธํ์ด์ง๋ก ์ด๋ํ๋ ๊ฐ๋ ๊ณผ if / else ์กฐ๊ฑด๋ฌธ์ ์ฐธ๊ณ ํ์ฌ ํด๊ฒฐ ํ ์ ์์๋ค. -
๋ก๊ทธ์ธ ์ฑ๊ณต์ ์๋ฆผ์ฐฝ ํ ๋ค์ํ์ด์ง๋ก ์ด๋/์คํจ์ ์๋ด์ฐฝ๊ณผ ํจ๊ป ๋ก๊ทธ์ธํ์ด์ง ๋จธ๋ฌด๋ฅด๊ธฐ
โ ํ์๊ฐ์ ์ ๋ก๊ทธ์ธํ์ด์ง๋ก ์ด๋ํ๋ ๊ฐ๋ ๊ณผ if / else ์กฐ๊ฑด๋ฌธ์ ์ฐธ๊ณ ํ์ฌ ํด๊ฒฐ ํ ์ ์์๋ค. - ๋ก๊ทธ์ธ ์ ํ ํฐ ๋ฐ์ ํ ์ฟ ํค๋ก ์ ์ฅ
โ ๋ฅ๋ ฅ ๋ถ์กฑ์ผ๋ก ์ธํด ๊ตฌํ ๋ชปํจ ๊ณต๋ถ๋ฅผ ๋ ํด์ผํ ํ์๊ฐ ์๋ค.
๊นํจํ
-
user_id์ class_list db๋ค๊ฐ์ ์ฐ๊ฒฐ โ $push ๋ก ํด๊ฒฐ
โ $push๋ก ํด๊ฒฐ - class_list ์์ฑ ์ถ๊ฐ
- ์ฌ์ด๋๋ฐ์ถ๊ฐ (ํ์ฌ classes ์๋ง ๋ค์ด๊ฐ์์) static์ css,js sidebar ์ธํฌํธ ํ์
- ์ฌ์ด๋๋ฐ์ ์๊ณ ์ถ๊ฐ์๋ฃ ์ฌ์ด๋๋ฐ ์ธํฌํธ ํ๋ฉด์ clock js,css ๋ ์ธํฌํธ ํ์
- ๋ก๊ทธ์ธ ํ์๊ฐ์ css์ถ๊ฐ
- ํ์๊ฐ์ ํผ ์กฐ๊ฑด์ ๋ฐ๋ฅธ ์๋ฌ๋ฌธ๊ตฌ ์ถ๊ฐ
์ ๋ฏผ์ฒ
-
classlist์์ ์๋ฃ๊ฐ ํธ์ถ๋์ง ์์
โ user_id๋ฅผ ์ ์ธํ์ฌ id ๊ธฐ์ค์ผ๋ก ์๋ฃ๋ฅผ ํธ์ถํ์ฌ ํด๊ฒฐ
โ list์๋ฃ๋ฅผ ํธ์ถํ์ฌ for๋ฌธ์ ์ฌ์ฉํ์ฌ ํด๊ฒฐ -
์๊ฐ์ ์ฒญ ๋ฒํผ์ด ์๋ํ์ง ์์
โ temp_html์ ${class_code}๋ก ํด๊ฒฐ
โ โ${class_code}โ์ โโ๋ก ๋ฌธ์๋ฅผ string๋ก ํด๊ฒฐ -
๊ด์ฌ๊ฐ์ ์ญ์ ๋ฒํผ์ด ์๋ํ์ง ์์
โ temp_html์ ${class_code}๋ก ํด๊ฒฐ
โ โ${class_code}โ์ โโ๋ก ๋ฌธ์๋ฅผ string๋ก ํด๊ฒฐ - ์ฒดํฌ๋ฐ์ค๋ฅผ ์ฒดํฌํด์ ์ ์ฒญ ๋ฐ ์ญ์
โ ์ถํ ์์ ์์ - ์ ์ฒญ๋ฆฌ์คํธ ์ค๋ณต์ฒดํฌ
โ ์ถํ ์์ ์์
<ํ๊ธฐ>
์ฒซ ํํ๋ก์ ํธ์๊ณ github, sourcetree๋ฅผ ์ฒ์ ์ฌ์ฉํ์ฌ ์ฐ๋ฆฌ๋ค์ ์๋ฃ๋ฅผ ํ๋๋ก ๋ชจ์์ ํ๋์ ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ค๋ ๊ฒ์ด ๋๋ฌด ๋ฟ๋ฏํ๊ณ ํฅ๋ฏธ๋ก์ ๋ค.
์๊ฐ์ด ๋ถ์กฑํ์ฌ ํ์ง ๋ชปํ ๊ธฐ๋ฅ๋ค์ผ ๊ฐ์ธ์ ์ผ๋ก ๋ค์ ํด๋ณด๊ณ ์ถ๊ณ , ์๋ก๊ฐ ์ํต์ ํ๋ฉด์ ํ๋์ ํ๋ก์ ํธ๋ฅผ ์งํํ๋๊ฒ์ด ์ฌ๋ฏธ์์๋ค.
์์ ๋ฏผ
-
enrollment ๋ฆฌ์คํธ์์ ๊ณผ๋ชฉ์ฝ๋๋ฅผ ์ถ์ถํ์ฌ ํด๋น ๊ณผ๋ชฉ์ ์์ธ์ ๋ณด๋ฅผ class_list ์ปฌ๋ ์ ์์ ๊ฐ์ ธ์ค๊ธฐ
โ enrollment๊ฐ ๋ฆฌ์คํธ์ฌ์ ๋ฐ์์์ ํ๊บผํ ๋ฒ๊ธฐ๊ณ for๋ฌธ์ ๋๋ ค ํด๊ฒฐ! -
myclasspage์์ ํ ์๊ฒ ๋์ค๋ ๋ถ๋ถ ํด๊ฒฐํ๊ธฐ
โ ์๊ฐํ ํ ์ด๋ธ์ ๋ด๊ณ ์๋ div์ css๊ฐ ๋๋ฝ๋จ. ๋๋ฝ๋ ๋ถ๋ถ ์์ ์ผ๋ก ํด๊ฒฐํจ -
์ฒดํฌ๋ฐ์ค๋ฅผ ์ด์ฉํ์ฌ ์ฌ๋ฌ ๊ฐ๋ฅผ ํ๊บผ๋ฒ์ ์ญ์ ํ๋ ๊ธฐ๋ฅ ๋ง๋ค๊ธฐ
โ ๋ฒํผ์ name ์์ฑ์ ๊ฐ์ ์ด๋ฆ์ผ๋ก ํด์ผ ํจ
โ ์ฒดํฌ ๋ ์ฒดํฌ๋ฐ์ค์ id๋ฅผ ๊ฐ์ ธ์์ each() ๋ฉ์๋๋ฅผ ์ด์ฉํด ๋ฆฌ์คํธ์ push()ํ์ฌ ๋๊น
โ ์ฒดํฌ ๋ ์ฒดํฌ๋ฐ์ค์ ์๋ฅผ ์นด์ดํธํ์ฌ ์ฒดํฌํ์ง ์์ ์ํฉ์ ๋ํ ์์ธ ์ฒ๋ฆฌ๋ฅผ ํจ
โ <app.py>์์ ๋ฐ์ ๋ด์ฉ์ด ๋ฆฌ์คํธ๊ฐ ์๋์ฌ์ ์ฝํ(,)๋ก split ํ๊ณ , ๋ค์ ๋ฆฌ์คํธ๋ก ๋ง๋ฌ
โ user id๋ก ๊ฐ์ ธ์จ ์๋ ๋ฆฌ์คํธ์ ์ฒดํฌ ๋ ๋ฆฌ์คํธ ์ฐ์ฐ(๋ฆฌ์คํธ ๋นผ๊ธฐ ์ฐ์ฐ ๊ฐ๋ฅ!)์ผ๋ก ์ ๋ฆฌ์คํธ๋ฅผ ์์ฑํ์ฌ DB๋ฅผ ์์ ํจ
โ ์ฐธ๊ณ ํ ๊ฒ์ mongoDB update๋ฅผ ํ ๋ ํญ๋ชฉ์ ๋ฆฌ์คํธ๋ก ๋ค์ด์์ผ๋ฉด ๋ฆฌ์คํธ๊ฐ ๊ทธ ์์ผ๋ก ๋ค์ด๊ฐ๋๊ฒ ์๋๊น? ์๊ฐํ๋๋ฐ ์๋ ใ _ใ
โ ['a', 'b', 'c', ...] ๊ฐ ['a', 'b', 'c', [new arr], ...] ์ด๋ ๊ฒ ๋ ๊น ํ๋๋ฐ ๊ทธ๋ ์ง ์๊ณ , ์ ์์ ๋จ
โ ์ค๋ผํด๊ณผ ๋ฌ๋ฆฌ mongoDB๋ ๋ฆฌ์คํธ๊ฐ ๋ฐ์ดํฐ๋ก ์ฝ์ ๋ ์ ์์. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ enrollment์ ๊ฐ์ฅ ์์ ๋จ์๊ฐ ๋ฆฌ์คํธ์.
โ ๋ฆฌ์คํธ ์์ ๋ด์ฉ๊น์ง ์ ๊ทผ ๋ชปํ๋ ๊ฒ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฆฌ์คํธ๊ฐ ๊ทธ ์์ผ๋ก ์ฝ์ ๋๋ ๊ฒ์ด ์๋๋ผ ๋ฆฌ์คํธ ์์ฒด๊ฐ ์ ์์ ๋์์ -
ํ css
โ ๋ถํธ์คํธ๋ฉ์ ์ด์ฉํด ํ ์ด๋ธ์ ์ฌํํ๊ฒ ๋์์ธ ํจ -
Auth ํจ์ return ๊ฐ์ ๋ชป ๋ฐ์์ค๋ ๋ฌธ์
โ Auth ํจ์ ๋ด์ ajax ์ต์ ์ async๊ฐ ์์๋๋ฐ ๋ฃ์ด์ฃผ๊ณ false๋ก ๊ฐ์ ์คฌ๋๋ ์ ๋ฐ์์ด
โ ์ฐธ๊ณ : https://recollectionis.tistory.com/167 - ์ฌ์ด๋๋ฐ ํ ๊ธ
โ ์ถํ ์์ ์์
http://sugangpage.eba-iyefhen2.ap-northeast-2.elasticbeanstalk.com/