Flutter๋ก ๊ฐ๋ฐ์ ํ๋ ๊ฒ์ ์ฒ์์ด๊ธฐ์ ๋๊ผฌ์ค์ ๊ฐ์๋ฅผ ๋ค์ผ๋ฉด์ ๋ฌด์ฌํ ์ฒซ ํ๋ก์ ํธ๋ฅผ ์์ฑํ ์ ์์์ต๋๋ค. ๊ฐ์๋ฅผ ๋ฐ๋ผ ํ๋ฉด ํฐ ์ค๋ฅ๋ ๋ง์ฃผ์น ์ผ์ด ์๋๋ฐ์. ๊ทธ๋๋ ๊ฐ์์ ํ๊ฒฝ๊ณผ ์ ํํ ํ๋ซํผ์ ๋ฐ๋ผ์ ๋ค์ํ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์๋ฐ์ ์๋ ๊ฒ์ด ๋ฉํฐํ๋ซํผ์ ์์ญ์ธ ๊ฒ ๊ฐ์ต๋๋ค.
๊ทธ์ค ํ๋๊ฐ ์ฒ์ ์ด๋ฏธ์ง๋ฅผ ๋ก๋ํด ์ฌ ๋, Image Codec Exception์ผ๋ก ์ธํ์ฌ ์๋์ ์ข์ธก ์ด๋ฏธ์ง์ฒ๋ผ ์ ํฌ๊ฐ ํํ ๋งํ๋ ์๋ฐ(์์ค๋ฐ์ค)์ด ํ๋ ๋ด์ต๋๋ค.
๋๊ผฌ ์ ์๋์ ํ๊ฒฝ์ IOS ์ ๋ฎฌ๋ ์ดํฐ๋ฅผ ํตํด์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ ๊ณ์
จ๊ณ ์ ๋ Chrome OS ์ฆ ์น ํ๊ฒฝ์์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ ์์๋๋ฐ์. ์ ๋ฟ๋ง์ด ์๋ ๋ค๋ฅธ ์น ํ๊ฒฝ์์ ํ
์คํธ๋ฅผ ํ๊ณ ๊ณ์๋ ๋ง์ ๋ถ๋ค์ด ์ด ์ค๋ฅ๋ฅผ ๋ณด์ ๊ฒ ๊ฐ๋๋ผ๊ณ ์.
์ด ๋ฌธ์ ์ ๋ํ ํด๊ฒฐ๋ฐฉ๋ฒ์ (1) ์ค๋ฅธ์ชฝ์ ์ด๋ฏธ์ง์ฒ๋ผ user settings(json) ํ์ผ์์ flutterRunAdditinalArgs๋ฅผ ์ถ๊ฐํ์ฌ ์ฃผ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
flutter run -d chrome --web-renderer html
flutter build web --web-renderer html
(2) ํน์ ์์ ์ฝ๋๋ธ๋ก์ฒ๋ผ flutter ๋ช ๋ น์ด๋ก terminal์์ ํด๋น ๋ช ๋ น๋ค์ ์คํํด ์ฃผ์ด๋ ๋ฉ๋๋ค.
์ด ์ค๋ฅ์ ๋ํ ํด๊ฒฐ ๋ฐฉ๋ฒ๋ ์์ ๋จผ์ ๊ธฐ์ ํด ๋ณด์์ต๋๋ค. ํ์ง๋ง ๊ทผ๋ณธ์ ์ผ๋ก ์ด๋ค ์ค๋ฅ์ด๊ณ ์ด๊ฒ์ด ์ ๋ฐ์ํ๋์ง๋ฅผ ์๋ ๊ฒ์ด ๋ ์ค์ํ๊ธฐ์ ๊ด๋ จํ ๋ด์ฉ์ ์ด ์๋์ ์ฒจ๋ถํฉ๋๋ค.
Failed to load resource: net::ERR_FAILED :63577/#/:1 Access to XMLHttpRequest
at 'https://shared-comic.pstatic.net/thumb/webtoon/800770/thumbnail/thumbnail_IMAG21_d2e1e7ee-fc83-4030-a1e7-200378bc088f.jpg'
from origin 'http://localhost:63577' has been blocked by CORS policy
: No 'Access-Control-Allow-Origin' header is present on the requested resource.
์ผ๋จ ํฌ๋กฌ์ ๊ฐ๋ฐ์ ๋๊ตฌ์ ์ฝ์์์ ํ์ธํ ์ค๋ฅ๋ ์ด๋ฌํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ํด๋น ์ค๋ฅ์ ๋ํ MDN ๋ฌธ์๋ ์ฒจ๋ถํฉ๋๋ค.
์์ธ์ ๋ฆฌ์์ค๋ฅผ ๋ก๋ํ๋ ๊ฒ์ ์คํจํ์๋ค๋ ๊ฒ์ด๊ณ XMLHttpRequest๋ฅผ ํธ์ถํ์ฌ ์ ๊ทผํ๋ ๊ณผ์ ์์ ์ด๋ ํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์๋ ๋ด ๋๋ค. ์ ํํ๊ฒ๋ ๋ฆฌ์์ค๋ฅผ ์์ฒญํ header์ 'Access-Control-Allow-Origin' ์์ฑ์ด ์์ด์ CORS Policy์ ์ํ์ฌ ๋งํ๋ค. ๊ฐ ์ด ์ค๋ฅ์ ๋ด์ฉ์ ๋๋ค.
์ ๋ ์น ๊ฐ๋ฐ์๊ฐ ์๋๊ธฐ์ ์ด๋ฐ ์น์ ๋ณด์์ ์ฑ ์ ๋ํด์ ์๋ ๋ฐ๊ฐ ์์ต๋๋ค. ๊ทธ๋์ CORS Policy๊ฐ ๋ฌด์์ธ์ง Access-Control-Allow-Origin ๋ฌด์์ธ์ง ์ฌ์ค ์ ๋ชฐ๋ผ์ ๊ฒ์์ ํด๋ณด์์ต๋๋ค. ์ฑ์์๋ ์ฌ์ค ์ด๋ฐ ์ค๋ฅ๋ฅผ ๋ง์ฃผํ ์ผ์ด ํฌ๊ฒ ์๊ฑฐ๋ ์. Manifest์ ์ด๋ฏธ ๋ค Permission๋ค์ ๋ฑ๋กํด ๋๊ณ ๋ณดํต ๊ฐ๋ฐ์ ํ๊ธฐ์ ์ ์ฑ ์ ์ผ๋ก ๋ธ๋ฝ์ ๋นํ๋ ์ผ์ด ์์ด์ ์์ํ ๊ฒฝํ์ด์์ต๋๋ค.
Origin์ด๋ ์๋์ ๊ฐ์ ํํ์ ๊ฒ์ ๋งํ๋๋ฐ, ๊ทธ๋ฅ ์น ์ฃผ์๋ฅผ Origin์ด๋ผ๊ณ ํ๋ ๊ฒ ๊ฐ์์. ๋ง๋ก๋ง ์์ฃผ ๋ค์ด๋ณด์์ง ๋ง์ Origin์ MDN์์ ๊ฒ์ํ๋ ๊ฒ ์ฒ์์ด์๋ต๋๋ค...ใ
Origin: null
Origin: <scheme> "://" <hostname> [ ":" <port> ]
http://localhost:63577 ์ด ์์ฒด๋ฅผ Origin์ด๋ผ๊ณ ๋ณผ ์ ์๊ฒ ๋ค์. ์ฌ๊ธฐ์ port๋ ์๋ต์ด ๊ฐ๋ฅํ ํํ์ ๋๋ค.
์ผ๋จ CORS Policy๋ ์ด Origin์ ๋ํ ๊ธฐ์กด์ ์น ๋ณด์ ์ ์ฑ ์ธ SOP๋ฅผ ์ํํ๊ธฐ ์ํด์ ๋ง๋ค์ด์ง ์ ์ฑ ์ด๋ผ๊ณ ํฉ๋๋ค. ์, ์ด๋ฌ๋ฉด SOP๊ฐ ๋ฌด์์ธ์ง๋ ์์์ผ๊ฒ ์ฃ . MDN๋ฌธ์๋ ์น์ ํ๊ฒ ๋งํฌ๋ ๊ฑธ์ด์ค๋๋ค๐
SOP๋ Same Origin Policy๋ก ๊ฐ์ Origin์ผ๋ก ๋ถ๋ ค์ง ์คํฌ๋ฆฝํธ์ ๋ํ์ฌ ๋ค๋ฅธ Origin์ ํตํ ๋ฆฌ์์ค์ ์ฐธ์กฐ๋ฅผ ์ ํํ๋ ๊ฒ์ ๋งํฉ๋๋ค. ๊ทธ๋ฌ๋๊น ๋ด๊ฐ ์ ์ํ Origin์ ์คํฌ๋ฆฝํธ์์๋ ๋ฆฌ์์ค๋ฅผ ๋ถ๋ฌ์ฌ ๋๋ ๊ฐ์ Origin์ ํตํ์ฌ ๋ถ๋ฌ์์ผ ํ๋ค๋ ๋ด์ฉ์ด์์.
์ด๋ Origin์ด ๋ฌ๋ผ์ง๋ ๊ธฐ์ค์ [ํ๋กํ ์ฝ] [ํธ์คํธ๋ค์] [ํฌํธ๋ฒํธ]์
๋๋ค. ์ด 3๊ฐ์ง์ ๋ํ ๊ธฐ๋ณธ ๋ด์ฉ์ด ๋ณํ๋๋ ๊ฒ์ Origin์ด ๋ค๋ฅด๋ค๊ณ ์น ์ ์ฑ
์ ๋งํด์ฃผ๊ณ ์์ด์.
MDN์ SOP๋ฌธ์์ ํ๋จ๊น์ง ๋ด๋ ค๊ฐ๋ฉด CORS๋ฅผ ์ด์ฉํ ๊ต์ฐจ์ ๊ทผ์ ํ์ฉ์ ํด์ฃผ๋ ๋ฐฉ๋ฒ๋ค๋ ์ ์ํ๊ณ ์์ต๋๋ค. ์ํฉ์ ๋ฐ๋ผ ๋ง๋ ๋ฐฉ๋ฒ์ ํ์ฉํด ์ฃผ๋ฉด ๋๊ฒ ์ฃ .
์ผ๋จ ์ผ๋ฐ์ ์ธ ์น ๊ฐ๋ฐ์ด ์๋ Flutter๋ฅผ ํตํ ๊ฐ๋ฐ์ด๊ธฐ ๋๋ฌธ์ ๊ด๋ จ๋ด์ฉ์ ์ฐพ์๋ณด์์ ๋๋ ๋ค์ํ ํด๊ฒฐ๋ฐฉ๋ฒ๋ค์ด ์๊ณ , ์ ๋ ๊ทธ์ค์ ๊ฐ์ฅ ๊ฐ๋จํด ๋ณด์ด๋ user settings ํ์ผ์ ์์ ํ๋ ๊ฒ์ผ๋ก ํด๊ฒฐ์ ํ์์ต๋๋ค.
StackOverFlow์ ๋ ๋ง์ ๋ด์ฉ์ด ์์ด์ ํด๋น ๊ธ์ ๋งํฌ๋ฅผ ์ผ๋จ ์ฒจ๋ถํ์๋๋ฐ์. dart pub์์ ํด๋น ์๋ฃจ์ ์ ์ ๊ณตํ๊ณ ์๋ ๊ฒ ๊ฐ์ผ๋ ์ค๋ฌด์์๋ ๊ทธ ๋ฐฉ๋ฒ์ผ๋ก ํด๊ฒฐํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ ๋ณด์ด๊ธฐ๋ ํฉ๋๋ค.
https://pub.dev/packages/flutter_cors
์ด๋ฏธ์ง๊ฐ ๋ก๋๊ฐ ์ ๋๋ ๊ฒ์์ ์์ํ์ฌ ์ฌ๊ธฐ๊น์ง ์๋ฒ๋ ธ๋ค์.

'๐ป ๊ฐ๋ฐ์ ์ด์ผ๊ธฐ > Flutter ํํ์ผ์ง' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Flutter์ Async await ๊ทธ๋ฆฌ๊ณ Future Class (0) | 2023.01.30 |
---|---|
VS Code, Preview Flutter Ui Guides ํ์ฑํ (0) | 2023.01.14 |
Flutter ๋์ , ๊ทธ๋ฆฌ๊ณ ํ ์ด ํ๋ก์ ํธ์ ์์ฑ๊น์ง. (0) | 2023.01.14 |