[project] ๐ŸŽฌMovyes: ์˜ํ™” ์ปค๋ฎค๋‹ˆํ‹ฐ React ํ”„๋กœ์ ํŠธ - ๋ฐฐํฌ ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…

์˜ค์˜ค๊ตฌยท2023๋…„ 1์›” 12์ผ
0

์†”์งํžˆ ๋ฐฐํฌ๋Š” ๋š๋”ฑ ๋ ์ค„ ์•Œ์•˜๋‹ค ใ…Ž

Movyes ํ”„๋กœ์ ํŠธ๋ฅผ gh-page๋กœ ๋ฐฐํฌํ•˜๋ฉด์„œ ๋งŒ๋‚œ ์—๋Ÿฌ๋ฅผ ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

1. Module not found Error

Creating an optimized production build...
Failed to compile.

Module not found: Error: Can't resolve 'assert' in 'C:\Users\yeon\Desktop\FRONTEND\projects\movie\node_modules\yargs\lib\platform-shims'
BREAKING CHANGE: webpack < 5 used to include polyfills for node.js core modulThis is no longer the case. Verify if you need this module and configure a polyfill for it.

If you want to include a polyfill, you need to:
- add a fallback 'resolve.fallback: { "assert": require.resolve("assert/") }'
- install 'assert'
If you don't want to include a polyfill, you can use an empty module like this:
resolve.fallback: { "assert": false }

ํ”„๋กœ์ ํŠธ deploy์— ์‹คํŒจํ•˜๋ฉด์„œ ๋ฐœ์ƒ.

ํŒŒ์ผ์— ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ๋„ฃ์„ ๋•Œ ์‹ค์ˆ˜๋กœ import { env } from "yargs ๊ฐ€ ์ถ”๊ฐ€๋˜์–ด ๋ฐœ์ƒํ•จ.
import๋ฅผ ์‚ญ์ œํ•˜๋‹ˆ๊นŒ ์‚ฌ๋ผ์กŒ๋‹ค.


2. ์ฒซ๋ฒˆ ์งธ 404 ์—๋Ÿฌ

๋ฐฐํฌ์— ์„ฑ๊ณตํ•˜๊ณ  ์›น์‚ฌ์ดํŠธ์— ์ ‘์†ํ–ˆ๋”๋‹ˆ ๋‘๋‘ฅ..! ๋ณ„์•ˆ๊ฐ„ ๋œจ๋Š” ์—†๋Š” ํŽ˜์ด์ง€์ž…๋‹ˆ๋‹ค๐Ÿ˜ฅ

์ฒ˜์Œ์—๋Š” ๋˜ ๋ฐฐํฌ๊ฐ€ ์ œ๋Œ€๋กœ ์•ˆ๋œ๊ฑด๊ฐ€ ์‹ถ์—ˆ๋Š”๋ฐ gh-page์—์„œ ์ œ๊ณตํ•˜๋Š” 404ํŽ˜์ด์ง€๊ฐ€ ์•„๋‹Œ ๋‚ด๊ฐ€ ์„ค์ •ํ•œ NotFound ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋œจ๋Š”๊ฑธ ๋ณด๋‹ˆ ๋ฐฐํฌ๋Š” ์„ฑ๊ณตํ•œ ๋“ฏ ์‹ถ์—ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ๋‚จ์€๊ฑด ํ•˜๋‚˜.

๋ผ์šฐํŒ…..!

์žก์•˜๋‹ค ์š”๋†ˆ!

ํ•˜์ง€๋งŒ ์•„๋ฌด๋ฆฌ ์‚ดํŽด๋ด๋„ ๊ฒฝ๋กœ๋Š” ๋ฌธ์ œ๊ฐ€ ์—…์—ˆ๊ณ ... (์• ์ดˆ์— ๊ทธ๊ฒŒ ๋ฌธ์ œ์˜€์œผ๋ฉด ๋กœ์ปฌ์—์„œ๋„ ์•ˆ๋์„ํ…๋ฐ ๋กœ์ปฌ์—์„  ๋ฌธ์ œ๊ฐ€ ์—†์—ˆ์Œ) ๋ญ๊ฐ€ ๋ฌธ์ œ์ผ๊นŒ... ํ•œ์ฐธ ๊ตฌ๊ธ€๋งํ•˜๋‹ค ๋“œ๋””์–ด ์›์ธ์„ ์ฐพ์•˜๋‹ค.

