๋ ์ ๋ฆฌ๋ง์ธ๋ ์๋ฆผ ๊ตฌํ ๋ฐฉ์ ์ ํ ๊ณผ์
๋ชฉ์ฐจ
1. ๋ฐฐ๊ฒฝ
๋ ์ ๋ฆฌ๋ง์ธ๋ ์๋ฆผ ๊ธฐ๋ฅ์ ์ฒ์ ๊ตฌํํด๋ณด๋ ์ํฉ์์ ์ด๋ค ๋ฐฉ์์ผ๋ก ๊ตฌํํ ์ง ๊ณ ๋ฏผ์ด ์์๋ค. ์๋ฆผ ๊ตฌํ ๋ฐฉ๋ฒ์ด ์ฌ๋ฌ ๊ฐ์ง ์๋ค๋ ๊ฒ์ ์๊ณ ์์์ง๋ง, SSE ์ธ์๋ ์ต์ํ์ง ์์ ๋ฐฉ์๋ค์ด์๋ค.

๋ฆฌ๋ง์ธ๋ ์๋ฆผ์ ์ฌ์ฉ์๊ฐ ์ค์ ํ ์๊ฐ์ ๋ง์ถฐ ์๋ฒ๊ฐ ์๋ฆผ์ ๋ณด๋ด์ฃผ๋ ๊ธฐ๋ฅ์ด๋ค. ๋ฐ๋ผ์ ๋จ์ํ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ API์ ๋ฌ๋ฆฌ, ์๋ฒ๊ฐ ํน์ ์์ ์ ์ฌ์ฉ์๋ฅผ ํ์ธํ๊ณ ์๋ฆผ์ ์ ๋ฌํ๋ ๊ตฌ์กฐ๊ฐ ํ์ํ๋ค.
2. ์๋ฆผ ๊ตฌํ ๋ฐฉ์ ๋น๊ต
| ๋ฐฉ์ | ์ค๋ช | ๋์ด๋ |
|---|---|---|
@Scheduled + SSE |
์๋ฒ๊ฐ ์ฃผ๊ธฐ์ ์ผ๋ก DB๋ฅผ ํ์ธํ ๋ค SSE๋ก ๋ธ๋ผ์ฐ์ ์ ์๋ฆผ์ ํธ์ํ๋ค. | ๋ฎ์ |
@Scheduled + ์ด๋ฉ์ผ |
์๋ฒ๊ฐ ์ฃผ๊ธฐ์ ์ผ๋ก DB๋ฅผ ํ์ธํ ๋ค ์ด๋ฉ์ผ์ ๋ฐ์กํ๋ค. | ๋ฎ์ |
| WebSocket | ์๋ฒ์ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฐฉํฅ์ผ๋ก ์ค์๊ฐ ํต์ ํ๋ค. | ๋์ |
| FCM / APNs | ๋ชจ๋ฐ์ผ ์ฑ์์ ์ฌ์ฉํ๋ ํธ์ ์๋ฆผ ๋ฐฉ์์ด๋ค. | ์ค๊ฐ |
3. WebSocket์ ์ ํํ์ง ์์ ์ด์
WebSocket์ ์ฒ์์ SSE์ ํจ๊ป ๊ฐ์ฅ ํ์ค์ ์ธ ์ ํ์ง๋ก ๊ณ ๋ คํ๋ค. ํ์ง๋ง ์ค์ ๊ตฌํ์ ์๊ฐํด๋ณด๋ฉด ํ์ฌ ์๊ตฌ์ฌํญ์ ๋นํด ๋ณต์ก๋๊ฐ ๋๋ค๊ณ ํ๋จํ๋ค.
spring-boot-starter-websocket์์กด์ฑ ์ถ๊ฐ ๋ฐ STOMP ๋ธ๋ก์ปค ์ค์ ์ด ํ์ํ๋ค.- ์ฐ๊ฒฐ๊ณผ ํด์ ๋ฅผ ์ฒ๋ฆฌํ๋ ํธ๋ค๋ฌ ๊ตฌํ์ด ํ์ํ๋ค.
- ์ ์ ์ค์ธ ์ฌ์ฉ์ ์ธ์ ์ ๋ณ๋๋ก ๊ด๋ฆฌํด์ผ ํ๋ค.
- Spring Security ์ ์ฉ ์ WebSocket ์ธ์ฆ ์ฒ๋ฆฌ๋ฅผ ๋ณ๋๋ก ๊ณ ๋ คํด์ผ ํ๋ค.
๋ฌด์๋ณด๋ค ๋ฆฌ๋ง์ธ๋ ์๋ฆผ์ ์๋ฒ์์ ํด๋ผ์ด์ธํธ๋ก ์๋ฆผ์ ๋ณด๋ด๋ ๋จ๋ฐฉํฅ ํต์ ๋ง์ผ๋ก ์ถฉ๋ถํ๋ค. WebSocket์ ์ฑํ ์ฒ๋ผ ํด๋ผ์ด์ธํธ๋ ์๋ฒ๋ก ์ค์๊ฐ ๋ฉ์์ง๋ฅผ ๋ณด๋ด์ผ ํ๋ ๊ฒฝ์ฐ์ ๋ ์ ํฉํ๋ค.
4. ๊ฒฐ์ — @Scheduled + SSE
@Scheduled๋ฅผ ์ฌ์ฉํ ์ฃผ๊ธฐ์ ์๋ฆผ ํ์ธ
@Scheduled๋ ์๋ฒ๊ฐ ์ ํด์ง ์ฃผ๊ธฐ๋ง๋ค ํน์ ๋ฉ์๋๋ฅผ ์คํํ๋๋ก ํ๋ Spring์ ์ค์ผ์ค๋ง ๊ธฐ๋ฅ์ด๋ค. ๋ฆฌ๋ง์ธ๋ ์๋ฆผ์์๋ ์๋ฒ๊ฐ ์ฃผ๊ธฐ์ ์ผ๋ก DB๋ฅผ ์กฐํํด์ ํ์ฌ ์๊ฐ์ ์๋ฆผ์
๋ณด๋ผ ์ฌ์ฉ์๋ฅผ ํ์ธํ๊ณ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ๋ค.

