-
Notifications
You must be signed in to change notification settings - Fork 0
๐ฅณ typeorm์ ์ด์ฉํ FCM ์๋ฆผ ์๋น์ค
sunghwki edited this page Dec 3, 2024
·
2 revisions
-
์ฃผ์ถค์ฃผ์ถค ์๋น์ค๋ ์ด๋ณด์๋ฅผ ์ํ ์๋น์ค์ด๋ค.
- ์๋ฆผ์ ์ฒ์ ์ค์ ํ๊ณ ๋์ ์ ์ ๋ ์ ๊ฒฝ์ ์ฐ์ง ์์๋ ์ค์ ํ ๊ฐ๊ฒฉ, ๊ฑฐ๋๋์ ๋๋ฌํ๋ฉด ์๋ฆผ์ ๋ฐ์ ์ ์๊ฒ ์ฃผ์ ์๋น์ค๋ฅผ ๊ตฌ์ฑํ๊ณ ์ ํ๋ค.
-
์๋ฆผ ์๋น์ค๋ฅผ ๊ตฌํํ ๋ ๊ณ ๋ คํ ๋ถ๋ถ์ ํฌ๊ฒ ๋๊ฐ์ง์ด๋ค.
- ์๋ฒ์ ๋ถํ ๊ฐ๋ฅ์ฑ
- ์ฑํ ์๋ฒ, ์ฃผ์ ๋ฐ์ดํฐ ์๋ฒ ๋ฑ๋ฑ ์ด๋ฏธ ๋ถํ๊ฐ ์๋ ์ํฉ์์ ์๋ฆผ๊น์ง ๋ถํ๋ฅผ ๊ฐํ๊ธฐ์๋ ๋ถ๋ด์ด ์์๋ค.
- ํ์ฌ ์๋ฒ ๊ตฌ์กฐ๋ ๊ฐ ๊ตฌ์กฐ๊ฐ ๋ถ๋ฆฌ๋์ด ์์ง ์์ ํ๊ฒฝ์ด๋ผ ๋๋์ฑ ๋ถํ ๊ฐ๋ฅ์ฑ์ ๋ฌธ์ ๊ฐ ์์ ์ ์์๋ค.
- ์คํ๋ผ์ธ ํ๊ฒฝ์์๋ ์ ๋๋ก ์๋๋์ด์ผ ํจ.
- ์ด๋ณด์์๊ฒ ์ฃผ์์ ์ง์ํด์ ํ์ธํ๋ ์ํฉ๋ณด๋ค๋ ๋น๊ต์ ์์ ๋กญ๊ฒ ํ์ธ์ด ๊ฐ๋ฅํด์ผ ํ๋ค.
- ์๋ฒ์ ๋ถํ ๊ฐ๋ฅ์ฑ
- ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ ์ง์์ ์ธ ์ฐ๊ฒฐ์ ์ ์งํด์ผ ํ๋ฏ๋ก, ์ฐ๊ฒฐ ์๊ฐ ๋ง์์ง์๋ก ์๋ฒ ์์์ด ์๋ชจ๋๋ค.
- ๋ง์ ์ฌ์ฉ์๋ฅผ ๋์์ ์ง์ํ๋ ค๋ฉด ์๋ฒ ํ์ฅ์ด ํ์ํ ์ ์์ผ๋ฉฐ, ํนํ ์ค์๊ฐ ๋ฐ์ดํฐ ์คํธ๋ฆฌ๋ฐ ์๋น์ค์์ ๋ถํ ๊ด๋ฆฌ๊ฐ ์ด๋ ค์ธ ์ ์๋ค.
- ํนํ ํ ์๋ฒ ํ๊ฒฝ์์ ์ง์ํ๋ SSE๋ HTTP 2.0 ๊ธฐ์ค์ผ๋ก 100๊ฐ์ ๋ถ๊ณผํ๋ค.
- ํด๋ผ์ด์ธํธ๊ฐ ๋ธ๋ผ์ฐ์ ํญ์ ๋ซ๊ฑฐ๋ ๋คํธ์ํฌ ์ฐ๊ฒฐ์ด ๋๊ธฐ๋ฉด ์๋ฆผ์ ๋ฐ์ ์ ์๋ค.
- ์ฐ๊ฒฐ์ด ์ ์ง๋๋ ๋์์๋ ์ค์๊ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ์ ์์ง๋ง, ์คํ๋ผ์ธ ํ๊ฒฝ์์๋ ์๋ฆผ์ด ์ค๋จ๋๋ค.
- ์๋ฒ๋ ํ์ํ ๋๋ง ํธ์ ๋ฉ์์ง๋ฅผ ์ ์กํ๋ฏ๋ก ์ง์์ ์ธ ์ฐ๊ฒฐ์ด ํ์ํ์ง ์๋ค. ๋ฐ๋ผ์ ์๋ฒ ๋ถํ๊ฐ ์๋์ ์ผ๋ก ์ ๋ค.
- ํธ์ ๋ฉ์์ง๋ ํธ์ ์๋ฒ๋ฅผ ํตํด ์ ๋ฌ๋๋ฏ๋ก, ์๋ฒ ๋ถํ์ ๋๋ถ๋ถ์ ํด๋ผ์ด์ธํธ์ ์ง์ ์ฐ๊ฒฐ๋ ํธ์ ์๋ฒ๊ฐ ์ฒ๋ฆฌํ๋ค.
-
์ฌ์ฉ์๊ฐ ๋ธ๋ผ์ฐ์ ๋ฅผ ๋ซ๊ฑฐ๋ ์คํ๋ผ์ธ ์ํ์ฌ๋, ํธ์ ๋ฉ์์ง๊ฐ ์ ์ก๋๋ฉด ์ฌ์ฉ์๋ ์๋ฆผ์ ๋ฐ์ ์ ์๋ค.
-
๋คํธ์ํฌ๊ฐ ๋ณต๊ตฌ๋๋ฉด ํธ์ ์๋ฒ๊ฐ ๋ฉ์์ง๋ฅผ ์ ๋ฌํ๋ฏ๋ก, ์ฌ์ฉ์๊ฐ ๋ค์ ์จ๋ผ์ธ์ด ๋์์ ๋ ์๋ฆผ์ ๋์น์ง ์๋๋ค.
-
์ด๋ฐ ์ ์์ Web Push๋ฅผ ์ด์ฉํ ๊ตฌํ์ผ๋ก ์ ๊ทผํ๋ค.
-
typeorm
์afterInsert
๋ฅผ ์ด์ฉํด ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๋๋ง๋คsubscriber
๊ฐ ์๋๋ ์ ์๊ฒ ์ด๋ฒคํธ๋ฅผ ์ค๊ณํ๋ค.
graph
A[OpenapiMinuteData] -->|insert| B[StockMinutely Table]
B -.->|TypeORM event| C[AlarmSubscriber]
C --> D[AlarmService.sendPushNotification]
subgraph OpenapiScraperModule
A
B
end
subgraph AlarmModule
C
D
end
- ์ฃผ์ถค์ฃผ์ถค ์๋น์ค๋ ์ธ๋ถ ์๋น์ค์ธ ํ๊ตญํฌ์์ฆ๊ถ์ api๋ฅผ ์ฌ์ฉํด ๋ถ๋จ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ ์จ๋ค.
- ๋ฌธ์ ๋ ํ์ฌ api๋ฅผ ์ด์ฉํด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๋ค๋ฅธ ์๋น์ค๊ฐ ๋ง๊ณ , api์ ์ต๋ ์์ฒญ ํ์๋ ์ด๋น 20ํ, ์ฌ์ฉ ๊ฐ๋ฅํ api๊ฐ 4๊ฐ์ฌ์ ์ต๋ 80๊ฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์์๋ค.
- 1000๋ช ์ด ์๋ฆผ์ 3๊ฐ ๋ฑ๋กํ ์ํฉ์์ ๊ณตํต๋ ์๋ฆผ์ ๊ฒฝ์ฐ ์ ์ธํ๋ค๊ณ ํด๋ ๋ฐ์ํ์ง ์์๋ค.
-
๋น์ฆ๋์ค ๋ก์ง์ ์ธก๋ฉด
- ํ์ฌ(2024๋ 12์ 3์ผ) ๊ธฐ์ค ํ๊ตญ์ ์ฝ์คํผ, ์ฝ์ค๋ฅ์ ์์ฅ๋์ด ์๋ ์ฃผ์(ETN, ETF ๋ฑ ํฌํจ)์ ๋๋ต 4200๊ฐ ์ ๋์ด๋ค.
- ๋ถ๋จ์ ๋ฐ์ดํฐ๋ฅผ ์ผ๋ถ์ ํ๋ฒ ๋ฐ๊ณ , 1์ด์ 80๊ฑด์ ์์ฒญ์ด ์ฒ๋ฆฌ๊ฐ๋ฅํ๋ฉด 4800๊ฑด์ ์์ฒญ์ 1๋ถ์ ๋ชจ๋ ์ฒ๋ฆฌํ ์ ์๋ค.
- ๋ค๋ง, ๋ค๋ฅธ api ์์ฒญ์ด ์๊ณ , ์ด ์์ฒญ๋ค์ด ๊ฐ์ ธ์ฌ ์ ์๋ ๋ถํ๋ฅผ ์์ง ํ ์คํธํ์ง ๋ชปํด ์ผ๋จ ์๋ฆผ์ ๋ฑ๋กํ ๊ฑด ์ค ๋ง์ ์ฃผ์ ๊ด๋ จ ์๋ฆผ ์์ 200๊ฑด์ ๋ํด์๋ง ์์ฒญ์ด ๊ฐ๋ฅํ๊ฒ ์ฒ๋ฆฌ๋ฅผ ์งํํ๋ค.
-
์๋ฒ ๋ถํ์ ์ธ ์ธก๋ฉด
- ๐ฉ FE ๊ธฐ์ ์ ํ์ด์
- โจ ์ฐจํธ์ ๋ฐ์ํ ๊ตฌํ๊ณผ useRef ํ์ ๋ฌธ์
- ๐ฃ ๋ถ๋ชจ ์์์ ์ํ์ ๋ฐ๋ผ ์์ ์์๋ ์คํ์ผ ๋ณํ ๋ถ์ฌํ๊ธฐ
- ๐ zod ๋์ ํ๊ธฐ
- ๐ useInfiniteQuery๋ฅผ ์ฌ์ฉํ ๊ทธ๋ํ ๋ฌดํ์คํฌ๋กค ๊ตฌํ
- ๐ซ ์ฌ์ฉ์์ ์์ ๋ณํ ์๋ ๊ทธ๋ํ ์คํฌ๋กค ๊ตฌํํ๊ธฐ
- ๐งช ์๋ง์ ๊ทธ๋ํ ๋ฐ์ดํฐ ์์ฒญ์ ์ด๋ป๊ฒ ์ค์ผ๊น
- ๐ ๋คํฌ๋ชจ๋์์ ์๋ก๊ณ ์นจ ์ ๋ผ์ดํธ๋ชจ๋๊ฐ ์ ๊น ๋ณด์ด๋ ๋ฌธ์
- ๐ ์น์์ผ์ ์ฑํ ๋ฐ์ดํฐ์ REST API์ ์ฑํ ๋ฐ์ดํฐ๋ฅผ ํจ๊ป ๊ด๋ฆฌํ๊ธฐ
- ๐ก BE ๊ธฐ์ ์ ํ ์ด์
- โ๏ธ Node WebSocket ํ๊ณ ๋ค๊ธฐ
- โ๏ธ TypeORM Datasource mock ๋ง๋ค๊ธฐ
- โ๏ธ oauth ID range ๋ฌธ์
- ๐ custom pipe์์ Nan์ด ๋ฐ์์ง๋ ๋ฌธ์
- ๐ช nest Websocket์ ์ธ์ ์ด ์๋๋ค๊ณ ?
- ๐ด nginx websocket ์ฐ๊ฒฐ ์ ๋ฌธ์ ๋ฐ์
- ๐ WebPush ๊ตฌํ
- ๐ง ์ฐ์ ์์ ํ๋ก ์์ฒญ ์ ์ดํ๊ธฐ
- ๐ websocket ์ ํ ๊ด๋ฆฌํ๊ธฐ
- ๐ฅณ typeorm์ ์ด์ฉํ FCM ์๋ฆผ ์๋น์ค
- ๐ฆ ๋ค์ค ์ ์ ๋์์ฑ ์ ์ด โ ์ฑ๊ธํค, ๋ฎคํ ์ค
- ๐ ๏ธ ์ธํ๋ผ ๊ธฐ์ ์คํ ์ ํ ์ด์
- ๐ Ncloud ์ค์ ๊ณผ์
- ๐ ORM ๊ธฐ์ ์คํ ๋น๊ต
- ๐ค RabbitMQ๋ก ๋ถ์ฐ ์๋ฒ์๊ฒ ๋ฉ์์ง๋ฅผ ๋ถ๋ฐฐํ๊ธฐ
- ๐ข private DB ์๋ฒ์ ์ ์ํ์ง ๋ชปํ๋ ํ์
- ๐ 1์ฃผ์ฐจ ๋ฐํ
- ๐ 2์ฃผ์ฐจ ๋ฐํ
- ๐ 3์ฃผ์ฐจ ๋ฐํ
- ๐ 4์ฃผ์ฐจ ๋ฐํ
- ๐ 5์ฃผ์ฐจ ๋ฐํ
- ๐ ์ต์ข ๋ฐํ