์ฐธ๊ณ ์ž๋ฃŒ: https://tlsdnjs12.tistory.com/68?category=1029328

๊ฐ„๋‹จํžˆ ๋งํ•˜์ž๋ฉด
ํ”„๋กœ์ ํŠธ์˜ ๋ผ์šฐํ„ฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” '/' ๊ฒฝ๋กœ๋Š” 'https://๋ฐฐํฌ์‚ฌ์ดํŠธ/' ์—์„œ์˜ '/' ์ธ๋ฐ
์‹ค์ œ ๋ฐฐํฌ๋Š” 'https://๋ฐฐํฌ์‚ฌ์ดํŠธ/๋ ˆํฌ์ง€ํ„ฐ๋ฆฌ์ด๋ฆ„/' ๊ฒฝ๋กœ์— ๋ฐฐํฌ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ๋‘ ๊ฐ€์ง€๋ฅผ ์ฐพ์•˜๋‹ค.

HashRoute ์‚ฌ์šฉ

BrowserRoute ๋Œ€์‹  HashRoute ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•.

basename ์„ค์ •

BroswerRoute ์— basename=process.env.PUBLIC_URL ์„ ์„ค์ •ํ•ด์ค€๋‹ค.
๊ทธ๋Ÿฌ๋ฉด ์ž๋™์œผ๋กœ ํ”„๋กœ์ ํŠธ์˜ ๋ฒ ์ด์Šค ๊ฒฝ๋กœ๊ฐ€ /public_URL ๋กœ ๋ฐ”๋€๋‹ค.

๋‚˜๋Š” ์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐBrowserRoute๊ฐ€ ์•„๋‹Œ createBrowserRouter ๋ฅผ ์‚ฌ์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ๋‘๋ฒˆ์งธ ์ธ์ž๊ฐ’์œผ๋กœ ํ•ด๋‹น ์†์„ฑ์„ ์ง€์ •ํ•ด์ฃผ์—ˆ๋‹ค.

๊ณต์‹๋ฌธ์„œ: https://reactrouter.com/en/main/routers/create-browser-router


2. ๋‘๋ฒˆ ์งธ 404 ์—๋Ÿฌ

๋”์ด์ƒ ๋นˆํ™”๋ฉด์ด ๋œจ์ง€ ์•Š์ง€๋งŒ ๋ฉ”์ธ ํŽ˜์ด์ง€์—์„œ API๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ 404 ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. (๊ทธ๋งŒ..!)

๋„คํŠธ์›Œํฌ ํƒญ์—์„œ API ์š”์ฒญ์ด ์–ด๋””๋กœ ๊ฐ€๋Š”์ง€ ํ™•์ธํ–ˆ๋Š”๋ฐ ๋‚ด ๋ฐฐํฌ ์‚ฌ์ดํŠธ ๊ฒฝ๋กœ/API ์—”๋“œํฌ์ธํŠธ ์œผ๋กœ ์š”์ฒญ๋˜๊ณ ์žˆ์—ˆ๋‹ค.
๊ฐœ๋ฐœํ•  ๋•Œ CORS ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ด์„œ proxy ์ฒ˜๋ฆฌ๋ฅผ ํ–ˆ์—ˆ๋Š”๋ฐ ๊ทธ๊ฒƒ ๋•Œ๋ฌธ์ธ ๊ฒƒ ๊ฐ™์•˜๋‹ค.
proxy์ฒ˜๋ฆฌ๋ฅผ ์ œ๊ฑฐํ•˜๋‹ˆ 404 ์—๋Ÿฌ๋Š” ์‚ฌ๋ผ์กŒ์ง€๋งŒ ์ƒˆ๋กœ์šด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค!


