"HOTSIX ๋จน๊ณ ํ๋ด์ ์ผํ๋ Trello ์๋น์ค ํ๋ก์ ํธ!!!"
์ด ๋ฌธ์๋ Trello ํ๋ก์ ํธ์ API ๋ช
์ธ์, ์ฃผ์ ๊ธฐ๋ฅ ๋ฐ ํธ๋ฌ๋ธ ์ํ
๋ด์ฉ์ ํฌํจํ๊ณ , ํ๋ก์ ํธ์ ๋ชฉํ๋ ์ฌ์ฉ์ ์นํ์ ์ธ ์
๋ฌด ์ผ์ ๊ด๋ฆฌ ํด์ ์ ๊ณตํ๋ ๊ฒ์
๋๋ค.
๐จโ๐ฉโ๐งโ๐ฆ Our Team
๊น์ฑ์ฃผ |
๋ฐ๋ํ |
์์ฑ๊ท |
์ ์งํธ |
1๏ธโฃ ํ์๊ฐ์
/๋ก๊ทธ์ธ ๊ธฐ๋ฅ ๋ฐ TICKET ๊ฒ์ ๊ธฐ๋ฅ (๋ด๋น : ๊น์ฑ์ฃผ)
2๏ธโฃ MEMBER ๋ฐ KANBAN ๊ธฐ๋ฅ (๋ด๋น : ์์ฑ๊ท)
3๏ธโฃ WORKSPACE ๋ฐ COMMENT ๊ธฐ๋ฅ (๋ด๋น : ์ ์งํธ)
4๏ธโฃ BOARD ๋ฐ TICKET ๊ธฐ๋ฅ (๋ด๋น : ๋ฐ๋ํ)
ํ๋ก์ ํธ ํต์ฌ๊ธฐ๋ฅ
- AMAZON S3๋ฅผ ์ด์ฉํ์ฌ, ํฐ์ผ์ ์ฒจ๋ถํ์ผ์ ๋ฑ๋กํ๊ณ , ์์ , ์ญ์ ํ ์ ์๋ ๊ธฐ๋ฅ์ ๊ตฌํ ํ์์ต๋๋ค.
- ๋ณ๋์ ์ฒจ๋ถํ์ผ ENTITY๋ฅผ ์์ฑํ์ฌ ์ฐ๊ด๊ด๊ณ๋ฅผ ๋งบ์์ผ๋ก์จ ํ๋์ ํฐ์ผ์ ์ฌ๋ฌ ๊ฐ์ ํ์ผ ์ฒจ๋ถ๊ฐ ๊ฐ๋ฅํ๋๋ก ์ค๊ณํ์์ต๋๋ค.
- Slack API๋ฅผ ์ด์ฉํ์ฌ, ํน์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๋ Slack์ผ๋ก ์๋ฆผ์ ๋ฐ์ ์ ์์ต๋๋ค.
- ์ํฌ์คํ์ด์ค์ ์๋ก์ด ๋ฉค๋ฒ๊ฐ ์ถ๊ฐ๋์์ ๋, ํด๋น ๋ฉค๋ฒ๊ฐ ์ด๋ ์ํฌ์คํ์ด์ค์ ๋ฑ๋ก๋์๋์ง ์ ์ ์์ต๋๋ค
- ํฐ์ผ์ ์๋ก์ด ๋๊ธ์ด ๋ฑ๋ก๋์์ ๋, ์ด๋ ํฐ์ผ์ ๋๊ธ์ด ๋ฑ๋ก๋์๋์ง ์ ์ ์์ต๋๋ค.
๐จ ์นธ๋ฐ ๋ณด๋ํ์์ ํ์
ํด (CRUD)
- ์ํฌ์คํ์ด์ค ๋ด์ ๋ฉค๋ฒ๋ค ๋ผ๋ฆฌ ํ ์ผ์ ์ ๋ฆฌํ๊ณ ๊ณต์ ํ ์ ์์ต๋๋ค.
- 1.์ํฌ์คํ์ด์ค ์์ฑ/์์ /์ญ์ : ์ํฌ์คํ์ด์ค ์์ฑ ํ ๊ฐ์ด ์์
ํ ๋๋ฃ๋ค์ ์ด๋ํ ์ ์์ต๋๋ค.
- 2.ํฐ์ผ, ๋๊ธ ์์ฑ/์์ /์ญ์ /์กฐํ : ์ฒจ๋ถํ์ผ ์ถ๊ฐ๊ฐ ๊ฐ๋ฅํ๋ฉฐ, ํด๋น ํ ์ผ์ ๋งก์ ๋งค๋์ ๋ฑ๋ก์ด ๊ฐ๋ฅํฉ๋๋ค.
- 3.์กฐํ์ : ํฐ์ผ์ ์กฐํ์๋ฅผ ๊ธฐ๋กํ์ฌ ์กฐํ์์ ๋ฐ๋ผ ์ผ๊ฐ ๋ญํน์ ์ ์ ์์ต๋๋ค.
๐ ๊ฒ์ ๊ธฐ๋ฅ(๋ด์ฉ,์ ๋ชฉ,๋ง๊ฐ์ผ,๋ด๋น์,๋ณด๋ID ๊ฒ์๊ธฐ๋ฅ)
- QueryDSL์ ํ์ฉํ์ฌ ๋์ ์ฟผ๋ฆฌ์์ฑ์ด ๊ฐ๋ฅํ๋๋ก ๊ตฌํํ์์ต๋๋ค.
- ticket์ ์ ๋ชฉ, ๋ด์ฉ, ๋ง๊ฐ์ผ, ๋ด๋น์ ๋ฐ ๋ณด๋ID ๋ก ํ์ฌ ์ ์ ๊ฐ ๋ค์ด๊ฐ ์๋ workspace ์์์ ๊ฒ์์ ํด ์ค๋๋ค.
- ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ๋์์ ๊ฐ์ ํฐ์ผ์ ์์ ํ๋ ๊ฒฝ์ฐ์, ๋ฝ์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ์งํค๋๋ก ํ์ต๋๋ค.
- @Lock์ ์ฌ์ฉํ๋ ๋น๊ด๋ฝ ๋ฐฉ์์ ์ฑํํ๊ณ ์ ์ฉํ์ต๋๋ค.
- ๋๊ด๋ฝ๊ณผ ๋น๊ด๋ฝ์ ์ฑ๋ฅ๊ณผ ๋ฐ์ดํฐ์ผ๊ด์ฑ ๋ณด์ฅ๋๋ฅผ ๋น๊ตํ๊ธฐ ์ํ ํ
์คํธ์ฝ๋๊ฐ ์ฒจ๋ถ๋์ด์์ต๋๋ค.
๐จ ์บ์ฑ (์กฐํ์ ๊ด๋ฆฌ)
- ์ฐ์๋ ์์ฒญ์ผ๋ก ์ธํ DB๋ณ๋ชฉ์ ํด์ํ๊ณ ์๋ฉธ๊ธฐ๊ฐ์ด ์กด์ฌํ๋ ๋ฐ์ดํฐ์ TimeToLive ๊ด๋ฆฌ๋ฅผ ์ฉ์ดํ๊ฒ ํ ์ ์๋๋ก Redis๋ฅผ ๋์
ํ์์ต๋๋ค.
- redis๋ฅผ ์ด์ฉํ์ฌ ์กฐํ์๋ฅผ ๋ฐ๋ก ๊ด๋ฆฌํ๊ณ ์กฐํ์์ ๋ฐ๋ผ ํฐ์ผ์ ๋ญํน ๋ถ์ฌ ๊ฐ๋ฅ
- ๋ฌธ์ ์ํฉ : ์ธ๋ฑ์ค ์ ์ฉ ์ ๊ต์ฅํ ๋ฏธ๋ฏธํ ์์น๋ก ์๋๊ฐ์ ์ด ๋จ.(์ฝ 1 sec)
- ํด๊ฒฐ๋ฐฉ์ : ticketKeyword๋ก ์ ๋ชฉ๊ณผ ๋ด์ฉ์ ํ๋ฒ์ ๊ฒ์ํ์์ผ๋, ticketTitle, ticketContents๋ก ์ ๋ชฉ๊ณผ ๋ด์ฉ์ ๋ค๋ฅธ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์ ๊ฒ์ (์ฝ 50% ๊ฐ๊น์ด ์กฐํ์๋ ๊ฐ์ ํจ๊ณผ ๋ฐ์!)
์๋ง์ ๋ด๋น์ ์ฐพ๊ธฐ
- ๋ฌธ์ ์ํฉ : ํ ์ ์ ๊ฐ ์ฌ๋ฌ ๋ด๋น์๋ฅผ ๋งก๊ณ ์์ด์ ๋ด๋น์๋ฅผ ๋ก๋ํ ๋ ๋ง์ ๊ฐ์ด ๋์ค๋ ์ค๋ฅ
- ํด๊ฒฐ๋ฐฉ์ : ์ฟผ๋ฆฌ๋ฌธ์ ์์ฑํ์ฌ ํด๋น ์ํฌ์คํ์ด์ค์ ์ ์ ์ ์์ด๋๊ฐ ์ผ์นํ๋ ๋ด๋น์๋ฅผ ๋ถ๋ฌ์ค๋๋ก ์ค๊ณ
๋๊ด์ ๋ฝ ์์ธ์ฒ๋ฆฌ
- ๋ฌธ์ ์ํฉ : ๋๊ด์ ๋ฝ ํ
์คํธ๋ฅผ ์คํํ ๋, ๊ณ ์ ๋ ๋ฌธ์๋ฐ์ดํฐ๋ก๋ง ์์ ๋๋๋ก ์ค์ ํ์ฌ ๋ชจ์์ ์๊ด์์ด ํญ์ 9๊ฐ์ ์์ธ์ฒ๋ฆฌ๊ฐ ๋ฐ์
- ํด๊ฒฐ๋ฐฉ์ : ํญ์ ๋๋คํ ์๋ก์ด ๋ฌธ์๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๋๋ก UUID๋ฅผ ์์ ์์ฒญํ๋ ๋ฐ์ดํฐ์ ๋ง๋ถ์ฌ ํด๊ฒฐ
QueryDSL์์ workspace.id ์ ๊ทผ ๋ฌธ์
- ๋ฌธ์ ์ํฉ: ํฐ์ผ์ workspace.id ๋ก ํํํฐ๊ธฐ ์ํด ๊ฐ ํ
์ผ์ workspace.id ๋ฅผ ticket.board.kanban.workspace.id ์ ๊ทผํ๋ ค ํ์ผ๋ member์ workspace๊ฐ ์ฐ๊ด๊ด๊ณ๊ฐ ํ์ฑ๋์ด์, ticket์
์ workspace๋ฅผ ๊ทผ์ ํ ์ ์์์ต๋๋ค.
- ํด๊ฒฐ๋ฐฉ์: ticket.member.workspace.id๋ก ์ ๊ทผํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐ ํ์ต๋๋ค.
redis ๋ฐ์ดํฐ ์ค๋ณต ๋ฌธ์
- ๋ฌธ์ ์ํฉ : ์กฐํ์ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํด์ ๋ค๋ฃจ๋๋ฐ intํ์
๋ฟ ์๋๋ผ Stringํ์
๋ ๋ถ๋ฌ์์ ธ์ ์๋ฌ๋ฐ์
- ํด๊ฒฐ๋ฐฉ์ : ๋ฐ์ดํฐ ์ ์ฅ์ ํค๊ฐ์ด ๊ฐ์์ ์๊ธด ์ค๋ฅ -> ํค๊ฐ์ ๋๋๋ก ๋ค๋ฅด๊ฒ ์ค์ ํ์ฌ ์ ์ฅํ์ฌ ์ค๋ณต ๋ฐ์ ๋ฐฉ์ง
๐ Technologies & Tools ๐