- manage.py๊ฐ ์์นํ ํด๋(
./app
)์googleAccount.txt
์ถ๊ฐ (์นดํก๋ฐฉ์ ์ฌ๋ ค๋๋ฆด๊ฒ์) - docker-compose.yml์ด ์์นํ ํด๋(
.
)์์:
- ๊ฐ๋ฐ ํ๊ฒฝ์ด๋ผ๋ฉด
./udco up
- ๋ฐฐํฌ ํ๊ฒฝ์ด๋ผ๋ฉด
./udco -f docker-compose.yml -f docker-compose.prod.yml up
- ์๋์ ์ ํ์๋ URL ์ฌ์ฉ๋ฐฉ๋ฒ๋๋ก ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.
์ค๋ ์์ ํ ๋ด์ฉ์ ์๋์ ๊ฐ์ต๋๋ค.
1. ๋๋๊ทธ๋ฐ์ค๊ฐ ์๋ณด์ด๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.
2. ์ฌ์ด๋๋ฐ ์ถ์์ ๋ก๊ณ ํฌ๊ธฐ๊ฐ ์ปค์ง๋ ์ค๋ฅ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.
์ค๋ ์์ ํ ๋ด์ฉ์ ์๋์ ๊ฐ์ต๋๋ค.
1. ํ๋กํ์ ํ์ธํ ์ ์์๋ ์ค๋ฅ ์์ - ๋ฆฌ์กํธ ์ฝ๋๋ฅผ ์ ๋ฆฌํ๋ค๊ฐ ์๊ธด ์ค๋ฅ์์ต๋๋ค.
2. fetch ๊ตฌ๋ฌธ์ axios ๊ตฌ๋ฌธ์ผ๋ก ๋ณ๊ฒฝ - ์ฝ๋์ ํต์ผ์ฑ๊ณผ ๋ธ๋ผ์ฐ์ ํธํ์ฑ์ ์ํด ๋ช๋ช fetch ๊ตฌ๋ฌธ์ axios ๊ตฌ๋ฌธ์ผ๋ก ๋ฐ๊ฟจ์ต๋๋ค.
์ค๋ ์์ ํ ๋ด์ฉ์ ์๋์ ๊ฐ์ต๋๋ค.
1. ํ๋กํ ์ปจํ
ํธ ์คํฌ๋กค์๋
2. ํ์๊ฐ์
์ฐฝ ์คํฌ๋กค ๋ฐฐ๊ฒฝ์ ๋ณ๊ฒฝ
3. ์ปจํ
ํธ ์ ๋ชฉ ์ฌ์ด์ฆ ์์
4. ํ์ปจํ
์ธ input ์ค๋ฅ์์
5. ์
๋ก๋ ์ด๋ ๊ฒฝ๋ก์ค์ modal ๋ฒํผ๋ค ๋ค๋ฅธ modal๊ณผ ๊ฐ๊ฒ ํต์ผ
6. ํ๋กํ ์ปจํ
ํธ input ํต์ผ
7. ๋ชจ๋ฌ ์ฐ์ธก ์๋จ xํ์ ์ญ์
8. ๊ฒ์์ฐฝ ์ฌ์ด์ฆ,์์น ์กฐ์
9. ํ์ผ.ํด๋ ์ด๋ฆ๋ณ๊ฒฝ์ input ์์
10. ์ด๋ ํด๋ฆญ์ x์ถ ์คํฌ๋กค ์์ ๊ธฐ
11. ๊ธธ์ด๊ฐ ๋๋ฌด ๊ธด modal๋ค ๊ธธ์ด ์กฐ์
ํด์ผํ ๋ด์ฉ์ ์๋์ ๊ฐ์ต๋๋ค.
1. ๋๋๊ทธ ๋ฐ์ค ๋ณด์ด๊ธฐ(css๋ก ๋ณด์ด๊ฒ ํ๋ คํ์ผ๋ ์๋์ํจ)
2. ์ด๋ ์์ผ๋ฉด ์์์๋๋ก ์ฒ๋ฆฌ(ex) ์ด๋์์ด์ฝ ๋ณ๊ฒฝ, ์ด๋๋ฉ์์ง ์ด๋ ค์ ์๋ ์ํ๋ก ์์)
์ค๋ ์์ ํ ๋ด์ฉ์ ์๋์ ๊ฐ์ต๋๋ค.
1. React ํ ๊ด๋ จ ์ฝ๋๋ค์ ์ ๋ฆฌํ์ต๋๋ค.
2. ํ ๊ธฐ๋ฅ๊ณผ ๊ด๋ จํ ๊ธฐ๋ฅ๋ค์ ์ค๋ฅ๋ฅผ ์์ ํ์ต๋๋ค.
์ค๋ ์์ ํ ๋ด์ฉ์ ์๋์ ๊ฐ์ต๋๋ค.
1. ๊ณต์ ์ค์ ํ ํด๋๋ฅผ ๋ค๋ฅธ ์ฌ์ฉ์๊ฐ ์ฆ๊ฒจ์ฐพ๊ธฐ ์ค์ ํ์ ๋, ์๋ ์์ ์์ ํ์ผ ๋ธ๋ผ์ฐ์ ์์ ์ฆ๊ฒจ์ฐพ๊ธฐ ํ์๋๋ ํ์์ ์์ ํ์ต๋๋ค.
2. ๋ฆฌ์กํธ ์ฝ๋๋ฅผ ์ ๋ฆฌํ์ต๋๋ค.
1. Main ํด๋์ content๋ค์ Contents ํด๋์ ๋ฌถ์ด์ ๊ด๋ฆฌํ๋๋ก ๋ณ๊ฒฝ.
2. MainFileBrowser.js์ ์๋ modal๋ค ์ ๋ถ modal ํด๋์ ์ ๋ฆฌํจ.
3. ํด์งํต์ ์๋ ํ์ผ ์ธ๋ค์ผ ์๋ณด์ด๋ ๋ฌธ์ -> perm_check_entry_with_teams์์ ํด์งํต ์์ ์๋ ํ์ผ๋ค์ ๋ํด false๋ฅผ ๋ฆฌํดํด์ ๋ฐ์.
-> perm_check_entry_with_teams์ is_thumbnail_check=False ํ๋ผ๋ฏธํฐ๋ฅผ ์ค์ ํ๊ณ ,
thumbnailAPI์์ perm_check_entry_with_teams๋ฅผ ์ฌ์ฉํ ๋ True ์ฒดํฌํ๊ฒ ํ์ฌ
์ธ๋ค์ผ ์ ๋ณด๋ฅผ ์ป์ ๋๋ ํด์งํต์ ์๋์ง ์ฌ๋ถ๋ฅผ ๋ฐ์ง์ง ์๋๋ก ์ค์ ํ์ต๋๋ค.
4. ์ธํฐ๋ท ํญ์ ํ์๋๋ favicon์ ๋ญ๊ฒ๋๋ผ์ด๋ธ ์์ด์ฝ์ผ๋ก ์์ ํ์ต๋๋ค.
์ค๋ ์์ ํ ๋ด์ฉ์ ์๋์ ๊ฐ์ต๋๋ค.
1. ํ๋ณ ๊ณต์ ํด๋ ๋ชฉ๋ก์ ๋ณด์ฌ์ฃผ๋ ํ๋ฉด์์, ๊ณต์ ํด๋์ ์์ ์ ์ด๋ฆ์ ๋ณด์ฌ์ฃผ๋๋ก ์ค์ ํ์ต๋๋ค.
2. ์
๋ก๋ ์ฐฝ์์ ์
๋ก๋ ์๋ ๋ฐ ๋จ์ ์๊ฐ, ์งํ๋๋ฅผ ๋ณด์ฌ์ฃผ๋๋ก ๋ณ๊ฒฝํ์ต๋๋ค.
3. ํด์งํต์ ๋น์ฐ๋ ์์
์์ RecycleEntry๋ฅผ ์ญ์ ํ ๋ ์ฐ๊ฒฐ๋ DirectoryEntry๊ฐ ๊ฐ์ด ์ญ์ ๋์ง ์๋ ํ์์ ๋ฐ๊ฒฌํ์ต๋๋ค. post_delete ์๊ทธ๋์ ํตํด
์ ๊ฑฐํด์ฃผ๋ ค ํ์์ผ๋ recover์์ RecycleEntry๋ฅผ ์ง์ฐ๋ ๊ณผ์ ์์ ์๋ณธ ํ์ผ๋ ๊ฐ์ด ์ฌ๋ผ์ง๋ ํ์์ด ๋ฐ์ํ์ฌ ํด์งํต ๋น์ฐ๋ ์์
์์ ์ง์
์๋์ผ๋ก ์ฐ๊ฒฐ๋ directoryEntry ๋ชจ๋ธ ์ญ์ ํด์ฃผ๋๋ก ๋ณ๊ฒฝํ์ต๋๋ค.
4. ์์
๋ก๊ทธ์ธ์ ์๋ํ ๋ ์ด๋ฏธ ํด๋น ์ด๋ฉ์ผ๋ก ๊ฐ์
ํ ์ฌ์ฉ์๊ฐ ์์ ๊ฒฝ์ฐ, ๋ก๊ทธ์ธ ๋ชปํ๋๋ก ์์ ํ์ต๋๋ค. ์ถํ์ ์ฐ๋ ์ฌ๋ถ๋ฅผ ํ์ธํ๊ณ ๋์ํ์ ๊ฒฝ์ฐ ๋ ์์ด๋๋ฅผ ์ฐ๋ํ๋๋ก ๋ฐ๊ฟ ์์ ์
๋๋ค.
๋ง๋ค์ด์ง ๋ก๊ณ ๋ฅผ ์ฝ์ ํ๋ ์์ ์ ํด์ผํฉ๋๋ค.
์ค๋ ์์ ํ ๋ด์ฉ์ ์๋์ ๊ฐ์ต๋๋ค.
1. ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ด๋ฏธ์ง๊ฐ modal ๋ฐ์ผ๋ก ํ์ด๋๊ฐ๋ ํ์์ ์ํ์ต๋๋ค.
2. ๋ฉ์ผ ์ธ์ฆ ํ์ธ ํ์ด์ง๊ฐ ์ ๋ ฌ๋์ด์์ง ์์ ํ์์ ์์ ํ์ต๋๋ค.
3. ๋ชจ๋ ๋ก๋ฉ ์คํผ๋๋ฅผ ์ฌ์ฉํ๋ fetch ํน์ axios ๋ฌธ์์ ์๋ฌ ๋ฐ์์ ๋ก๋ฉ ์ํ๊ฐ ํด์ ๋๋๋ก ๋ณ๊ฒฝํ์ต๋๋ค.
4. ๊ณต์ ํด๋์ ์๋ ํ์ผ๋ค ์ค ๋ค๋ฅธ ์ฌ์ฉ์๊ฐ ์ ์ฅํ ํ์ผ์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ, ๋ค์ด๋ก๋ ํ ์ ์๋ ํ์์ ์์ ํ์ต๋๋ค.
5. ํ์ด์ค๋ถ ๋ก๊ทธ์ธ ๋ฒํผ์ ๋๋ ์ ๋ ํ์์์ผ๋ก ๋ณํ๋ ํ์์ ์์ ๋ฌ์ต๋๋ค.
6. ๋น๋ฐ๋ฒํธ ์ฐพ๊ธฐ ํ์ด์ง์์ ์ํฐ๋ฅผ ๋๋ ์ ๋ ๋น์ ์์ ์ผ๋ก ์๋ํ๋ ํ์์ ์์ ํ์ต๋๋ค.
7. ํ์ผ ๋ฐ ๋๋ ํ ๋ฆฌ ์ด๋ ๊ธฐ๋ฅ์ ๊ตฌํํ์ต๋๋ค. ํ์ผ์ด๋ ๋๋ ํ ๋ฆฌ๋ฅผ ์ค๋ฅธ์ชฝ ํด๋ฆญํ ๋ค, ์ด๋ ๋ฒํผ์ ๋๋ฅด๋ฉด ํ์ผ ๋ธ๋ผ์ฐ์ ๋ฅผ ํตํด ์ด๋์ํฌ ์ ์์ต๋๋ค.
ํ์ฌ ์์ ์ด ์ํ ๋๋ ํ ๋ฆฌ๋, ์๊ธฐ ์์ ์ ๋ถ๋ชจ ๋๋ ํ ๋ฆฌ๋ก ํ ์ ์์ต๋๋ค.
8. ๊ฒ์๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ์ํด DirectoryEntry ๋ชจ๋ธ์ get_browser_path ๋ฉ์๋๋ฅผ ์ถ๊ฐํ์ต๋๋ค. ์ด ๋ฉ์๋๋ ํ์ฌ ํ์ผ์ด ์ฌ์ดํธ ์์์ ์ ์ฅ๋์ด ์๋ ๊ฒฝ๋ก๋ฅผ ๋ฆฌํดํด์ค๋๋ค.
9. ๊ฒ์๊ธฐ๋ฅ์ ์ถ๊ฐํ์ต๋๋ค. ๊ฒ์๊ธฐ๋ฅ์ ํ์ฌ ์์ ์ด ์๋ ํด๋ ์์ ์ ์ฅ๋์ด ์๋ ๋ชจ๋ ํ์ผ ๋ฐ ํด๋๋ค์ ๊ฒ์ฌํฉ๋๋ค.
๊ฒ์๊ฒฐ๊ณผ์์ ํ์ผ์ด๋ ๋๋ ํ ๋ฆฌ๋ฅผ ํด๋ฆญํ๋ฉด ์ค๋ฅธ์ชฝ ์ ๋ณด์ฐฝ์์ ์ค์ ๊ฒฝ๋ก๊ฐ ๋ํ๋๋ฉฐ, ๊ณต์ ํด๋์ ์๋ ํ์ผ์ ๊ฒ์ํ ๋๋ ๊ณต์ ํด๋๋ฅผ ๋ฃจํธ๋ก ํ ๊ฒฝ๋ก๊ฐ ๋ํ๋ฉ๋๋ค.
๊ฒ์์ฐฝ์ ๋น์นธ์ผ๋ก ๋๊ณ ๊ฒ์ํ๋ฉด ๋ฃจํธ ๋๋ ํ ๋ฆฌ๋ก ์ด๋ํฉ๋๋ค.
๊ฒ์์ ๊ฒ์ ๋๋ ํ ๋ฆฌ๋ถํฐ ์์ํด์ ๋ชจ๋ ํ์ ํด๋ ๋ฐ ํ์ผ๋ค์ ๋จ์ํ BFS ํ์์ ํตํด ์ด๋ฆ์ ํค์๋๊ฐ ํฌํจ๋์ด ์๋์ง ๊ฒ์ฌํ๋ฉฐ, ๋ฐ๋ผ์ ํจ์จ์ด ์ข์ง ์์ต๋๋ค. ์ถํ์ ๊ฐ์ ์ด ํ์ํฉ๋๋ค.
์ค๋ ์์ ํ ๋ด์ฉ์ ์๋์ ๊ฐ์ต๋๋ค.
1. ํ์ผ ๋ค์ด๋ก๋, ํ์ผ ์์ด์ฝ ํ์, ์ด๋ฏธ์ง ๋ฐ ๋์์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ, ๋๋ ํฐ๋ฆฌ ๊ธฐ๋ฅ์ ์ฐ๊ฒฐํ์ต๋๋ค.
2. ๋ฆฌ์กํธ ์ฝ๋์์ ๋ช๋ช ๋นํจ์จ์ ์ธ ๋ถ๋ถ๋ค์ ์์ ํ์์ต๋๋ค.
3. ํ์ผ ๋ชฉ๋ก์ ๋ถ๋ฌ์ค๋ ์๊ฐ๋์ ๋ณด์ฌ์ค ๋ก๋ฉ ์คํผ๋๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
4. File ๋ชจ๋ธ์ is_video ํ๋๋ฅผ ์ถ๊ฐํ์ต๋๋ค. ์ด ๊ฐ์ ํตํด ๋์์ ํ์ผ์ ํ์ธํ ์ ์์ผ๋ฉฐ, ๋์์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ์ ํ์ฉํ ์ ์์ต๋๋ค.
5. ํ ํ๋ฉด์ ์๋ก์ด ํด๋๋ฅผ ์์ฑํ๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํ์ต๋๋ค. ํ์์ ํด๋ ์์ฑ์ ๋๋ฌ ์ถ๊ฐํ ์ ์์ต๋๋ค.
6. ์
๋ก๋ ๋ฒํผ์ ํตํด ์ค์ ๋๋ ๊ธฐ๋ณธ ๊ฒฝ๋ก(ํด๋ ์๋ฌด๊ฒ๋ ํด๋ฆญ ์ํ์ ๋)๋ฅผ ํ์ฌ ํด๋๋ก ์ค์ ํ์ต๋๋ค. ๋ณ๋๋ก ๊ฒฝ๋ก๋ฅผ ์ค์ ํ์ง ์๊ณ ๊ฒฐ์ ๋ฒํผ์ ๋๋ฅด๋ฉด ๋ฐ๋ก ํ์ฌ ํด๋์ ํ์ผ์ ์
๋ก๋ ํ ์ ์์ต๋๋ค.
์์ผ๋ก ํ ์ผ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1. Amazon AWS ์๋ฒ๋ฅผ ํตํ ๋ฐฐํฌ ํ
์คํธ
2. ๋๋ฉ์ธ ์ฐ๊ฒฐ ๋ฐ HTTPS ์ฐ๋
3. ๋์ฉ๋ ๋์์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ํ
์คํธ
4. ์
๋ก๋์ค ์
๋ก๋ ์ฐฝ์ ๋ซ์์ ๋ ์ค๋ฅธ์ชฝ ์๋์ ๋จ์ ์๊ฐ ๋ณด์ฌ์ฃผ๊ธฐ
5. ๊ณต์ ํด๋ ๊ธฐ๋ฅ ๊ตฌํ
6. ์ฆ๊ฒจ์ฐพ๊ธฐ, ํด์งํต ๊ธฐ๋ฅ ์ถ๊ฐ
7. ํ์ผ์ ์ค๋ฅธ์ชฝ ํด๋ฆญํ์ ๋ ๋์ค๋ ๋ฉ๋ด์ธ ์ด๋, ๊ณต์ ์ค์ , ์ญ์ , ์ด๋ฆ๋ณ๊ฒฝ ๊ธฐ๋ฅ ๊ตฌํ
-
ํ๋กํ ํ์ธ ๋ฐ ์์ , ํ์ํํด UI๋ฅผ ๋ง๋ค์์ต๋๋ค. ์๋๊ณผ์ ์ ์๋์ ๊ฐ์ต๋๋ค.
- ์๋จ ๋ฉ๋ด๋ฐ์์ ์ฌ๋ ๋ชจ์ ๋ฒํผ์ ํด๋ฆญํ ๋ค, ํ๋กํ ํ์ธ ๋ฒํผ์ ๋๋ฆ ๋๋ค.
- ์ฌ์ฉ์ ํ์ธ์ ์ํด ์์ ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธ ํ์ ๊ฒฝ์ฐ ์ด๋ฉ์ผ ์ฃผ์๋ฅผ, ์ผ๋ฐ ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธ ํ์ ๊ฒฝ์ฐ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํฉ๋๋ค.
- ์ฌ๋ฐ๋ฅด๊ฒ ์ ๋ ฅํ๋ค๋ฉด ๋ค์ ํ๋ฉด์์ ํ๋กํ์ ํ์ธํ ์ ์์ผ๋ฉฐ, ์ด ํ๋ฉด์์ ๋๋ค์๊ณผ ์ ํ๋ฒํธ๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ์ผ๋ฐ ๊ณ์ ์ ์ถ๊ฐ๋ก ๋น๋ฐ๋ฒํธ๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
- ์๋์ ํ์ํํด ๋ฒํผ์ ๋๋ฅด๋ฉด modal์ ํตํด ํ์ํํด ์ฐฝ์ด ๋ํ๋ฉ๋๋ค. ์ด ์ฐฝ์์ '์ง๊ธํํด' ๋ฅผ ์ ๋ ฅํ๋ฉด ํ์ ํํด๊ฐ ์งํ๋ฉ๋๋ค.
- ๋์๊ฐ๊ธฐ ๋ฒํผ์ ๋๋ฅด๋ฉด ํ ํ๋ฉด์ผ๋ก ํจ์๊ฐ๋๋ค.
-
์์ ๊ณ์ ์ ์์ด๋๋ฅผ google_<๊ตฌ๊ธ ID>, facebook_<ํ์ด์ค๋ถ ID>์ ๊ฐ์ ํ์์ผ๋ก ๋ณ๊ฒฝํ์ต๋๋ค. ๋ง์ผ ๊ธฐ์กด์ ํ ์คํธ๋ฅผ ์ํด ๋ง๋ค์ด ๋์ ์์ ๊ณ์ ์ด ์์์ ๊ฒฝ์ฐ, /api/deleteAll์ ํตํด ๋ชจ๋ ๊ณ์ ์ ์ญ์ ํ ๋ค ๋ค์ ์งํํด์ฃผ์ธ์.
-
ํ๋กํ ์์ ๋ฐ ํ์ ํํด API๋ฅผ ๋ง๋ค์์ต๋๋ค. ์ฌ์ฉ ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ์ต๋๋ค.
- ํ๋กํ ์์
- /api/user๋ก PUT ์์ฒญ์ ๋ณด๋ด๋ฉด ํ์ฌ ์ฌ์ฉ์์ ํ๋กํ(๋น๋ฐ๋ฒํธ, ๋๋ค์)์ ์์ ํ ์ ์์ต๋๋ค. PUT ์์ฒญ์ body๋ curPassword(ํ์ฌ ๋น๋ฐ๋ฒํธ), newPassword(๋ฐ๊ฟ ๋น๋ฐ๋ฒํธ), nickname(๋๋ค์)์ผ๋ก ์ด๋ฃจ์ด์ง๋ฉฐ, ํ์ฌ ๋น๋ฐ๋ฒํธ์ ๋ฐ๊ฟ ๋น๋ฐ๋ฒํธ๋ 8์ ์ด์ 15์ ์ดํ์ ์์ด ๋์๋ฌธ์ ๋ฐ ์ซ์, ๋๋ค์์ 2์ ์ด์ 15์ ์ดํ์ ํ๊ธ ๋ฐ ์์ด ๋์๋ฌธ์, ์ซ์๋ก ๊ตฌ์ฑ๋์ด์ผ ํฉ๋๋ค. ์์ ๊ณ์ ์ curPassword์ newPassword๋ฅผ ๋น์นธ์ผ๋ก ๋ณด๋ด๋ฉด ๋๊ณ , ์ผ๋ฐ ๊ณ์ ์ curPassword๋ ํ์, ๋๋จธ์ง ๋ ํ๋๋ ๋ฐ๊ฟ ๋ถ๋ถ๋ง ๊ฐ์ ๋ฃ๊ณ ๋ฐ๊พธ์ง ์์ ๋ถ๋ถ์ ๋น์นธ์ผ๋ก ํด์ ์์ฒญ ๋ณด๋ด์ฃผ์๋ฉด ๋ฉ๋๋ค.
- ํ์ ํํด
- /api/user๋ก DELETE ์์ฒญ์ ๋ณด๋ด๋ฉด ํ์ฌ ์ฌ์ฉ์ ๊ณ์ ์ ์๋ฒ์์ ์ ๊ฑฐํ ์ ์์ต๋๋ค. body์๋ password(ํ์ฌ ๋น๋ฐ๋ฒํธ) ํ๋๊ฐ ํ์ํฉ๋๋ค.
-
๋์ํ์ง ์๋ ๋ฒํผ ์คํผ๋๋ฅผ ์ ์์ ์ผ๋ก ๊ณ ์ณค์ต๋๋ค.
-
๋ฉ์ผ ์ฌ๋ฐ์ก ํ๋ฉด์ ๋ก๊ทธ์์ ๋ฒํผ์ ์ถ๊ฐํ์์ต๋๋ค.
-
"shared-dir" branch์ ์ ๋ฐ์ดํธ ๋ด์ญ์ ์ถ๊ฐํ์ต๋๋ค. ๋๋ฒ๊น ์ด ํ์ํฉ๋๋ค. 5/31 ์์ ์ฌํญ
- ํ์ผ ๋ธ๋ผ์ฐ์ ์ ๋๋ ํ ๋ฆฌ ๋ฐ ํ์ผ ์ญ์ ๋ฒํผ ๋์์ธ์ ์์ ํ์ต๋๋ค,
- ํ์ผ๋ช ๋ฐ ๋๋ ํ ๋ฆฌ๋ช ์ค๋ณต ์ฒดํฌ๋ฅผ ํ ๋๋ ํ ๋ฆฌ ์์์๋ง ์ฒดํฌํ๋๋ก ์์ ํ์ต๋๋ค.
- React ์ฝ๋์ ๋ชจ๋ fetch ๋ฐ axios ๋ฌธ์ ํ์ฌ์ ๋ก๊ทธ์ธ ์ํ๋ฅผ ์ฒดํฌํ๋ ํจ์๋ฅผ ๋ฃ์์ต๋๋ค. ์ด์ ์๊ฐ์ด ์ง๋ ๋ก๊ทธ์ธ ํ ํฐ์ด ๋ง๋ฃ๋๋ฉด ์๋ด ๋ฉ์์ง์ ํจ๊ป ๋ก๊ทธ์ธ ํ๋ฉด์ผ๋ก ์ด๋ํฉ๋๋ค.
- ์ฌ์ด๋๋ฐ์ ์๋ ๋จ์ ๊ณต๊ฐ์ ํ์ํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ์ต๋๋ค. ๋ง๋์ ์๋ 3๋จ๊ณ๋ก ๋๋์๋๋ฐ, ๋จ์๊ณต๊ฐ์ด 40% ์ดํ์ผ ๋๋ ํ๋์, 40%์ด์ 70% ์ดํ์ผ ๋๋ ๋ ธ๋์, ๊ทธ ์ด์์ผ ๋๋ ๋นจ๊ฐ์์ผ๋ก ํ์ํ๋๋ก ํ์์ต๋๋ค.
- ์ ๋ก๋ ํ์ผ ๋ธ๋ผ์ฐ์ ์์ ํ์ผ ๋ฐ ํด๋๋ฅผ ์ฌ๋ฌ ๊ฐ์ฉ ์ ํํ์ฌ ์ญ์ ํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ์ต๋๋ค.
์์ผ๋ก ํด์ผํ ์ผ๋ค์ ์๋์ ๊ฐ์ต๋๋ค.
1. ํด์งํต ๊ธฐ๋ฅ
2. ํ์ผ ์ฆ๊ฒจ์ฐพ๊ธฐ ๊ธฐ๋ฅ
3. ํ์ผ ๊ฒ์๊ธฐ๋ฅ
4. ํ์ ํํด ๋ฐ ๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ ๊ธฐ๋ฅ
5. ์ด๋ฏธ์ง ํ์ผ์ ๋๋ธํด๋ฆญ ํ์ ๋ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ํ ์ ์๋ ๊ธฐ๋ฅ
6. ๋์์ ํ์ผ ๋๋ธํด๋ฆญ ํ์ ๋ ์คํธ๋ฆฌ๋ฐ ๊ธฐ๋ฅ ์ ๊ณต
7. ์๋ฒ ํ
์คํธ
์ ๋ก๋ UI์ ์ ๋ก๋ ๊ฒฝ๋ก๋ฅผ ์ค์ ํ ์ ์๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํ์ต๋๋ค.
์ ๋ก๋ํ ํด๋๋ฅผ ์ ํํ ๋ค ์๋ฃ ๋ฒํผ์ ๋๋ฅด๋ฉด ์ ๋ก๋ ์ฐฝ์ผ๋ก ์ด๋ํฉ๋๋ค.
root ๋๋ ํ ๋ฆฌ ์๋๋ก ์ ๋๋ ํ ๋ฆฌ๋ค์ ์์ฑํ ์ ์์ผ๋ฉฐ, ๊ทธ ๋๋ ํ ๋ฆฌ์ ์ ๋ก๋ํ ์ ์์ต๋๋ค. ํ ํด๋ ๋ด์ ๋์ผํ ์ด๋ฆ์ ํด๋๋ ์์ฑํ ์ ์๋๋ก ์ค์ ํ์ต๋๋ค.
ํ์ฌ ์ฌ์ฉ์๊ฐ ๊ฐ์ง๊ณ ์๋ ๋๋ ํ ๋ฆฌ๋ค์ ์ญ์ ํ ์ ์์ต๋๋ค. root ๋๋ ํ ๋ฆฌ๋ ์ญ์ ๊ฐ ์ ํ๋๋ฉฐ, ๋๋ ํ ๋ฆฌ ์ญ์ ์ ํ์ ๋๋ ํ ๋ฆฌ ๋ฐ ํ์ผ๋ค๋ ๊ฐ์ด ์ญ์ ๋ฉ๋๋ค.
ํ์ฌ ์ ์ฅํ๊ณ ์๋ ํ์ผ์ ์ญ์ ํ ์ ์์ต๋๋ค.
์ ๋ก๋๊ฐ ๋๋ ๋ค ๋ค์ ์ ๋ก๋ ๋ฒํผ์ ๋๋ฅด๋ฉด ์ค์ ํ ๊ฒฝ๋ก์ ์ ์ฅ๋ ํ์ผ๋ค์ ํ์ธํ ์ ์์ต๋๋ค.
๊ทธ์ธ์ ๋ค๋ฅธ ์์ ์ฌํญ๋ค์ ์๋์ ๊ฐ์ต๋๋ค.
1. ๋ก๊ทธ์ธ์ ์ ๊ณตํ๋ ์ ๋ณด์ ๋ฃจํธ dir์ id ์ถ๊ฐ. ์ด๋ ์ถ๊ฐ์ ์ธ ์๋ฒ ์์ฒญ์ ๋ฐฉ์งํ๊ธฐ ์ํจ์.
2. ์
๋ก๋ UI์ ํ์ผ ๋ธ๋ผ์ฐ์ ์์์ ํ์ฌ ์ ์ฅ์ค์ธ ํ์ผ ๋ฐ ํด๋ ํ์ธ ๊ฐ๋ฅ.
3. ํ์ผ ๋ธ๋ผ์ฐ์ ์์์ ์ ํด๋ ๋ง๋ค๊ธฐ ๊ฐ๋ฅ.
4. ํด๋ ์ด๋ฆ ๋ณ๊ฒฝ ๊ฐ๋ฅ.
5. ํ์ผ ๋ฐ ํด๋ ์ญ์ ๊ฐ๋ฅ. ํด๋ ์ญ์ ํ๋ฉด ํด๋ ์์ ์๋ ํ์ ํ์ผ ๋ฐ ํด๋๋ค๋ ๊ฐ์ด ์ญ์ .
๋ฃจํธ ๋๋ ํฐ๋ฆฌ๋ ์ญ์ ๋ชปํ๊ฒ ๋ง์(React, django ์์ชฝ์ผ๋ก ์ฒดํฌ).
6. ํ์ผ ์
๋ก๋ ์๊ฐ ํ์
7. ํ์ผ ๋ธ๋ผ์ฐ์ ์ ๊ฒ์์ฐฝ์ ํตํด ํ์ฌ ์ฌ์ฉ์๊ฐ ์ ์ฅ์ค์ธ ํ์ผ๋ค์ ๊ฒ์ํ ์ ์์.
8. directoryEntry์ file_count์ dir_count ๊ฐ๊น์ง ํฉ์ณ์ ๊ณ์ฐ๋๋ ํ์์ด ๋ฐ์ํ์ฌ directory ๋ชจ๋ธ์
add ๋ฉ์๋์ ํ๋ผ๋ฏธํฐ์ธ file_count์ ๊ธฐ๋ณธ๊ฐ์ 0์ผ๋ก ๋ณ๊ฒฝ, ๊ทธ์ ๋ฐ๋ผ FlowUploadStartView์์ ์ฌ์ฉํ๋ add ๋ฉ์๋์ file_count=1 ํ๋ผ๋ฏธํฐ ์ถ๊ฐ
์์ผ๋ก ํด์ผํ ์ผ๋ค์ ์๋์ ๊ฐ์ต๋๋ค.
1. ํด๋๋ช
์ ํน์๋ฌธ์ ๋ชป๋ค์ด๊ฐ๊ฒ ๋ง์์ผํจ. (๋ฌธ์์ด ํ์ฑ ๊ณผ์ ์์ ์ค๋ฅ ์๊น.)
2. ๋์ผ์ด๋ฆ ์ ํ์ ํ ํด๋ ์์์๋ง ์ฒดํฌํ๋๊ฒ ์ข์๊ฒ ๊ฐ์. ํ์ฌ๋ ์๋ก ๋ค๋ฅธํด๋์ ์๋ ํ์ผ๋ค๋ ์ด๋ฆ์ด ๊ฐ์ผ๋ฉด ์๋จ.
3. ๊ธฐ๋ฅ ํ
์คํธ
master ๋ธ๋์น ๋ฐ team-content ๋ธ๋์น์ ๋ณํฉํ์์ต๋๋ค. ๊ณผ์ ์์, ์๋์ ๊ฐ์ ์์ ์ฌํญ๋ค์ด ์์์ต๋๋ค.
1. Home.js์์ TeamContent.js๋ก username์ด ์๋ props ๋๊ธฐ๋ ๊ฒ์ผ๋ก ๋ณ๊ฒฝ
2. ํ ๋ชฉ๋ก์ ํ์ฅํญ๋ชฉ์ ๋๋ค์๊ณผ ์์ด๋๋ฅผ ๊ฐ์ด ํ์ํ๋๋ก ๋ณ๊ฒฝ
3. ํ์ ์๋ก ๋ง๋ค์์ ๋, ํ์ด์ง๋ฅผ ๋ค์ ๋ก๋ํ์ง ์๊ณ loadTeamList()๋ฅผ ์ด์ฉํ์ฌ ๋ฐ๋ก ๋ก๋ํ๋๋ก ๋ณ๊ฒฝ -> ์ด๋ toast ๋ฉ์์ง๋ฅผ ์ ์ฉํ๊ธฐ ์ํจ์
๋๋ค.
4. ์ด๋๋ฉ์ธ์ง์ ๋์ค๋ ํ ์์ด๋ ํ๋ช
์ผ๋ก ๋ณ๊ฒฝ
5. ์ฌ์ฉ์ ์ ๋ณด์ฐฝ ์๋์ ๊ดํธ์น๊ณ ์์ด๋ ๊ฐ์ด ๋ณด์ด๊ฒ ์ค์
6. ์์ด๋ ๊ฒ์์, ์ด๋ฏธ ํ์ ๊ฐ์
๋์ด ์๋ ์ฌ์ฉ์๋ ๊ฒ์ ์๋๊ฒ ๋ณ๊ฒฝ
7. ์ด๋๋ฉ์์ง ์๋ฆผ์ฐฝ์ ์ด๋ ๋ฉ์์ง ๊ฐฏ์ ํ์
8. ํ ์์ ์ฐฝ์์ ํ์ฅ ๋ฐ ํ์ ์ด๋ฆ ๋๋ค์์ผ๋ก ํ์๋๋๋ก ์์ , ๋๋ค์์ ์ค๋ณต ๊ฐ๋ฅํ๋ฏ๋ก ๊ดํธ์น๊ณ ์์ด๋๋ ๊ฐ์ด ํ์ํ๊ฒ ํจ.
9. ๋ชจ๋ ๊ฒฝ๊ณ ๋ฉ์์ง๋ฅผ toast ๋ฉ์์ง(์ฐํ๋จ์ ๋์ค๋ ๋ฉ์์ง)๋ก ๋ณ๊ฒฝ. toast ๋ฉ์์ง๋ฅผ ์นํ์ด์ง ๋ชจ๋ ๊ณณ์์ ์ฌ์ฉํ ์ ์๊ฒ ํ๊ธฐ ์ํด ์์น๋ฅผ App.js๋ก ์ฎ๊น.
10. Toast ๋ฉ์์ง ๊ฐ์
11. settings.py DATABASE์์ serializable ์ต์
์ ๊ฑฐ.
-
5์ 27์ผ ๋ฐ๊ฒฌํ ์ ๋ก๋ ๊ด๋ จ UI ๋ฌธ์ ๋ค์ ํด๊ฒฐํ์ต๋๋ค.
- ์ ๋ก๋ ๋์ค ์ ๋ก๋ ์ฐฝ์ ๋ซ์์ ๋ ์ ๋ก๋๊ฐ ๊ณ์ ์ง์๋๊ฒ ํ ๊ฒ์ธ๊ฐ? ๋ฉ์ถ๊ฒ์ธ๊ฐ? -> ์ ๋ก๋๊ฐ ์ง์๋๋๋ก ๋ณ๊ฒฝ, ์ํ์ค์ด๋ ์ ๋ก๋ ์งํ์ฌํญ์ ์ ๋ก๋ ๋ฒํผ์ ๋ค์ ๋๋ฌ ํ์ธํ ์ ์์. ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ ๋ก๋๊ฐ ์ํ๋ ๋ค ์ ๋ก๋๊ฐ ๋๋๋ฉด ์ค๋ฅธ์ชฝ ์๋์ ์ ๋ก๋ ์๋ฃ ์๋ฆผ์ด ๋ธ.
- ๋ชจ๋ ์ ๋ก๋๋ฅผ ์ทจ์ํ๋ฉด ๋ค์ ์ ๋ก๋๋ฅผ ํ ์ ์๋ ์ฐฝ์ผ๋ก ๋ฐ๋๋๋ฐ, ์ด๊ฒ ์๋์ ์ํจ. -> ํด๊ฒฐ
- UI ๋ค๋ฌ๊ธฐ -> ์คํฌ๋กค๋ฐ๋ฅผ ๊ตฌํํ์ฌ ๋ง์ ์์ ํ์ผ์ ์ ๋ก๋ํ ๋ ๊ฐ์์ฑ์ ๋์. ๊ฐ ์ ๋ก๋ ํ์ผ๋ค์ ๋ฆฌ์คํธ์ ํํ๋ก ์ ๋ฆฌํจ.
- ํ ๋๋ ํ ๋ฆฌ ์์ ์๋ ๋์ผํ ํ์ผ ์ด๋ฆ ์ฒ๋ฆฌํด์ผํจ. -> ํด๊ฒฐ
-
readme์ ๊ธฐ๋ก ๋ฐฉ์์ ์ต์ ์ ๋ฐ์ดํธ ๋ด์ฉ์ด ์๋ก ๊ฐ๊ฒ ๋ณ๊ฒฝํ์ต๋๋ค.
-
๋๋ค์ ์ผ๋ถ๋ฅผ ํตํด ์ฌ์ฉ์๋ฅผ ๊ฒ์ํ๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํ์ต๋๋ค. ๋ก๊ทธ์ธํ ์ฌ์ฉ์ ์์ ๋ฐ ์ด๋ฉ์ผ ์ธ์ฆํ์ง ์์ ์ฌ์ฉ์๋ ๊ฒ์๋์์์ ์ ์ธ๋ฉ๋๋ค. URL์ /api/search-user/<๊ฒ์๋ด์ฉ> ์ ๋๋ค.
์์ผ๋ก ๊ตฌํํด์ผ ํ ๊ธฐ๋ฅ์ ์๋์ ๊ฐ์ต๋๋ค. 1. ํ์ผ ์ ๋ก๋์ ๋๋ ํ ๋ฆฌ๋ฅผ ์ง์ ํ์ฌ ์ ๋ก๋ํ ์ ์๋๋ก ํด์ผํฉ๋๋ค. 2. ์ ๋ก๋ ์๋ฃ ์๋ฆผ์ CSS๋ฅผ ์ ์ฉํด์ผ ํฉ๋๋ค.
- ์ ๋ก๋ UI๋ฅผ ๊ตฌํํ์ต๋๋ค. ๋ฉ์ธ ํ์ด์ง ์ ๋ก๋ ๋ฒํผ์ ๋๋ฌ ํ์ธํ ์ ์์ผ๋ฉฐ, ํ์ผ ํ์๊ธฐ๋ฅผ ํตํ ๋ค์ค ์ ๋ก๋ ๋ฐ ๋๋๊ทธ ์ค ๋๋กญ์ ํตํ ๋ค์ค ์ ๋ก๋๋ฅผ ์ง์ํฉ๋๋ค. ๊ฐ ํ์ผ ์ ๋ก๋๋ ์ผ์์ ์งํ๊ฑฐ๋ ์ฌ์์, ์ ๋ก๋ ๋ชฉ๋ก์์ ์ญ์ ํ ์ ์์ต๋๋ค. ์ถํ ์๊ฐํด ๋ณผ ์ ๋ค์ ์๋์ ๊ฐ์ ๊ฒ๋ค์ด ์์ต๋๋ค.
1. ์
๋ก๋ ๋์ค ์
๋ก๋ ์ฐฝ์ ๋ซ์์ ๋ ์
๋ก๋๊ฐ ๊ณ์ ์ง์๋๊ฒ ํ ๊ฒ์ธ๊ฐ? ๋ฉ์ถ๊ฒ์ธ๊ฐ?
2. ๋ชจ๋ ์
๋ก๋๋ฅผ ์ทจ์ํ๋ฉด ๋ค์ ์
๋ก๋๋ฅผ ํ ์ ์๋ ์ฐฝ์ผ๋ก ๋ฐ๋๋๋ฐ, ์ด๊ฒ ์๋์ ์ํจ.
3. UI ๋ค๋ฌ๊ธฐ
4. ํ ๋๋ ํ ๋ฆฌ ์์ ์๋ ๋์ผํ ํ์ผ ์ด๋ฆ ์ฒ๋ฆฌํด์ผํจ.
- ํ์ผ ๋ฑ๋ก modal
- ์ ๋ก๋ ์งํ
- ์๋ฃ
- Storage ์ฑ์ ์๋ก ์
๋ฐ์ดํธ๋ ๋ด์ญ๋ค์ ์ ์ฉํ๊ณ , ๋๋ฒ๊น
์ ์ํํ์ต๋๋ค. ๋๋ฒ๊น
๊ณผ์ ์์ ์์ ํ ์ฝ๋๋ค์ ์๋์ ๊ฐ์ต๋๋ค.
- Partial_upload ๋ชจ๋ธ is_expired ๋ฉ์๋ ์์ ์๋ time_since_upload ์์ => now์ self.last_receive_time ํ์ ๋ฌ๋ผ์ ๋นผ๊ธฐ๊ฐ ์๋จ.
- PartialUpload ๋ชจ๋ธ is_complete => is_completed๋ก ์์ . signals.py์ ๋ง์ถค.
- ์ธ๋ค์ผ ์์ฑ๋ถ๋ถ(287๋ฒ ์ค)์์ ์์ฑ ํ์ผ ๊ฒฝ๋ก๋ก file_path ์ฌ์ค์
-
๋ค์ค ์ ๋ก๋์์ ๋ฐ์ํ๋ asynchronous call ๋ฌธ์ ๊ฐ ๊ณ์ ๋ฐ์ํ์ฌ ๋ค์ ์์ ํ์ต๋๋ค. ํ ์คํธ๋ฅผ ์ํํ์ ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์์๊ธด ํ์ง๋ง, ๋๋ค์ ๋์ผํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
-
๋ค์ค ๋ค์ด๋ก๋ ๊ธฐ๋ฅ์ ๊ตฌํํ์ต๋๋ค. ๊ตฌํ์ ์ํด nginx docker base image๋ฅผ levelonestl/nginx-mod-zip์ผ๋ก ๋ณ๊ฒฝํ์ต๋๋ค. ์๋ ๊ณผ์ ์ ์๋์ ๊ฐ์ต๋๋ค.
-
๋ก๊ทธ์ธํ ๋ค /file-test๋ก ๋ค์ด๊ฐ๋๋ค.
-
์ ๋ก๋ ๋ฒํผ์ ์ด์ฉํ์ฌ ํ์ผ๋ค์ ์ ๋ก๋ํฉ๋๋ค.
-
๋ค์ด๋ก๋ ์๋์ ์ ๋ ฅ์ฐฝ์ ํ์ผ๋ค์ ID๋ฅผ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํ์ฌ ์ ๋ ฅํฉ๋๋ค. ID๊ฐ ํ๋์ผ๋๋ ๊ธฐ์กด ๋ฐฉ์์ผ๋ก, ์ฌ๋ฌ ๊ฐ์ผ ๋๋ downloadFiles.zip ์ผ๋ก ๋ค์ด๋ก๋๋ฉ๋๋ค. ์์ด๋ ํ์ธ์ /api/file-list ๋ก ๊ฐ์๋ฉด ๊ฐ ํ์ผ๋ค์ ์ ๋ณด๊ฐ ๋์ค๋๋ฐ, ์ฌ๊ธฐ์ _id ๊ฐ์ ์๋ฐ์ดํ ๋นผ๊ณ ์ฌ์ฉํ์๋ฉด ๋ฉ๋๋ค.์ค์ ๋ก ์ฌ์ฉํ ๋๋ {file1 : , file2 : , file3 : , ...} ํ์์ผ๋ก /api/download์ POST ์์ฒญ์ ๋ณด๋ด์ฃผ์๋ฉด ๋ฉ๋๋ค.
-
downloadFiles.zip ํ์ผ์ ํตํด ์ ๋ ฅํ๋ ID๋ค์ ๊ฐ์ง๊ณ ์๋ ํ์ผ๋ค์ ํ์ธํ์ค ์ ์์ต๋๋ค.
์์ ๊ณผ์ ์์ ๊ธฐ์กด์ ํ์ผ์ ๋ค์ด๋ก๋ ํ๊ธฐ ์ fetch call์ ํตํด ํด๋น id๋ฅผ ๊ฐ์ง๋ ํ์ผ ์ด๋ฆ์ ๋ถ๋ฌ์ค๋ ๊ธฐ๋ฅ์ ์ ๊ฑฐํ๋๋ฐ, ์ด๋ ๋๋ ํ ๋ฆฌ์ ๋ค์ด๊ฐ์ ๋ ํด๋น ๋๋ ํ ๋ฆฌ ๋ด๋ถ์ ์๋ ํ์ผ๋ค์ ์ด๋ฆ ๋ฐ ์ธ๋ค์ผ ์ ๋ณด๋ฅผ ํ๋ฒ์ ๋ฐ์์ค๋ฏ๋ก ๋ค์ด๋ก๋ ๊ณผ์ ์์ ๊ตณ์ด ๋ค์ ๋ฐ์์ฌ ํ์๊ฐ ์๋ค๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ง๊ธ์ filename_here๋ผ๋ ์ด๋ฆ์ผ๋ก ํต์ผ์์ผ ๋์๊ณ , ๋ฉ์ธํ์ด์ง์ ๊ฒฐํฉํ ๋ ์ด ๋ถ๋ถ์ ํ์ผ์ ์ค์ ์ด๋ฆ์ ๋ฃ์ด์ฃผ์๋ฉด ๋ฉ๋๋ค.
- ์ ๋ก๋ ์ฐฝ
- ๋ค์ด๋ก๋ ์ ๋ ฅ์ฐฝ
- ์์ถ ํ์ผ
-
-
DB๋ฅผ mongoDB์์ postgreSQL๋ก ๋ณ๊ฒฝํ์ต๋๋ค. ๋ณ๊ฒฝํ ์ด์ ๋ ์๋์ ๊ฐ์ต๋๋ค.
- ๊ฐ ์ฌ์ฉ์๊ฐ UserStoarge๋ฅผ ์์ฑํ ๋ ๋ฐ์ํ๋ race condition ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ transaction.atomic() ํจ์๊ฐ ํ์ํ๋๋ฐ, django์ mongoDB๋ฅผ ์ฐ๊ฒฐํด์ฃผ๋ ๋ชจ๋๋ค์ ์ด ํจ์๋ฅผ ์ง์ํ์ง ์์ต๋๋ค.
- django์์ mongoDB๋ฅผ ์ง์ํ์ง ์๊ธฐ ๋๋ฌธ์ transaction.atomic() ํจ์ ์ด์ธ์๋ ์ถํ์ ๋ ๋ค๋ฅธ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
์ด์ ๋ฐ๋ผ, docker DB๋จ์ ์์ ์ด ํ์ํฉ๋๋ค.
-
React์ flow.js์์ ๋ฐ์ํ๋ asynchronous call ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.
-
์ ๋ก๋ ํ ์คํธ ํ์ด์ง์ ๋ค์ด๋ก๋ ๋ฒํผ์ ์ถ๊ฐํ์ต๋๋ค. ๋ค์ด๋ก๋๋ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ํ ์คํธํด๋ณผ ์ ์์ต๋๋ค.
- ๋ก๊ทธ์ธ์ ํ ๋ค, localhost/file-test๋ก ์ด๋ํฉ๋๋ค.
- '์ ๋ก๋' ๋ฒํผ์ ๋๋ฌ ์ ๋ก๋๋ฅผ ์ํํฉ๋๋ค.
- localhost/api/file-list ๋ก ์ด๋ํ์ฌ ์ ๋ก๋ํ ํ์ผ์ ๋ชจ๋ธ์ ํ์ธํ ๋ค, ๋ค์ด๋ก๋ ๋ฐ์ ํ์ผ์ _id ๋ถ๋ถ์ ๋ณต์ฌํฉ๋๋ค(์๋ฐ์ดํ ๋นผ๊ณ ).
- ๋ค์ localhost/file-test๋ก ์ด๋ํ์ฌ ์ ๋ ฅ์ฐฝ์ ๋ณต์ฌํ _id๋ฅผ ์ ๋ ฅํ ๋ค, ๋ค์ด๋ก๋ ๋ฒํผ์ ๋๋ฆ ๋๋ค.
- ๋ค์ด๋ก๋๊ฐ ์ํ๋๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
-
๋ค์ด๋ก๋ ๊ธฐ๋ฅ์ ๊ธฐ์กด์ Download ์ฑ์์ Storage ์ฑ์ผ๋ก ์ด๋์์ผฐ์ต๋๋ค. ๊ทธ์ ๋ฐ๋ผ download ์ฑ์ ์ญ์ ํ์์ต๋๋ค.
-
์ฌ์ฉ์๊ฐ ์ ์ฅํ๊ณ ์๋ ๋ชจ๋ ํ์ผ๋ค์ ์ ๋ณด๋ฅผ ๋ฐํํ๋ API๋ฅผ ๋ง๋ค์์ต๋๋ค. /api/file-list์์ ํ์ธํ์ค ์ ์์ต๋๋ค.
-
/api/users์์ ์ฌ์ฉ์ ์ ๋ณด์ ์ถ๊ฐ๋ก ๊ฐ ์ฌ์ฉ์์๊ฒ ์ฐ๊ฒฐ๋ UserStorage ์ ๋ณด๋ฅผ ๋ณด์ฌ์ฃผ๊ฒ ๋ณ๊ฒฝํ์ต๋๋ค. ์ด ๊ฐ์ ํตํด์ ๋ฃจํธ ๋๋ ํ ๋ฆฌ์ ID๋ฅผ ์ ์ ์์ต๋๋ค.
๊ฐ๋ฐ ๊ณผ์ ์์ ๋ฐ๊ฒฌํ ๋ฌธ์ ์ ์ ์๋์ ๊ฐ์ ๊ฒ๋ค์ด ์์ต๋๋ค.
- ํ์ผ ์ ๋ก๋ ์ฐฝ์์ ์ฌ๋ฌ ๊ฐ์ ํ์ผ์ ์ ํํ์ฌ ์ ๋ก๋ํ์ ๋, ํ์ผ ์ ๋ก๋์ ํ์ผ ๋ชจ๋ธ ์์ฑ์ ์ ์์ ์ผ๋ก ์ํ๋์ง๋ง UserStorage ๋ชจ๋ธ์ file_count ๊ฐ์ด ์ ๋๋ก ์ ๋ฐ์ดํธ ๋์ง ์์ต๋๋ค. ์ด์ ๋ฐ๋ผ ์ด ๊ฐ์ ์ํฅ์ ๋ฐ๋ file_size_total๋ ์ ๋๋ก ์ ๋ฐ์ดํธ ๋์ง ์์ต๋๋ค.
์์ผ๋ก ๊ฐ๋ฐํ ๊ฒ๋ค์ ์๋์ ๊ฐ์ ๊ฒ๋ค์ด ์์ต๋๋ค.
- ๋๋๊ทธ ์ค ๋๋กญ์ ํตํ ํ์ผ ์ ๋ก๋ -> flow.js์์ ์ง์ํ๋ ๊ธฐ๋ฅ์ด๊ธฐ ๋๋ฌธ์, ์ฝ๊ฒ ์ ์ ๊ฐ๋ฅํ ๊ฒ ๊ฐ์ต๋๋ค.
-
์ ๋ก๋ ๊ธฐ๋ฅ์ ๊ตฌํํ์ต๋๋ค. ๋ก๊ทธ์ธ์ ํ ๋ค localhost/upload-test๋ก ์ด๋ํ์๋ฉด ์ ๋ก๋ ํ ์คํธ๋ฅผ ํด๋ณผ ์ ์์ต๋๋ค. ์ ๋ก๋๋ ํ์ผ์ django ์์ /file/complete/<์ฌ์ฉ์ ์ด๋ฆ>/ ํด๋ ๋ฐ์ ์ ์ฅ๋๋ฉฐ, ์ธ๋ค์ผ์ /file/complete/<์ฌ์ฉ์ ์ด๋ฆ>/thumbnail/ ํด๋ ๋ฐ์ ํ์ผ ๋ช ๊ณผ ๋์ผํ ์ด๋ฆ.jpg์ ํํ๋ก ์ ์ฅ๋ฉ๋๋ค. ์ค์ ์๋ฒ ๊ธฐ์ค์ผ๋ก๋ capstone-project/file ํด๋ ์๋์ ํ์ผ๋ค์ด ์ ์ฅ๋ฉ๋๋ค. ํ์ฌ 2GB๊น์ง์ ํ์ผ๋ค๋ ์ ์์ ์ผ๋ก ์ ๋ก๋๋๋ ๊ฒ์ ํ์ธํ์ผ๋ฉฐ, ์๊ฐํด๋ณผ ์ ์ผ๋ก๋ ์๋์ ๊ฐ์ ๊ฒ๋ค์ด ์์ต๋๋ค.
-
์ ๋ก๋ ์๋ ๋ฌธ์ chunk ํฌ๊ธฐ๋ฅผ ๊ธฐ์กด ์ค์ ๊ฐ์ธ 1MB๋ก ํ์ ๋ ์ ๋ก๋ ์๋๊ฐ ๋๋ฌด ๋๋ ค chunk ํฌ๊ธฐ๋ฅผ 100MB๋ก ๋๋ ธ์ต๋๋ค. chunk ํฌ๊ธฐ๊ฐ ๋์ด๋๋ฉด ์๋๋ ๋์ด๋๊ฒ ์ง๋ง, ๊ทธ๋งํผ ์๋ฒ ๋ฉ๋ชจ๋ฆฌ ๋ถํ๋์ด ๋ง์์ง๋ค๋ ์๋ฏธ์ด๋ฏ๋ก ์ ์ ํ ๊ฐ์ผ๋ก ์กฐ์ ์ด ํ์ํด๋ณด์ ๋๋ค.
-
ํ์ผ ์ญ์ ๋ฐ ๊ฐ ์ฌ์ฉ์๋ค์ ํ์ฌ ์ ์ฅ ์ฉ๋, ๋จ์ ์ฉ๋ ๋ฑ์ ํ์ธํ ์ ์๋ API ํ์
-
๊ฐ๋ฐ๋จ๊ณ์์ React ๋จ์์ ์๋ฒ๊ฐ ๋ณด๋ด์ฃผ๋ ํค๋๋ฅผ ์ฝ์ง ๋ชปํด body์ ๋ด์ URL์ ๋ณด๋ด๋๋ฐ, ์ค์ ์๋ฒ์์ ๊ตฌ๋ํ ๋ ์๋๋๋ก ๋๋ ค๋์์ผ ํฉ๋๋ค.
-
-
๋์์ ์ธ๋ค์ผ ๊ธฐ๋ฅ์ ๊ตฌํํ์ต๋๋ค. ์ฌ์ฉ๋ฐฉ๋ฒ์ ์ด๋ฏธ์ง ํ์ผ ์ธ๋ค์ผ ๊ธฐ๋ฅ๊ณผ ๊ฐ์ต๋๋ค. ๋์์ ์ธ๋ค์ผ ๊ธฐ๋ฅ์ ์ํด moviepy ๋ชจ๋์ ์ฌ์ฉํ์ผ๋ฉฐ, ์ด๋ฅผ ์ํด django dockerfile์ apk add ffmpeg๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
-
๋ค์ด๋ก๋ ํ ์คํธ๋ฅผ ๋ณด์ํ์ต๋๋ค. ๋ค์ด๋ก๋ ํ ์คํธ ์ฐฝ์ผ๋ก ์ด๋ํ๋ฉด ํ์ผ ์ด๋ฆ์ ์ ๋ ฅํ ์ ์๊ณ , ํด๋น ํ์ผ ์ด๋ฆ์ ๊ฐ์ง ํ์ผ ๋ชจ๋ธ์ด ์กด์ฌํ๋ฉด ๊ทธ ๋ชจ๋ธ์ id๋ฅผ ํ์ผ ์ด๋ฆ์ผ๋ก ๊ฐ์ง๋ ํ์ผ์ ๋ค์ด๋ก๋ํ๊ฒ ํด์ค๋๋ค. ํ ์คํธ๋ฅผ ์ํด์๋ ๋ก๊ทธ์ธํ ๋ค /api/download/aaa๋ก ์ด๋ํ์ฌ ํ์ผ ์ด๋ฆ์ ๋ฑ๋กํด์ฃผ๋ ๊ณผ์ ์ด ํ์ํฉ๋๋ค. ๋ํ /file/complete/<์ฌ์ฉ์ ์์ด๋>/ ์๋์ ํด๋น ํ์ผ์ id์ ํ์ฅ์๋ฅผ ์ด๋ฆ์ผ๋ก ๊ฐ์ง๋ ํ์ผ์ ์ถ๊ฐํด์ผ ํฉ๋๋ค. ๋ชจ๋ ๊ณผ์ ์ ๋ง์น ๋ค, /download-test๋ก ์ด๋ํ์ฌ ํ์ผ ์ด๋ฆ์ ์ ๊ณ ๋ค์ด๋ก๋ ๋ฒํผ์ ๋๋ฅด๋ฉด ๋ค์ด๋ก๋๊ฐ ์ํ๋ฉ๋๋ค. ํ์ฌ ๋ค์ด๋ก๋ ์ฌ๋ถ๋ง ํ ์คํธ ํ๋ ์ค์ด๊ธฐ ๋๋ฌธ์ ์์ ๊ฐ์ ์ฌ์ ์์ ์ด ํ์ํ๋ฉฐ, ์ ๋ก๋ ๊ตฌํ์ด ์๋ฃ๋๋ฉด ๊ทธ๋ ์์ฑ๋๋ ํ์ผ ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ ์์ ์์ ์ด ์๋์ ์ผ๋ก ์ํ๋๊ฒ ๊ตฌํํ ์์ ์ ๋๋ค.
-
์ธ๋ค์ผ ๊ธฐ๋ฅ์ ๊ตฌํํ์ต๋๋ค. ์๋ ๋ก์ง์ ์๋์ ๊ฐ์ต๋๋ค.
- storage/views.py์์ ํ์ผ ์ ๋ก๋๋ฅผ ๋ง์น ๋ค, ํด๋น ํ์ผ์ด ์ด๋ฏธ์ง ํ์ผ์ธ์ง ํ์ธํฉ๋๋ค.
- ์ด๋ฏธ์ง ํ์ผ์ด ์๋๋ผ๋ฉด ๊ทธ๋๋ก ๋๋จธ์ง ์ ๋ก๋ ๋ก์ง์ ์งํํ๊ณ , ๋ง๋ค๋ฉด thumbnail.py์ MakeThumbnail ํด๋์ค๋ฅผ ์ด์ฉํ์ฌ ์ธ๋ค์ผ์ ์ ์ํ ๋ค, ํด๋น ํ์ผ์ file/complete/์ฌ์ฉ์๋ช /thumbnail/ ์ ํ์ผID.jpg์ ํํ๋ก ์ ์ฅํฉ๋๋ค(Nginx ์์์๋ media/files/์ฌ์ฉ์๋ช /thumbnail ๋๋ ํ ๋ฆฌ์ ์ ์ฅ๋ฉ๋๋ค.). MakeThumbnail ํด๋์ค๋ฅผ ์์ฑํ ๋, width์ height ๊ฐ์ ๋๊ฒจ์ค์ผ๋ก์จ ์ธ๋ค์ผ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ ์ ์์ต๋๋ค.
- ์ธ๋ค์ผ์ด ์ ์ฅ๋ ๊ฒฝ๋ก๋ฅผ ์ ๋ก๋ response์ body์ thumbnail_url : {url} ํํ๋ก ์ค์ด์ response๋ฅผ ์ ์กํฉ๋๋ค.
- ํด๋น url๋ก ์ ์ํ๋ฉด ์๋ฒ์ ์ ์ฅ๋ ์ธ๋ค์ผ ์์ด์ฝ์ด ๋ณด์ด๊ฒ ๋ฉ๋๋ค. ์ด๊ฒ์ ์ด์ฉํด ๋ฆฌ์กํธ์ชฝ์์ ์ธ๋ค์ผ ์ด๋ฏธ์ง๋ฅผ ๋ณด์ฌ์ฃผ๋ฉด ๋ฉ๋๋ค.
storage์ฑ์ view.py์ ์๋ ThumbnailTestAPI์ thumbnail ์ฑ์ ํ ์คํธ์ฉ์ผ๋ก, ์ ๊ฑฐํ ์์ ์ ๋๋ค. ์ธ๋ค์ผ ์ด๋ฏธ์ง ํ ์คํธ ํ์ด์ง๋ localhost/thumb-test์ ๊ฐ์๋ฉด ํ์ธํ ์ ์์ผ๋ฉฐ, ์ฌ์ฉ์ ์์ด๋๋ฅผ sungs201๋ก ์ค์ ํ์ ์ผ ํฉ๋๋ค (์ด๋ ํ ์คํธ์ฉ ์ค์ ์ผ๋ก, ์ถํ์ ์ ๋ก๋ ๊ตฌํ์ด ์๋ฃ๋๋ฉด ์ ๋ก๋ํ ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธ ํ์๋ฉด ๋ฉ๋๋ค.).
- ํ์ ์ด๋๋ฐ์ ์ฌ์ฉ์๊ฐ ์ด๋๋ฅผ ์๋ฝํ๋ ๊ธฐ๋ฅ ๋ฐ ๊ฑฐ์ ํ๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํ์ต๋๋ค.
- ๊ณต์ ํด๋ ์ค์ ๋ฐ ํด์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ์ต๋๋ค.
- ํ ๊ด๋ จ API๋ฅผ ๋ง๋ค์์ต๋๋ค. API๊ฐ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ ์๋์ ๊ฐ์ต๋๋ค.
- ์๋ก์ด ํ์ ์์ฑํ๊ณ , ์ ์ฒด ํ์ ์ ๋ณด๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
- ํ id๋ฅผ ํตํด ํด๋น ํ์ ์ ๋ณด๋ฅผ ์ถ๋ ฅํ๊ณ , ํ์ ์ญ์ ํ ์ ์์ผ๋ฉฐ(ํ์ฅ๋ง), ํ ์ด๋ฆ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค(ํ์ฅ๋ง).
- ์๋ก์ด ํ์์ ์ด๋ํ ์ ์์ต๋๋ค(ํ์ฅ๋ง). ์ถํ์ ํ์์๊ฒ ์ด๋๊ถํ์ ์ฃผ๋ ๊ธฐ๋ฅ์ ๋ง๋๋ ๊ฒ๋ ์ข์ ๊ฒ ๊ฐ์ต๋๋ค. ๊ฐ ์ฌ์ฉ์๋ ์์ ์ ์ด๋ํ ํ๋ค์ ์ด๋ฆ์ ํ์ธํ ์ ์์ต๋๋ค. ์์ง ์ด๋๋ฅผ ์๋ฝํ์ฌ ํ์ ๋ค์ด๊ฐ๋ ๊ธฐ๋ฅ์ ๋ฏธ๊ตฌํ ์ํ์ ๋๋ค.
- ๊ฐ ํ์๋ค์ ๊ณต์ ํด๋๋ฅผ ์ค์ ํ๊ณ ํด์ ํ ์ ์์ต๋๋ค. ๋ฏธ๊ตฌํ ์ํ์ด๋ฉฐ ๋๋ ํ ๋ฆฌ ๋ชจ๋ธ์ด ๋ง๋ค์ด์ง๋ ๋๋ก ๊ตฌํํ ์์ ์ ๋๋ค.
-
๋๋ช ์ด์ธ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค. User ๋ชจ๋ธ์ ๋๋ค์ ํ๋๊ฐ ์๋ก ์๊ฒผ์ผ๋ฉฐ, ์์ ๋ก๊ทธ์ธ์ ํ ๋๋ ๋๋ค์์ ์ด๋ฆ์, id์๋ ํด๋น ์์ ์๋น์ค์์ ์ ๊ณตํ๋ API์์ ๋ฐ์์จ id๊ฐ์ ์ ์ฅํ๊ฒ ๋ฉ๋๋ค. ๋น๋ฐ๋ฒํธ๋ social๋ก ํตํฉ์์ผฐ์ต๋๋ค. ์ผ๋ฐ ์ฌ์ฉ์๋ 15์ ์ด์์ ์์ด๋๋ฅผ ๋ง๋ค ์ ์์ผ๋ฏ๋ก ์์ ๋ก๊ทธ์ธ์ผ๋ก ๋ง๋ค์ด์ง๋ ์์ด๋์ ์ค๋ณต๋ ์ ์๊ฒ ๋ฉ๋๋ค(์์ ๋ก๊ทธ์ธ ์์ด๋๋ 15์๋ณด๋ค ๊น๋๋ค.).
-
๋ก๊ทธ์ธ ํ๋์ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์ถ๊ฐํ์ต๋๋ค. ์ผ๋ฐ ๋ก๊ทธ์ธ์ ์งํํ ๋๋ ์์ด๋์ ๋น๋ฐ๋ฒํธ์ ๊ธ์ ์๋ฅผ 8~15์๋ก ์ ํํ๊ณ , ์์ด, ์ซ์๋ฅผ ํฌํจํ๋๋ก ํ์ต๋๋ค.
-
์์ ๋ก๊ทธ์ธ์ ํ์ ๋ ๊ธฐ์กด ๊ฐ์ ํ์ ์ค ๋์ผํ ์ด๋ฉ์ผ์ ์ฐ๋ ํ์์ด ์์ ๊ฒฝ์ฐ, ์๋์ผ๋ก ๊ณ์ ์ด ์ฐ๋๋๋๋ก ์์ ํ์ต๋๋ค. ํ์ ์ ๋ณด๋ ๊ธฐ์กด์ ๊ฐ์ ํ๋ ๊ณ์ ์ ๋ณด๋ฅผ ๋ฐ๋ผ๊ฐ๊ฒ ๋ฉ๋๋ค.
ํ ๊ตฌ์ฑ ๊ด๋ จํด์ ์๋์ ๊ฐ์ด ์๊ฐํด๋ณผ ์ ๋ค์ด ์์์ต๋๋ค.
ํ์์ ์ด๋ํ ๋
- ๋๋ค์์ผ๋ก ์ด๋ํ๊ฒ ํ ๊ฒ์ธ๊ฐ? -> ์ด ๊ฒฝ์ฐ, ๋๋ค์์ด ์ค๋ณต ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ๊ฒ์ํ์ ๋ ํด๋น ์ฌ์ฉ์์ ์ด๋ฉ์ผ ์ฃผ์์ ํจ๊ป ๋ณด์ฌ์ค์ผ ํจ.
- ์์ด๋๋ก ์ด๋ํ๊ฒ ํ ๊ฒ์ธ๊ฐ? -> ์ด ๊ฒฝ์ฐ, ์์
๋ก๊ทธ์ธ์ผ๋ก ๊ฐ์
ํ ํ์ ์ถ๊ฐ๊ฐ ํ๋ค ์ ์์. -> ๊ฐ ์ฌ์ฉ์๊ฐ ์์ ์ ์์ด๋๋ฅผ
ํ์ธํ ์ ์๋๋ก ํด์ผ ํจ. ์ด๋ฅผ ํ์ฅ์๊ฒ ์๋ ค์ค์ ํ์ฅ์ด ์์ด๋๋ฅผ ํตํด ์ด๋๋ฅผ ๋ณด๋ผ ์ ์๊ฒ ํ๋ ์์ผ๋ก ๊ตฌํ
- ๋ฒํผ ๋ก๋ฉ ์คํผ๋๋ฅผ ๋ง๋ค์์ต๋๋ค. ์๋ฒ๋ก ๋ณด๋ธ fetch ๋ช ๋ น์ด ๋๋ ๋์, ๋ฒํผ์ ๋ก๋ฉ ์ํ๊ฐ ๋์ด ๋๋ฆฌ์ง ์๊ฒ ๋ฉ๋๋ค. fetch ๋ช ๋ น์ด ๋๋๋ฉด ๋ฒํผ์ ๋ค์ ํ์ฑํ ์ํ๋ก ๋์๊ฐ๋๋ค.
- ํ์ด์ค๋ถ ๋ก๊ทธ์ธ ์ฐ๋์ ์๋ฃํ์ต๋๋ค. ๊ตฌํ ๊ณผ์ ์์ GoogleAccount.txt์ ๋ด์ฉ์ด ๋ฐ๋์์ต๋๋ค.(์นดํก๋ฐฉ์ ๋ค์ ์ฌ๋ ค๋๋ฆด๊ฒ์)
ํ์ด์ค๋ถ ์ฐ๋ ๊ณผ์ ์์ ์๋์ ๊ฐ์ ๋ฌธ์ ์ ๋ค์ด ๋ฐ์ํ์ต๋๋ค.
-
๋๋ช ์ด์ธ ๋ฌธ์ 1-1. ํ ์ฌ์ฉ์๊ฐ ๊ตฌ๊ธ ๋ก๊ทธ์ธ๊ณผ ํ์ด์ค๋ถ ๋ก๊ทธ์ธ์ ๋์์ ์ฌ์ฉํ ๋, ์ด ์ฌ์ฉ์๊ฐ ๋์ผํ ์ฌ์ฉ์๋ผ๋ ๊ฒ์ ์ด๋ป๊ฒ ๊ตฌ๋ณํ ๊ฒ์ธ๊ฐ? 1-2. ์ด๋ฆ์ด ๊ฐ์ ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ ํ ๋, ์ด ์ฌ๋์ ๋ค๋ฅธ ๋๋ช ์ด์ธ๋ค๊ณผ ์ด๋ป๊ฒ ๊ตฌ๋ณํ ๊ฒ์ธ๊ฐ? -> ๋๋ช ์ด์ธ ์ฌ์ฉ์๋ฅผ ๊ตฌ๋ณํ ์ ์๋ ๋ฐฉ์์ด ํ์ํจ.
-
๊ตฌ๊ธ ๋ก๊ทธ์ธ๊ณผ ํ์ด์ค๋ถ ๋ก๊ทธ์ธ์ ๋์์ ์ฌ์ฉํ ๋, ๋น๋ฐ๋ฒํธ๋ฅผ ์ด๋ป๊ฒ ์์๋ด์ด ๋ก๊ทธ์ธ์ ํด์ผํ ๊น? -> ๊ธฐ์กด ๊ตฌ๊ธ ๋ก๊ทธ์ธ์ ๊ตฌ๊ธ API์์ ๋ณด๋ด์ฃผ๋ id๋ฅผ ๋น๋ฐ๋ฒํธ๋ก ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์, ํ์ด์ค๋ถ์ผ๋ก ๋ก๊ทธ์ธํ๋๊ฒ์ด ๋ถ๊ฐ๋ฅํ์ต๋๋ค. User ๋ชจ๋ธ์์ ๋น๋ฐ๋ฒํธ๋ฅผ ์์๋ด์ด ๋ก๊ทธ์ธํ๋ ๋ฐฉ๋ฒ๋ ์๊ฐํด๋ดค์ง๋ง, ๋น๋ฐ๋ฒํธ๊ฐ ์ํธํ๋์ด์์ด django ๋ด์์๋ ํ์ธ์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค. ์ผ๋จ ๋ชจ๋ ์์ ๋ก๊ทธ์ธ์ ๋น๋ฐ๋ฒํธ๋ฅผ 'social' ๋ก ์ค์ ํ์ฌ ์์๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ง๋ง, ๋ก๊ทธ์ธ ์ฐฝ์ ์ด๋ฆ๊ณผ social๋ง ์ ๋ ฅํด๋ ๋ก๊ทธ์ธ์ด ๊ฐ๋ฅํด์ก๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ๋ฐฉ์์ด ํ์ํ ๊ฒ ๊ฐ์ต๋๋ค. (๋น๋ฐ๋ฒํธ๋ฅผ 2๊ฐ ์ ์ฅํ๋ค๋๊ฐ, ์๋ก์ด ๋น๋ฐ๋ฒํธ๋ฅผ ์์ฑํ๋ค๋๊ฐ)
-
์์ด๋/๋น๋ฐ๋ฒํธ ์ฐพ๊ธฐ ๊ตฌํ์ ์๋ฃํ์ต๋๋ค. ์๋์ ๊ฐ์ ๋ฌธ์ ์ ๋ค์ด ๋ฐ์ํ์ต๋๋ค.
- ์ด๋ฉ์ผ ์ฌ์ ์ก์ด๋ ํ์๊ฐ์ , ๋น๋ฐ๋ฒํธ ์ฐพ๊ธฐ ์ํ ์ ์๋ฒ์์ fetchํ ๋์ ๋ฒํผ์ด ๋๋ฆฌ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. fetchํ๋ ๋์์๋ ๋ฒํผ์ด ๋นํ์ฑํ๋๊ฒ ํ๋ ๋ฐฉ์์ด ํ์ํฉ๋๋ค. (๋ก๋ฉ ์คํผ๋๋ผ๋๊ฐ)
- ์์ด๋ ์ฐพ๊ธฐ๋ฅผ ์ํํ ๋ ๊ฐํ์ ์ผ๋ก ํ์ด์ง๊ฐ ๋ค์ด๋๋ ํ์์ด ์์ต๋๋ค.
์์ด๋/๋น๋ฐ๋ฒํธ ์ฐพ๊ธฐ์ ์ฌ์ฉํ API๋ฅผ ๋ง๋ค์์ต๋๋ค. api/forgot์ผ๋ก POST ๋ช ๋ น์ ๋ณด๋ด๋ฉด ID๋ ๋น๋ฐ๋ฒํธ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค. ํ์์ ๋ค์๊ณผ ๊ฐ์ด ํด์ฃผ์ธ์. {'IDorPassword' : 'id' ๋๋ 'password', username : ์ฌ์ฉ์ ๋๋ค์(๋น๋ฐ๋ฒํธ ์ฐพ์ ๋๋ง, ID ์ฐพ์๋ ๋น์นธ์ผ๋ก), email : ์ฌ์ฉ์ ์ด๋ฉ์ผ} ์์ด๋ ์ฐพ๊ธฐ๋ response์ idํ๋์์ ๊บผ๋ด์ฐ๋ฉด ๋๊ณ , ๋น๋ฐ๋ฒํธ ์ฐพ๊ธฐ๋ ์ด๋ฉ์ผ์ฃผ์๋ก ์์ ๋น๋ฐ๋ฒํธ๊ฐ ์ ํ ๋ฉ์ผ์ด ๋ฐ์ก๋ฉ๋๋ค. ํด๋น ๋น๋ฐ๋ฒํธ๋ก ๋ก๊ทธ์ธํ์ฌ ์ถํ์ ๋น๋ฐ๋ฒํธ๋ฅผ ๋ฐ๊พธ๋๊ฐ ํ๋ฉด ๋ ๊ฒ๊ฐ์ต๋๋ค.
- ๊ตฌ๊ธ ๋ก๊ทธ์ธ์ ๊ตฌํํ์ฌ ๋ก๊ทธ์ธ ํผ์ ์ถ๊ฐํ์์ต๋๋ค. ๊ตฌํ ๊ณผ์ ์์ ๋ช ๊ฐ์ง ์ด๋ ค์ ๋ ์ ๋ค์ด ์์์ต๋๋ค.
-
Django ์๋ฒ ๋ด๋ถ์ ํน์ view์์ ๋ค๋ฅธ view๋ก ๋ฆฌํ์คํธ๋ฅผ ์ ๋ฌํ๋ ๋ฌธ์ - ๊ตฌ๊ธ ๋ก๊ทธ์ธ์ ์ํํ์ ๋ ์๋ฒ์ ๋์ผํ ์ด๋ฉ์ผ์ ๊ฐ์ง ์ฌ์ฉ์๊ฐ ์กด์ฌํ๋ค๋ฉด ๊ทธ ์ฌ์ฉ์๋ก ๋ก๊ทธ์ธ์ํค๊ณ , ์๋๋ฉด ํ์๊ฐ์ ์ํค๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํ๋๋ฐ, ์ด๋ฅผ ์ํด์๋ ๊ณ์ ์ด ์กด์ฌํ๋์ง ํ์ ํ ๋ค login view ๋๋ registration view๋ก request๋ฅผ ์ ๋ฌํด์ผ ํ์ต๋๋ค. ์ด๋ฅผ ์ํด ์๋กญ๊ฒ GoogleLoginAPI๋ผ๋ view๋ฅผ ์๋ก ๋ง๋ค๊ณ , /api/google URL๊ณผ ์ฐ๊ฒฐํ์ต๋๋ค. ๋ํ LoginAPI์ RegistrationAPI๋ฅผ ์์๋ฐ๊ฒ ํ์ฌ ํ์ ํ์ ์ ์ ํ view์์ ์ฒ๋ฆฌํ ์ ์๋๋ก ํ์์ต๋๋ค.
-
๊ตฌ๊ธ ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธํ์ ๋ ๋ก๊ทธ์์์ ์ํํด๋ ๋ค์ ๋ก๊ทธ์ธ์ด ๋๋ ๋ฌธ์ - ๊ธฐ์กด์ ๊ตฌ๊ธ์์ ์ ๊ณตํ๋ gapi.auth2.render()๋ฅผ ํตํด ๋ก๊ทธ์ธ ๋ฒํผ์ ๋ง๋ค๋ฉด ๋ก๊ทธ์ธ ๋ฒํผ์ด ๋ ๋๋ง ๋ ๋๋ง๋ค ๊ตฌ๊ธ ๊ณ์ ๋ก๊ทธ์ธ ์ฌ๋ถ๋ฅผ ์ฒดํฌํ๊ณ , ๊ตฌ๊ธ๊ณ์ ์ด ๋ก๊ทธ์ธ ๋์ด ์๋ ๊ฒฝ์ฐ ์๋์ผ๋ก ๋ก๊ทธ์ธ์ด ๋๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ง์ custom button์ ๋ง๋ค๊ณ , onClick ์ด๋ฒคํธ๋ฅผ ํตํด ๋ ๋๋ง ๋ ๋๊ฐ ์๋ ๋ฒํผ์ ํด๋ฆญํ์ ๋ ๋ก๊ทธ์ธ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํค๋๋ก ํ์ต๋๋ค. ๋ฒํผ์ ํด๋ฆญํ๋ฉด gapi.auth2.getAuthInstance()๋ฅผ ํตํด ์ฌ์ฉ์ ๊ณ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , gapi.auth2.signIn()์ ํตํด ๊ตฌ๊ธ ์๋ฒ์ ๋ก๊ทธ์ธ์ ์์ฒญํฉ๋๋ค. ์ด๋ฅผ ํตํด googleUser ๊ฐ์ฒด๋ฅผ ๋ฐ์ ์ด ๊ฐ์ฒด์ ๋ฉ์๋์ธ getAuthResponse๋ฅผ ํตํด access token์ ๋ฝ์๋ด๊ณ , /api/google๋ก POST ์์ฒญ์ ๋ณด๋ด ์๋ฒ์์ ์ ํจ์ฑ์ ํ์ ํ ๋ค ์ฌ์ฉ์์ ๋ํ ์ ๋ณด๋ฅผ ์ด์ฉํ ์ ์๋๋ก ๊ตฌํํ์ต๋๋ค.
-
- ๋์ปค ์๋น์ค์ ํ๋ก์ธ์ค ์ ์ ๊ฐ root ๋์ ํ์ฌ ์ฌ์ฉ์๊ฐ ๋๋๋ก ํ์ต๋๋ค. ์ด๋ฅผ ์ํด,
docker-compose
๋ช ๋ น ๋์./udco
๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
-
ํ์๊ฐ์ ํผ์ ๊ฐ ์ ๋ ฅ ํ๋์ ์ ๋ ฅ๊ฐ์ ๊ฒ์ฆํ๊ณ , ์ ํจํ์ง ์์ ๊ฒฝ์ฐ ์ ๋ ฅ ํ๋ ์๋์ ์กฐ๊ฑด์ ํ์ํ๋๋ก ๊ตฌํํ์ต๋๋ค .
-
๋ฉ์ผ ์ฌ์ ์ก ํ์ด์ง ๋ฐ ์ธ์ฆ ํ์ด์ง์ ์๋ฒ๋ฅผ ์ฐ๊ฒฐํ์ต๋๋ค.
- ๋ก๊ทธ์ธํ ์ฌ์ฉ์๊ฐ ์๋ก๊ณ ์นจ ํ์ ๋, ๋ก๊ทธ์ธ ํ๋ฉด์ผ๋ก ์ด๋ํ๋ ํ์์ ์์ ํ์ต๋๋ค.
- ๋ก๊ทธ์ธ ํ์ธ ํ์ด์ง๋ฅผ /๋ก ์์ ํ์ต๋๋ค. ํด๋น ํ์ด์ง์์ ๋ก๊ทธ์ธํ ์ฌ์ฉ์์ ์์ด๋๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
- ๋ฉ์ผ ์ธ์ฆ์ ๋ฐ์ง ์์ ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ ํ์ ๋, ๋ฉ์ผ ์ธ์ฆ์ ๋ฐ๊ฒ ํ๋ ์๋ด ํ์ด์ง๋ฅผ ์ ์ํ์ต๋๋ค. ์ฌ๊ธฐ์ ์ธ์ฆ ๋ฉ์ผ์ ๋ค์ ์ ์ก๋ฐ์ ์ ์์ต๋๋ค.
- JWT ํ ํฐ ์ ์ฅ ๋ฐฉ์์ local storage์์ httponly cookie๋ก ๋ณ๊ฒฝํ์ต๋๋ค.
- ๋ณด์์ httponly cookie๋ก ์ ์ฅํ๋ ๊ฒ์ด ๋ ์์ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค. local storage์ ์ ์ฅํ๋ฉด xss๊ณต๊ฒฉ์ ์ทจ์ฝํด์ง๊ณ , httponly cookie์ ์ ์ฅํ๋ฉด xss ๊ณต๊ฒฉ์ ๋ง์ ์ ์์ง๋ง csrf ๊ณต๊ฒฉ์ ์ทจ์ฝํด์ง๋๋ค. ํ์ง๋ง csrf ๊ณต๊ฒฉ์ด ์๋์ ์ผ๋ก ๋ ๋ง๊ธฐ ์ฌ์ฐ๋ฏ๋ก, ์์ฉ ์๋น์ค์์๋ ์ผ๋ฐ์ ์ผ๋ก httponly cookie์ JWT ํ ํฐ์ ์ ์ฅํฉ๋๋ค.
๋ฆฌ์กํธ ํผ
URL | ์ค๋ช |
---|---|
/ | ๋ฉ์ธ ํ์ด์ง์ ๋๋ค. ํ์ฌ ์ ์ฅ์ค์ธ ํ์ผ๋ค์ ํ์ธํ ์ ์์ต๋๋ค. |
/login | ๋ก๊ทธ์ธ ํ์ด์ง, ๋ก๊ทธ์ธ ์ฑ๊ณต ์ /login-test๋ก ๋ฆฌ๋ค์ด๋ ํธ๋ฉ๋๋ค. |
/signup | ํ์๊ฐ์ ํ์ด์ง์ ๋๋ค. |
/mail-resend | ๋ฉ์ผ์ธ์ฆ์ ๋ฐ์ง ์์ ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธํ์ ๋, ์ด ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค. ์ด ํ์ด์ง์์ ๊ฐ์ ์์ ๋ฑ๋กํ ์ด๋ฉ์ผ์ ํ์ธํ ์ ์๊ณ , ์ธ์ฆ ๋ฉ์ผ์ ๋ค์ ์ ์ก๋ฐ์ ์ ์์ต๋๋ค. |
/mail-validation/* | ๋ฑ๋กํ ์ด๋ฉ์ผ์ ์จ์๋ URL ํตํด ์ด๋ํ ์ ์๋ ๋ฉ์ผ ์ธ์ฆ ๊ด๋ จ ํ์ด์ง์ ๋๋ค. |
/forgot-id | ์์ด๋ ์ฐพ๊ธฐ ํ์ด์ง์ ๋๋ค. ๋ฉ์ผ ์ฃผ์๋ฅผ ์ ๋ ฅํ ๋ค ํ์ธ ๋ฒํผ์ ๋๋ฅด๋ฉด /display-id ํ์ด์ง๋ก ๋ฆฌ๋ค์ด๋ ํธ๋ฉ๋๋ค. |
/display-id | ์์ด๋ ์ฐพ๊ธฐ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ฃผ๋ ํ์ด์ง์ ๋๋ค. |
/forgot-password | ๋น๋ฐ๋ฒํธ ์ฐพ๊ธฐ ํ์ด์ง์ ๋๋ค. ์์ด๋์ ์ด๋ฉ์ผ ์ฃผ์๋ฅผ ์ ๋ ฅํ๋ฉด ์ด๋ฉ์ผ ์ฃผ์๋ก ์์ ๋น๋ฐ๋ฒํธ๋ฅผ ๋ฐ์ ์ ์์ต๋๋ค. /return-to-login ํ์ด์ง๋ก ๋ฆฌ๋ค์ด๋ ํธ๋ฉ๋๋ค. |
/return-to-login | ๋ก๊ทธ์ธ ํ์ด์ง๋ก ๋์๊ฐ ์ ์๋ ๋ฒํผ์ด ์๋ ํ์ด์ง์ ๋๋ค. |
/team | ํ ๊ด๋ จ ์์ ๋ค์ ์ฒ๋ฆฌํ๋ ๊ณต๊ฐ์ ๋๋ค. |
/profile | ์ฌ์ฉ์์ ํ๋กํ์ ํ์ธํ ์ ์๋ ํ์ด์ง์ ๋๋ค. |
/sharing | ๊ณต์ ํด๋๋ฅผ ํ์ธํ ์ ์์ต๋๋ค. ํ์ฌ ๊ตฌํ์ค์ ๋๋ค. |
/trash | ํด์งํต์ ๋ค์ด๊ฐ ํ์ผ๋ค์ ํ์ธํ๊ณ ๋ณต์ํ๊ฑฐ๋ ์์ ํ ์ ๊ฑฐํ ์ ์์ต๋๋ค. |
/favorite | ์ฆ๊ฒจ์ฐพ๊ธฐ ์ค์ ํ ํ์ผ๋ค์ ํ์ธํ ์ ์์ต๋๋ค. |
API
127.0.0.1/api ๋ค์ ์๋์ URL์ ๋ถ์ด๋ฉด ๋ฉ๋๋ค.
POST | GET | DELETE | PUT | |
---|---|---|---|---|
/users | - | ์ ์ฒด ์ฌ์ฉ์ ์ถ๋ ฅ | - | - |
/user | - | ํด๋น ํ์์ ์ ๋ณด ์ถ๋ ฅ | ํด๋น ํ์์ ์ ๋ณด ์ ๊ฑฐ | ํ๋กํ ๋ณ๊ฒฝ(๋น๋ฐ๋ฒํธ, ๋๋ค์, ์ ํ๋ฒํธ) |
/registration | ํ์๊ฐ์ | - | - | - |
/jwt-login | ์ผ๋ฐ ๋ก๊ทธ์ธ | - | - | - |
/social-login | ์์ ๊ณ์ ๋ก๊ทธ์ธ | - | - | - |
/logout | ๋ก๊ทธ์์ | - | - | - |
/forgot | ์์ด๋/๋น๋ฐ๋ฒํธ ์ฐพ๊ธฐ | - | - | - |
/send-auth-email | ์ธ์ฆ ๋ฉ์ผ ๋ณด๋ด๊ธฐ | - | - | - |
/jwt-refresh | JWT ํ ํฐ ์ฌ๋ฐ๊ธ | - | - | - |
/jwt-verify | JWT ํ ํฐ ์ ํจ์ฑ ํ์ธ | - | - | - |
/active/str:uidb64/str:token | - | ์ธ์ฆ๋ฉ์ผ์ ์ฌ์ฉํ๋ URL | - | - |
/check-password | ์ฌ์ฉ์ ๋น๋ฐ๋ฒํธ ํ์ธ | - | - | - |
/check-email | ์ฌ์ฉ์ ์ด๋ฉ์ผ ํ์ธ | - | - | - |
-
GET /api/user์ DELETE /api/user๋ฅผ ํตํด์ ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ํ์ธํ๊ฑฐ๋, ์ญ์ ํ ์ ์์ต๋๋ค. DELETE ์์ฒญ์ body์๋ password(ํ์ฌ ๋น๋ฐ๋ฒํธ)๊ฐ ๋ค์ด๊ฐ๋๋ค. PUT ์์ฒญ์ ๋ณด๋ด๋ฉด ํ์ฌ ์ฌ์ฉ์์ ํ๋กํ(๋น๋ฐ๋ฒํธ, ๋๋ค์)์ ์์ ํ ์ ์์ต๋๋ค. PUT ์์ฒญ์ body๋ curPassword(ํ์ฌ ๋น๋ฐ๋ฒํธ), newPassword(๋ฐ๊ฟ ๋น๋ฐ๋ฒํธ), nickname(๋๋ค์)์ผ๋ก ์ด๋ฃจ์ด์ง๋ฉฐ, ํ์ฌ ๋น๋ฐ๋ฒํธ์ ๋ฐ๊ฟ ๋น๋ฐ๋ฒํธ๋ 8์ ์ด์ 15์ ์ดํ์ ์์ด ๋์๋ฌธ์ ๋ฐ ์ซ์, ๋๋ค์์ 2์ ์ด์ 15์ ์ดํ์ ํ๊ธ ๋ฐ ์์ด ๋์๋ฌธ์, ์ซ์๋ก ๊ตฌ์ฑ๋์ด์ผ ํฉ๋๋ค. ์์ ๊ณ์ ์ curPassword์ newPassword๋ฅผ ๋น์นธ์ผ๋ก ๋ณด๋ด๋ฉด ๋๊ณ , ์ผ๋ฐ ๊ณ์ ์ curPassword๋ ํ์, ๋๋จธ์ง ๋ ํ๋๋ ๋ฐ๊ฟ ๋ถ๋ถ๋ง ๊ฐ์ ๋ฃ๊ณ ๋ฐ๊พธ์ง ์์ ๋ถ๋ถ์ ๋น์นธ์ผ๋ก ํด์ ์์ฒญ ๋ณด๋ด์ฃผ์๋ฉด ๋ฉ๋๋ค.
-
POST /api/register ๋ HTTP body์ json ํ์์ผ๋ก username, password, email ํ๋๋ฅผ ํ์๋ก ๋๊ฒจ์ค์ผ ํ๋ฉฐ, phone_num ํ๋๋ ์ ํ์ฌํญ์ ๋๋ค.
-
POST /api/jwt-login์ HTTP body์ json ํ์์ผ๋ก username, password๋ฅผ ๋๊ฒจ์ค์ผ ํ๋ฉฐ, ์๋ฒ๋ response๋ก HttpOnly ์์ฑ์ ์ง๋ ์ฟ ํค์ JWT ํ ํฐ์ ๋ด์์ ๋ณด๋ด์ค๋๋ค. ํ๋ฒ ๋ก๊ทธ์ธํ์ ๋ ํ ํฐ์ ์ ํจ์๊ฐ์ 30๋ถ์ ๋๋ค.
-
POST /api/jwt-refresh๋ HTTP body์ json ํ์์ผ๋ก token : <๋ฐ๊ธ๋ฐ์ ํ ํฐ>์ ๋ฃ์ด์ฃผ๋ฉด ์ ํจ ์๊ฐ์ด ๊ฐฑ์ ๋ ์๋ก์ด ํ ํฐ์ ๋ฐ์ ์ ์์ต๋๋ค. ๋ฐ๊ธ๋ฐ์ ํ ํฐ์ด ๋ง๋ฃ๋๋ฉด ์๋ก์ด ํ ํฐ์ ๋ฐ์ ์ ์์ผ๋, ๋ง๋ฃ ๋๊ธฐ ์ ์ ์ด URL์ ํตํด ์๋ก์ด ํ ํฐ์ ๋ฐ๊ธ๋ฐ์ผ๋ฉด ๋ฉ๋๋ค(ํ์ด์ง์ ๋ฒํผ์ ๋ฐ๋ก ๋ง๋ค๊ฑฐ๋ ํ๋ฉด ๋ ๊ฒ๊ฐ์์).
-
POST /api/jwt-verify๋ ํ์ฌ ํด๋ผ์ด์ธํธ ๋ธ๋ผ์ฐ์ ์ ์ ์ฅ๋์ด ์๋ HttpOnly ์ฟ ํค ์์ ์๋ jwt ํ ํฐ์ ์ ํจ์ฑ์ ํ์ธํฉ๋๋ค.
-
POST /api/logout์ ํตํด ๋ก๊ทธ์์์ ์ํํ ์ ์์ผ๋ฉฐ, ํด๋ผ์ด์ธํธ ๋ธ๋ผ์ฐ์ ์์ JWT ํ ํฐ์ด ์ ์ฅ๋ ์ฟ ํค๋ฅผ ์ญ์ ํฉ๋๋ค.
-
/active/str:uidb64/str:token์ ์ธ์ฆ๋ฉ์ผ์ฉ URL๋ก, ์ด๋ฉ์ผ ์ธ์ฆ์๋ง ์ฌ์ฉ๋ฉ๋๋ค.
-
/check-password ๋ฐ /check-email์ ํ๋กํ ํ์ธ์ ์ํด ๋น๋ฐ๋ฒํธ๋ ์ด๋ฉ์ผ์ ํ์ธํ ๋ ์ฌ์ฉํฉ๋๋ค. ๋น๋ฐ๋ฒํธ๋ ์ฌ์ดํธ ๊ณ์ ์ฉ, ์ด๋ฉ์ผ ์ฃผ์๋ ์์ ๊ณ์ ์ฉ์ ๋๋ค. ๊ฐ๊ฐ password, email ํ๋์ ๊ฐ์ ๋ฃ๊ณ POST ์์ฒญ์ ๋ณด๋ด๋ฉด ๋ฉ๋๋ค.
POST | GET | DELETE | PUT | |
---|---|---|---|---|
/team | ์๋ก์ด ํ ์์ฑ | ์ ์ฒด ํ ์ ๋ณด ํ์ธ | - | - |
/team-management/<ํ id> | - | ํ ์ ๋ณด ์ถ๋ ฅ(ํ๋ช , ํ์ฅ, ํ์๋ชฉ๋ก, ๊ณต์ ํด๋ ๋ชฉ๋ก) | ํ ์ญ์ (ํ์ฅ๋ง ๊ฐ๋ฅ) | ํ ์ด๋ฆ ๋ณ๊ฒฝ |
/team/<ํ id>/invitation | - | - | - | ์๋ก์ด ํ์ ์ด๋ (ํ์ฅ๋ง ๊ฐ๋ฅ) |
/team/<ํ id>/acceptance | - | - | ์ด๋ ๊ฑฐ๋ถ | ์ด๋ ์๋ฝ |
/team/<ํ id>/secession | - | - | - | ํ์์ ํํด |
/team/<ํ id>/sharing | ๊ณต์ ํด๋ ์ค์ | - | ๊ณต์ ํด๋ ํด์ | - |
/join-team | - | ํ์ฌ ์ฌ์ฉ์๊ฐ ์ํ ํ ๋ชฉ๋ก ์ถ๋ ฅ | - | - |
/serach-user/<ํ id>/<๊ฒ์๋จ์ด> | - | ๊ฒ์ ๋จ์ด์ ๋๋ค์์ ํฌํจ๋์ด ์๋ ์ฌ์ฉ์๋ฅผ ๊ฒ์ํ์ฌ pk, ๋๋ค์, ์ด๋ฉ์ผ ๋ฐํ | - | - |
-
/team์ผ๋ก์ POST ์์ฒญ์ ํตํด ์๋ก์ด ํ์ ์์ฑํ ์ ์์ผ๋ฉฐ, GET ์์ฒญ์ ํตํด ํ์ฌ ์์ฑ๋์ด ์๋ ์ ์ฒด ํ์ ์ ๋ณด๋ฅผ ํ์ธํ ์ ์์ต๋๋ค. POST์์ฒญ์ body์๋ teamName(ํ ์ด๋ฆ), teamLeader(ํ ๋ง๋ ์ฌ๋)์ด ํฌํจ๋์ด์ผ ํฉ๋๋ค.
-
/team/<ํ id>์ผ๋ก์ GET ์์ฒญ์ ํตํด ํด๋น ํ์ ์ ๋ณด๋ฅผ ํ์ธํ ์ ์์ผ๋ฉฐ, DELETE ์์ฒญ์ ํตํด ํด๋น ํ์ ์ ๊ฑฐํ ์ ์์ต๋๋ค.
-
/team/<ํ id>/invitation์ผ๋ก์ PUT ์์ฒญ์ ํตํด ์๋ก์ด ์ฌ์ฉ์๋ฅผ ํ์ผ๋ก ๋ค์ด์ค๋๋ก ์ด๋ํ ์ ์์ต๋๋ค. ์ด๋๋ฐ์ ์ฌ์ฉ์๋ ์๋์ /team/<ํ id>/acceptance URL์ ํตํ์ฌ ์ด๋๋ฅผ ์๋ฝํ๊ฑฐ๋ ๊ฑฐ๋ถํ ์ ์์ต๋๋ค.
-
/team/<ํ id>/acceptance์ผ๋ก์ PUT ์์ฒญ์ ํตํด ์ด๋๋ฅผ ์๋ฝํ ์ ์์ผ๋ฉฐ, DELETE ์์ฒญ์ ํตํด ์ด๋๋ฅผ ๊ฑฐ๋ถํ ์ ์์ต๋๋ค.
-
/team/<ํ id>/secession์ผ๋ก์ PUT ์์ฒญ์ ํตํด ์์๋ ํ์์ ํํดํ ์ ์์ต๋๋ค.
-
/team/<ํ id>/sharing์ผ๋ก์ POST ์์ฒญ์ ํตํด ๊ณต์ ํด๋๋ฅผ ์ค์ ํ ์ ์์ผ๋ฉฐ, DELETE ์์ฒญ์ ํตํด ์ค์ ๋ ๊ณต์ ํด๋๋ฅผ ํด์ ํ ์ ์์ต๋๋ค. POST ์์ฒญ body์๋ ๊ณต์ ํด๋๋ก ์ค์ ํ ๋๋ ํ ๋ฆฌ์ ID๊ฐ ํฌํจ๋์ด์ผ ํฉ๋๋ค.
-
/team/join-team์ผ๋ก์ GET ์์ฒญ์ ํตํด ํ์ฌ ์ฌ์ฉ์๊ฐ ์ํ ํ ๋ชฉ๋ก์ ํ์ธํ ์ ์์ต๋๋ค.
-
/search-user/<ํ id>/<๊ฒ์๋จ์ด>๋ก์ GET ์์ฒญ์ ํตํด ๊ฒ์๋จ์ด๊ฐ ๋๋ค์์ ํฌํจ๋์ด ์๋ ์ฌ์ฉ์๋ฅผ ๊ฒ์ํ์ฌ pk, ๋๋ค์, ์ด๋ฉ์ผ์ ๋ฐํํฉ๋๋ค. ํ์ฅ ๋ฐ ์ด๋ฏธ ํ์ ์ํด์๋ ์ฌ์ฉ์๋ ๊ฒ์๋์ง ์์ต๋๋ค.
POST | GET | DELETE | PUT | |
---|---|---|---|---|
/file/ | - | ํ์ฌ ๋ก๊ทธ์ธํ ์ฌ์ฉ์๊ฐ ๊ฐ์ง๊ณ ์๋ ํน์ ํ์ผ์ ์ ๋ณด ์ถ๋ ฅ | ํ์ผ ์ญ์ | ํ์ผ ์ต์ ๋ณ๊ฒฝ |
/file-list | - | ํ์ฌ ๋ก๊ทธ์ธํ ์ฌ์ฉ์๊ฐ ๊ฐ์ง๊ณ ์๋ ์ ์ฒด ํ์ผ ์ ๋ณด ์ถ๋ ฅ | - | - |
/upload/flow | ํ์ผ ์ ๋ก๋ ๋งํฌ ์์ฑ | - | - | - |
/upload/flow/ | chunk ์ ์ก | ํน์ chunk๋ฅผ ์ด๋ฏธ ์ ์ก๋ฐ์๋์ง ํ์ธ | - | - |
/download | ํ์ผ ๋ค์ด๋ก๋ | - | - | - |
/mkdir | ๋๋ ํ ๋ฆฌ ์์ฑ | - | - | - |
/directory/ | - | ํน์ ๋๋ ํฐ๋ฆฌ ํ์ ํด๋ ๋ฐ ํ์ผ ์ ๋ณด ์ถ๋ ฅ | ๋๋ ํ ๋ฆฌ ์ญ์ | ๋๋ ํ ๋ฆฌ ์ต์ ๋ณ๊ฒฝ |
/thumbnail/ | ์ธ๋ค์ผ ์์ฑ | - | - | - |
/partial/ | - | - | ํน์ partial upload file ์ ๊ฑฐ. ์ ๋ก๋๋ฅผ ์ค๋จํ ๋ ์ฌ์ฉ | - |
/multi-entry | - | - | ํ์ผ์ด๋ ํด๋๋ฅผ ์ฌ๋ฌ๊ฐ ์ ํํ์ฌ ํ๋ฒ์ ์ญ์ | - |
/favorite | ์ฆ๊ฒจ์ฐพ๊ธฐํ ํ์ผ ๋ชฉ๋ก ํ์ธ | - | - | - |
/recycle | - | ์ฌ์ฉ์์ ํด์งํต ๋ด์ฉ ์ถ๋ ฅ | ํด์งํต ๋น์ฐ๊ธฐ | - |
/recover | ํ์ผ ๋ณต์ | - | - | - |
/replacement | - | - | - | ํ์ผ์ด๋ ํด๋ ๊ฒฝ๋ก ๋ณ๊ฒฝ |
/preview | - | ์ด๋ฏธ์ง ๋ฐ ๋์์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ์ ์ฌ์ฉํ ํ์ผ ๊ฒฝ๋ก ๋ฐํ | - | - |
/search/str:pk/str:keyword | - | ํค์๋๋ฅผ ํตํ ํ์ผ ๋ฐ ํด๋ ๊ฒ์ | - | - |
/sharing/(?P[0-9a-z-]{36} | - | - | ๊ณต์ ์ค์ ํด์ | ๊ณต์ ์ค์ |
-
/file/
- GET ์์ฒญ์ ๋ณด๋ด๋ฉด, ํ์ฌ ๋ก๊ทธ์ธํ ์ฌ์ฉ์๊ฐ ๊ฐ์ง๊ณ ์๋ ํน์ ํ์ผ์ ์ ๋ณด๋ฅผ ๋ฐ์ ์ ์์ต๋๋ค.
- DELETE ์์ฒญ์ ๋ณด๋ด๋ฉด ํด๋น ํ์ผ์ ์ญ์ ํ ์ ์์ต๋๋ค.
- PUT ์์ฒญ์ ๋ณด๋ด๋ฉด ํด๋น ํ์ผ์ ์ต์
์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ๋ณ๊ฒฝ๊ฐ๋ฅํ ์ต์
์ ํ์ผ ์ด๋ฆ(
name
ํ๋)๊ณผ ์ฆ๊ฒจ์ฐพ๊ธฐ ์ฌ๋ถ(favorite
ํ๋)์ ๋๋ค.
-
/file-list๋ก GET ์์ฒญ์ ๋ณด๋ด๋ฉด ํ์ฌ ๋ก๊ทธ์ธํ ์ฌ์ฉ์๊ฐ ๊ฐ์ง๊ณ ์๋ ์ ์ฒด ํ์ผ ์ ๋ณด๋ฅผ ๋ฐ์ ์ ์์ต๋๋ค.
-
/upload/flow๋ ์ ๋ก๋ ์์ ์ ์ ํ์ผ์ ํฌ๊ธฐ๋ฅผ ์๋ฒ๋ก ๋ณด๋ด์ด ์ฌ์ฉ์์๊ฒ ํ ๋น๋ ๊ณต๊ฐ์ ํ์ผ์ ์ ์ฅํ ์ ์๋์ง ํ์ธํฉ๋๋ค. POST ์์ฒญ์ ์ฌ์ฉํฉ๋๋ค.
-
/upload/flow/๋ chunk๋ฅผ ์ ์กํ๊ฑฐ๋ ํน์ chunk๋ฅผ ์ด๋ฏธ ์ ์ก๋ฐ์๋์ง ํ์ธํฉ๋๋ค. ์ด๋ flow.js์์ ๋ด๋นํ๋ฏ๋ก ์ง์ ์์ฒญ์ ๋ณด๋ผ ํ์๋ ์์ต๋๋ค.
-
/download/๋ก GET ์์ฒญ์ ๋ณด๋ด๋ฉด ๊ทธ ํ์ผ ID๋ฅผ ๊ฐ์ง ํ์ผ์ ๋ค์ด๋ก๋ ๋ฐ์ ์ ์์ต๋๋ค.
-
/mkdir์ POST ์์ฒญ์ ๋ณด๋ด๋ฉด ํ์ฌ ์ฌ์ฉ์๊ฐ ์์ ํ ์ ๋๋ ํ ๋ฆฌ๋ฅผ ์์ฑํฉ๋๋ค. HTTP body๋ ๋ค์ ํ๋๋ฅผ ํฌํจํด์ผํฉ๋๋ค:
parent
: ๋๋ ํ ๋ฆฌ๊ฐ ์์ฑ๋ ์์ ๋๋ ํ ๋ฆฌ. ์์ ๋๋ ํ ๋ฆฌ์ ๊ฒฝ๋ก๋(/
,/parent_dir
๋ฑ) ID(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
) ํ์์ผ๋ก ์ง์ ๊ฐ๋ฅํฉ๋๋ค.name
: ์ ๋๋ ํ ๋ฆฌ์ ์ด๋ฆ. ์์ ๋๋ ํ ๋ฆฌ์ ๊ฐ์ ์ด๋ฆ์ ๋๋ ํ ๋ฆฌ๋ ํ์ผ์ด ์์ด์ผ ํฉ๋๋ค.
-
/directory/
-
GET ์์ฒญ์ ๋ณด๋ด๋ฉด ํด๋น id๋ฅผ ๊ฐ์ง ๋๋ ํ ๋ฆฌ์ ์ ๋ณด๋ฅผ ๋ฐํํฉ๋๋ค. ๋ฐํ๋๋ ์ ๋ณด์ ํ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- 'pk`: ํ์ฌ ๋๋ ํ ๋ฆฌ์ ID.
- 'owner': ๋๋ ํ ๋ฆฌ ์์ ์์ ID.
- 'name': ๋๋ ํ ๋ฆฌ์ ์ด๋ฆ.
- 'parent': ์์ ๋๋ ํ ๋ฆฌ์ ID.
subdirectories
: ํ์ ๋๋ ํ ๋ฆฌ์ ์ด๋ฆ์ ํค, id๋ฅผ ๊ฐ์ผ๋ก ํ๋ ๋์ ๋๋ฆฌ.files
: ๋๋ ํ ๋ฆฌ์ ๋ ํ์ผ์ ๋ชฉ๋ก; ์ด๋ฆ์ ํค๋ก ํ๋ฉฐ, /file/ ์๋ํฌ์ธํธ๊ฐ ๋ฐํํ๋ ๊ฒ๊ณผ ๊ฐ์ ๊ฐ์ ๊ฐ์ผ๋ก ํ๋ ๋์ ๋๋ฆฌ.partial_uploads
: ํด๋น ๋๋ ํ ๋ฆฌ์ ์งํ์ค์ธ ์ ๋ก๋์ ๋ชฉ๋ก; ์ด๋ฆ์ ํค๋ก ํ๋ฉฐ, id๋ฅผ ๊ฐ์ผ๋ก ํ๋ ๋์ ๋๋ฆฌ.
์๋ฅผ ๋ค์ด, ๋ค์๊ณผ ๊ฐ์ ํ์์ผ๋ก ๋ฐํ๋ฉ๋๋ค.
{ "pk": "12f79f24-5521-4274-9de4-a77eda8a1fa5", "owner": "aca27a1e-c940-4f91-b490-92a404209848", "name": "Pictures", "parent": "86882148-dba7-46ad-814b-ce6389a1c1d0", "subdirectories": { "2020-03": "5de3a6a2-58ea-4385-9d6f-6d898e610279", "2020-04": "88063b0f-7cf6-4829-b949-0353c725ca81" }, "files": { "wallpaper.png": { "pk": "f840d10f-1149-4919-ba4b-895a9ca5df98", "size": 253952, "uploaded_at": "2020-01-29T12:34:56.000000Z", "has_thumbnail": true } }, "partial_uploads": { "cat.jpeg": "df66ea02-61bf-405f-85ea-94ee497089d5" } }
-
DELETE ์์ฒญ์ ๋ณด๋ด๋ฉด ํด๋น ๋๋ ํ ๋ฆฌ๋ฅผ ์ญ์ ํฉ๋๋ค.
-
PUT ์์ฒญ์ ๋ณด๋ด๋ฉด ํด๋น ๋๋ ํ ๋ฆฌ์ ์ต์ ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ๋ณ๊ฒฝ๊ฐ๋ฅํ ์ต์ ์ ์ด๋ฆ(
name
ํ๋), ์ฆ๊ฒจ์ฐพ๊ธฐ ์ฌ๋ถ(favorite
ํ๋)์ ๋๋ค.
-
-
/favorite์ GET ์์ฒญ์ ๋ณด๋ด๋ฉด ํ ์ฌ์ฉ์๊ฐ ์ฆ๊ฒจ์ฐพ๊ธฐํ ํ์ผ๊ณผ ๋๋ ํ ๋ฆฌ ๋ชฉ๋ก์ ๋ฐํํฉ๋๋ค. ๊ฐ ๋๋ ํ ๋ฆฌ์ ํ์ผ์ ํ์์ /directory/ ์๋ํฌ์ธํธ์ ๊ฐ์ต๋๋ค.
-
/recycle
- GET ์์ฒญ์ ๋ณด๋ด๋ฉด ์ฌ์ฉ์์ ํด์งํต ๋ด์ฉ์ ๋ฐํํฉ๋๋ค. ๋ฐํ๊ฐ์
directories
์files
ํค๋ฅผ ๊ฐ์ง๋ ๋์ ๋๋ฆฌ์ด๋ฉฐ, ๊ฐ ํค์ ๋ํ ๊ฐ์ ์ด๋ฆ์ ํค, ๊ทธ ์ด๋ฆ์ ๊ฐ์ง๋ ๋๋ ํ ๋ฆฌ/ํ์ผ์ ID ๋ชฉ๋ก์ ๊ฐ์ผ๋ก ํ๋ ๋์ ๋๋ฆฌ์ ๋๋ค. - DELETE ์์ฒญ์ ๋ณด๋ด๋ฉด ์ฌ์ฉ์์ ํด์งํต์ ๋น์๋๋ค.
- GET ์์ฒญ์ ๋ณด๋ด๋ฉด ์ฌ์ฉ์์ ํด์งํต ๋ด์ฉ์ ๋ฐํํฉ๋๋ค. ๋ฐํ๊ฐ์
-
/recover์ POST ๋ช ๋ น์ ๋ณด๋ด๋ฉด ํด์งํต์ ํ์ผ์ ๋ณต๊ตฌํฉ๋๋ค. POST body๋ JSON ํ์์ ๋ฆฌ์คํธ์ฌ์ผ ํ๋ฉฐ, ๋ฆฌ์คํธ์ ๊ฐ ๊ฐ์ ๋ณต๊ตฌํ๋ ค๋ ๋๋ ํ ๋ฆฌ/ํ์ผ์ ID, ๋๋ ID์ ๋ณต๊ตฌ ํ ๋๋ ํ ๋ฆฌ/ํ์ผ์ด ์์นํ ๋๋ ํ ๋ฆฌ์ ID ์์ด์ด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
[ "SOME_UUID", ["ANOTHER_UUID", "DIRECTORY"] ]