3. Mixed Content

Mixed Content: The page at 'https://ohy9205.github.io/movie/' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint 'http://api.koreafilm.or.kr/openapi-data2/wisenut/search_api?collection=kmdb_new2&ServiceKey=RIR3C4XJSZ780D6XH891&detail=Y&listCount=50&releaseDts=20221229&releaseDte=20230112'. This request has been blocked; the content must be served over HTTPS.

๋ฐฐํฌ ์‚ฌ์ดํŠธ๋Š” https ์ธ๋ฐ API๋Š” http ์ด๋ผ์„œ ๋ฐœ์ƒํ•œ๋Š” ์—๋Ÿฌ.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ๋‘ ๊ฐ€์ง€๋ฅผ ์ฐพ์•˜๋‹ค.

๋ธŒ๋ผ์šฐ์ €์—์„œ ์ž„์‹œ์ ์œผ๋กœ ํ•ด๊ฒฐ

๋ธŒ๋ผ์šฐ์ € ์„ค์ • ์ฐฝ์—์„œ ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ์ฝ˜ํ…์ธ  ์ฐจ๋‹จ->ํ—ˆ์šฉ ์œผ๋กœ ๋ฐ”๊พธ๋ฉด ๋˜๋Š” ๋ฐฉ๋ฒ•์ธ๋ฐ...
ํ˜„์‹ค์ ์œผ๋กœ ์‚ฌ์šฉ์ž๋ณด๊ณ  ์ผ์ผ์ด ์„ค์ •ํ•˜๋ผ๊ณ  ํ•  ์ˆœ ์—†์ง€ ์•Š์„๊นŒ.

ํ”„๋กœ์ ํŠธ ํŒŒ์ผ์—์„œ ์ฒ˜๋ฆฌ

/pubic/index.html์— meta ํƒœ๊ทธ ์ถ”๊ฐ€

<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests" />

๋‚ด๊ฐ€ ์„ ํƒํ•œ ๋ฐฉ๋ฒ•.
header ์•ˆ์— ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค.


4. ์ด๋ฏธ์ง€ ๊ฒฝ๋กœ

ํฌ์Šคํ„ฐ ์—†์„๋•Œ ๋ณด์—ฌ์ฃผ๋Š” ์ด๋ฏธ์ง€๋ฅผ /public/assets๊ฒฝ๋กœ์— ๋„ฃ์–ด๋‘๊ณ  img src='/assets/ํŒŒ์ผ๋ช…' ์œผ๋กœ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•ด๋’€๋Š”๋ฐ ๋ผ์šฐํŠธ์— basename์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋ฉด์„œ ๊ฒฝ๋กœ๊ฐ€ ๋ฐ”๋€Œ์–ด ๊ฐ€์ ธ์˜ค์ง€ ๋ชปํ•˜๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒํ–ˆ๋‹ค.

์ด๋ฏธ์ง€ ๊ฒฝ๋กœ๋„ /process.env.PUBLIC_URL/assets/ ์ฒ˜๋Ÿผ ๋ณ€๊ฒฝํ–ˆ๋˜ ใ…ฃํ•ด๊ฒฐ๋๋‹ค.


์ด์ƒ ๋ฐฐํฌ์‹œ์— ๋ฐœ์ƒํ•œ ๋ฌธ์ œ๋ฅผ ์ •๋ฆฌํ•ด ๋ณด์•˜๋‹ค.
์šฐ๋ฆฌ ๋‹ค์Œ์— ๋ฐฐํฌ๋•Œ๋Š” ๋งŒ๋‚˜์ง€ ๋ง์ž~~

profile
๋” ์ด์ƒ ๋ฏธ๋ฃฐ ์ˆ˜ ์—†๋‹ค

0๊ฐœ์˜ ๋Œ“๊ธ€