- Spring Boot
- JWT ( JSON Web Token)
- Google SMTP
- JPA
- DB : MySQL, Redis
- ์ด๋ฉ์ผ์ ์
๋ ฅํ๊ณ ์ธ์ฆ๋ฒํธ ๋ฐ๊ธฐ ๋ฒํผ์ ๋๋ฅธ๋ค.
- ํด๋น ์ด๋ฉ์ผ์ด ์๋น์ค์ ์กด์ฌํ๋ค๋ฉด ์ด๋ฉ์ผ์ด ์ค๋ณต๋์๋ค๋ ์๋ต๋ฉ์ธ์ง๊ฐ ๊ฐ๋ค.
- ์ธ์ฆ๋ฒํธ ๋ฐ๊ธฐ ๋ฒํผ์ ๋๋ฅด๋ฉด ํด๋น ์ด๋ฉ์ผ๋ก ์ธ์ฆ๋ฒํธ๊ฐ ์ ์ก๋๋ค. (์ ์ก๋ฐ์ ์ธ์ฆ์ฝ๋๋ฅผ 10๋ถ์์ ์
๋ ฅํด์ผ ํ๋ค.)
- ์ธ์ฆ๋ฒํธ๊ฐ ์ ์ ๋ ฅ๋์๋ค๋ฉด, ๋ค์๋จ๊ณ๋ก ๋์ด๊ฐ๋ค.
- ์ธ์ฆ๋ฒํธ๊ฐ ํ๋ ธ๋ค๋ฉด ๋์ด๊ฐ์ง ์๋๋ค.
- ์ธ์ฆ๋ฒํธ์ ์ก์ ์ฌ๋ฌ ๋ฒ ํ๋ค๋ฉด, ๋งจ ๋ง์ง๋ง์ผ๋ก ์จ ๋ฉ์ผ(์ต์ ๋ฉ์ผ)์ ์ธ์ฆ๋ฒํธ๋ก ์ ๋ ฅํด์ผํ๋ค.
- ๋๋ค์๊ณผ ํจ์ค์๋๋ฅผ ์
๋ ฅํ์ฌ ํ์๊ฐ์
์ ํ ์ ์๋ค.
- ๋๋ค์์ ์ค๋ณต๋์ง ์์์ผํ๋ฉฐ ์ค๋ณตํ์ธ ๋ฒํผ์ผ๋ก ์ฒดํฌํ๋ค.
- ํจ์ค์๋๋ 8~20์ ์ฌ์ด์ ๋ฌธ์๋ก ์์ด, ์ซ์, ํน์๋ฌธ์ ์กฐํฉ์ผ๋ก ์ด๋ฃจ์ด์ ธ์๋ค.
- ์ ์์ ์ผ๋ก ํ์๊ฐ์ ์ด ๋๋ค.
- ์ด๋ฉ์ผ ์์ด๋, ๋น๋ฐ๋ฒํธ ์
๋ ฅ ํ ๋ก๊ทธ์ธ ๋ฒํผ์ ๋๋ฅธ๋ค.
- ํ์์ด๋ผ๋ฉด ๋ก๊ทธ์ธ์ด ๋๊ณ ๋ฉ์ธํ๋ฉด์ผ๋ก ๋์ด๊ฐ๋ค.
- ํ์์ด ์๋๋ผ๋ฉด ๋ก๊ทธ์ธ์ด ๋์ง ์๋๋ค.
- ๋ก๊ทธ์ธ์ AccessToken๊ณผ RefreshToken์ ์๋ต์ผ๋ก ๋๊ฒจ์ค๋ค.
- ์์๋น๋ฐ๋ฒํธ ๋ฐ๊ธ
- ๋ง์ดํ์ด์ง์ ๋ค์ด์ค๋ฉด ๋๋ค์, ํฌ์ธํธ, ๋ด๊ฐ ํ๋ก์ฐํ ์ฌ๋๋ค์ ๋ชฉ๋ก์ด ๋ฌ๋ค.
- ํฌ์ธํธ๋ฅผ ์ถฉ์ ํ ์ ์๋ค.
- ์คํธ๋ฆฌ๋ฐ ์ค์ ํฌ์ธํธ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
- Refresh Token ๋ฐ๊ธ
- ๋น๋ฐ๋ฒํธ ์ฐพ๊ธฐ, ๋ณ๊ฒฝ
- ๋๋ค์ ์ค๋ณต์ฒดํฌ, ๋ณ๊ฒฝ
- ํ์์ ๋ณด ์์ , ํํด
- ํฌ์ธํธ update
- admin ์๋น์ค
-
์๋ฒ๋ ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญ์ ๋ณด๋ด๋ฉด ์๋ต ๋๋ ์์ธ๋ฅผ ์ํฉ์ ๋ง๊ฒ ์ ์ ํ ์๋ตํด์ฃผ๋ ์ผ์ข ์ ์๋น์ค์ง์ด๋ผ๊ณ ์๊ฐํ๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์, ์์ฒญ์ด ๋ค์ด์ค๋ฉด ์ํฉ์ ๋ง๋ ๋ฉ์ธ์ง์ ์ ์ ํ ์๋ต๊ฐ์ ์ค์ผํ๋ค๊ณ ์๊ฐํ๋ค.
์๋ฅผ ๋ค์ด, ํ์๊ฐ์ ์ ํ๋ค๊ฐ ์๋ฌ๊ฐ ๋ ๊ฒฝ์ฐ๋ผ๋ฉด ์ด๋ค ์๋ฌ๊ฐ ๋ฌ๋์ง ๋ฌด์จ ๋ฌธ์ ์ธ์ง๋ฅผ ์๋ ค์ฃผ๋ ๋ฉ์ธ์ง๋ฅผ ์ ๊ณตํด์ผํ๋ค.
์ด๋ฐ ์๊ฐ๋ค๋ก ์ด๋ฐ์ ์ด๋ป๊ฒ exception ์ฒ๋ฆฌ๋ฅผ ํ ์ ์์์ง ๊ณ ๋ฏผ์ ๋ง์ด ํ๋ค.- ControllerAdvice๋ผ๋ ๊ฒ์ด ์์๋ค.
-
์ฐ๋ฆฌ์ ์๋น์ค์์ ์ ๋ก๊ทธ์ธ/ํ์๊ฐ์ ์ด ํ์ํ๊ฐ?
- ์ฑํ ์ ์น๊ธฐ ์ํด
- ์ถํ ๊ฐ๋ฐ๋ ํ๋ก์ฐ, ํ๋ก์์ ํตํด ๋ด๊ฐ ์ข์ํ๋ ์คํธ๋ฆฌ๋จธ์ ๋ฐฉ์ก์ ์์ฝ๊ฒ ์ฐพ์ ์ ์๋ค.
- ๋ฐฉ์ก์ ๋ณด๋ ์ค์ ํฌ์ธํธ๋ก ๋ฐฉ์ก์ ํ์ํ ์ ์๋ค.
- ์ด๋ค ๋ฐฉ์ก์ ์ฃผ๋ก ๋ณด๋ ์ง ๋ฑ์ ๋ฐ์ดํฐ๋ฅผ ์์ ์ ์๊ณ ์ด๋ฅผ ํตํด ์๋น์ค ๋ฐฉํฅ์ ์ค์ ํ ์ ์๋ค.
-
์ PW, salt์ ๊ธธ์ด๋ฅผ VARCHAR(100)์ผ๋ก ์ก์๋?
-
id๋ฅผ DB์ ์ ์ฅํ ๋, ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ ์ง ์ํ ๊ฒ์ธ์ง ์ ํด์ผํ๋ค.
- ๊ตฌ๋ถ์ ์ํ๋ ์๋น์ค๋ ์์ง๋ง ํ
์คํธ ๊ฒฐ๊ณผ(๋ค์ด๋ฒ, ์นด์นด์ค, ๊ตฌ๊ธ ๋ฑ)์ ์ด๋ฉ์ผ์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์๋๋ค.
ID๋ ๋/์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์๊ณ DB์ ์ ์ฅํ ๋ ํญ์ ์๋ฌธ์๋ก ๋ณํํ์ฌ ์ ์ฅํ๋ค.
- ๊ตฌ๋ถ์ ์ํ๋ ์๋น์ค๋ ์์ง๋ง ํ
์คํธ ๊ฒฐ๊ณผ(๋ค์ด๋ฒ, ์นด์นด์ค, ๊ตฌ๊ธ ๋ฑ)์ ์ด๋ฉ์ผ์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์๋๋ค.
-
Spring Data Redis์์ Redis์ ์ ๊ทผํ๋ 2๊ฐ์ง ๋ฐฉ์์ด ์๋ค.
- ์ฒซ์งธ๋ RedisTemplate๋ฐฉ์, ๋๋ฒ์งธ๋ Redis Repository๋ฐฉ์.
-
๋ง์ฝ, refresh token๋ ๊ฐ์ทจ๋ฅผ ๋นํ๋ฉด ์ด๋ป๊ฒ ํ๋?
- refresh token๋ ์๋ก ๋ฐ๊ธ์ ํ ์ ์์ง๋ง, ๋ก์ปฌ์ ๋ด๊ฒจ์๋ค๋ ์ , header ๋๋ body์ ๋ด๊ฒจ์ ์๋ฒ๋ก ๋ณด๋ด์ง๋ค๋ ์ ์ ๋๊ณ ๋ดค์ ๋, ๊ฐ์ทจ๋ฅผ ๋นํ์ ๊ฒฝ์ฐ๋ฅผ ๋๋นํด์ผํ๋ค.
- ์์ฒญํ๋ IP ์ฃผ์๋ ๋ค๋ฅธ ์ ๋ณด๋ค์ ํจ๊ป ์ ์ฅํด๋์ด refresh token์ ์๋ก ๋ฐ๊ธํด์ค๋ค๋๊ฐ ํ๋ ๋ฐฉ๋ฒ์ด ์์ ๊ฒ ๊ฐ๋ค.
- access token์ด ๋ง๋ฃ๋์ refresh token์ ๋ณด๋ด๋ ๊ณผ์ ์ด ์๋นํ ๋ณต์กํ์ฌ DB์ ์ ์ฅํด๋์ refresh token์ ์ด๋ป๊ฒ ์ ํ์ฉํ ์ ์์๊น?
- ๋ด๊ฐ ๊ตฌํํ ๋๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ฉด ์๋์ ์ฑ๋ฅ์ด ๋๋ ค์ง ๊ฐ๋ฅ์ฑ์ด ๊ฝค ์ปค๋ณด์ธ๋ค.
-
์ ์ ์ ๋ณด๋ฅผ ์์ ํ๊ฒ ๋ณดํธํ๊ธฐ ์ํด ์ด๋ค ๋ ธ๋ ฅ์ ํ๋?
- ์ค์ ๊ตฌํ
- ๋น๋ฐ๋ฒํธ ์ ๋ ฅ์ ํ ๋, ๋ฌธ์, ์ซ์, ํน์๋ฌธ์ ์กฐํฉ์ผ๋ก ์ ๋ ฅ
- salt ์ฌ์ฉ ( ๊ณ ์ ํ salt๊ฐ์ ๊ฐ์ ธ์ผํ๊ณ 32๋ฐ์ดํธ ์ด์์ด์ด์ผ ํ๋ค.)
- SHA256 ๋จ๋ฐฉํฅ ์ํธํ ์ฌ์ฉ
- ์ถํ ๋ฐ์ ๋ฐฉ์
- ํ ์ฅ๋น์์ 1์ด์ 5๋ฒ ์ ๋๋ง ๋น๊ตํ ์ ์๋๋ก ํ๋ค. (์๋๋ ์ฝ 50์ต๋ฒ์ ๋ ๊ฐ๋ฅํ๋ค๊ณ ํ๋ค. ๋ฌด๋ถ๋ณํ ํดํน์ ์ํ์ ๋ง๊ธฐ ์ํด์)
- ์ค์ ๊ตฌํ
-
token์ Header? Body? Cookie? ์ด๋ ๊ณณ์ผ๋ก ๋ณด๋ด์ฃผ๋ ๊ฒ์ด ๋ง์๊น?
- Header๋ Cookie์ ํฌํจ์์ผ์ ๋ณด๋ด๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ผ๊ณ ํ๋ค.
- ์ฒ์์ Response Body์ ๋ณด๋ด์ค๋ ๊ด์ฐฎ์ง ์์๊น? ์๊ฐํ๋ค. Header ๋๋ Body์ ๋ฃ๋ ํ๋ฆฐ ๊ฒ์ ์๋์ง๋ง "์ผ๋ฐ์ "์ผ๋ก๋ Header์ ์ฌ์ฉ
-
token์ response header์ ๋ด์์ ๋ณด๋ด๋ ์ด์
- jwt๋ผ๋ ๋ฐ์ดํฐ์ ํน์ฑ์ body์ ๋ด๊ธฐ๋ data๋ ๊ตฌ๋ถํ๋ ๊ฒ์ด ์ข์ ๊ฒ์ด๋ผ๊ณ ํ๋จ
- ํด๋น ํ์ด์ง๋ header์ ๋ณด๋ด๋ ๊ฒ์ ์ถ์ฒ ํ๊ณ ์๋ค.
- CSRF, XSS ํดํน ์ํ ๊ฐ์
- CSRF
- jwt๋ผ๋ ๋ฐ์ดํฐ์ ํน์ฑ์ body์ ๋ด๊ธฐ๋ data๋ ๊ตฌ๋ถํ๋ ๊ฒ์ด ์ข์ ๊ฒ์ด๋ผ๊ณ ํ๋จ
-
Log ๊ด๋ฆฌ
- ์์ฒญ์ ๋ํ Request, Response ์ ๋ณด๋ค์ Fileter๋ฅผ ํตํด ๋ก๊ทธ๋ฅผ ํตํด 200 ๋๋ 400 ์๋ฌ ๋ฑ ์ด๋ ๊ณณ์์ ์๋ฌ๊ฐ ๋๊ณ ์ฑ๊ณต์ด ๋์๋์ง ํ์ธํ๊ณ ์๋ค.
์ข ๋ ๊ณ ๋ฏผํด ๋ณผ๋งํ ์ํฉ
- ์์ฒญ์ ๋ํ Request, Response ์ ๋ณด๋ค์ Fileter๋ฅผ ํตํด ๋ก๊ทธ๋ฅผ ํตํด 200 ๋๋ 400 ์๋ฌ ๋ฑ ์ด๋ ๊ณณ์์ ์๋ฌ๊ฐ ๋๊ณ ์ฑ๊ณต์ด ๋์๋์ง ํ์ธํ๊ณ ์๋ค.
- swagger ์ฌ์ฉํด๋ณด๊ธฐ
- ์ฌ๋ด ์ํค์ UpLoad
- header, payload, signature๋ก ๋๋์ด์ง๋ค.
- token, refresh token
- PBKDF2
- bcrypt
- ํจ์ค์๋ ์ ์ฅ์ ๋ชฉ์ ์ผ๋ก ์ค๊ณ
- OpenBSD์์ ๊ธฐ๋ณธ ์ํธ ์ธ์ฆ ๋ฉ์ปค๋์ฆ์ผ๋ก ์ฌ์ฉ
- ์ ๋ ฅ ๊ฐ์ผ๋ก 72byte character ์ ์ฝ
- Access Token์ ์ฌ์ฉํ๋ ์ด์ ๋ ์ฌ์ฉ์๋ฅผ ์ธ์ฆํ๋ ๋ฐฉ์์ด๋ค. ์๋ฅผ ๋ค์ด ๋ง์ดํ์ด์ง์ ์ ๊ทผํ๋ค๊ณ ์๊ฐํด๋ณด๋ฉด, '๋'๋ผ๋ ๊ฒ์ด ์ฆ๋ช ๋์ด์ผ ํ๋ค.
- '๋'๋ผ๋ ๊ฒ์ ์ด๋ป๊ฒ ์ฆ๋ช
ํ ์ ์์๊น?
- ์ฆ๋ช ์ด ํ์ํ ์์ฒญ๋ง๋ค ๋ก๊ทธ์ธ์ ํ ์๋ ์๊ฒ ๋ค.
- ํ์ง๋ง, ๋งค๋ฒ ๋ก๊ทธ์ธ์ ํด์ ์ฆ๋ช ํ๋ ๊ฒ์ ๋๋ฌด๋ ๋ฒ๊ฑฐ๋ก์ด ์ผ์ด๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์, ๋ก๊ทธ์ธ์ ํ์ ๋, token์ ๋ฐ๊ธ๋ฐ์์ ํด๋ผ์ด์ธํธ์์ token('๋'๋ฅผ ์ฆ๋ช ํด์ค ์ฆ๋ช ์)์ ์ ์ฅํ์ฌ ์ธ์ฆ์ด ํ์ํ ์์ฒญ header์ ํจ๊ป ๋ณด๋ธ๋ค.
- ํด๋ผ์ด์ธํธ์ ์๋ฒ์ฌ์ด์์ ์ ๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋, Token์ ํ์ฉํ๋๋ฐ, HTTP๋ก ๋ณด๋ด์ง๋ ๊ณผ์ ์์ ๊ฐ์ทจ๋ฅผ ๋นํ ์๋ ์๋ค.
- ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ Access Token์ ์ ์ง์๊ฐ์ ์งง๊ฒ ์ฃผ๊ณ Refresh Token์ ์ฌ์ฉํ๋ค.
- ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ์ ํ์ ๋, access token๊ณผ refresh token์ ๋ฐ๊ธํด์ค๋ค.
- access token์ ๋ง๋ฃ์๊ฐ์ 1์๊ฐ, refresh token์ ๋ง๋ฃ์๊ฐ์ 1์ฃผ์ผ๋ก ์ค์ ํ๋ค.
- ๋ก๊ทธ์ธ์ ํ ์ ์ ๋ header์ token์ ๋ด์์ ๋ณธ์ธ์์ ์ธ์ฆํ๋ค.
- ๋ง์ฝ, token์ด ๋ง๋ฃ๊ฐ ๋๋ค๋ฉด ์๋ฒ์์๋ ๋ง๋ฃ๋ ํ ํฐ์ด๋ผ๋ ์๋ต์ ๋ณด๋ธ๋ค.
- ํด๋ผ์ด์ธํธ์์ refresh token์ ๋ณด๋ด๊ณ ์์ ์์ ์ฆ๋ช ํ๊ณ ์๋ฒ๋ ๋ค์ access token๊ณผ refresh token์ ๋ฐ๊ธํด์ค๋ค.
- SHA-256
- salt
- BCryptPasswordEncoder
- ๋น๋ฐ๋ฒํธ ๋จ๋ฐฉํฅ ํด์ ์๊ณ ๋ฆฌ์ฆ ์ค ํ๋
- ์ํธํ์ํฌ text + salt๋ฅผ ๋ํ์ฌ digest๋ฅผ ๋ง๋๋ ๊ฒ์ด๋ค.
- PBKDF2(Password-Based Key Derivation Function)
- scrypt
- Secure Hash Algorithm์ ์ฝ์๋ก ํด์ํจ์๋ฅผ ์ฌ์ฉํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
- MD5(Message-Digest algorithm 5)๋ 128๋นํธ ์ํธํ ํด์ ํจ์์ด๋ค.
- ์ฌํ ์ํธํ ๊ฒฐํจ์ด ์๊ธฐ ๋๋ฌธ์ ๋ณด์๊ด๋ จ ์ฉ๋๋ก๋ ๊ถ์ฅํ์ง ์๊ณ ์์ผ๋ฉฐ ๋ณดํต ํ๋ก๊ทธ๋จ์ด๋ ํ์ผ์ด ์๋ณธ ๊ทธ๋๋ก์ธ์ง ํ์ธํ๋ ๋ฌด๊ฒฐ์ฑ ๊ฒ์ฌ๋ฑ์ ํ์ฉ๋๋ค.
- ํ์ฌ MD5 ์๊ณ ๋ฆฌ์ฆ์ ๋ณด์ ๊ด๋ จ ์ฉ๋๋ก ์ฐ๋ ๊ฒ์ ๊ถ์ฅํ์ง ์๊ณ ์์ผ๋ฉฐ, ์ฌ๊ฐํ ๋ณด์ ๋ฌธ์ ๋ฅผ ์ผ๊ธฐํ ์ ๋ ์๋ค๊ณ ํ๋ค. ( SSL ์ธ์ฆ์๋ฅผ ๋ณ์กฐํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ด ๋ฐํ๋์๋ค. )
- BCrypto๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด dependecies์ implementation 'org.springframework.boot:spring-boot-starter-security' ์ ์ถ๊ฐํ๋ค.
- ์ด๊ฒ์ ์ถ๊ฐํ๊ณ POSTMAN์ผ๋ก ํ ์คํธ๋ฅผ ํด๋ณด๋ spring security๊ฐ ์๊ฒจ์ 401 ์๋ฌ๊ฐ ๋ฐ์ํ๊ณ , web์ผ๋ก url์ ์ ๋ ฅํด๋ณด๋, ๋ก๊ทธ์ธ์ ํ๋ผ๋ ์ฐฝ์ด ๋์๋ค.
- ์์ธ : ์ถ๊ฐํ dependency๋ spring security๋ฅผ ํ์ฑํ์์ผ์ฃผ์๋ค.
- ํด๊ฒฐ๋ฐฉ๋ฒ : implementation 'org.springframework.security:spring-security-crypto:5.1.5.RELEASE' ๋์ฒด
- E-mail ์ ์กํ๊ธฐ ์ํด ์ฌ์ฉํ JavaMailSender๊ฐ ๊ณ์ํด์ NULL๊ฐ์ด ๋ค์ด์๋ค.
- ๊ธฐ๋ณธ ์์ฑ์ ์ฃผ์ ์ ํด์ฃผ๋ฉด ๋๋๋ฐ, @AutoWired๋ฅผ ์ผ๋๋ ์ํํธ์ถ๋ก ์ธํด ๋ฉ๋ชจ๋ฆฌ๊ฐ ํฐ์ ธ์ ์ปดํจํฐ๊ฐ ๋ค์ด๋๋ค.
- @RequiredArgsConstructor ์ ์ฌ์ฉํ์!
- ์ด๊ฒ์ ์ฌ์ฉํ ๋๋ ์์ฑ์ ์ฃผ์ ์ด ๋ ๋์์ private final๋ก ์ ์ด์ฃผ์ด์ผ ํ๋ค.
- properties์์ gmail๋ก ๋ฉ์ผ์ ๋ณด๋ด๊ธฐ ์ํ ์ค์ ๋ ๋ค ํด๋์๊ณ , JavaMailSender์๋ NULL๊ฐ์ด ๋ค์ด๊ฐ์ง ์๋๊ฒ๋ ํ์ธํ๋๋ฐ, MailSendException์ด ๋ฐ์ํ์๋ค.
- ์๋ฌ๋ฉ์์ง๋ฅผ ๋ณด๋ SSL, SSLHandShakeException, certification๋ฑ ๋ณด์๊ด๋ จํ ์ฉ์ด๋ค์ด ๋์๋ค.
- ๊ตฌ๊ธ๋ง ๋์ ๋ณด์ ํ๋ก๊ทธ๋จ์ ๋๊ณ ๋๋ ค๋ณด๋ ๋ฉ์ผ์ด ์ ์จ ๊ฒ์ ํ์ธํ ์ ์์๋ค.
| Column | type | ์ค๋ช | PK/FK |
|---|---|---|---|
| user_idx | BIGINT | ์ ์ ๊ณ ์ ๊ฐ ( ์๋ ์์ฑ ) | PK |
| VARCHAR(255) | user ID(์ด๋ฉ์ผํ์) | ||
| pwd | VARCHAR(255) | user ๋น๋ฐ๋ฒํธ | |
| salt | VARCHAR(255) | user ๋น๋ฐ๋ฒํธ Salt | |
| nickname | VARCHAR(255) | ๋๋ค์ | |
| grade | TINYINT | ์ ์ ์ํ | Default 0 |
| point | BIGINT | ํฌ์ธํธ | Default 50000 |
| create_dt | DATETIME | ์์ฑ๋ ์ง | |
| login_dt | DATETIME | ๋ก๊ทธ์ธํ ์๊ฐ | |
| update_dt | DATETIME | updateํ ์๊ฐ |
| Column | type | ์ค๋ช | PK/FK |
|---|---|---|---|
| follow_idx | BIGINT | FK | |
| user_follow_idx | BIGINT | FK | |
| user_streamer_idx | BIGINT | FK | |
| create_dt | DATETIME | ์์ฑ๋ ์ง |
| Column | type | ์ค๋ช | PK/FK |
|---|---|---|---|
| room_idx | BIGINT | ๋ฐฉ ๊ณ ์ ๊ฐ ( ์๋ ์์ฑ ) | PK |
| user_idx | BIGINT | ์คํธ๋ฆฌ๋จธ๊ณ ์ ๊ฐ | |
| title | VARCHAR(255) | ๋ฐฉ์ ๋ชฉ | |
| thumnail_location | VARCHAR(1000) | ์ธ๋ค์ผ์ ์ฅ๊ฒฝ๋ก | |
| video_location | VARCHAR(1000) | ์์์ ์ฅ๊ฒฝ๋ก | |
| created_dt | DATETIME | ๋ฐฉ์ก์์๋ ์ง | NOT NULL |
| end_stream_dt | DATETIME | ๋ฐฉ์ก์ข ๋ฃ๋ ์ง |
| Number | ์ค๋ช |
|---|---|
| 0 | ์ด๋ฉ์ผ ์ธ์ฆํ๊ธฐ ์ |
| 1 | ํ์๊ฐ์ ์๋ฃ(์ผ๋ฐํ์) |
| 3 | ์ด๋ฉ์ผ ์ธ์ฆ์ ํ ํ์ |
| 5 | ๊ด๋ฆฌ์ |
| 9 | ํํดํ ํ์ |
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-devtools'
//db
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'mysql:mysql-connector-java'
//redis
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
//lombok
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
implementation 'org.springframework.boot:spring-boot-starter-test'
//encryption
implementation 'org.springframework.security:spring-security-crypto:5.1.5.RELEASE'
//valid
implementation 'org.springframework.boot:spring-boot-starter-validation:2.3.3.RELEASE'
//jwt
implementation group: 'io.jsonwebtoken', name: 'jjwt', version: '0.7.0'
implementation 'com.auth0:java-jwt:3.4.0'
//email
implementation 'org.springframework.boot:spring-boot-starter-mail'
//compile "com.sun.mail:javax.mail"
//implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
// Swagger 2
compile group: 'io.springfox', name: 'springfox-swagger2', version: '2.9.2'
compile group: 'io.springfox', name: 'springfox-swagger-ui', version: '2.9.2'
}