์ฌ์ฉ์ |
id (PK, INT UNSIGNED, NOT NULL, AUTO_INCREMENT)email (VARCHAR 255, UNIQUE, NOT NULL)password (VARCHAR 100, NULL)login_type (VARCHAR(10), NOT NULL)role (VARCHAR 10, NOT NULL)nickname (VARCHAR 50, NOT NULL)profile_url (VARCHAR 512, NOT NULL) state(VARCHAR(10), NOTNULL) last_login_at(DATETIME, NOTNULL)signup_at (DATETIME, NOT NULL)withdraw_at (DATETIME, NULL) |
์ฌ์ฉ์ ์ ๋ณด ๊ด๋ฆฌ Indexes- INDEX (state, role, nickname) : ํด๋ฉด/์ ์ง/์ ์ ํํฐ๋ง ์ค ๋๋ค์ ์ ๋ ฌ |
- ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ํ
์ด๋ธ์
๋๋ค.- ์นดํ
๋ถ ๊ด๋ จ์๋ฅผ ์๋ณํ๊ธฐ ์ํ ์ฉ๋๋ก ์ด๋ฉ์ผ์ ์ ์ฅํฉ๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ด๋ฉ์ผ์ด ์ค๋ณต๋์ด์๋ ์ ๋ฉ๋๋ค.- RFC ํ์ค์ ์ด๋ฉ์ผ ์ ์ฒด ๊ธธ์ด๋ ์ต๋ 320์๊น์ง ๊ฐ๋ฅํ์ง๋ง ์ผ๋ฐ์ ์ผ๋ก 255์๋ฅผ ๋๊ธฐ์ง ์๊ธฐ ๋๋ฌธ์ ๊ธธ์ด ์ ํ์ 255๋ก ์ค์ ํ์์ต๋๋ค.- ํ์ฌ ๊ธฐ๋ฅ์ ์์์๋ ์์ฒด ๋ก๊ทธ์ธ์ด ์์ง๋ง ์ถํ ํ์ฅ ๊ฐ๋ฅ์ฑ์ ๊ณ ๋ คํ์ฌ ์์ฒด ๋ก๊ทธ์ธ์ ์ํด ๋น๋ฐ๋ฒํธ๋ฅผ ์ ์ฅํฉ๋๋ค.- ๋น๋ฐ๋ฒํธ๋ ๊ตฌ๊ธ์์ ์ต๋ 100์, ์๋์ฐ์์๋ ์ต๋ 127์, ๊ทธ ์ธ๋ ์ผ๋ฐ์ ์ผ๋ก 64์๋ฅผ ์ ํํ๋ ๊ฒ์ ๊ณ ๋ คํ์ฌ 100์๋ก ์ค์ ํ์์ต๋๋ค.- ์ญํ ์ ์ฌ์ฉ์๊ฐ ์นดํ
๋ถ ์ด์์ง์ธ์ง, ๊ต์ก์์ธ์ง, ์ธ๋ถ์ธ์ธ์ง๋ฅผ ๋ํ๋
๋๋ค.- ๋๋ค์์ โ์๋ฌธ์ด๋ฆ(ํ๊ธ์ด๋ฆ)/๊ณผ์ โ์ ํฌ๋งท์ผ๋ก ์ ์ฅ๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ๊ธธ์ด ์ ํ์ 50์ผ๋ก ์ค์ ํ์์ต๋๋ค. - ์ฌ์ฉ์์ ์ํ๋ฅผ ๋ํ๋ด๊ธฐ ์ํด state ํ๋๋ฅผ ์ฌ์ฉํฉ๋๋ค. ํ์์๋ ์ ์์ด๊ณ , ํํด๋ฅผ ํ๋ค๋ฉด ํํด ์ํ๊ฐ ๋ฉ๋๋ค. ๊ทธ ์ธ์๋ ํด๋ฉด์ํ๊ฐ ์์ต๋๋ค. - ํ ์ฌ์ฉ์๋ ๋ด์คยท๊ณต์ง์ ์ฌ๋ฌ ๋๊ธ์ ๊ฐ์ง ์ ์์ด์ news_comment , notice_comment ํ
์ด๋ธ๊ณผ ์ฐ๊ฒฐ๋ฉ๋๋ค.- ํ ์ฌ์ฉ์๋ ์ฌ๋ฌ ๋ด์คยท๊ณต์ง์ ๋ํ ์ข์์๋ฅผ ๊ฐ์ง ์ ์์ด์ news_like , notice_like ์ ์ฐ๊ฒฐ๋ฉ๋๋ค.- ์ฌ์ฉ์๊ฐ ์ฝ์ง ์์ ๊ณต์ง๋ฅผ ์๋ ค์ฃผ๊ธฐ ์ํด ๊ธ์ ์ฝ์๋์ง์ ๋ํ ํ
์ด๋ธ์ธ user_notice_read ์ ์ฐ๊ฒฐ๋ฉ๋๋ค.- ์ญ์ ๋ ๋ ์ง๋ฅผ ๊ธฐ์ค์ผ๋ก 30์ผ ๋ค์ ์์ ์ญ์ ๋ฅผ ํ๊ธฐ ์ํด deleted_at ํ๋๋ฅผ ์ถ๊ฐํ์ต๋๋ค.- refresh token์ Redis๋ฅผ ์ฌ์ฉํ์ฌ ๊ด๋ฆฌํ ์์ ์
๋๋ค.- Redis์์๋ TTL์ ์ค์ ํ์ฌ ๋ฐ์ดํฐ์ ๋ง๋ฃ์ผ์ ๊ด๋ฆฌํ๊ณ , ์์ฃผ ๊ฐฑ์ ๋๋ access token์ ๋ฉ๋ชจ๋ฆฌ๋ก ๊ด๋ฆฌํ์ฌ ํจ์จ์ฑ์ ๋์ผ ๊ณํ์
๋๋ค.- ํ ํฐ ๋ธ๋๋ฆฌ์คํธ ๊ด๋ฆฌ ์ธก๋ฉด์์๋ Redis์ ์ด์ ์ ๊ธฐ๋ํด ๋ณผ ์ ์์ต๋๋ค. |
OAuth |
id (PK, INT UNSIGNED, NOT NULL, AUTO_INCREMENT)user_id (FK, INT UNSIGNED, NOT NULL)provider_id (VARCHAR (255), NOT NULL)provider (VARCHAR (20), NOT NULL) |
OAuth ์ ๋ณด ๊ด๋ฆฌ |
- OAuth๋ก ๋ก๊ทธ์ธํ ์ฌ์ฉ์๋ค์ OAuth ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ํ
์ด๋ธ์
๋๋ค.- ํ์ฌ๋ ์นด์นด์ค ํ๋๋ง ์ฌ์ฉํ ์์ ์ด์ง๋ง ์ถํ ํ์ฅ์ฑ์ ๊ณ ๋ คํ์ฌ user_id ๋ฅผ FK๋ก ์ฐธ์กฐํ๋ ํ์์ผ๋ก ์ค๊ณํ์์ต๋๋ค.- ์์ฒด ํ์๊ฐ์
๊ธฐ๋ฅ๊น์ง ๊ณ ๋ คํ์ฌ ์ฌ์ฉ์ ํ
์ด๋ธ๊ณผ ๋ถ๋ฆฌํ์์ต๋๋ค. - ํ๋์ OAuth๊ฐ ์๋๋ฐ ๋ค๋ฅธ OAuth๋ฅผ ์ถ๊ฐํ๊ณ ์ถ๋ค๋ฉด ๋ฐ๋ก ์ฌ์ฉ์ ์ค์ ํญ์์ OAuth๋ฅผ ์ถ๊ฐํ๋๋ก ํฉ๋๋ค. ๋ง์ฝ ์ด๋ฏธ ๊ฐ์
์ด ๋์ด ์๋ ์ด๋ฉ์ผ๋ก ์ OAuth ํ์๊ฐ์
์ ํ๋ ค๊ณ ํ๋ค๋ฉด ์ด๋ฏธ ์กด์ฌํ๋ ์ด๋ฉ์ผ์ด๋ ๋ก๊ทธ์ธํด์ ์ถ๊ฐํด๋ฌ๋ผ๋ ์๋ด๋ฅผ ํ๋ ๋ฐฉ๋ฒ์ผ๋ก merge collision์ ๋ฐฉ์งํ๊ณ ์ ํฉ๋๋ค. - ๋ก๊ทธ์ธ ์ดํ ์นด์นด์ค ๊ด๋ จ ์ ๋ณด๋ฅผ ๋ณ๋๋ก ์์ฒญํ์ง ์๊ณ , ํ์๊ฐ์
๋ ๋ฐ์ ์ ๋ณด๋ฅผ ์๋น์ค DB์ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ access_token์ ์ ์ฅํ์ง ์์ต๋๋ค. |
๊ณต์ง |
id (PK, INT UNSIGNED, NOT NULL, AUTO_INCREMENT) user_id(FK, INT UNSIGNED, NOTNULL, AUTO_INCREMENT)title (VARCHAR 26, NOT NULL)content (TEXT, NOT NULL) tag(VARCHAR(10), NOTNULL)total_view_count (INT UNSIGNED, NOT NULL)like_count (INT UNSIGNED, NOT NULL)comment_count(INT UNSIGNED, NOT NULL)original_url (VARCHAR 512, NOT NULL)summary (VARCHAR 255, NULL)created_at (DATETIME, NOT NULL)updated_at (DATETIME, NOT NULL)deleted_at (DATETIME, NULL) |
๊ณต์ง ๊ด๋ฆฌ Indexes- INDEX (deleted_at, created_at DESC) : ์ญ์ ๋์ง ์์ ์ต์ ์ ์กฐํ |
- ์นดํ
๋ถ ์ด์์ง์ด ์์ฑํ ๊ณต์ง ์ ๋ณด๋ฅผ ์ ์ฅํฉ๋๋ค.- ์ ๋ชฉ์ ์ต๋ 26์๊น์ง๋ง ๋ฐ์ต๋๋ค.- content ์ ๊ฒฝ์ฐ๋ ๋
ธ์
๊ณต์ง, ๋์ค์ฝ๋ ๊ณต์ง๋ฅผ ํตํฉํ์ฌ ๋ณด์ฌ์ฃผ๋๋ฐ ๋
ธ์
๊ณต์ง์์ ๊ธด ๊ณต์ง์ UTF-8 ์ธ์ฝ๋ฉ ๊ธฐ์ค ๋ฐ์ดํธ์๊ฐ 10.7KB ๋์์ต๋๋ค. ํ
์ด๋ธ์ ๋ค๋ฅธ ์ปฌ๋ผ์์ VARCHAR๋ฅผ ์ฌ์ฉํ์ฌ ํ
์ด๋ธ์ ์ต๋๊ณต๊ฐ์ ๋๊ฒ ๋๋ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด TEXT๋ฅผ ์ฌ์ฉํ๋๊ฒ ์ข๋ค๊ณ ํ๋จํ์์ต๋๋ค. - ์ญ์ ๋ ๋ ์ง๋ฅผ ๊ธฐ์ค์ผ๋ก 30์ผ ๋ค์ ์์ ์ญ์ ๋ฅผ ์ํด deleted_at ์ ์ฌ์ฉํฉ๋๋ค.- ์กฐํ์ยท์ข์์ ์๋ ์งง์ ์๊ฐ์ ๋ง์ SELECT๊ฐ ์์๋๋ฏ๋ก Redis๋ก ์คํ๋ก๋ํ ๊ณํ์
๋๋ค.- ์๋ณธ URL ๊ธธ์ด๋ฅผ ๊ฐ์ํ์ฌ 512์๋ก ์ค์ ํ์ต๋๋ค.- ๊ณต์ง ์์ฝ์ MVP ๋จ๊ณ์์๋ ์์ผ๋ฏ๋ก NULL ํ์ฉ์ผ๋ก ๋์์ต๋๋ค. |
๊ณต์ง ๋๊ธ |
id (PK, INT UNSIGNED, NOT NULL, AUTO_INCREMENT)user_id (FK, INT UNSIGNED, NOT NULL)notice_id (FK, INT UNSIGNED, NOT NULL)content (VARCHAR 500, NOT NULL)created_at (DATETIME, NOT NULL)deleted_at (DATETIME, NULL) |
๊ณต์ง์ ๋ํ ๋๊ธ ๊ด๋ฆฌ INDEXES - INDEX(deleted_at, created_at DESC) : ์ญ์ ๋์ง ์์ ์ต์ ์ ์กฐํ |
- ์ฌ์ฉ์๊ฐ ๊ณต์ง์ ๋จ๊ธฐ๋ ๋๊ธ์ ์ ์ฅํฉ๋๋ค.- ๋๊ธ ์์ฑ์๋ ๋ฐ๋์ ์กด์ฌํด์ผ ํ๋ฏ๋ก user_id FK๋ฅผ ๊ฐ์ง๋๋ค.- ๋๊ธ์ด ๋ฌ๋ฆด ๊ณต์ง๊ฐ ๋ฐ๋์ ์กด์ฌํด์ผ ํ๋ฏ๋ก notice_id FK๋ฅผ ๊ฐ์ง๋๋ค.- ๋๊ธ ๋ด์ฉ์ ์ต๋ 500์๋ก ์ ํํฉ๋๋ค.- ์ญ์ ํ 30์ผ ๋ค ์์ ์ญ์ ๋ฅผ ์ํด deleted_at ์ ์ฌ์ฉํฉ๋๋ค. |
๊ณต์ง ์ฝ์ ์ฌ๋ถ |
id (PK, INT UNSIGNED, NOT NULL, AUTO_INCREMENT)user_id (FK, INT UNSIGNED, NOT NULL, UNIQUE (user_id, notice_id))notice_id (FK, INT UNSIGNED, NOT NULL, UNIQUE (user_id, notice_id)) |
์ฌ์ฉ์ ์ฝ์ ์ฒดํฌ |
- ์ฌ์ฉ์๊ฐ ๊ณต์ง๋ฅผ ์ฝ์๋์ง ์ฌ๋ถ๋ฅผ ์ ์ฅํฉ๋๋ค.- ๋ณตํฉํค ๋์ ๊ฐ๋ณ PK + UNIQUE(user_id, notice_id)๋ก ์ ์ผ์ฑ์ ๋ณด์ฅํฉ๋๋ค.- ์ถํ ์ฑ๋ฅ ์ด์ ์ Redis ์บ์ฑ์ ๊ณ ๋ คํฉ๋๋ค.- ํํด ์ ์๋ ์ญ์ ๋์ง ์์ผ๋ฏ๋ก soft delete๋ฅผ ์ฌ์ฉํ์ง ์์ต๋๋ค. |
๊ณต์ง ์ข์์ |
id (PK, INT UNSIGNED, NOT NULL, AUTO_INCREMENT)user_id (FK, INT UNSIGNED, NOT NULL, UNIQUE (user_id, notice_id))notice_id (FK, INT UNSIGNED, NOT NULL, UNIQUE (user_id, notice_id)) is_activated(BOOLEAN NOTNULL DEFAULT TRUE) |
๊ณต์ง๊ธ ์ข์์ ์ฒ๋ฆฌ |
- ์ฌ์ฉ์์ ๊ณต์ง์ ์ข์์ ๊ด๊ณ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.- UNIQUE(user_id, notice_id)๋ก ํ ๋ฒ๋ง ์ข์์ ๊ฐ๋ฅํ๋๋ก ์ ํํฉ๋๋ค.- ์ข์์/์ทจ์๋ฅผ is_activated๋ก ๊ด๋ฆฌํฉ๋๋ค. true๋ผ๋ฉด ์ข์์๋ฅผ ๋๋ฅธ ์ํ์ด๊ณ , false๋ผ๋ฉด ์ข์์๋ฅผ ํ์ง ์์ ์ํ์
๋๋ค. |
๊ณต์ง ํ์ผ |
id (PK, INT UNSIGNED, NOT NULL, AUTO_INCREMENT)notice_id (FK, INT UNSIGNED, NOT NULL)file_url (VARCHAR 512, NOT NULL)type (VARCHAR 10, NOT NULL)name (VARCHAR 255, NOT NULL)file_seq_no (TINYINT UNSIGNED, NOT NULL) |
๊ณต์ง ๊ด๋ จ ํ์ผ ์ ๋ณด |
- ๊ณต์ง์ ์ฒจ๋ถ๋ ์ด๋ฏธ์งยทํ์ผ ์ ๋ณด๋ฅผ ์ ์ฅํฉ๋๋ค.- ์ค์ ํ์ผ์ S3์ ์ ์ฅํ๊ณ URL๋ง ๋ณด๊ดํฉ๋๋ค.- ํ์ฅ์ ๊ธธ์ด๋ฅผ ๊ณ ๋ คํด type ์ 10์๋ก ์ ํํ์ต๋๋ค.- ํ์ผ ์ด๋ฆ์ OS ํ๊ณ(255์)์ ๋ง์ถฐ ์ค์ ํ์ต๋๋ค.- ํ์ผ ์์๋ฅผ file_seq_no ๋ก ๊ด๋ฆฌํฉ๋๋ค(์ต๋ 20). |
๋ด์ค |
id (PK, INT UNSIGNED, NOT NULL, AUTO_INCREMENT)title (VARCHAR 26, NOT NULL)content (VARCHAR(1024), NOT NULL)total_view_count (INT UNSIGNED, NOT NULL)today_view_count (INT UNSIGNED, NOT NULL)like_count (INT UNSIGNED, NOT NULL)comment_count(INT UNSIGNED, NOT NULL)image_url (VARCHAR 512, NULL)created_at (DATETIME, NOT NULL)updated_at (DATETIME, NOT NULL)deleted_at (DATETIME, NULL) |
๋ด์ค ๊ด๋ฆฌ INDEXES - INDEX(deleted_at, created_at DESC) : ์ญ์ ๋์ง ์์ ์ต์ ์ ์กฐํ |
- ์นดํ
๋ถ ์์์ ์ ๋ฌํ๋ ๊ธ์ ์ ์ฅํฉ๋๋ค.- ์ ๋ชฉ ๊ธธ์ด๋ ์ต๋ 26์์
๋๋ค.- ๋ด์ฉ์ ์ต๋ 1024์(VARCHAR)์
๋๋ค. AI ๊ฐ๋ฐ์๋ถ๋ค๊ณผ ์์ํ ๊ฒฐ๊ณผ ๊ฐ์ฅ ์ต์ ์ ์๋ต ํ ํฐ ์๊ฐ 1024์์ต๋๋ค. - ์ค๋ ์กฐํ์(today_view_count)๋ 00:00โ23:59 ๊ธฐ์ค ์๋จ ๋
ธ์ถ์ ์ฌ์ฉํฉ๋๋ค.- ์กฐํ์ยท์ข์์ ์๋ Redis ์บ์ฑ ์์ ์
๋๋ค.- ์ด๋ฏธ์ง๊ฐ 1์ฅ๋ง ํ์ํ๋ฏ๋ก image_url ๋ก ๊ด๋ฆฌํฉ๋๋ค.- ์ญ์ ํ 30์ผ ๋ค ์์ ์ญ์ ๋ฅผ ์ํด deleted_at ์ ์ฌ์ฉํฉ๋๋ค. |
๋ด์ค ๋๊ธ |
id (PK, INT UNSIGNED, NOT NULL, AUTO_INCREMENT)user_id (FK, INT UNSIGNED, NOT NULL)news_id (FK, INT UNSIGNED, NOT NULL)content (VARCHAR 500, NOT NULL)created_at (DATETIME, NOT NULL)deleted_at (DATETIME, NULL) |
๋ด์ค์ ๋ํ ๋๊ธ ๊ด๋ฆฌ INDEXES - INDEX(deleted_at, created_at DESC) : ์ญ์ ๋์ง ์์ ์ต์ ์ ์กฐํ |
- ์ฌ์ฉ์๊ฐ ๋ด์ค์ ๋จ๊ธฐ๋ ๋๊ธ์ ์ ์ฅํฉ๋๋ค.- ์์ฑ์๋ user_id , ๋์ ๋ด์ค๋ news_id ๋ฅผ FK๋ก ์ฐธ์กฐํฉ๋๋ค.- ๋๊ธ ๋ด์ฉ์ ์ต๋ 500์๋ก ์ ํํฉ๋๋ค.- ์ญ์ ํ 30์ผ ๋ค ์์ ์ญ์ ๋ฅผ ์ํด deleted_at ์ ์ฌ์ฉํฉ๋๋ค. |
๋ด์ค ์ข์์ |
id (PK, INT UNSIGNED, NOT NULL, AUTO_INCREMENT)user_id (FK, INT UNSIGNED, NOT NULL, UNIQUE (user_id, news_id))news_id (FK, INT UNSIGNED, NOT NULL, UNIQUE (user_id, news_id)) is_activated(BOOLEAN NOTNULL DEFAULT TRUE) |
๋ด์ค ์ข์์ ์ฒ๋ฆฌ |
- ์ฌ์ฉ์์ ๋ด์ค์ ์ข์์ ๊ด๊ณ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.- UNIQUE(user_id, news_id)๋ก ์ ์ผ์ฑ์ ๋ณด์ฅํฉ๋๋ค.- ์ข์์/์ทจ์๋ฅผ is_activated๋ก ๊ด๋ฆฌํฉ๋๋ค. true๋ผ๋ฉด ์ข์์๋ฅผ ๋๋ฅธ ์ํ์ด๊ณ , false๋ผ๋ฉด ์ข์์๋ฅผ ํ์ง ์์ ์ํ์
๋๋ค. |
์ํค |
id (PK, INT UNSIGNED, NOT NULL, AUTO_INCREMENT)title (VARCHAR 26, NOT NULL, UNIQUE)content (MEDIUMTEXT, NOT NULL)editor_name (VARCHAR 50, NOT NULL)created_at (DATETIME, NOT NULL)updated_at (DATETIME, NOT NULL)deleted_at (DATETIME, NULL) |
์ํค ๋ฌธ์ ๊ด๋ฆฌ INDEXES -INDEX(title) |
- ์นดํ
๋ถ ์ด์ฉ์๊ฐ ํธ์งยท๊ด๋ฆฌํ๋ ๋ฌธ์๋ฅผ ์ ์ฅํฉ๋๋ค.- ์ ๋ชฉ์ ์ต๋ 26์์ด๋ฉฐ ์ค๋ณต ์์ฑ ๋ฐฉ์ง๋ฅผ ์ํด UNIQUE๋ฅผ ์ค์ ํ์ต๋๋ค.- content ์ ๊ฒฝ์ฐ์๋ ๋งํฌ๋ค์ด ํ์์ ์ง์ํ๊ธฐ ๋๋ฌธ์ ํน์๋ฌธ์๋ ๋ค์ด๊ฐ๊ณ , ์ด๋ฏธ์ง๋ ์ด๋ฏธ์ง ํ๊ทธ๋ฅผ ์ง์ํ๊ธฐ ๋๋ฌธ์ ๋ง์ ๋ฐ์ดํฐ๊ฐ ๋ค์ด๊ฐ ๊ฒ์ผ๋ก ์์ํ๊ณ ์์ต๋๋ค. ๋ํ ์ํค๋ ๋ชจ๋ ๊ต์ก์์ด ์์ , ๋ด์ฉ์ถ๊ฐ, ํธ์ง ๋ฑ์ ํ ์ ์์ด์ ํ๋์ ์ํค ๋ฌธ์ ๋ด์ฉ์ด ๊ธธ์ด์ง ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋์ ์๋์ ์ผ๋ก TEXT๋ณด๋ค ํฐ MEDIUMTEXT๋ฅผ ์ฌ์ฉํ์์ต๋๋ค.- ์ต๊ทผ ํธ์ง์์ ์ด๋ฆ์ editor_name ์ ์ ์ฅํฉ๋๋ค.- ์ญ์ ํ 30์ผ ๋ค ์์ ์ญ์ ๋ฅผ ์ํด deleted_at ์ ์ฌ์ฉํฉ๋๋ค. - ์ํค ๋ฌธ์์ ์ ๋ชฉ์ ์ค๋ณต๋ ์ ์๊ธฐ ๋๋ฌธ์ ์ธ๋ฑ์ฑ์ ์ฌ์ฉํฉ๋๋ค. |
ํด์ฆ |
id (PK, INT UNSIGNED, NOT NULL, AUTO_INCREMENT)wiki_id (FK, INT UNSIGNED, NOT NULL)content (VARCHAR 255, NOT NULL)answer (VARCHAR(50), NOT NULL)created_at (DATETIME, NOT NULL) |
ํด์ฆ ์ ๋ณด ๊ด๋ฆฌ INDEXES - INDEX(created_at) LIMIT 1 |
- AI๊ฐ ์์ฑํ ํด์ฆ ๋ฌธ์ ยท์ ๋ต ์ ๋ณด๋ฅผ ์ ์ฅํฉ๋๋ค.- ํด์ฆ ๋ด์ฉ์ 255์ ์ดํ๋ก ์ ํํฉ๋๋ค.- ์์ฑ ์๊ฐ์ ์ ์ฅํ์ฌ โ์ค๋์ ํด์ฆโ๋ฅผ ์ ํํฉ๋๋ค. - ํด์ฆ๋ ํญ์ ์๋ก์ด ํด์ฆ, ๊ฐ์ฅ ์ต๊ทผ์ ์์ฑ๋ ํด์ฆ๋ง ๋ณด์ฌ์ค๋๋ค. |
์ ๋ต |
id (PK, INT UNSIGNED, NOT NULL, AUTO_INCREMENT)quiz_id (FK, INT UNSIGNED, NOT NULL)content (VARCHAR 50, NOT NULL) |
ํด์ฆ ์ ๋ต ์ ๋ณด ๊ด๋ฆฌ |
- ์ ์ฌํ ๋ต๋ณ๋ ์ ๋ต ์ฒ๋ฆฌ๋ฅผ ์ํด ์ฌ๋ฌ ๊ฐ์ ์ ๋ต์ ์ ์ฅํฉ๋๋ค.- ๊ฐ์ฅ ๊ธด ๋จ์ด ๊ธธ์ด๋ฅผ ๊ณ ๋ คํ์ฌ 50์๋ก ์ค์ ํ์ต๋๋ค. |
์ ์ถ |
id (PK, INT UNSIGNED, NOT NULL, AUTO_INCREMENT)user_id (FK, INT UNSIGNED, NOT NULL, UNIQUE(user_id, quiz_id))quiz_id (FK, INT UNSIGNED, NOT NULL, UNIQUE(user_id, quiz_id))is_correct (BOOLEAN, NOT NULL)is_first_winner (BOOLEAN, NOT NULL) |
์ฌ์ฉ์ ํด์ฆ ์ ์ถ ๊ด๋ฆฌ |
- ์ฌ์ฉ์์ ํด์ฆ์ ์ ์ถ ์ ๋ณด๋ฅผ ๋ด์ต๋๋ค.- ํ ์ฌ์ฉ์๋ ํด์ฆ๋น ํ ๋ฒ๋ง ์ ์ถํ ์ ์์ผ๋ฏ๋ก UNIQUE(user_id, quiz_id)๋ฅผ ์ถ๊ฐ๋ก ๊ฑธ์ด์ผ ํฉ๋๋ค.- ์ฌ์ฉ์๊ฐ ์ ์ถํ ๋ต์ด ์ค๋ต์ด๋ฉด is_correct ์ FALSE๋ฅผ, ์ ๋ต์ด๋ฉด TRUE๋ฅผ ์ ์ฅํ๋ค.- ์ฌ์ฉ์๊ฐ ์ค๋์ ํด์ฆ ์ต์ด ์ ๋ต์๋ผ๋ฉด is_first_winner ์ TRUE๋ฅผ ์ ์ฅํ๊ณ , ์๋๋ผ๋ฉด FALSE๋ฅผ ์ ์ฅํฉ๋๋ค. |
์ด์์ง ์๋ฆผ |
id (PK, INT UNSIGNED, NOT NULL, AUTO_INCREMENT)receiver_id (FK, INT UNSIGNED, NOT NULL)sender_id (FK, INT UNSIGNED, NOT NULL)content (VARCHAR 500, NOT NULL)is_read(BOOLEAN, NOTNULL)created_at (DATETIME, NOT NULL)deleted_at (DATETIME, NULL) |
์๋ฆผ ์ ๋ณด ๊ด๋ฆฌ |
- ์ด์์ง์ด ๊ต์ก์์๊ฒ ๋ณด๋ด๋ ์๋ฆผ๋ฅผ ์ ์ฅํฉ๋๋ค.- ์๋ฆผ ๋ด์ฉ์ ์ต๋ 500์๋ก ์ ํํฉ๋๋ค.- ์ญ์ ํ 30์ผ ๋ค ์์ ์ญ์ ๋ฅผ ์ํด deleted_at ์ ์ฌ์ฉํฉ๋๋ค. |