๐ธ ๋ฐ๋ชจ_5์ฃผ์ฐจ - boostcampwm-2022/web33-Mildo GitHub Wiki
1. ํ๋ก์ ํธ ๋ช : Mildo(๋ฐ๋)
- ๋ฐ์ํ ์น ํ๊ฒฝ์์ ์์ธ์ ์ค์๊ฐ ์ธ๊ตฌ ๋ฐ๋ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ ๋ชฉํ
2. ์ด๋ฒ ์ฃผ ๊ตฌํ ๋ด์ฉ
- ์ง๋์ ํ์๋ ๋ง์ปค ํํฐ๋ง ๊ธฐ๋ฅ ๊ตฌํ
- ์ฃผ์ ์ฅ์ ๊ฒ์ ๊ธฐ๋ฅ ๊ตฌํ
- ์ฃผ์ ์ฅ์ ๋ถ๋งํฌ ๋ฑ๋ก ๊ธฐ๋ฅ ๊ตฌํ
- https ์ ์ฉ
- ์ฑ๋ฅ ๊ฐ์ ์ ์ํ ๋ฆฌํฉํ ๋ง
3. ์ฃผ์ ๊ตฌํ ๋ด์ฉ
์ฃผ์ ์ฅ์ ๊ฒ์
์ด์ฉ์์ ๋ชจ๋ ์ ๋ ฅ์ ๊ฒ์ API๋ฅผ ํธ์ถํด์ผ ํ๋๊ฐ?
-
์ฌ์ฉ์๊ฐ ํ ๊ธ์์ฉ ์ ๋ ฅํ ๋๋ง๋ค ๊ฒ์ API๋ฅผ ํธ์ถํ๋ ๊ฒ์ ์๋ฒ์ ๋ถ๋ด๋ฅผ ์ค ์ ์์
-
์ฒ์์ debounce๋ฅผ ์ ์ฉํ๋ ค๊ณ ํ์ผ๋ React 18์์ ์๋ก์ด Hooks์ธ
useTransition
,useDeferredValue
๊ฐ ์ถ๊ฐ๋์๋ค๊ณ ํ์ฌ ์ด๋ฅผ ์ด์ฉํด์ ๊ตฌํ ์๋โ
useTransition
๊ณผuseDeferredValue
๋ ์ด์ฉ์ ๊ธฐ๊ธฐ์ ์ฑ๋ฅ์ ๋ฐ๋ผ ๋นจ๋ฆฌ ์ฒ๋ฆฌ์ํฌ์ง ๋ฆ๊ฒ ์ฒ๋ฆฌ์ํฌ์ง ์ ํด์ฃผ๊ธฐ ๋๋ฌธ์ ๊ธฐ๊ธฐ์ ์ฑ๋ฅ์ด ์ข๋ค๋ฉด hooks๋ฅผ ์ ์ฉํ๊ธฐ ์ ๊ณผ ์ฐจ์ด๊ฐ ์์ -
ํด๋ผ์ด์ธํธ์ธก ๋ถ๋ด์ด ์๋๋ผ ์๋ฒ์ธก ๋ถ๋ด์ ์ค์ฌ์ฃผ๋ ค๊ณ debounce๋ฅผ ์ ์ฉํ๋ คํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ค์ setTimeout๋ฅผ ํตํด ์ง์ debounce ๊ตฌํ
-
before debounce
-
ํ ๊ธ์์ฉ ์ ๋ ฅํ ๋๋ง๋ค ์์ฒญ
-
after debounce
-
์์ฒญ ํ์๊ฐ ๋์ ๋๊ฒ ์ค์
UI
ํ๋ฉด ํฌ๊ธฐ์ ๋ฐ๋ฅธ ์ ๋๋ฉ์ด์ ์ ์ฉ
- element ์์ฑ ์ค ์ค์ ์ฝํ ์ธ ๊ธธ์ด๋ฅผ ์๋ฏธํ๋ clientWidth๋ฅผ ์ด์ฉํด์ ํ ์คํธ์ ๋ชจ๋ฌ ๊ฐ์ ๊ธธ์ด ์ฐจ์ ๋ฐ๋ผ ์ ๋๋ฉ์ด์ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ์์
-
๋ชจ๋ฌ ๊ธธ์ด๊ฐ ๋์ ๋๋ ํ ์คํธ๊ฐ ์์ง์ด์ง ์์
-
์ข์์ง๋ฉด ๊ฐ๋ก๋ก ํ๋ฅด๋ ์ ๋๋ฉ์ด์ ์ ์ฉ
ํ๋ฉด ํฌ๊ธฐ์ ๋ฐ๋ผ ์ฐ๊ด๊ฒ์์ฐฝ ๋๋น ์กฐ์
- ํ๋ฉด์ด ์ข์์ง๋ฉด ๊ฒ์์ฐฝ๋ณด๋ค ๊ธธ์ด๊ฐ ๊ธธ์ด์ง
- ์ฐ๊ด๊ฒ์์ฐฝ์ ๊ธธ์ด๊ฐ ๊ฒ์์ฐฝ๋ณด๋ค ๊ธธ์ด์ง์ง ์๋๋ก ์์
์์ธ ์ ๋ณด 2๋จ๊ณ ๋ชจ๋ฌ react-query ์ ์ฉ
์ ์บ์ฑํ๋ ค ํ๋๊ฐ?
-
๋ชจ๋ฌ์ฐฝ์ ํผ ๋๋ง๋ค api ์๋ฒ์ ์์ฒญ
-
๋ฐ๋ผ์ ๋ชจ๋ฌ์ฐฝ์ ํผ ๋๋ง๋ค 1.2์ด~1.8์ด๋ฅผ ๊ธฐ๋ค๋ ค์ผ ํจ
-
๊ทธ๋์ jotai๋ฅผ ์ด์ฉํด ํ ๋ฒ ์๋ต ๋ฐ์ ๋ฐ์ดํฐ๋ ์ ์ญ ์ํ๋ก ์ ์ฅํ๊ณ , ์ดํ ๊ฐ์ ์ง์ญ์ ๋ํ ๋ฐ์ดํฐ๋ฅผ ๋ณด์ฌ์ค์ผ ํ ๋์๋ ์ ์ญ ์ํ์์ ๊ฐ์ ธ์์ผ ํจ
์ ๋ฆฌ์กํธ ์ฟผ๋ฆฌ๋ฅผ ์ ์ฉํ๋ ค ํ๋๊ฐ?
-
otai๋ฅผ ์ด์ฉํด ์ ์ญ ์ํ๋ก ๊ด๋ฆฌํ๋ฉด ์บ์ฑ ํจ๊ณผ๋ฅผ ๊ตฌํํ ์ ์์์ง๋ง, ํ ๋ฒ ์ ์ญ ์ํ๋ก ์ ์ฅ๋ ๋ฐ์ดํฐ๋ ์ดํ ๋ณ๊ฒฝ๋์ง ์์
ex) ์คํ 2์์ ์ฒ์ ๋ชจ๋ฌ์ฐฝ์ ์ด๊ณ ์๋ก๊ณ ์นจ์ ํ์ง ์์ ์ํ์์ ์คํ 9์์ ๋ชจ๋ฌ์ฐฝ์ ์ด๊ฒ ๋๋ฉด, ์คํ 2์๋ฅผ ๊ธฐ์ค์ผ๋ก
24์๊ฐ ์ด๋ด์ ์ธ๊ตฌ ๋ฐ๋ ์ ๋ณด
๊ฐ ํ์๋จ -
์ข ๋ ๋ณธ๊ฒฉ์ ์ผ๋ก ์บ์ฑํ๊ธฐ ์ํด ๋ฆฌ์กํธ ์ฟผ๋ฆฌ๋ฅผ ์ ์ฉํ๊ธฐ๋ก ํจ
๊ตฌํ ๋ฐฉ๋ฒ
-
์ด์ ์ฝ๋
... const [cache, setCache] = useAtom(secondLevelInfoCacheAtom); ... // ์ ์ญ์ areaName์ ํค๋ก ๊ฐ๊ณ ์๋ ์์ฑ์ด ์์ผ๋ฉด hit if (cache[areaName]) { setGraphInfo(cache[areaName]); return; } // ์๋๋ฉด api ํธ์ถ const { data } = await apis.getPastInformation(areaName); ...
-
ํด๋น ์ง์ญ์
24์๊ฐ ์ด๋ด์ ์ธ๊ตฌ ๋ฐ๋ ์ ๋ณด
๊ฐ ์ ์ญ ์ํ์ ์ ์ฅ๋์ด ์์ผ๋ฉด hit -
์์ผ๋ฉด api ์๋ฒ์ ์์ฒญํ๊ณ ์ ์ญ ์ํ์ ์ ์ฅ
-
-
๋ฆฌ์กํธ ์ฟผ๋ฆฌ ์ ์ฉ ํ
// hooks/useGraphInfo.tsx ... const { data: graphInfoResponse } = useQuery( // query key ['getGraphInfo', areaName], // query function async () => { ... const result = await apis.getPastInformation(firstLevelInfo[0]); return result; }, // options { enabled, staleTime: QUERY_TIME.STALE_TIME, // 5๋ถ cacheTime: QUERY_TIME.CACHE_TIME, // 30๋ถ onSuccess: data => { success(data); }, onError: e => { console.log('error', e); } } ); ...
-
query key
-
key-value๋ก ์ ์ฅ
ex) [โgetGraphInfoโ, โ์์ธ์ญโ]
-
-
query function
- ๋น๋๊ธฐ ์ฒ๋ฆฌ ํจ์
-
query options(์ค์)
- enabled
- staleTime
- cacheTime
-
์บ์ฑ ํ
- ์์ธ์ญ์ ๋ค์ ์ด์์ ๋ ๊ทธ๋ํ ๊ทธ๋ ค์ง๋ ์๋๊ฐ ๋นจ๋ผ์ง
- ์์ธ์ญ์ ๋ค์ ์ด์์ ๋ ๋คํธ์ํฌ์ ๋ค์ ์ฐํ์ง ์๋๋ค.
https ์ ์ฉ
์ https๋ฅผ ์ค์ ํ๋ ค ํ๋๊ฐ?
-
์๋น์ค์ ์ฒ์ ๋ค์ด๊ฐ๋ฉด ์ฌ์ฉ์ ์ด๊ธฐ ํ๋ฉด ์ค์ ์ ์ํด ๋ธ๋ผ์ฐ์ ์์ ์ฌ์ฉ์ ์์น ์ ๋ณด ํ์ฉ ์์ฒญ์ ๋ณด๋
-
๋ฐฐํฌ ํ, https๋ฅผ ์ค์ ํ์ง ์์ผ๋ฉด ์์น ์ ๋ณด ์ ๊ณต ์์ฒญ์ ์์ ํ์ง ์์
Mixed Content ์๋ฌ
-
client๋
https
๋ฅผ ์ฌ์ฉํ๊ณ server๋http
๋ฅผ ์ฌ์ฉํ์ฌMixed Content
์๋ฌ ๋ฐ์Mixed Content: The page at 'https://www.mildo.live/' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint 'http://www.mildo.live:3001/api/auth'. This request has been blocked; the content must be served over HTTPS.
ํผํฉ ์ฝํ ์ธ (Mixed Content)
๋https
๋ฅผ ํตํด์ ์ ์ํ ์ฌ์ดํธ์์http
ํต์ ์ผ๋ก ์คํฌ๋ฆฝํธ, ๋์์ ๋ฑ์ ์์์ ์์ฒญํ๋ ๊ฒ์ผ๋ก, ํฌ๋กฌ ๋ธ๋ผ์ฐ์ ๋ ํผํฉ ์ฝํ ์ธ ๊ฐ ์์ ๊ฒฝ์ฐ ํด๋น ์ฝํ ์ธ ๋ฅผ ์ฐจ๋จํจ
-
๋ฐฐํฌ ์๋ฒ์ Nginx์์
๋ฆฌ๋ฒ์ค ํ๋ก์
์ค์ ์ ํ์ฌMixed Content
์๋ฌ ํด๊ฒฐ// etc/nginx/sites-enabled/default.conf server { ... location / { root /usr/share/nginx/html/client/build; index index.html index.htm index.nginx-debian.html; } location /api { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; proxy_http_version 1.1; proxy_pass http://www.mildo.live:3001; } }
-
๋ฆฌ๋ฒ์ค ํ๋ก์(Reverse Proxy)
๋ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋์ ๋ฐ์ ๋ด๋ถ ์๋ฒ๋ก ์ ๋ฌํ์ฌ ์๋ต์ ๋ฐ์์ค๋ ๊ฒ -
ํด๋ผ์ด์ธํธ์์ root location(/)์ผ๋ก ์์ฒญ ์์๋ html ํ์ผ์ ๋ณด๋ด์ค
-
ํด๋ผ์ด์ธํธ์์ /api ๋ก ์์ํ๋ ์ฃผ์๋ก ์์ฒญ ์ nginx๊ฐ ๋์ ์์ฒญ์ ๋ณด๋ด๊ณ ์๋ต์ ๋ฐ์์ ํด๋ผ์ด์ธํธ์ ์ ๋ฌ
4. ์์ผ๋ก ํ ์ผ
- ๊ธฐ๋ฅ ๊ตฌํ ๋ง๋ฌด๋ฆฌ, ์ฝ๋ ๊ฒํ ๋ฐ ๋ฆฌํฉํ ๋ง
- ์ฑ๋ฅ ํ ์คํธ ํ ๊ฐ์
- ์๋๋ฆฌ์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ฐ ์์ ์ฐ๊ธฐ
- ํ๋ก์ ํธ ์๊ฐ์ ๊ฒํ ๋ฐ ์์ฑ