@Scheduled๋ฅผ ์ฌ์ฉํด ๋งค๋ถ ๋ฆฌ๋ง์ธ๋ ๋์ ์ฌ์ฉ์๋ฅผ ์กฐํํ๊ณ SSE๋ก ์๋ฆผ์ ์ ์กํ๋ ์ฝ๋๋ค.
cron ํํ์ 0 * * * * *๋ ๋งค ๋ถ 0์ด์ ์คํ๋๋ค๋ ์๋ฏธ๋ค. ์ด ๋จ์๋ก ์ ๋ฐํ๊ฒ ์๋ฆผ์ ๋ณด๋ผ ํ์๋ ์๋ค๊ณ ํ๋จํ๊ธฐ ๋๋ฌธ์ 1๋ถ ์ฃผ๊ธฐ๋ก ์ค์ ํ๋ค.
SSE๋ฅผ ์ฌ์ฉํ ์๋ฒ ๋จ๋ฐฉํฅ ์๋ฆผ ์ ์ก
SSE(Server-Sent Events)๋ ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์ ์ค์๊ฐ์ผ๋ก ์ด๋ฒคํธ๋ฅผ ํธ์ํ๋ ๋จ๋ฐฉํฅ ํต์ ๋ฐฉ์์ด๋ค. ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์ฐ๊ฒฐํด๋๋ฉด, ์๋ฒ๋ ํ์ํ ์์ ์ ์ด๋ฒคํธ๋ฅผ ๋ด๋ ค๋ณด๋ผ ์ ์๋ค.
Spring MVC์์ SseEmitter๋ฅผ ํตํด ๊ตฌํํ ์ ์์ด ๋ณ๋์ ๋ณต์กํ ์ค์๊ฐ ํต์ ์ธํ๋ผ๋ฅผ ์ถ๊ฐํ์ง ์์๋ ๋๋ค.

