์๋ ํ์ธ์, ์ด ๊ธฐ๋ฅ ๋น๋์ ์ฐธ์ฌํ๊ฒ ๋์ด ๋งค์ฐ ๊ธฐ์ฉ๋๋ค. ํ์ฌ ํ๋ก์ ํธ์ ์ ๋ง ํ์ํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ํ์ง๋ง ์์ํ๋ ค๋ฉด ๋ช ๊ฐ์ง ํํธ๊ฐ ํ์ํฉ๋๋ค. ๋๊ตฌ๋ ์ง ์์ด๋์ด๊ฐ ์์ต๋๊น?
์ผ๋ฐ์ ์ธ ์ฌ์ฉ ์ฌ๋ก๋ก ๋ฌด์์ ๊ณ ๋ คํ์๊ฒ ์ต๋๊น?
์คํ๋ผ์ธ ์ฑ์ผ๋ก:
๋๋ ๊ทธ๊ฒ์ด ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉ๋๋ค๊ณ ์์ํ๋ค.
import { NetInfo } from 'react-native';
import OfflineLink from 'apollo-link-offline';
const offlineLink = new OfflineLink({
isOnlineAsync: () => NetInfo.isConnected.fetch(),
});
NetInfo.isConnected.addEventListener('change', (isConnected) => {
if (isConnected) {
offlineLink.resubmit();
}
});
๋๋ผ์ด ๊ธฐ๋ฅ์ด ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋ด๊ฐ ๋ณผ ์ ์๋ ์ ์ฌ์ ์ธ ๋ฐฉ๋ฒ์ Apollo-link-offline์ด ์คํ๋ผ์ธ์์ ์ฌ์ฉํด์ผ ํ๋ ์ฟผ๋ฆฌ ๋ฐ ๋์ฐ๋ณ์ด ์ธํธ๋ฅผ ์ ์ํ๋๋ก ํ๋ ๊ฒ์ ๋๋ค.
์ผ๋จ ๊ทธ๊ฒ๋ค์ด ์ ์๋๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ฟผ๋ฆฌ์์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ ๋ก์ปฌ ์ ์ฅ์์ ์ ์ฅํ ์ ์์ต๋๋ค. Mutations์ ๊ฒฝ์ฐ ์คํ๋ผ์ธ์์ ์์ฑ๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๋๋ก ๋ก์ปฌ ์ ์ฅ์์ ์์ฑ๋ ๋ชจ๋ ํ๋๊ฐ ํ์ํฉ๋๋ค.
์ด๋ ๊ฒ ํ๋ฉด ๋ก์ปฌ ์บ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋์ ์คํ๋ผ์ธ์์๋ ๊ธฐ๋ฅ์ ๊ณ์ ์ํํ ์ ์์ต๋๋ค.
์๋น์ค ์์ปค์ ์ฐ๊ฒฐํ ์ ์๋ค๋ฉด Google PWA ํ
์คํธ๋ ํต๊ณผํ ๊ฒ์
๋๋ค.
๊ทธ๋ฐ ๋ค์ ์ฑ์ด ๋ค์ ์จ๋ผ์ธ ์ํ๊ฐ ๋๋ฉด ๋ก์ปฌ ์บ์์์ ๋ฐ์ํ ๋ชจ๋ ๋ณํ์ API๋ก ๋ค์ ์ ๋ฌํ ์ ์์ต๋๋ค.
๋ถ๋ช ํ ์ด๋ค ํํ์ ๋์์ฑ ๋ณดํธ๊ฐ ํ์ํฉ๋๋ค.
๋ด ๊ฑฑ์ ์ ์ฌ์ฉ์ A(์คํ๋ผ์ธ)๊ฐ ํ ์ด๋ธ X๋ฅผ ์ ๋ฐ์ดํธํ๋ ๋ฐ๋ฉด ์ฌ์ฉ์ B(์จ๋ผ์ธ)๋ ์ฌ์ฉ์ A๊ฐ ์คํ๋ผ์ธ์ธ ๋์ ํ ์ด๋ธ X๋ฅผ ์ ๋ฐ์ดํธํ๋ค๋ ๊ฒ์ ๋๋ค. ์ฌ๊ธฐ์ ์ด๋ค ํํ์ ๋์์ฑ ๊ท์น์ด ํ์ํฉ๋๋ค. ๋ ์ง ๊ธฐ๋ฐ์ผ ์ ์์ง๋ง ์ฌ์ฉ์ A๊ฐ ์ฌ์ฉ์ B๊ฐ ์ธ์ํ์ง ๋ชปํ๋ ์ํ์์ ์ฌ์ฉ์ B์ ๋ฐ์ดํฐ๋ฅผ ๋ฌด์ํ๋ฉด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์ง ์์ต๋๋ค.
๋๋ ๋์ฐ๋ณ์ด์ ์คํจํ๊ณ ์ฌ์ฉ์๊ฐ ๋ค์ ์จ๋ผ์ธ ์ํ์ผ ๋ ์๋์ผ๋ก ์ ๋ฐ์ดํธํ๋๋ก ํ ์ ์์ต๋๋ค.
Apollo Client 2๋ ํ๋ฅญํ์ง๋ง ์ด ๊ธฐ๋ฅ์ ์ ๋์ ์ธ ๊ฐ ๋ฉ์ด๋ฆฌ๊ฐ ๋ ๊ฒ์ ๋๋ค.
๋๋ ์ด๊ฒ์ ์ด๋ ฌํ ํฌ์ด๊ธฐ๋ ํ๋ค. 1.0์ Redux ์คํ ์ด๋ก ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ ๋ค์ํ ์๋๊ฐ ์๋ค๋ ๊ฒ์ ์๊ณ ์์ง๋ง ์ผ๊ด๋ ์ ๊ทผ ๋ฐฉ์์ผ๋ก Apollo 2.0 ์ํ๊ณ์ ์์ ํ ์๋ฏผ์ผ๋ก ๋ง๋๋ ๊ฒ์ ๋งค์ฐ ๋๋ผ์ด ์ผ์ ๋๋ค.
์ฌ๊ธฐ์์ ๋ค๋ฃฌ ๋๋ถ๋ถ์ ๋ด์ฉ์ ์ด๋ฏธ ๋์๊ฒ ๋ง์ ์๋ฏธ๊ฐ ์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋ด ๋ฐ์ดํฐ๋ฅผ ๋ก์ปฌ ์คํ ๋ฆฌ์ง์ ์ ์งํ ๋ค์ ๋์ค์ ๊ทธ๊ณณ์์ Apollo๋ก ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ์ํฉ๋๋ค. ๋ ๋ฒ์งธ๋ก, ๋์ฐ๋ณ์ด๋ฅผ ๋๊ธฐ์ด์ ๋ฃ์ต๋๋ค.
์ผ์ข ์ 3์ฐจ ๋ชฉํ๋ก ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๋ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ๋นจ์๋ค์ผ ์ ์๋ค๋ ๊ฒ ๋ํ ํ๋ฅญํ ๊ฒ์ด๊ณ , ๋๋ ์๊ด์์ด ํ ์ผ์ ์ฐพ๊ณ ์์ ๊ฒ์ ๋๋ค. ๋๋ ์ค์ ๋ก ๊ฑฐ์ ๋ชจ๋ ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ๋ก์ปฌ์ ์ ์ฅํ๊ณ ์ถ์ต๋๋ค. ์ผ๋ฐ์ ์ธ ์ฟผ๋ฆฌ ์์ ์ ํจ์ฌ ๋ ๋น ๋ฅด๊ฒ ๋ง๋ค๊ณ ๋คํธ์ํฌ๊ฐ ํ์ฉํ๋ ์์ ํ ์ ํ์ฑ์ ์ํด ์ฌ์ํํ๊ธฐ ์ํด์์ ๋๋ค. ๋ฐ๋ผ์ ์๋น์ค ์์ปค๊ฐ Safari๊ฐ ๋ง์นจ๋ด ๊ธฐ์ ํ๋ฆฌ๋ทฐ๋ก ์ ๊ณต๋๋ฉด์ ์คํ ๊ฐ๋ฅํ๊ฒ ๋๊ธฐ ์์ํจ์ ๋ฐ๋ผ ๋์ค์ ์ด๋ ฌํ ๋ก๋๋๋ ๊ฐ๋์ ๋ํ ์ผ์ข ์ ์๋ฃจ์ ์ด ๋ ๊ฒ์ ๋๋ค.
๋๋ ์ด๊ฒ์ ๋ํด ํฅ๋ถํ๋ค. @danieljvdm apollo-client repo ์ ๋ฌธ์ ์ ๋ํ ์ง์์ฑ์ ๋ํด ์ฝ๊ฐ์ ์ฐ์๋ฅผ ์ ํ์ต๋๋ค .
๋๋ RetryLink ๊ฐ ๋คํธ์ํฌ ์ค๋ฅ ๋ฐ ์ฌ์๋๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐ ์ ์ฉํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง๋ง redux-offline๊ณผ ๊ฐ์ ์ผ์ข ์
์ด๊ฒ์ ๊ฝค ๋ฉ์ง๋ค. @2WheelCoder๊ฐ ์ธ๊ธํ ๋ฌธ์ ๋ ์์ ํ ์คํ๋ผ์ธ ์ง์(์ฟผ๋ฆฌ ๋๊ธฐ/๋ณ์ด ๋ฑ)๋ณด๋ค ์บ์๋ฅผ โโ์ ์งํ๋ ๋ฐ ๋ ์ค์ ์
๊ทธ๊ฒ์ ์ฌ์ ํ โโ์์ํ๊ณ ๊ทธ ์์ ๊ตฌ์ถํ๊ธฐ์ ์ ์ ํ ์ฅ์๊ฐ ๋ ์ ์์ต๋๋ค. ๊ทธ ๋ฌธ์ ์์ ๋ด๊ฐ ์ง์ ํ ๊ฒ์ ํ์ฌ ์บ์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ชจ๋ํฐ๋งํ๋ ์ข์ ๋ฐฉ๋ฒ์ด ์๋ค๋ ๊ฒ์ ๋๋ค. ์ค์ ๋ก ์ค๋ ์ผ์ฐ @2WheelCoder ์ ์ด๊ธฐ ์ ์์ ๊ตฌํํ๋ ค๊ณ ์๋ํ์ง๋ง ๋น์ทํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. "์ ์ฅ์ ๋ณ๊ฒฝ ๋ชจ๋ํฐ๋ง"์ ์ํ ApolloLink ์์ฑ์ ๋ฌธ์ ๋ ํด๋ผ์ด์ธํธ ์์ ๊ณผ ํ์ ์บ์ ์ฐ๊ธฐ ์ฌ์ด์ ์ปจํ ์คํธ์๋ง ์กด์ฌํ๋ค๋ ๊ฒ์ ๋๋ค. ๊ทธ๋์ ์์ฒญ์ด ๋๊ฐ๊ธฐ ์ ์ ๊ฐ๋ก์ฑ๊ณ (๋ฏธ๋ค์จ์ด) ์บ์์ ๊ธฐ๋ก๋๊ธฐ ์ ์ ๊ฐ๋ก์ฑ ์ ์์ต๋๋ค(์ ํํฐ์จ์ด). ํ์ง๋ง ์ธ์ ์์ฑ๋์๋์ง ์ ์ ์์ต๋๋ค. ).
์คํ๋ผ์ธ ์ง์์ฑ์ ์ํด ๋งํฌ๋ฅผ ์ฌ์ฉํ ๋์ ๋ ๋ค๋ฅธ ์น๋ช ์ ์ธ ๊ฒฐํจ์ ๊ตฌ๋ ์ ๊ณ ๋ คํ์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค. ๊ตฌ๋ ๋งํฌ๋ ํ์ ์ด๋ฒคํธ๊ฐ ์๋ ๊ตฌ๋ ์ด ์ด๋ฆด ๋๋ง ์คํ๋ฉ๋๋ค(๋ด๊ฐ ๋์น ์ด ์์ ์ ์ํํ๋ ๋ฐฉ๋ฒ์ด ์์๊น์?).
์ด๊ฒ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ด๊ฐ ์ง๊ธ ์๋ ๊ณณ์ด๊ณ ๊ฝค ๋งํ์ต๋๋ค. ๋ ๋์๊ฐ๋ ค๋ฉด apollo-cache-inmemory์ ๋ํ PR์ ์ด์ด์ผ ํ ์๋ ์์ต๋๋ค.
@danieljvdm ์ ๋ ๊ฐ์ ์์น์ ์์ผ๋ฉฐ ๋์ผํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ํ ์บ์์์ ์ง์ ์ง์์ฑ์ ์ฒ๋ฆฌํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. HttpLink๋ ๊ด์ฐฐ ๊ฐ๋ฅ ํญ๋ชฉ์ด ์์ฒญ ํ์ ์๋ฃ๋์ง๋ง (์ผ๋ฐ์ ์ผ๋ก) ์บ์ ์ ๋ฐ์ดํธ ์ ์ ์๋ฃ๋๊ธฐ ๋๋ฌธ์ ์ ํฉํ์ง ์์ต๋๋ค.
apollo-cache-inmemory์ ๋ํ PR์ ์ฌ๋ ๊ฒ์ด ๊ฐ์น๊ฐ ์์ ์ ์์ง๋ง ์ ํ๋ก์ ํธ์ ์ด๋ฅผ ํฌํฌํ๋ ๊ฒ์ด ๋ ๋์์ง ๊ถ๊ธํฉ๋๋ค. ์บ์์ ๋งํฌ์ ๋ํ Apollo 2์ ๋ชจ๋์ฑ์ ๋ค๋ฅธ ์ข ๋ฅ์ ์บ์๊ฐ ํ์ํ ๊ฒฝ์ฐ ๊ตฌ์ถํ ์ ์์์ ์์ฌํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ์๋ง๋ apollo-client์ ๋ฌธ์ ๊ฐ ๋ค์ ๋จ๊ณ์ผ ๊ฒ์ ๋๋ค(apollo-cache-inmemory์๋ ์์ฒด ์ ์ฅ์๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค)?
์ฌ๊ธฐ ๋งํฌ์์ ์ฃผ์ ๋ฅผ ์กฐ๊ธ ๋ฒ์ด๋์ ์ฃ์กํฉ๋๋ค.
@holman ์ฌํ๋ฆฌ ํ ํฌ ํ๋ฆฌ๋ทฐ์์ ์๋น์ค ์์ปค์ ๋ํ ์ฐธ์กฐ๊ฐ ์์ต๋๊น?
@sedubois ๊ทธ๊ฒ์ ํ ๋ ๋ฌ ์ ์ (๊ฐ์๊ธฐ) ๋จ์ด์ก์ต๋๋ค. ๊ธฐ์ ํ๋ฆฌ๋ทฐ ์ ์์ง๋ง ์์ง ๊ฐ ๊ธธ์ด ๋ง์ด ๋จ์ ์์ต๋๋ค.
@2WheelCoder ์ ์บ์์ ๋ํ ์ํด๋ก ํด๋ผ์ด์ธํธ์ PR ์์ด๋์ด๊ฐ ๋ง์์ apollo-offline-cache
๋ฅผ ํ์ฅํ ์ ์๋ apollo-cache-inmemory
? ๊ธฐ๊บผ์ด ๋์๋๋ฆฌ๊ฒ ์ต๋๋ค. ๊ฑฐ๊ธฐ์์ ๋ฌธ์ ๋ฅผ ์ด๊ณ ์ถ์ต๋๊น?
@2WheelCoder @danieljvdm ์ง์์ฑ์ ์ํด LocalForage๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ด๋ป ์ต๋๊น https://github.com/localForage/localForage ์ฌ๋ฌ๋ถ์ด PR์ ์ด๋ฉด ๊ธฐ๊บผ์ด ์์ ๋น๋ ค์ค ๊ฒ์ ๋๋ค
@danieljvdm ์, PR์ ์งํํ๊ณ ์ถ๋ค๋ฉด ์ด์๋ฅผ ์ด๊ฒ ์ต๋๋ค. ๋๋ ๋ค์ ์ฃผ ๋ฐ ๋์ ์๊ฐ์ด ๋ง์ง ์์ง๋ง ๊ทธ ์ดํ์ ๋ฐ์ด๋ค๊ฒ ๋์ด ๊ธฐ์ฉ๋๋ค.
@Eishpirate ํ์คํ LocalForage๊ฐ ํ๋ฅญ apollo-offline-cache
์์ ๋ฐ๋ผ์ผ ํ ์ ์ ํ ํจํด์ผ๋ก ์์ฉํ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
์ฌ๋ฌ๋ถ, ์ ๋ redux ์ง์ ํจํค์ง๋ฅผ ์ฌ์ฉํ์ฌ ๊ธฐ๋ณธ AsyncStorage์ ์ ์ฅ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์์ต๋๋ค. ์ง๊ธ ์ด๋ป๊ฒ ํฉ๋๊น? ์ด๋ค ์์ด๋์ด๋ผ๋?
@Eishpirate : localforage๊ฐ ๋ค์ดํฐ๋ธ ๋ฐ์์ ์๋ํฉ๋๊น? ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํธํ์ฑ ์ฐจํธ๋ฅผ ๋ณด๋ฉด ๋ฐ์ ๋ค์ดํฐ๋ธ์ ๋ํด ์๋ฌด๊ฒ๋ ์ฐพ์ ์ ์์ต๋๋ค. https://github.com/localForage/localForage/wiki/Supported-Browsers-Platforms
ํด๋ก์ ์คํ๋ผ์ธ ๊ธฐ๋ฅ์ด ์ฑ์์ ์๋ํ์ง ์๋๋ค๋ฉด ๋งค์ฐ ์ฌํ ๊ฒ์ ๋๋ค..
@timLoewel ์์ฃผ ์ข์ ์ง์ ์ ๋๋ค. React Native๋งํผ ์์ ์๊ฐํ์ง ์์์ต๋๋ค. ๋ช ์์ ์ผ๋ก ๊ทธ๋ ๊ฒ ํ๋ ๊ฒ์ ๋ฏฟ์ง ๋ง์ญ์์ค.
์ด๋ก ์ธํด ์๊ธฐ์น ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ๋ฐํด๋ฅผ ์ฌ๋ฐ๋ช ํ์ง ์๊ณ ๋ ์คํ ๊ฐ๋ฅํ ๋์์ด ์๋์ง ํ์คํ์ง ์์ต๋๋ค.
์ด ํ ๋ก ๊ณผ ๊ด๋ จ๋ ์ ์๋ ํฅ๋ฏธ๋ก์ด ๊ธฐ์ฌ https://blog.logrocket.com/building-an-offline-first-app-with-react-and-rxdb-e97a1fa64356?t=now
rxdb๋ฅผ ์คํ๋ผ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ์ฌ์ฉํ๋ ๊ฒ์ ์ ๋ง ์ ๋งํด ๋ณด์ ๋๋ค. ์ด๊ฒ์ React, React-Native, Vue, Angular, ๊ฑฐ์ ๊ฐ์ฅ ์ธ๊ธฐ ์๋ ์ต์ ๊ณผ ํธํ๋ฉ๋๋ค.
๋ด๊ฐ ์ฐพ์ ๋ฌธ์ ๋ PouchDB(CouchDB์์ ํ์๋จ)์ ๊ฐ์ noSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋๊ธฐํํด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค. ์ ์ฌ์ฉ ์ฌ๋ก์์๋ ๊ด๊ณํ SQL ๋ฐ์ดํฐ๋ฒ ์ด์ค(Postgres)๋ฅผ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ ๋ชจ๋ ๋ฐ์ดํฐ ์ ํจ์ฑ ๊ฒ์ฌ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ค์์ ๋ฐ์ํฉ๋๋ค. ์ด ์์คํ ์ ์ฌ์ฉํด์ผ ํ๋ค๋ฉด jsonschema๋ฅผ ํตํด ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์ ์งํด์ผ ํฉ๋๋ค.
DRY ์์น์ ๋ฐ๋ฅด์ง ์์ผ๋ฉฐ ํ์คํ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
๋ด๊ฐ ์ฐพ์ ๋ ๋ค๋ฅธ ์ต์ ์ Postgres์ ํจ๊ป ์๋ํ๋ Kinto http://docs.kinto-storage.org/en/stable/index.html ์ด๋ฏ๋ก rxdb๊ฐ ๋์ ํ ์ถ๊ฐ ๋ณต์ก์ฑ ๊ณ์ธต์ ํผํด์ผ ํฉ๋๋ค. Kinto๋ HTTP๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ์ด๋ก ์ ์ผ๋ก Apollo-link-http https://github.com/apollographql/apollo-link/tree/master/packages/apollo-link-http์ ์ฐ๊ฒฐํ ์
๋ง์ ์์ ์ด ์บ์ฑ๊ณผ ๊ด๋ จ๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋ฆฌ๋์ค๋ ์ด๋ป์ต๋๊น? (๋๋ ์ง์งํ๋ค)
apollo-offline ์์
๊ณผ apollo-link-offline ํจํค์ง...
apollo-cache-redux ํจํค์ง. apollo-offline์ด ์ง๊ธ ํ๋ ๊ฒ์ฒ๋ผ redux-offline/redux-persist๋ฅผ ์ฌ์ฉํ์ญ์์ค.
Apollo๋ ๊ธฐ๋ณธ ์ผ๋ฐ ์๋ฃจ์ ์ผ๋ก inmemory-cache๋ฅผ ๋ง๋ค์์ต๋๋ค. ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ทธ๋ ๊ฒ ๋ฐ์ ํ๊ฒ ์ฐ๊ฒฐ๋๋ ๊ฒ์ ์ํ์ง ์๋ ์ด์ ๋ฅผ ์ดํดํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ redux/redux-offline/redux-persis ์๋ฃจ์ ์ ์ ํฌ ํ ์คํธ๋ฅผ ๊ฑฐ์ณค์ผ๋ฉฐ... ์ฌ์ ํ ํ๋ฅญํ ์ ํ์ ๋๋ค. ๊ฐ๋ฐ์ ์ธ ๊ฐ์ง ๋ชจ๋์ ๋ํด ๋งค์ฐ ํ๋ฐํฉ๋๋ค.
ํธ์ง: @rportugal ๋๋ถ์ apollo-cache-redux ๊ฐ ์ด์ ์กด์ฌํฉ๋๋ค.
@giautm ์ ๋ ๋น์ ์ด ์ผ๋ง ์ ์ ์ ์์ ํ๋ก์ ํธ์ ๋ํด ์ค๋ช ํ ๊ฒ์ ๊ฑฐ์ ์ ํํ๊ฒ ๊ตฌํํ์ผ๋ฉฐ ์ด๋ฅผ ์ ๋ง ๊ฐ๋จํ ํจํค์ง์ธ apollo-link-queue ๋ก ๊ฒ์ํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ๊ฐ์ ์ ์ํ ์์ด๋์ด๊ฐ ์์ผ๋ฉด ์ ์์ด๋ ๊ธฐ์ฌ๋ฅผ ๋ฐ๊ณ ์ถ์ต๋๋ค.
์ด ๋ฌธ์ ์ ์ํ๊ฐ ์ด๋ป์ต๋๊น? Apollo์์ Redux ์คํ๋ผ์ธ๊ณผ ๊ด๋ จ์ด ์๋ ์คํ๋ผ์ธ ํญ๋ชฉ์ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ด ์์ต๋๊น?
@smithaitufe ,
์, apollo-cache-persist๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
@๊ทธ๋ ๊ณ ๋ฅด1971
์ด ์ฐธ์กฐ๋ฅผ ์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค. ๋๋ ๊ทธ๊ฒ์ ์๋ํ๊ณ ๋ด ์๊ฒฌ์ ์ ์ถํ ๊ฒ์
๋๋ค.
ํ๋ฉด์ ์ผ๋ก๋ ์์ํ๊ณ ๊ตฌํํ๊ธฐ ์ฝ์ต๋๋ค.
์ด๊ฒ์ด ํด๋ก ๋งํฌ ํ ์ ์ด๋ป๊ฒ ๋ค๋ฆ ๋
์๋
ํ์ธ์ ์ฌ๋ฌ๋ถ, ์ ๋ apollo-offline ๊ณผ ์ ์ฌํ ๋์์ ํ๋ react-native์ ๋ํ ๊ธฐ๋ณธ ๊ตฌํ์ ํจ๊ป ๊ตฌ์ฑํ๋ ค๊ณ ํ์ต๋๋ค.
(ํ https://github.com/Malpaux/apollo-offline/issues/14)
์ด ์์ง์์ ํ์ธํ ์ ์์ต๋๋ค. https://gist.github.com/lachenmayer/2e364a5ca9ae0918eb032867d0c6720d
๋ค์์ ์กฐํฉ์ ๋๋ค.
optimisticFetchLink
๊ธฐ๋ฅ.์ฅ์น๊ฐ ์คํ๋ผ์ธ ์ํ๊ฐ ๋๋ฉด ์์ฒญ์ด ๋๊ธฐ์ด์ ์ถ๊ฐ๋๊ณ ๋ค์ ์จ๋ผ์ธ ์ํ๊ฐ ๋๋ฉด ๋๊ธฐ์ด์ด ํด์ ๋ฉ๋๋ค. ( apollo-link-queue
)
๋คํธ์ํฌ ์ค๋ฅ๋ก ์คํจํ ๋ชจ๋ ์์ฒญ์ ์ฌ์๋๋ฉ๋๋ค(ํ์ฌ ๋ฌดํ). ( apollo-link-retry
)
์ด๊ฒ์ ์ฅ์น๊ฐ ์คํ๋ผ์ธ์ด๊ฑฐ๋ ๋ฐฑ์๋์ ์ฐ๊ฒฐํ ์ ์๊ธฐ ๋๋ฌธ์ผ ์ ์์ต๋๋ค(์: ๋ค์ด๋ ๊ฒฝ์ฐ).
๊ทธ๋ฌ๋ ์บ์์์ ์ฟผ๋ฆฌ๋ฅผ ํด๊ฒฐํ ์ ์๋ ๊ฒฝ์ฐ ๋ค์ ์๋ํ์ง ์๊ณ ๋์ ์บ์์ ๋ฐ์ดํฐ๊ฐ ์๋ต์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค. ์ด๊ฒ์ optimisticFetchLink
ํจ์์์ ๊ตฌํ๋ฉ๋๋ค.
๋ด ์๊ฐ์ ์ด "๋๊ด์ ๊ฐ์ ธ์ค๊ธฐ" ๋์์ apollo-offline์ ๊ฐ์ฅ ์ค์ํ ๋ถ๋ถ ์ค ํ๋์ด๋ฉฐ ํฅํ apollo-link-offline
๊ตฌํ์ ์ด๋ฅผ ์ง์ํด์ผ ํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ฌ์ฉ์๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ณ ์ ์งํ๋ ํ ์คํ๋ผ์ธ ์ํ์์ ํ์์ ๊ฐ์ด ์ฑ์ ๊ณ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ ์๊ฐ์๋ ์ด๊ฒ์ด network-and-cache
๊ฐ์ ธ์ค๊ธฐ ์ ์ฑ
์ ๊ธฐ๋ณธ ๋์์ด์ด์ผ ํ์ง๋ง ๋ถํํ๋ ์ด๊ฒ์ด ๊ณง ๋ณ๊ฒฝ๋ ๊ฒ ๊ฐ์ง๋ ์์ต๋๋ค(https://github.com/apollographql/react-apollo/issues/ ์ฐธ์กฐ). 604#issuecomment-355648596).
์์ง ๋ฅผ offlineLink.js
๋ก ์ ์ฅ ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ ์ ์์ต๋๋ค.
import { InMemoryCache } from 'apollo-cache-inmemory'
import { ApolloClient } from 'apollo-client'
import { createHttpLink } from 'apollo-link-http'
// get this from https://gist.github.com/lachenmayer/2e364a5ca9ae0918eb032867d0c6720d
import { createOfflineLink } from './offlineLink'
const cache = new InMemoryCache()
const networkLink = createHttpLink()
const offlineLink = createOfflineLink({ cache })
const link = ApolloLink.from([
// ... + other links ...
offlineLink,
networkLink,
])
const client = new ApolloClient({
cache,
link,
}
isOnline
์ฒดํฌ๋ฅผ ์ถ์ํํด์ผ ํฉ๋๋ค.{__online_: true}
์ฟผ๋ฆฌ ๋ณ์ ์ค์ ), ํ์คํ ์ด๊ฒ์ ํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์ด์ผ ํฉ๋๋ค.์ด๊ฒ์ ๋ํ ์๋ฃจ์ ์ ์ฐพ๊ณ ์๋ ์ฌ๋์ด ์ด๊ฒ์ ์๋ํด ๋ณผ ์ ์๊ฒ ํด์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ํ์ดํ, ํ ์คํธ, ๋ฌธ์ ๋ฐ ์ ์ฒด๊ฐ ํฌํจ๋ ์ ์ ํ npm ๋ชจ๋๋ก ์ ํํ ์ ์์ต๋๋ค. ์ด ๋์์ ์ ์๊ฐ์ ๋งค์ฐ ์ค์ํ๋ฉฐ, ์์ง apollo-client 2์ ์ด์ ๋ํ ์ ์ ํ ์๋ฃจ์ ์ด ์๋ค๋ ๊ฒ์ ์ ๋ง ์ ๊ฐ์ ๋๋ค.
๋ฉ์ ธ์โ๏ธ
@smithaitufe ,
์ด๊ฒ์ apollo-link-queue์ ์ด๋ป๊ฒ ๋ค๋ฆ ๋๊น?
apollo-link-queue๊ฐ ์ฐ๊ฒฐ ์ํ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ง๋ฅ์ ์ธ ์์ ์ ์ํํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค. apollo-cache-persist๋ ์บ์๋ฅผ ์ ์ฅํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ฌ์ฉ์๊ฐ ์ฐ๊ฒฐ์ด ๋๊ธด ์ํ์์ ์ฑ์ ์์ํ๊ณ ์คํํ ์ ์์ต๋๋ค. ์บ์๋ฅผ ์ ์งํ์ง ์์ผ๋ฉด ์ฑ์ ์์ํ๋ ค๋ฉด ์ฐ๊ฒฐ์ด ํ์ํฉ๋๋ค.
์ฐ๋ฆฌ๋ ์์ @lachenmayer ์ ์๋ฃจ์ (apollo-link-queue ์ฌ์ฉ)๊ณผ ์๊ตฌ์ ์ธ ์บ์ ๋ ๋ค ๋๋ ๋ ๋์ ๋ฐฉ๋ฒ์ ์ํ ๊ฒ์ ๋๋ค. (์ฐ๋ฆฌ๋ ๋งํฌ ๋ฆฌํฌ์งํ ๋ฆฌ์์ ์ฑํ ์ค์ด๋ฏ๋ก ์ฌ๊ธฐ์์ ๊ฐ์ฅ ์ค์ ์ ๋ก๋๋ค.)
@lachenmayer ์ฒซ์ธ์ ๋ถํฐ ์ ๊ทผ ๋ฐฉ์์ด ๋งค์ฐ ๋งค๋ ฅ์ ์ผ๋ก ๋ณด์ ๋๋ค.
apollo-offline
์ ๋๊ด์ ๊ฐ์ ธ์ค๊ธฐ ๊ธฐ๋ฅ๊ณผ ๊ฐ์ ๊ฒ์ด ํ์ํ๋ค๋ ์ ์ ์ ์ ์ผ๋ก ๋์ํฉ๋๋ค. ๊ทธ๊ฒ(๋๋ ๊ทธ๊ฒ์ ๋ถ์กฑ)์ ์ฃผ๋ก ๋ด๊ฐ apollo-offline
์ ์์ํ๋๋ก ์๊ฐ์ ์ค ๊ฒ์
๋๋ค.
๋ ์์ ์ apollo-offline
์์ ๋๊ด์ ๊ฐ์ ธ์ค๊ธฐ ๊ธฐ๋ฅ์ ์ ํ์ ์ผ๋ก ํ์ฑํ/๋นํ์ฑํํ๋ ๋ฐฉ๋ฒ์ ๊ตฌํํด์ผ ํ๋ ๋ฐฉ๋ฒ์ ๋ง์กฑํ์ง ์์ต๋๋ค. ์ฟผ๋ฆฌ ๋ณ์๊ฐ ์ฒซ ๋ฒ์งธ ์ ํ์ ์๋์ง๋ง ๊ฐ์ฅ ์ค์ฉ์ ์ธ ๊ฒ ๊ฐ์์ต๋๋ค. ๋ฌด์์ ์ ์ํ์๊ฒ ์ต๋๊น?
์์ผ๋ก ๋ช ์ฃผ๊ฐ์ ๋์๊ฒ ์๋นํ ์คํธ๋ ์ค๊ฐ ๋ ๊ฒ์ด๋ค. ๊ทธ ํ์๋ Apollo๋ฅผ ์ํ ์ต์ ์คํ๋ผ์ธ ์ฒซ ๋ฒ์งธ ์๋ฃจ์
์ ๊ตฌํ์ ๊ธฐ๊บผ์ด ๊ธฐ์ฌํ๊ฒ ์ต๋๋ค. apollo-offline
ํจํค์ง์ ์ ๋ฒ์ ์ด๊ฑฐ๋ apollo-link-offline
์ ๊ฐ์ ๊ฒ์ผ ์ ์์ต๋๋ค.
@MLPXBrachmann ๊ฐ์ฌํฉ๋๋ค!
๋๋ ๋๊ด์ ํ์นญ์ด fetchPolicy
์ฌ์ฉํ์ฌ ์ ์ด๋์ด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์บ์์์ ์๋ฌด๊ฒ๋ ๊ฐ์ ธ์ค์ง ์์ผ๋ ค๋ฉด network-only
๋ฅผ ์ฌ์ฉํ ์ ์์ด์ผ ํฉ๋๋ค.
@lachenmayer @MLPXBrachmann
์ ๋ ๊ธฐ๊บผ์ด ๊ธฐ์ฌํ ์ค๋น๊ฐ ๋์ด ์์ต๋๋ค.
๋๋ Apollo ์ฑ์์ ์คํ๋ผ์ธ ๋์์ ๊ตฌํํ๋ ์ต์ ์ ์ฐพ๊ณ ์์ต๋๋ค. @lachenmayer ์ ์ ๊ทผ ๋ฐฉ์์ ๋งค์ฐ ์ ๋ง ํด๋ก ๋งํฌ ์ฌ์๋์ ์์กดํ๋ฏ๋ก ํ์ด์ง๊ฐ ์๋ก ๊ณ ์ณ์ง๋ฉด ์๋ฒ์ ์ปค๋ฐ๋์ง ์์ ๋ฐ์ดํฐ๋ ํ๊ธฐ๋จ(์ฑ์ด ์ผ์ ์ค๋จ๋ ๊ฒฝ์ฐ ๋ฐ์ ๋ค์ดํฐ๋ธ์์๋ ๋์ผํ ๊ฒ์ผ๋ก ๊ฐ์ ). ๊ทธ ์ธก๋ฉด์ ๋ํ ์์ ์ด๋ ์ต์ํ ๋ ผ์๊ฐ ์์ต๋๊น?
@nicocrm ์๊ฒ ์ต๋๋ค ... ํ์ฌ ์คํ๋ผ์ธ ์ง์์ ๋ํ ๋
ผ์๋ ์ฃผ๋ก ์ด ๋ฌธ์ ์ ์์ต๋๋ค. ์ํด๋ก ์์ฒด๊ฐ ์ง๊ธ ๋ค๋ฅธ ์ฐ์ ์์๋ฅผ ๊ฐ์ง๊ณ ์๋ค๊ณ ์๊ฐํ๋ฏ๋ก ์ปค๋ฎค๋ํฐ ํ๋ก์ ํธ apollo-link-offline
๋ง๋ค์ด์ผ ํฉ๋๋ค. ์ด๊ฒ์ ๋ฐ๋ผ๊ฑด๋ ์ง๊ธ๋ณด๋ค ๋ ๋ง์ ํ ๋ก ๊ณผ ๋ฐ์ ์ผ๋ก ์ด์ด์ง ๊ฒ์
๋๋ค ๐
@benseitz ์ ๋ ํ์คํ ์ฐฌ์ฑํฉ๋๋ค. ์ด ๊ธฐ๋ฅ์ ๋ง์ ๊ด์ฌ์ด ์์ผ๋ฏ๋ก ์ปค๋ฎค๋ํฐ ํ๋ก์ ํธ๋ฅผ ์ํ ์ฌ์ง๊ฐ ์๋ค๊ณ ํ์ ํฉ๋๋ค. ๊ธฐ์กด ๋ ธ๋ ฅ์ ๋ณต์ ํ๊ฑฐ๋ ์กฐ๊ฐํํ์ง ์๋ ํ ์๋ก์ด ํ๊ณผ apollo-link-offline์ ์ํ ์ ์ฅ์๋ฅผ ๋ง๋ค๊ณ ๊ด์ฌ ์๋ ๋ชจ๋ ์ฌ๋์ ์ด๋ํ ์ ์์ต๋๋ค. . ๊ฐ์ธ์ ์ผ๋ก ๊ด์ฌ์ด ์๋ ๋ถ๋ถ์ด ์๊ณ ํด๋ผ์ด์ธํธ๊ฐ ๊ทธ ๊ธฐ๋ฅ์ ๋ํด ์ ๋ง๋ก ์ถ์งํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ช ์๊ฐ ๋์ ์ค๋ช ํ๊ฒ ์ต๋๋ค. ๋๋ ๊ทธ๋ค์ด ํจ์ฌ ๋ ๋ง์ ๊ฒฝํ์ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ๊ทธ๋ค์ด ์ฃผ๋๊ถ์ ์ก๊ณ ์ถ์ดํ๋์ง ์์๋ณด๊ธฐ ์ํด apollo-offline repo์ ๋ฌผ์ด๋ณผ ๊ฒ์ ๋๋ค.
๋๋ ์ด๊ฒ์ ๊ฐ์ธ์ ์ผ๋ก ๊ด์ฌ์ด ์์ต๋๋ค. @nicocrm์์ ๋น์ ๊ณผ ๋ ๋ง์ ์ด์ผ๊ธฐ๋ฅผ ๋๋๊ฒ ๋์ด ๊ธฐ์ฉ๋๋ค. ๋๋ ๋ฐ์ ๋ค์ดํฐ๋ธ์์ ์ง๊ธ๊น์ง ์์ค๋ ์์ฒญ์ ๋ฐ๊ฒฌํ์ง ๋ชปํ์ง๋ง tbh ๋๋ ์ด ๋ชจ๋ ๊ฒ์ ์ ๋๋ก ํ ์คํธํ์ง ์์์ต๋๋ค(์ง๊ธ๊น์ง๋ ์ฟผ๋ฆฌ๋ก๋ง & ๋ชจ๋ ๊ฒ์ ์ ์คํํ๋ _๊ฒ ๊ฐ์ต๋๋ค_).
๋๋ ์ด๊ฒ์ ์ํด repo๋ฅผ ์์ํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์์์ ์ธ๊ธํ apollo-offline
๋ฅผ ๊ตฌ์ถํ @MLPXBrachmann ์ ์์ผ๋ก ๋ช ์ฃผ ๋์ apollo-offline
์ ๊ฐ์ ํ๋ ๋ฐ ์๊ฐ์ ํ ์ ํ์ง ์์ ๊ฒ์ด๋ฉฐ apollo-link-offline
๋ผ๊ณ ๋ถ๋ฅด๋ ๊ฒ์ด ๊ฐ์ฅ ํฉ๋ฆฌ์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
apollo-offline
์์ ์ฌ์ฌ์ฉํ ์ ์๋ ์ฝ๋๋ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋งค์ฐ redux์๋ง ํด๋น๋๊ธฐ ๋๋ฌธ์
๋๋ค.
@nicocrm ๋๋ ๋น์ ์๊ฒ ๋งค์ฐ ๋์ํฉ๋๋ค. ๋๊ธฐ ์ค์ธ ์ฟผ๋ฆฌ/๋ณ์ด๋ฅผ ์ง์ํ๋ ๊ฒ์ ํ์คํ ์ ์ฌ์ ์ธ apollo-link-offline
๊ฐ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค.
@benseitz ์ ๋ ์ปค๋ฎค๋ํฐ ํ๋์ผ๋ก apollo-link-offline
๋ฅผ ์์ํ๋ ๊ฒ์ด ์ข์ ์์ด๋์ด๋ผ๊ณ ์๊ฐํ๊ณ ๊ฐ๋ฐ์ ์ฐธ์ฌํ๊ณ ์ถ์ต๋๋ค.
@lachenmayer ๋น์ ์ด ์ ๋์ ์ผ๋ก ์ณ์ต๋๋ค. apollo-offline
์ ๊ณํ๋ apollo-link-offline
ํจํค์ง๊ฐ ๊ณต์ ํ๋ ์ฝ๋์ ์์ ์๋ง ๊ฑฐ์ ์์ ๊ฒ์
๋๋ค. ๊ทธ๋ฌ๋ ๋๋ Apollo 2.0 ์ธ๊ณ์์ ์คํ๋ผ์ธ ํดํท ์ธํธ๋ฅผ ๊ฐ๋ฐํ ๋ ์ ์์ ๊ธฐ๋ณธ ๊ฐ๋
์ค ๋ง์ ๋ถ๋ถ์ด ์ฌ์ ํ ์ ์ฉ๋๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ด์จ๋ apollo-link-offline
๋ํ ์์ด๋์ด์ ๋ํด ๋
ผ์ํ๊ณ ๊ตฌํ์ ๋ํ ํผ๋๋ฐฑ์ ์ ๊ณตํ๊ณ ์ผ์ ์ด ์กฐ๊ธ ์ฌ์ ๊ฐ ์๊ธฐ๋ฉด ์ฝ๋๋ ์ ๊ณตํ๊ฒ ์ต๋๋ค.
@MLPXBrachmann @lachenmayer @nicocrm ์ด๋ ๊ฒ ํ๋ ๊ฒ์ด ์ฌ๋ฐ๋ฅธ ๋ฐฉ๋ฒ์ธ ๊ฒ ๊ฐ์ต๋๋ค!
๋๊ตฌ๋ Apollo Slack ์์ ๊ณต๊ฐ ์ฑ๋์ ์ด ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค. apollo-link-offline
๋ผ๋ ๊ฒ์ ์ฌ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด์ฉ๋ฉด ์ด๊ฒ์ ์ฐ๋ฆฌ ์ฌ์ด์ ์์ฌ ์ํต์ ์กฐ๊ธ ๋ ์ฝ๊ฒ ๋ง๋ญ๋๋ค. ๋ชจ๋ ์ค์ํ ๊ฒฐ์ ์ ์ฌ์ ํ โโGitHub ๋ฌธ์ ์ ๋ฌธ์ํ๋์ด์ผ ํฉ๋๋ค.
repo์ slack ์ฑ๋์ ๋ชจ๋ ์ด์ด๋ ๊ด์ฐฎ์ต๋๊น? ์๋๋ฉด ๋ ์ค ํ๋๊ฐ ๊ทธ๋ ๊ฒ ํ๊ณ ์ถ์ต๋๊น?
ํ์คํ, ๊ฐ์ฌํฉ๋๋ค!
๋๋ ๋น์ ์ Repo์ ๊ณต๋ ์์
์๋ก ์ถ๊ฐํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ Apollo Slack ์์ #apollo-link-offline
์ฑ๋์ ๊ฐ์
ํ ์ ์์ต๋๋ค.
๋ฌผ๋ก ๋ชจ๋ ์ฌ๋๋ค์ GitHub Repo์์ ํ์
ํ๊ณ Slack์์ ํ ๋ก ํ ์ ์์ต๋๋ค. :)
๋๋ฌด ์ ๋ฌ์ด์ ๐ฏ
Google ๊ฒ์์ ํตํด ์ฌ๊ธฐ๋ก ์ค๋ ๋ถ๋ค์ ์ํด Apollo Client 2.0์์ ์ฌ์ฉํ ์ ์๋ ๋ชจ๋ ๊ธฐ์กด ์คํ๋ผ์ธ ๊ธฐ์ ์ ๋ํ ์์ฝ์ ์์ฑํ์ต๋๋ค.
https://github.com/benseitz/apollo-link-offline/issues/1#issuecomment -371678922
Apollo๋ AWS AppSync์์ ์๋ํฉ๋๊น? ์ฐ๋ฆฌ๋ ์ด๋ฏธ GraphQL ์๋ฒ๋ฅผ ๋ณด์ ํ๊ณ ์์ผ๋ฉฐ AWS ์๋ฃจ์ (์: Lamda, DynamoDB, Elastic Search)์ด ์๋ ์๋ฒ๋ฅผ ์ฌ์ฉํ์ฌ ์ฟผ๋ฆฌ ๋ฐ ๋ณํ์ ์ํ ์คํ๋ผ์ธ ํด๋ผ์ด์ธํธ ์บ์ฑ์ด ํ์ํฉ๋๋ค.
๊ทธ๊ฒ์ด ์๋ํ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
@masull ์ ๋ง ๋๋์ต๋๋ค. ๋๋ ์๋ํ์ง๋ง Firebase ๋๋ ๊ตฌ๋ฌธ ๋ถ์ ํ๋ซํผ์ด ์ ์๊ฒ ์ ํฉํ๋ค๊ณ ์๊ฐํ์ง ์์์ผ๋ฏ๋ก ์ด ๊ธฐ๋ฅ์ด ์์ผ๋ฉด ์๊ด์ผ ๊ฒ์
๋๋ค.
๋ง์ ํจํค์ง๋ก ๋ชจ๋ ๊ฒ์ ์ค์ ํ๋ ๋ฐ ์ด๋ ค์์ ๊ฒช๊ณ ์์ต๋๋ค. ์ ํ ์ฌ๋ฏธ๊ฐ ์์ต๋๋ค. :)
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์๋ ํ์ธ์ ์ฌ๋ฌ๋ถ, ์ ๋ apollo-offline ๊ณผ ์ ์ฌํ ๋์์ ํ๋ react-native์ ๋ํ ๊ธฐ๋ณธ ๊ตฌํ์ ํจ๊ป ๊ตฌ์ฑํ๋ ค๊ณ ํ์ต๋๋ค.
(ํ https://github.com/Malpaux/apollo-offline/issues/14)
์ด ์์ง์์ ํ์ธํ ์ ์์ต๋๋ค. https://gist.github.com/lachenmayer/2e364a5ca9ae0918eb032867d0c6720d
๋ค์์ ์กฐํฉ์ ๋๋ค.
optimisticFetchLink
๊ธฐ๋ฅ.์ฅ์น๊ฐ ์คํ๋ผ์ธ ์ํ๊ฐ ๋๋ฉด ์์ฒญ์ด ๋๊ธฐ์ด์ ์ถ๊ฐ๋๊ณ ๋ค์ ์จ๋ผ์ธ ์ํ๊ฐ ๋๋ฉด ๋๊ธฐ์ด์ด ํด์ ๋ฉ๋๋ค. (
apollo-link-queue
)๋คํธ์ํฌ ์ค๋ฅ๋ก ์คํจํ ๋ชจ๋ ์์ฒญ์ ์ฌ์๋๋ฉ๋๋ค(ํ์ฌ ๋ฌดํ). (
apollo-link-retry
)์ด๊ฒ์ ์ฅ์น๊ฐ ์คํ๋ผ์ธ์ด๊ฑฐ๋ ๋ฐฑ์๋์ ์ฐ๊ฒฐํ ์ ์๊ธฐ ๋๋ฌธ์ผ ์ ์์ต๋๋ค(์: ๋ค์ด๋ ๊ฒฝ์ฐ).
๊ทธ๋ฌ๋ ์บ์์์ ์ฟผ๋ฆฌ๋ฅผ ํด๊ฒฐํ ์ ์๋ ๊ฒฝ์ฐ ๋ค์ ์๋ํ์ง ์๊ณ ๋์ ์บ์์ ๋ฐ์ดํฐ๊ฐ ์๋ต์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค. ์ด๊ฒ์
optimisticFetchLink
ํจ์์์ ๊ตฌํ๋ฉ๋๋ค.๋ด ์๊ฐ์ ์ด "๋๊ด์ ๊ฐ์ ธ์ค๊ธฐ" ๋์์ apollo-offline์ ๊ฐ์ฅ ์ค์ํ ๋ถ๋ถ ์ค ํ๋์ด๋ฉฐ ํฅํ
apollo-link-offline
๊ตฌํ์ ์ด๋ฅผ ์ง์ํด์ผ ํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ฌ์ฉ์๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ณ ์ ์งํ๋ ํ ์คํ๋ผ์ธ ์ํ์์ ํ์์ ๊ฐ์ด ์ฑ์ ๊ณ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ ์๊ฐ์๋ ์ด๊ฒ์ดnetwork-and-cache
๊ฐ์ ธ์ค๊ธฐ ์ ์ฑ ์ ๊ธฐ๋ณธ ๋์์ด์ด์ผ ํ์ง๋ง ๋ถํํ๋ ์ด๊ฒ์ด ๊ณง ๋ณ๊ฒฝ๋ ๊ฒ ๊ฐ์ง๋ ์์ต๋๋ค(https://github.com/apollographql/react-apollo/issues/ ์ฐธ์กฐ). 604#issuecomment-355648596).์์ง ๋ฅผ
offlineLink.js
๋ก ์ ์ฅ ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ ์ ์์ต๋๋ค.์๋ ค์ง ๋ฌธ์ /๋นํธ ๋๋ฝ
isOnline
์ฒดํฌ๋ฅผ ์ถ์ํํด์ผ ํฉ๋๋ค.{__online_: true}
์ฟผ๋ฆฌ ๋ณ์ ์ค์ ), ํ์คํ ์ด๊ฒ์ ํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์ด์ผ ํฉ๋๋ค.์ด๊ฒ์ ๋ํ ์๋ฃจ์ ์ ์ฐพ๊ณ ์๋ ์ฌ๋์ด ์ด๊ฒ์ ์๋ํด ๋ณผ ์ ์๊ฒ ํด์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ํ์ดํ, ํ ์คํธ, ๋ฌธ์ ๋ฐ ์ ์ฒด๊ฐ ํฌํจ๋ ์ ์ ํ npm ๋ชจ๋๋ก ์ ํํ ์ ์์ต๋๋ค. ์ด ๋์์ ์ ์๊ฐ์ ๋งค์ฐ ์ค์ํ๋ฉฐ, ์์ง apollo-client 2์ ์ด์ ๋ํ ์ ์ ํ ์๋ฃจ์ ์ด ์๋ค๋ ๊ฒ์ ์ ๋ง ์ ๊ฐ์ ๋๋ค.
๋ฉ์ ธ์โ๏ธ