- ํ๋ก์ ํธ ๊ธฐ๊ฐ: 2024.07.17 ~ 2024.08.20
- ํ๋ก์ ํธ ์ค๋ช
:
- Slack, Notion, Excel ๋ฑ์ ํตํ ๋ณต์กํ ์๋ฃ ์ ๊ณต ๊ฒฝ๋ก๋ฅผ ๋จ์ํํ๊ณ , ๊ณต์ง ๋ฐ ์ํต์ ๊ฐํธํ๊ฒ ๊ด๋ฆฌํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ
- ์ค์๊ฐ ์ฑํ ๋ฐ ๊ณต์ง ์์คํ ์ ํตํด ์ฌ์ฉ์ ๊ฐ ์ํํ ์ํต์ ์ง์
์ญํ | ์ด๋ฆ | ๋ด๋น ๊ธฐ๋ฅ |
---|---|---|
๋ฆฌ๋ | ํจ์น์ | ํ์๊ด๋ จ ๊ธฐ๋ฅ, ํ๋ก ํธ์๋ ์ธํ |
๋ถ๋ฆฌ๋ | ๋ฐ๋ค๋ฏธ | ์ํ๋ฆฌํฐ ์ค์ , ํ ํ๋ก์ ํธ ๊ด๋ฆฌ, ์ฑํ , ๋ฐฐํฌ |
ํ์ | ๋ฐ๊ฐํ | ๊ฒ์๊ธ, ๊ณต์ง์ฌํญ, ๋ฐฐํฌ, ํ๋ก ํธ์๋ |
ํ์ | ๊น์ฐฝ๋ฏผ | ํธ๋, ์นด์นด์ค ๋ก๊ทธ์ธ |
ํ์ | ๊นํ๋ฏผ | ๊ธฐ์, ํ์๊ฐ์ ์น์ธ, ์ด๋ฉ์ผ ์ธ์ฆ |
- WebSocket ๊ธฐ๋ฐ ์ค์๊ฐ ์ฑํ ๊ธฐ๋ฅ ๊ตฌํ
- JWT ์ธ์ฆ ๋ฐ ์ฌ์ฉ์ ๊ด๋ฆฌ ์์คํ ๊ฐ๋ฐ
- RabbitMQ ๋น๋๊ธฐ ๋ฉ์์ง ์ฒ๋ฆฌ ๊ตฌํ
- Docker ๋ฐ AWS EC2๋ฅผ ํ์ฉํ ๋ฐฐํฌ ๊ฒฝํ
- Jira๋ฅผ ํ์ฉํ ํ๋ก์ ํธ ํ๋๋ ๋ฐ GitHub ์ด์ ๊ด๋ฆฌ
- ๋ฌธ์ ์ : Spring ์๋ฒ์ RabbitMQ ๊ฐ ํต์ ์ค๋ฅ ๋ฐ์
- ์์ธ ๋ถ์:
- ์ด๊ธฐ ์ค์ ์์ ๊ฐ ์ปจํ ์ด๋๊ฐ ๊ฐ๋ณ ๋คํธ์ํฌ์์ ์คํ๋จ
localhost
๋ฅผ ์ฌ์ฉํ์ฌ RabbitMQ์ ์ ๊ทผํ๋ ค ํ์ผ๋ ์ปจํ ์ด๋ ๊ฐ ๋คํธ์ํฌ ๊ฒฉ๋ฆฌ๋ก ์ธํด ์คํจ
- ํด๊ฒฐ์ฑ
:
- Docker Compose๋ฅผ ์ฌ์ฉํ์ฌ Spring ์๋ฒ์ RabbitMQ๋ฅผ ๋์ผ ๋คํธ์ํฌ์ ๋ฐฐ์น
rabbitmq
์ปจํ ์ด๋์ ๊ณ ์ ๋คํธ์ํฌ ์ด๋ฆ์ผ๋ก ํต์
- ๋ฌธ์ ์ 1: ๋์ ๋์ ์ ์ ์ ์ฑ๋ฅ ์ ํ
- ์์ธ ๋ถ์: WebSocket ์์ฒญ์ด ๋จ์ผ ์ค๋ ๋์์ ์ฒ๋ฆฌ๋์ด ๋ณ๋ชฉ ๋ฐ์
- ํด๊ฒฐ์ฑ : ๋ฉํฐ์ค๋ ๋ ์ ์ฉํ์ฌ ๋์ ์์ฒญ ์ฒ๋ฆฌ ์ต์ ํ
- ๋ฌธ์ ์ 2: ๊ณผ๋ํ ์ค๋ ๋ ์์ฑ์ผ๋ก ์ธํ ๋ฆฌ์์ค ๋ญ๋น
- ์์ธ ๋ถ์: ์ค๋ ๋ ๊ฐ์๊ฐ ๋ฌด์ ํ์ผ๋ก ์ฆ๊ฐํ์ฌ ์๋ฒ ๋ฆฌ์์ค ์๋ชจ
- ํด๊ฒฐ์ฑ : ์ค๋ ๋ ํ(Thread Pool) ์ ์ฉ ํด์ ์ต์ ํ
๐ ๊ด๋ จ ๋ฌธ์: WebSocket ์ฑ๋ฅ ๋น๊ต ๋ฐ ์ต์ ํ
- ๋ฌธ์ ์ : ๋ฉ์์ง ์๋น ์คํจ ์ DLQ(Dead Letter Queue)๋ก ๋ฉ์์ง๊ฐ ์ด๋, ์ง์์ ์ธ ๋์ ๋ฐ์
- ์์ธ ๋ถ์:
- Consumer๊ฐ ๋ฉ์์ง ์ฒ๋ฆฌ๋ฅผ ์คํจํ๋ฉด ๋ฉ์์ง๊ฐ DLQ๋ก ์ ์ก๋๋ฉด์ ๋ฐฑ๋ก๊ทธ๊ฐ ์์
- ํน์ Consumer๊ฐ ์ง์์ ์ผ๋ก ์คํจํ ๊ฒฝ์ฐ ์์คํ ์ ๋ฉ์์ง ์ฒ๋ฆฌ ์๋ ์ ํ
- ํด๊ฒฐ์ฑ
:
- ์ํท ๋ธ๋ ์ด์ปค ์ ์ฉ ์ผ๋ก ์ผ์์ ์ธ ์ฅ์ ์ ์ ์ง์ ๋ณต๊ตฌ ์๋
- Slack ์๋ฆผ ์์คํ ์ฐ๋ํ์ฌ ๊ฐ๋ฐ์๊ฐ ์ค์๊ฐ์ผ๋ก ์ฅ์ ๋ฅผ ์ธ์งํ๊ณ ์กฐ์น ๊ฐ๋ฅ
๐ ๊ด๋ จ ๋ฌธ์: RabbitMQ DLQ ๋ฐ ์ํท ๋ธ๋ ์ด์ปค ์ ๋ต
- ๋ฌธ์ ์ : WebSocket ์ฐ๊ฒฐ์ด ๋ฐฐํฌ ํ๊ฒฝ์์ ์คํจ
- ์์ธ ๋ถ์:
- ๋ก์ปฌ ๊ฐ๋ฐ ํ๊ฒฝ์์๋
ws://localhost:8080
์ ์ฌ์ฉํ์ฌ ์ ์ ์๋ - ๋ฐฐํฌ ํ๊ฒฝ์์๋ ๋๋ฉ์ธ์ ์ฌ์ฉํ์ฌ ์ ๊ทผํด์ผ ํ์ง๋ง ์ค์ ์ด ๋ฏธํกํ์ฌ WebSocket ์ฐ๊ฒฐ ์คํจ
- ๋ก์ปฌ ๊ฐ๋ฐ ํ๊ฒฝ์์๋
- ํด๊ฒฐ์ฑ
:
- Nginx ๋ฆฌ๋ฒ์ค ํ๋ก์ ์ค์ ์ ํตํด WebSocket ์์ฒญ์ ์ฌ๋ฐ๋ฅด๊ฒ ๋ผ์ฐํ
nginx.conf
์์ WebSocket ์ ๊ทธ๋ ์ด๋ ํค๋ ์ค์ ์ถ๊ฐ- ํด๋ผ์ด์ธํธ์์
wss://{๋๋ฉ์ธ}/chat
์ผ๋ก ์ ์ํ๋๋ก ์์
- ๋ฌธ์ ์ : JWT ํ ํฐ์ด ๋ง๋ฃ๋๋ฉด ์ฌ์ฉ์ ์ธ์ ์ด ์ข ๋ฃ๋จ
- ์์ธ ๋ถ์:
- JWT๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ธ์ ์ ์ ์งํ์ง ์์ผ๋ฏ๋ก, ํ ํฐ์ด ๋ง๋ฃ๋๋ฉด ์ฌ๋ก๊ทธ์ธ์ด ํ์
- ์ฌ์ฉ์ ๊ฒฝํ์ ๊ณ ๋ คํ ๋, ์๋ ๊ฐฑ์ ๊ธฐ๋ฅ์ด ํ์ํจ
- ํด๊ฒฐ์ฑ
:
- Refresh Token ์ ์ฉํ์ฌ ์ก์ธ์ค ํ ํฐ ๋ง๋ฃ ์ ์๋ ์ฌ๋ฐ๊ธ
- Redis๋ฅผ ํ์ฉํ ์ธ์ ์บ์ฑ์ผ๋ก ์ฌ์ฉ์ ์ธ์ฆ ์์ฒญ ์๋ ๊ฐ์
- Spring Security์ JWT ํํฐ ์ฒด์ธ ์ ์ฉํ์ฌ ์ธ์ฆ ๋ฐ ์ธ๊ฐ ๋ก์ง ๊ฐ์