์ฝ๋์ ๋งค์ผ ๊ฐ์ด ์ธ์ํ๋ ๊ฐ๋ฐ์๋ค(Developers)์ ์ํ ํ๋์์ ๋ด๋ ค์จ ๋์์ค(rope) ๊ฐ์ ์ฑ! ๊ฐ๋ฐ์๋ค๋ผ๋ฆฌ ๋ค์ํ ์ง๋ฌธ์ ์ฌ๋ฆฌ๊ณ , ํธ๋ฌ๋ธ์ํ
๋ ํ๊ณ , ๊ฐ์ข
์ง์์ ๊ณต์ ํ ์ ์๋ ์ปค๋ฎค๋ํฐ ์
๋๋ค. ๐
2021-02-11 ~ 2021-02-17
DBMS
Deploy
AWS S3
Method | URL | REQ | RES | |
---|---|---|---|---|
ํ์๊ฐ์ | POST | /api/join | { email: password: nickname: git: blog: blogtype: } | { โokโ: true, message: โํ์๊ฐ์ ์ฑ๊ณตโ } OR { โokโ: false, errorMessage:โํ์๊ฐ์ ์คํจโ } |
์ด๋ฉ์ผ ์ค๋ณต๊ฒ์ฌ | POST | /api/join/check | { email: } | { โokโ: true, message: โ์ฌ์ฉ๊ฐ๋ฅํ ์ด๋ฉ์ผ์ ๋๋ค.โ } OR { โokโ: false, errorMessage:โ์ด๋ฏธ ์ฌ์ฉ์ค์ธ ์ด๋ฉ์ผ์ ๋๋ค.โ } |
๋๋ค์ ์ค๋ณต๊ฒ์ฌ | POST | /api/join/check | { nickname: } | { โokโ: true, message: โ์ฌ์ฉ๊ฐ๋ฅํ ๋๋ค์์ ๋๋ค.โ } OR { โokโ: false, errorMessage:โ์ด๋ฏธ ์ฌ์ฉ์ค์ธ ๋๋ค์์ ๋๋ค.โ } |
๋ก๊ทธ์ธ | POST | /api/login | { email: password: } | token: nickname: userId: userIcon: { 'ok':true, message:โ๋ก๊ทธ์ธ ์ฑ๊ณตโ } OR { โokโ: false, errorMessage:โ๋ก๊ทธ์ธ ์คํจโ } |
์ ์ฒด ํฌ์คํธ ๋ถ๋ฌ์ค๊ธฐ | GET | /api/post | { 'ok': true, result: [{ //imgUrl: userId: userIcon: postId: nickname: content: //replyNumber: //like_cnt: date: }] } | |
๋ค๋ฅธ ์ผ๋ถ ์ ์ ๊ด๋ จ ์ ๋ณด ๋ถ๋ฌ์ค๊ธฐ | GET | /api/user | { headers:{ authorization:token } headers: { "Authorization": Bearer ${localStorage.getItem("token")}, } | { 'ok': true, result: [{ userIcon: nickname: email: git: blog: }] } |
๋ค๋ฅธ ๋ชจ๋ ์ ์ ๊ด๋ จ ์ ๋ณด ๋ถ๋ฌ์ค๊ธฐ | GET | /api/users | { headers:{ authorization:token } headers: { "Authorization": Bearer ${localStorage.getItem("token")}, } | { 'ok': true, result: [{ userIcon: nickname: email: git: blog: }] } |
๋ด ๋ก๊ทธ์ธ ์ ๋ณด ๋ถ๋ฌ์ค๊ธฐ | GET | /api/auth | { headers:{ authorization:token } headers: { "Authorization": Bearer ${localStorage.getItem("token")}, } | { 'ok': true, result: [{ email: userId: userIcon: nickname: }] } |
post ์์ฑ | POST | /api/post | { userId: nickname: content: userIcon: imgUrl: date: //comment_cnt: } | { โokโ: true, message: โ์์ฑ ์ฑ๊ณตโ } OR { โokโ: false, message:โ์์ฑ ์คํจโ } |
post ๋ถ๋ฌ์ค๊ธฐ | GET | /api/detail:/:postId | { postId: } | { โokโ: true, result: [{ content: nickname: userId: userIcon: imgUrl: date: postId: //comment_cnt: }] } |
post ์์ ํ๊ธฐ | PUT | /api/item/:postId | { content: userId: imgUrl: postId } | { โokโ: true, message: โ์์ ์ฑ๊ณตโ, } OR { โokโ: false, message:โ์์ ์คํจโ } |
post ์ญ์ ํ๊ธฐ | DELETE | api/item/:postId | { postId: } | { โokโ: true, message: โ์ญ์ ์ฑ๊ณตโ } OR { โokโ: false, message:โ์ญ์ ์คํจโ } |
comment ๋ถ๋ฌ์ค๊ธฐ | GET | /api/comment/:postId | { postId: } | { โokโ: true, result: [{ comment: userId: nickname: postId: commentId: userIcon: date: }] } |
comment ์์ ํ๊ธฐ | PUT | /api/comment/:commentId | { comment: } | { โokโ: true, message: โ์์ ์ฑ๊ณตโ } OR { โokโ: false, message:โ์์ ์คํจโ } |
โ Why? JWT + Bearer ์ธ์ฆ ์ ํ
๋ฐ๊ธํ JWT ํ ํฐ์ OAuth 2.0 ์ธ์ฆ์ผ๋ก ๋ฐ๊ธํ ์ก์ธ์ค ํ ํฐ์ด ์๋๊ธฐ ๋๋ฌธ์ ๊ณต์์ ์ผ๋ก ์ด ๋ฐฉ๋ฒ์ "๋นํ์ค" ๋ฐฉ์์ผ๋ก ๋ณผ ์ ์์ต๋๋ค. ๊ทธ๋ ์ง๋ง ํ ํฐ์ ํค๋๋ก ๊ตํ ํ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ ์ธ์ฆ ์ ํ์ด Bearer๊ฐ ์ ์ผ ์ ์ ํ๋ค ์๊ฐํ์ฌ HTTP ์ธ์ฆ ์ ํ์ค, Bearer ํ์ ์ ์ฌ์ฉํ์ฌ ํ ํฐ์ ์ ๋ฌ ํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์์ต๋๋ค.
โ Why? mongoDB
1์ฐจ ๋ชฉํ๋ฅผ ๊ธฐ๋ณธ CRUD ๊ธฐ๋ฅ ๊ตฌํ๊ณผ ํ๋ก ํธ์๋์ ๋ฐฑ์๋์ ์๋ฆ๋ค์ด ํ์ ์ผ๋ก ํ์๊ณ ์ถํ์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ๊ณํ์ ์ธ์ ๋ ์ ํฌ ํ๋ก์ ํธ์์ RDBMS์ ๋ค๋ฅด๊ฒ ์์ ๋ก์ด ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ก์ ์ ์๋ค๋ ํน์ง์ด ์๋ Document ๊ธฐ๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ธ mongoDB๊ฐ ๊ฐ์ฅ ์ ํฉํ๋ค ํ๋จํ์์ต๋๋ค.
โ Why? dotenv
๋ ธ์ถ๋๋ฉด ๋ณด์์ ์ํ์ ์ธ ํ๊ฒฝ๋ณ์๋ค์ ํ๊ณณ์ ๋ชจ์ ๊ด๋ฆฌํ์ต๋๋ค.