- ๊ทธ๋ ๊ทธ ์์ ์ํต๊ณต๊ฐ ๊ทธ๋๋ก ๋ค๋ฅธ์ฌ๋๋ค์๊ฒ ์ต๋ช ์ผ๋ก ์์ ์ ์๊ฐ์ ์ ๋ฌํด๋ณด์ธ์!
- ๋ค๋ฅธ์ฌ๋๋ค์ ๊ธ์ ์ฝ์ด๋ณด๊ณ ์ข์์๋ฅผ ๋๋ฌ๋ณด์์!
โข username, nickname, password๋ฅผ Client์์ ์ ๋ฌ๋ฐ๊ธฐ
โข username์ ์ต์ 4์ ์ด์, 10์ ์ดํ์ด๋ฉฐ ์ํ๋ฒณ ์๋ฌธ์(a~z), ์ซ์(0~9)๋ก ๊ตฌ์ฑ๋์ด์ผ ํ๋ค.
โข nickname์ ์ต์ 2์ ์ด์, 10์ ์ดํ๋ก ๊ตฌ์ฑ๋์ด์ผ ํ๋ค.
โข password๋ ์ต์ 8์ ์ด์, 24์ ์ดํ์ด๋ฉฐ ์ํ๋ฒณ ๋์๋ฌธ์(a~z, A~Z), ์ซ์(0~9)๋ก ๊ตฌ์ฑ๋์ด์ผ ํ๋ค.
โข DB์ ์ค๋ณต๋ username์ด ์๋ค๋ฉด ํ์์ ์ ์ฅํ๊ณ Client ๋ก ์ฑ๊ณตํ๋ค๋ ๋ฉ์์ง, ์ํ์ฝ๋ ๋ฐํํ๋ค.
โข ํ์ ๊ถํ ๋ถ์ฌํ๊ธฐ (ADMIN, USER) - ADMIN ํ์์ ๋ชจ๋ ์นด๋ ์์ /์ญ์ ๊ฐ๋ฅ
โข username, password๋ฅผ Client์์ ์ ๋ฌ๋ฐ๊ธฐ
โข DB์์ username์ ์ฌ์ฉํ์ฌ ์ ์ฅ๋ ํ์์ ์ ๋ฌด๋ฅผ ํ์ธํ๊ณ ์๋ค๋ฉด password ๋น๊ตํ๊ธฐ
โข ๋ก๊ทธ์ธ ์ฑ๊ณต ์, ๋ก๊ทธ์ธ์ ์ฑ๊ณตํ ์ ์ ์ ์ ๋ณด์ JWT๋ฅผ ํ์ฉํ์ฌ ํ ํฐ์ ๋ฐ๊ธํ๊ณ ,
๋ฐ๊ธํ ํ ํฐ์ Header์ ์ถ๊ฐํ๊ณ ์ฑ๊ณตํ๋ค๋ ๋ฉ์์ง, ์ํ์ฝ๋ ์ ํจ๊ป Client์ ๋ฐํํ๊ธฐ
โข Spring Security๋ฅผ ์ฌ์ฉํ์ฌ ํ ํฐ ๊ฒ์ฌ ๋ฐ ์ธ์ฆํ๊ธฐ : ํ ํฐ์ ๊ฒ์ฌํ ํ, ์ ํจํ ํ ํฐ์ด๋ฉด์ ํด๋น ์ฌ์ฉ์๊ฐ ์์ฑํ ์นด๋๋ง ๋ฑ๋ก ๊ฐ๋ฅ
โข nickname, ์์ฑ ๋ด์ฉ์ ์ ์ฅํ๊ณ ์ ์ฅ๋ ๊ฒ์๊ธ์ Client ๋ก ๋ฐํํ๊ธฐ
โข nickname, ์์ฑ ๋ด์ฉ, ์์ฑ์ผ์, ์์ ์ผ์๋ฅผ ์กฐํํ๊ธฐ
โข ์์ฑ ๋ ์ง ๊ธฐ์ค ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ๊ธฐ
โข ์นด๋์ '์ข์์' ๊ฐ์๋ ํจ๊ป ๋ฐํํ๊ธฐ
โข ์ ํ
ํ ์นด๋์ nickname, ์์ฑ ๋ด์ฉ, ์์ฑ์ผ์, ์์ ์ผ์๋ฅผ ์กฐํํ๊ธฐ
โข ์์ฑ ๋ ์ง ๊ธฐ์ค ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ๊ธฐ
โข ์นด๋์ '์ข์์' ๊ฐ์๋ ํจ๊ป ๋ฐํํ๊ธฐ
โข Spring Security๋ฅผ ์ฌ์ฉํ์ฌ ํ ํฐ ๊ฒ์ฌ ๋ฐ ์ธ์ฆํ๊ธฐ : ํ ํฐ์ ๊ฒ์ฌํ ํ, ์ ํจํ ํ ํฐ์ด๋ฉด์ ํด๋น ์ฌ์ฉ์๊ฐ ์์ฑํ ์นด๋๋ง ์์ ๊ฐ๋ฅ
โข ์ ๋ชฉ, ์์ฑ ๋ด์ฉ์ ์์ ํ๊ณ ์์ ๋ ์นด๋๋ฅผ Client ๋ก ๋ฐํํ๊ธฐ
โข ์นด๋์ '์ข์์' ๊ฐ์๋ ํจ๊ป ๋ฐํํ๊ธฐ
โข Spring Security๋ฅผ ์ฌ์ฉํ์ฌ ํ ํฐ ๊ฒ์ฌ ๋ฐ ์ธ์ฆํ๊ธฐ : ํ ํฐ์ ๊ฒ์ฌํ ํ, ์ ํจํ ํ ํฐ์ด๋ฉด์ ํด๋น ์ฌ์ฉ์๊ฐ ์์ฑํ ์นด๋๋ง ์ญ์ ๊ฐ๋ฅ
โข ์ ํํ ๊ฒ์๊ธ์ ์ญ์ ํ๊ณ Client ๋ก ์ฑ๊ณตํ๋ค๋ ๋ฉ์์ง, ์ํ์ฝ๋ ๋ฐํํ๊ธฐ
ํธ๋ฌ๋ธ ์ํ ๋ด์ฉ | ํด๊ฒฐ ๋ฐฉ๋ฒ |
---|---|
์นด๋ ์ญ์ ๋ถ๋ถ, ๊ธ์ด์ด์ ์์ด๋์ ์ค์ ์ ์ ์์ด๋ ๋น๊ต | equals == |
๋ก๊ทธ์ธ ์ ํ ํฐ ๋ฐ๊ธ ์๋๋ ์ฆ์ ๋ฐ์ | HTTP Header ๋ถ๋ถ์ด ์ ๋๋ก return์ด ์ ๋์ด ์์์. |
์ค๋ณต๋ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ํน์ ์ญ์ ๋ ์์ด๋์ ์ด๋ฏธ์ง๋ฅผ ์ญ์ ํ๋ ค๋ ๊ฒฝ์ฐ ๋ฌธ์ ๋จ. | Card๋ฅผ ์ญ์ ํ ๊ฒฝ์ฐ, LikeRepository์์ ์ด๋ฏธ์ง๊ฐ ์ญ์ ๋๋ ๊ฒ ์์ . โก๏ธย oneToOne์ด๊ธฐ ๋๋ฌธ์ ์ด๋ฏธ์ง๋ฅผ DB์์ ์ญ์ ํ์ง ์๋ ๋ฐฉํฅ์ผ๋ก ์์ |
IntelliJ MySQL ์ฐ๊ฒฐ | Host ๋ถ๋ถ URL, Database ๋ถ๋ถ ์ด๋ฆ |
๊ฐ์ ๊ฐ๋ฅํ ๋ถ๋ถ | ์๋ ผํ ๊ฐ์ ๋ฐฉ์ |
---|---|
์ข์์ ๊ฐฏ์ โ ๋ง์์ก์ ๋ | scheduler ๋ก ๊ฐฑ์ ํ๋ ๋ฐฉ๋ฒ โ ๋์์ฑ |
AccessToken์ด ํ์ทจ๋์์๋์ ๋ฌธ์ ์ ๋ฐ ๋์ฒ | refreshToken์ ์ฌ์ฉํ์ฌ ๊ฐ์ ๊ฐ๋ฅ. ์ถ๊ฐ๋ก accessToken๊ณผ refreshToken์ ์๊ฐ ์ค์ ๊ณผ ๋ณด์๋ ๊ณ ๋ ค ๊ฐ๋ฅ https://hudi.blog/refresh-token/ https://tecoble.techcourse.co.kr/post/2021-10-20-refresh-token/ https://velog.io/@jkijki12/Jwt-Refresh-Token-์ ์ฉ๊ธฐ |
Optional ์ ์ฐ๋ ๋ฒ. | https://mangkyu.tistory.com/70 https://hbase.tistory.com/212 https://coding-factory.tistory.com/547 |
content (text, blob ๋ฑ์ ์๋ฃํ๊ณผ ๋น๊ต) | content๋ ์ฃผ๋ก ์งง์ ๊ธ์ ์ฐ์ด๊ณ , ํ๋ก์ ํธ ์ทจ์ง์ ์ ๋ง์. ๋ง์ฝ ๊ธ์ ์๋ฅผ ๋๋ฆฌ๊ณ ์ถ๋ค๋ฉด text๋ Lob ํ์ ์ ๊ณ ๋ คํ ์ ์๊ณ ,ํ์ฌ ์ํฉ์๋ text๊ฐ ๋ ์ ์ ํจ. https://eastjin.tistory.com/61 |
- ์๊ตฌ์ฌํญ ๋ถ์: ์ฌ์ฉ์์ ์๊ตฌ์ฌํญ์ ์ ํํ ํ์ ํ๊ณ ์ด๋ฅผ ๋ฐํ์ผ๋ก ๊ธฐ๋ฅ ๋ช ์ธ์๋ฅผ ์์ฑํด์ผ ํ๋ค.
- ๋ณด์: ๋ง์ ๊ฐ์ธ์ ๋ณด์ ๋ฏผ๊ฐํ ์ ๋ณด๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ, ๋ณด์์ ๋ํ ๊ณ ๋ฏผ์ด ํ์ํ๋ค. (Spring Security ๋์
)
- ์ธ์ฆ ๋ฐฉ์, ์ธ์ฆ ์๋ฌ ๋ฑ์ ๊ณ ๋ คํ๋ค. Role ํ์ ์ ์ธ์ฆ์ ๊ตฌํํ๋ค.
- CSRF์ ๋ป์ ์๊ณ ์ ์ฉ ๋ฐฉ๋ฒ ํ์ธํ๋ค.
- ๋ฒ์ ๊ด๋ฆฌ (Tool : GitHub)
- ๋ธ๋์น ๊ท์น ์น ๋ฑ ์ ํ๊ธฐ : ๋ธ๋์น ์ ๋ต์ ์ฌ๋ฌ ๊ฐ๋ฐ์๋ค์ด ๋์์ ์์ ํ ๋ ์ถฉ๋์ ๋ฐฉ์งํ๊ณ , ์ฝ๋๋ฅผ ์์ ์ ์ผ๋ก ์ ์งํ๊ธฐ ์ํด ์ค์ํฉ๋๋ค. ํ๋ก์ ํธ ํน์ฑ์ ๋ง๋ ๋ธ๋์น ์ ๋ต์ ์ ์ํ์ฌ ๊ฐ๋ฐ ํ๋ก์ธ์ค๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ๊ด๋ฆฌํด์ผ ํ๋ค.
- ์ปค๋ฐ ๋ฉ์์ง ์์ฑ ๊ท์น ์ ์: ๋ฒ์ ๊ด๋ฆฌ ์์คํ ์ ์ฌ์ฉํ ๋๋ ์ปค๋ฐ ๋ฉ์์ง๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค. ์ด ๋, ์ด๋ค ์์ ์ฌํญ์ด ์๋์ง ๋ช ํํ๊ฒ ์์ฑํด์ผ ํ๋ค.
- ํ์ฅ์ฑ: ์์คํ ์ด ํ์ฅ ๊ฐ๋ฅํ ๊ตฌ์กฐ๋ก ์ค๊ณ๋์ด์ผ ํ๋ค.
- ์ฌ์ฉ์ฑ: ์ฌ์ฉ์๊ฐ ์ฝ๊ฒ ์ด์ฉํ ์ ์๋๋ก UI/UX๋ฅผ ๊ณ ๋ คํด์ผ ํ๋ค.
- ์ฑ๋ฅ : ๋น ๋ฅธ ์ฒ๋ฆฌ์๋์ ์์ ์ ์ธ ์๋น์ค๋ฅผ ์ ๊ณตํ๊ธฐ ์ํ ์ต์ ํ๊ฐ ํ์ํ๋ค.
- ์ ์ง๋ณด์์ฑ: ์ฝ๋๊ฐ ๋ณต์กํ๊ณ ์ด๋ ต๊ฒ ์์ฑ๋์ด ์์ผ๋ฉด ์ ์ง๋ณด์๊ฐ ์ด๋ ค์์ ธ์ ๊ฐ๋ ์ฑ๊ณผ ๋ชจ๋ํ๋ฅผ ๊ณ ๋ คํ ์ฝ๋ ์์ฑ์ด ํ์ํ๋ค.
- ์ถ๊ฐ ๊ธฐ๋ฅ ๊ตฌํ : ํ์ ํํด, ๋๊ธ ๋ฑ.
์ด๋ฆ | ๊นํ๋ธ ์ฃผ์ |
---|---|
์ด์น๋ ฌ | https://github.com/LEESEUNGRYEOL |
๊น์ฌ์ | https://github.com/YeowonKIM |
ํจ๋์ง | https://github.com/eastjin |
ํฉ์์ค | https://github.com/1juuun |