SseEmitter๋ฅผ ์ฌ์ฉํด ๋ธ๋ผ์ฐ์ ์ ๋ฆฌ๋ง์ธ๋ ์ด๋ฒคํธ๋ฅผ ์ ์กํ๋ ์ฝ๋๋ค.
SSE ์ฐ๊ฒฐ ๊ด๋ฆฌ ๋ฐฉ์
SSE ์ฐ๊ฒฐ์ ์ฌ์ฉ์๋ณ๋ก SseEmitter๋ฅผ ConcurrentHashMap์ ์ ์ฅํ๋ ๋ฐฉ์์ผ๋ก ๊ด๋ฆฌํ๋ค. ์ฌ์ฉ์๊ฐ /reminders/connect๋ก ์ฐ๊ฒฐํ๋ฉด ํด๋น ์ฌ์ฉ์์ emitter๋ฅผ ์ ์ฅํ๊ณ , ์ฐ๊ฒฐ์ด ๋๊ธฐ๋ฉด ์๋์ผ๋ก ์ ๊ฑฐ๋๋๋ก ์ฒ๋ฆฌํ๋ค.
์ด๋ ๊ฒ ํ๋ฉด ํ์ฌ ์ ์ ์ค์ธ ์ฌ์ฉ์์๊ฒ๋ง ๋ฆฌ๋ง์ธ๋ ์๋ฆผ์ ๋ณด๋ผ ์ ์๊ณ , ๋ถํ์ํ๊ฒ ๋์ด์ง ์ฐ๊ฒฐ์ ๊ณ์ ๋ณด๊ดํ์ง ์์๋ ๋๋ค.
์ ํ ์ด์
- ๋ฆฌ๋ง์ธ๋ ์๋ฆผ์ ์๋ฒ์์ ํด๋ผ์ด์ธํธ๋ก ๋ณด๋ด๋ ๋จ๋ฐฉํฅ ํต์ ๋ง์ผ๋ก ์ถฉ๋ถํ๋ค.
- ๋ณ๋ ์ธํ๋ผ ์์ด Spring ๊ธฐ๋ณธ ๊ธฐ๋ฅ๋ง์ผ๋ก ๊ตฌํํ ์ ์๋ค.
- WebSocket๋ณด๋ค ๊ตฌํ ๋ณต์ก๋๊ฐ ๋ฎ๋ค.
- Spring Security ์ฐ๋ ์ ์ถ๊ฐ ์ค์ ๋ถ๋ด์ด ์๋์ ์ผ๋ก ์ ๋ค.
- ํ์ฌ Booktine ์๋น์ค ๊ท๋ชจ์ ์ ํฉํ ๋ฐฉ์์ด๋ค.
SSE์ ํ๊ณ
SSE์๋ ํ๊ณ๋ ์๋ค. ์๋ฒ๊ฐ ์ฌ์์๋๋ฉด ๊ธฐ์กด ์ฐ๊ฒฐ์ ๋์ด์ง๋ฏ๋ก ํด๋ผ์ด์ธํธ๊ฐ ๋ค์ ์ฐ๊ฒฐํด์ผ ํ๋ค. ๋ํ ๋ธ๋ผ์ฐ์ ํญ์ด ๋ซํ๋ฉด SSE ์ฐ๊ฒฐ๋ ํจ๊ป ๋๊ธด๋ค.
๋ค๋ง ํ์ฌ ์๋น์ค ๊ท๋ชจ์์๋ ์ด๋ฌํ ํ๊ณ๊ฐ ์น๋ช ์ ์ด์ง ์๋ค๊ณ ํ๋จํ๋ค. Booktine์ ๋ฆฌ๋ง์ธ๋ ์๋ฆผ์ ๊ณ ๋น๋ ์ค์๊ฐ ๋ฉ์์ง ์ฒ๋ฆฌ๋ณด๋ค, ์ฌ์ฉ์๊ฐ ์ค์ ํ ์๊ฐ์ ์๋ฆผ์ ์ ๋ฌํ๋ ๊ฒ์ด ํต์ฌ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
@Scheduled์ SSE ์กฐํฉ์ด ๋ ๋จ์ํ๊ณ ์ ํฉํ ์ ํ์ด๋ผ๊ณ ํ๋จํ๋ค.'๐ป PROJECT > [Spring Boot, React] ๋ ์ ์ต๊ด ๊ด๋ฆฌ ์๋น์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [ํธ๋ฌ๋ธ์ํ ] ๋ก์ปฌ ํ๊ฒฝ ์ด๋ฉ์ผ ๋ฐ์ก ์คํต ์กฐ๊ฑด ์ค๋ฅ ํด๊ฒฐ (0) | 2026.05.04 |
|---|---|
| [ํธ๋ฌ๋ธ์ํ ] JavaMailSender ๋น ๋ฑ๋ก ์ค๋ฅ (๋ก์ปฌ ํ๊ฒฝ) (0) | 2026.05.03 |
| [ํ๋ก์ ํธ] ํ์ด์ง๋ค์ด์ ๋ฐฉ์ ์ ํ ๊ณผ์ (0) | 2026.05.01 |
| [ํ๋ก์ ํธ] ๊ณตํต ์๋ต ํฌ๋งท ์ค๊ณ (0) | 2026.04.30 |
| [ํ๋ก์ ํธ] ์ด๋ฏธ์ง ์ ๋ก๋ ์ ์ฑ ๊ฒฐ์ ๊ณผ์ (0) | 2026.04.30 |