-
Notifications
You must be signed in to change notification settings - Fork 5
Matching login
- ๋ผ์ด๋์ ๋๋ผ์ด๋ฒ์ ๋งค์นญ
- GraphQL Subscription์ pub,sub์ ์ด์ฉํ ์ ์๋ค.
ํ๋ช ์ ๋ผ์ด๋๋ก ๋ถํฐ ์จ ์์ฒญ์ ์ฌ๋ฌ๋ช ์ ๋๋ผ์ด๋ฒ๊ฐ ๋์์ ์น์ธํ ๊ฒฝ์ฐ ๋๊ธฐํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.(์ดํ์ ๋ณด์ ์ฌ๋ฌ ๋๋ผ์ด๋ฒ๊ฐ ์ ๊ทผํ์ฌ ๋ฐ์ํ๋ ๋ฌธ์ )
- ๋ชจ๋ ๋๋ผ์ด๋ฒ๊ฐ matching(๋งค์นญ ์ ๋ณด์ ๊ดํ) subscription์ subscribe ํด์ ๋ผ์ด๋๊ฐ ๋๋ผ์ด๋ฒ ๋งค์นญ์ ์ฑ๊ณตํ๋ฉด matching subscription์ ๋๋ผ์ด๋ฒ ID์ ๋ผ์ด๋ ID๋ฅผ publish ํ๋ค.
- ๋ชจ๋ ๋๋ผ์ด๋ฒ๊ฐ matching ์ subscribeํ์ง ๋ง๊ณ accept ํ ๋๋ผ์ด๋ฒ๋ง matching์ subscribeํ๊ณ , DB์์ ์ดํ์ ๋ณด๋ฅผ ํ๋ฒ ๋ ํ์ธํ๋ฉด ๋ ๊ฒ๊ฐ๋ค.
๋ค์ ๋๋ผ์ด๋ฒ๋ค ์ค 3๋ฒ ๋๋ผ์ด๋ฒ๊ฐ ๋ฌธ์ ๊ฐ ๋๋ค. matching์ด ๋๋๊ณ ์น์ธ์์ฒญ์ ํ ๋๋ผ์ด๋ฒ์ ๊ฒฝ์ฐ ๋๋ผ์ด๋ฒ์ ๋ผ์ด๋ID๋ฅผ publish๋ฅผ ๋ฐ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ด๋ค.
- ์น์ธ ๋ฒํผ์ ํด๋ฆญํ ๋๋ผ์ด๋ฒ
- ๊ทธ ์ดํ ์กฐ๊ธ ๋ฆ๊ฒ ๋ค์ด์จ ๋๋ผ์ด๋ฒ
- ์์ ๋ง์ง๋ง์ ์น์ธ์์ฒญ์ ๋๋ฅธ ๋๋ผ์ด๋ฒ
- ๊ทธ๋ ๋ค๋ฉด ์ดํ์ ๋ณด์ ์ํ(open,closed,matched)๋ฅผ db์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํด์ publish ๋์ ์ดํ์ ๋ณด๋ฅผ ์ง์ ํ์ธํ๋ค. -> ...์ดํ์ ๋ณด๋ฅผ ์ด๋ค ํ์ด๋ฐ์ ์ ์ฅํ ๊น.
- ๋จผ์ ๋ผ์ด๋๊ฐ ํธ์ถ ํ ๋ driverId๋ฅผ ๋น์ด์ฑ๋ก open๋ ์ํ์ ์ดํ์ writeํ๊ณ (์ ์ฅ ๋ฐ์ดํฐ field: riderId, ์ถ๋ฐ์ง, ๋ชฉ์ ์ง, ์ดํ ์ํ)
- ๋๋ผ์ด๋ฒ์ ์น์ธ๋ฉ์ธ์ง๋ฅผ ๋ฐ๊ณ ,๋ผ์ด๋๊ฐ ํด๋น ๋๋ผ์ด๋ฒ์ ๋ํ ์น์ธ์ ํ๋ฉด์ ์ดํ์ ์ํ๋ฅผ matched๋ก ์ ๋ฐ์ดํธํ๊ณ , driverId๋ฅผ ๋ฃ์ด์ค๋ค.
DB์ ์ ์ฅํ ์ดํ์ ๋ณด์ ํ์ฌ์ํ -> open(๋งค์นญ์ด ์ด๋ฃจ์ด์ง๊ธฐ ์ ์ ์ํ) -> matched(๋๋ผ์ด๋ฒ์ ๋ผ์ด๋์ ๋งค์นญ์ด ์ด๋ฃจ์ด์ก์ ๋) -> cancel(๋ผ์ด๋๊ฐ ๋๋ผ์ด๋ฒ์์ ๋งค์นญ์ ์ทจ์ํ์ ๋) -> onBoard(๋๋ผ์ด๋ฒ๊ฐ ํ์น๋ฒํผ์ ๋๋ ์ ๋) -> closed(๋๋ผ์ด๋ฒ๊ฐ ํ์ฐจ๋ฒํผ์ ๋๋ ์ ๋)
์ด ๋๋ฒ์ ๊ฑธ์ณ ํด๊ฒฐํ๋ค.
- ๋ผ์ด๋๊ฐ ํ์ ๋ ๋๋ผ์ด๋ฒ์ ID๋ฅผ ๋๋ผ์ด๋ฒ ์ ์ฒด์๊ฒ publishํ์ฌ ๋๋ผ์ด๋ฒ ๊ฐ ๋งค์นญ๋ ๋๋ผ์ด๋ฒ๋ฅผ ํ์ธํ ์ ์๋๋ก ํ๋ค.
- ์ดํ์ ๋ณด์ ์ํ ๊ฐ์ ๋ฃ์ด์ ๊ฐ ๋๋ผ์ด๋ฒ๊ฐ ์ํ๋ฅผ ํ์ธํ์ฌ, open๋ ์ดํ๋ง ์น์ธํ ์ ์๋๋ก ํ๋ค.
์์น๊ธฐ๋ฐ์ผ๋ก ๋๋ผ์ด๋ฒ๋ฅผ ํธ์ถํ๋ ๋ฐฉ๋ฒ์ ๋ํ์ฌ
- ๋๋ผ์ด๋ฒ ํ์ฌ ์์น๋ฅผ ์ง์์ ์ผ๋ก db์ ์ ์ฅํ๋ค. ๋๋ผ์ด๋ฒ๋ค์ ์์น๋ฅผ ์ง์์ ์ผ๋ก db์ ์ ๋ฐ์ดํธํ๋ ๊ฒ์ ์ด์ํ์ง ์๋๊ฐ?
์๋ฆผ: callRequest subscription์ ๋ผ์ด๋๊ฐ ์์ ์ ์์น๋ฅผ publish๋ฅผํ๋ฉด subscribe์ค์ธ ๋๋ผ์ด๋ฒ๋ค์ด ํด๋น pub์ ๋ผ์ด๋ ์์น๊ฐ ์์ ์ ์์น์ ๊ฐ๊น์ด์ง ํ๋ณํ์ฌ ํธ์ถ์ ๋ฐ๋๋ค.
์์น์ ๋ณด ๊ณต์ ๋ฅผ ์ํ์ฌ ๋๋ฒ์ subscription์ ์ฌ์ฉํ๋๊ฒ์ด ๋ถ์์ฐ์ค๋ฌ์, ๋ฉํ ๋์ ์กฐ์ธ์ ๋ฐ๋ผ db์ ๋๋ผ์ด๋ฒ ์์น์ ๋ณด๋ฅผ ์ ์ฅ(mutation)ํ๊ณ , ํด๋น ์์น์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก callRequstํ๊ธฐ๋ก ํ์ต๋๋ค.
๋ฌธ์ ์ํฉ 1์ ํด๊ฒฐ์ฑ ์, ์ฌ๋ฌ๋ช ์ ๋ผ์ด๋๊ฐ ํ๋ช ์ ๋๋ผ์ด๋ฒ์๊ฒ ์์ฒญ์ ๋ณด๋ธ ๊ฒฝ์ฐ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ด๋ ต๋ค. ํ ๋ช ์ ๋๋ผ์ด๋ฒ์๊ฒ ์ฌ๋ฌ๋ช ์ ๋ผ์ด๋๊ฐ ์์ฒญ์ ๋ณด๋ธ ๊ฒฝ์ฐ์ ๋๊ฐ์ง ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. ํด๋น ๋ฌธ์ ์ํฉ์ ๋ค์๊ณผ ๊ฐ๋ค.
dbํต์ ์ ๋๋ ์ด ๋๋ฌธ์ ์ดํ ์ํ๋ฅผ ๋์น ์ ์๋ค.
publish๋ง๋ค ์๋ฆผ์ ๋์ฐ๋ฉด, ์ฒซ๋ฒ์งธ ๋ผ์ด๋๋ฅผ ๋์น๊ณ 5์ด๋ง๋ค ๋์ฐ๋ฉด ๋๋ฒ์งธ ๋ผ์ด๋๋ฅผ ๋์น๋ค. ์๋ฆผ์์ฒญ์ ํ๋ฅผ ๋ง๋ค์ด๋ ์์ฒญ์ ์ํ๋ฅผ ํ์ธํ ์ ์๋ค.
๊ทธ๋ ๊ธฐ์ ๋ผ์ด๋๊ฐ ๋๋ผ์ด๋ฒ ํ ๋ช ์๊ฒ ์์ฒญ์ ๋ณด๋ด๊ณ 5 ์ด ๋ค์ ๋ค๋ฅธ ๋๋ผ์ด๋ฒ์๊ฒ ์์ฒญ์ ๋ณด๋ด๋ ๋ฐฉ์(์ดํ 1๋1๋งค์นญ)์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ ํฉํ์ง ์๋๋ ์๊ฒฌ์ด ๋์๋ค.
- '1๋1๋งค์นญ'์ผ๋ก ํด๊ฒฐ์ด ๊ฐ๋ฅํด ๋ณด์์ง๋ง, ๋ฌธ์ 4๋ฒ์ ์ํฉ์ ํด๊ฒฐํ๊ธฐ ์ํด ๋งค์นญ ์์ฒญ์ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ฉด, ๋ค์ 3๋ฒ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
- ๋๋ผ์ด๋ฒ ํด๋ผ์ด์ธํธ์์๋ ๊ทธ๋ฅ ํ์ฌ ๋๋ผ์ด๋ฒ์ ์ํ๋ฅผ ํ์ธํ์ฌ ์์ฒญ์ ์น์ธ์ฌ๋ถ๋ฅผ publishํ๋ค. ๊ทธ๋ฌ๋ฉด db๋ฅผ ์กฐํํ์ง ์๊ณ , ๋ฌธ์ ์ํฉ3์ ํด๊ฒฐ ๊ฐ๋ฅํ๋ค.
- ๋ผ์ด๋์ ์์ฒญ๊ณผ ๋์์ ๊ทผ์ฒ ๋๋ผ์ด๋ฒ์ ๋ฐฐ์ด์ ๋ง๋ค๊ณ , ํด๋น ๋ฐฐ์ด์ด ๋น ๋ ๊น์ง ์์ฒญ์ ๋ณด๋ธ๋ค.
๋ผ์ด๋๋ฐฐ์ด ๋๋ผ์ด๋ฒ ํ๋ณด๊ตฐ์ด ๊ฐ๋ค ๋ผ์ด๋ 1๋ฒ์ ์์ฒญ์ด ๋จผ์ ๊ฐ๋ค. ์์ฒญ์ด ๊ฐ์ ๋ ๋๋ผ์ด๋ฒ์ ์ํ๋ฅผ ๋ฐ๊พผ๋ค(ํ์ ์ฌ๋ถ) ๋ผ์ด๋ 2๋ฒ์ด ๋๋ผ์ด๋ฒ 1๋ฒ์๊ฒ ์์ฒญ์ด ๊ฐ๋ค๋ฉด, ๋๋ผ์ด๋ฒ๊ฐ ํ์ ์ํ์ด๋ฉด ๋ค๋ฅธ ์ญ์คํฌ๋ฆฝ์ ์ ๋ ๋ชป๋ฐ๋๋ค๋ pub์ ๋ณด๋ธ๋ค.
๐กHome
- Apollo References
- Schema Directives
- Apollo Client - Local State
- GraphQL Execution
- Apollo Server Execution
- Apollo Client Cache
- Apollo Client Execution
- Mongoose-Populate