HTTP์์ HTTPS๋ก API ์์ฒญํ๊ธฐ(feat. Vite Proxy)
HTTP์์ HTTPS๋ก API ์์ฒญํ๊ธฐ(feat. Vite Proxy) ๊ด๋ จ
ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ์ ์ฅ์์๋ ๊ฐ๋ฐํ ๋ ๋ก์ปฌ ํ๊ฒฝ์ ๋ฐฑ์๋ ์๋ฒ๋ฅผ ์ผ์ผ์ด ๋น๋ํ๋ ์ผ์ ๋ค์ ๋ฒ๊ฑฐ๋กญ๊ฒ ๋๊ปด์ง๋ค. ํนํ ๋น๋๊ฐ ๊นจ์ง๊ธฐ๋ผ๋ ํ๋ฉด, ๊ทธ ๋ฌธ์ ๋ฅผ ์๋ฒ ๊ฐ๋ฐ์์๊ฒ ๋ณด๊ณ ํ๊ณ ์ค๋ฅ๋ฅผ ํด๊ฒฐํด์ผ๋ง ๋ค์ ์์ ์ ์์ํ ์ ์๋ค. ์ด๋ฌํ ์๊ฐ ์๋ชจ๊ฐ ๋์ ๋๋ฉด ๊ฒฐ๊ตญ ํฐ ์๊ฐ ๋ญ๋น๋ฅผ ์ด๋ํ๋ค. ๊ทธ๋์ ์ต๊ทผ ๋ด๊ฐ ์ํ ํ์์๋ ๋ฐฑ์๋ ์๋ฒ๋ฅผ ๋ธ๋์น ๋จ์๋ก ๋ฐฐํฌํ๊ณ , ํด๋ผ์ด์ธํธ๋ฅผ ๊ฐ๋ฐํ๋ ์๋ฒ์์ ์ง์ ๋ฐฐํฌ๋ ๋ฐฑ์๋ ์๋ฒ๋ฅผ ํฅํด API๋ฅผ ์์ฒญํ๊ธฐ๋ก ํ์๋ค.
๊ทธ๋ฌ๋ ์น ๊ฐ๋ฐ ํ๊ฒฝ์์ ๋ฐฐํฌ๋ ์๋ฒ์ API๋ฅผ ์์ฒญํ๋ ๊ฒ์ ๊ฝค ๊น๋ค๋ก์ด ์ผ์ด๋ค. ์ผ๋ฐ์ ์ผ๋ก ํด๋ผ์ด์ธํธ ๊ฐ๋ฐ์ฉ ์๋ฒ๋ HTTP ํ๋กํ ์ฝ์ ์ฌ์ฉํ๊ณ ๋ฐฐํฌ๋ ์๋ฒ๋ HTTPS ํ๋กํ ์ฝ์ ์ฌ์ฉํ๋๋ฐ, ๋ธ๋ผ์ฐ์ ๊ฐ HTTP โ HTTPS ํต์ ์ ์ฝ๊ฒ ํ๋ฝํ์ง ์์ ์๋ฌ๋ฅผ ๋ฐ์์ํค๊ธฐ ๋๋ฌธ์ด๋ค. ์ด๋ ํํ CORS๋ผ๊ณ ๋ถ๋ฅด๋ ๋ธ๋ผ์ฐ์ ์ ์ฑ ์๋ฐ์ ์ํ ์๋ฌ๋ค.
CORS ์๋ฌ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ ๋ฐฑ์๋ ์๋ฒ์์ ๊ฐ์ ๋ก ํน์ ๋๋ฉ์ธ์ ๋ํ ๋ณด์์ ํด์ ํด์ผ ํ๋ค. ํ์ง๋ง ์๋ฒ๊ฐ ํ์ฉํ๋ค๊ณ ํ๋๋ผ๋ ๋ธ๋ผ์ฐ์ ์์ฒด์ ์ผ๋ก ์ฐจ๋จํ๋ ๋ฆฌ์์ค๊ฐ ์๋ค. ์ฟ ํค(Cookie)๋ ๊ทธ์ค ํ๋๋ค. ์ฟ ํค๋ ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์ ๋ฐ๊ธํด ์ฃผ๋ ๊ฒ์ผ๋ก ํด๋ผ์ด์ธํธ ์ธ์ฆ์ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ ์กฐ๊ฐ์ธ๋ฐ, ๋ธ๋ผ์ฐ์ ๋ HTTP์ HTTPS ๊ฐ ํต์ ์์ ์ฟ ํค ์ ์ก์ ํ์ฉํ์ง ์๊ณ ์ฐจ๋จํด ๋ฒ๋ฆฐ๋ค. ์, ๊ทธ๋ผ ์ด๋ป๊ฒ ํด์ผ ํ ๊น? ๋ด๊ฐ ์๋ํ ๋ฐฉ๋ฒ์ ๋ณธ๊ฒฉ์ ์ผ๋ก ๊ณต์ ํ๊ธฐ์ ์์ ๋ช ๊ฐ์ง ๊ฐ๋ ์ ์งง๊ฒ ์ธ๊ธํ๊ณ ์์ํ๊ฒ ๋ค.
Vite
์ฐ๋ฆฌ ํ์ ๋น๋ ๋๊ตฌ๋ก Vite๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค. Vite๋ JavaScript ๋ฐ TypeScript ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ๋น๋ ๋๊ตฌ ๋ฐ ๊ฐ๋ฐ ์๋ฒ๋ค. ๋งค์ฐ ๋น ๋ฅด๋ค๋ ์ฅ์ ์ ๊ฐ์ง๊ณ ์๊ณ ์ฌ๋ฌ ํธ๋ฆฌํ ๊ธฐ๋ฅ์ ์ ๊ณตํด ์ค๋ค. ๋ง์ฝ Webpack์ด๋ Parcel ๋ฑ ๋ค๋ฅธ ๋น๋ ๋๊ตฌ๋ฅผ ์ฌ์ฉํด ๋ณธ ์ฌ๋์ด๋ผ๋ฉด, ์ง์ Vite์ ์ฑ๋ฅ ๋น๊ต๋ฅผ ํด๋ด๋ ํฅ๋ฏธ๋ก์ธ ๊ฒ์ด๋ค.
Vite๊ฐ ์ ๊ณตํ๋ ์ฌ๋ฌ ํธ์ ๊ธฐ๋ฅ ์ค ํ๋๊ฐ ๋ฐ๋ก ํ๋ก์(Proxy) ์๋ฒ๋ฅผ ์ฝ๊ฒ ๊ตฌ์ฑํ ์ ์๋ค๋ ์ ์ด๋ค. vite.config.js
ํ์ผ์ ๋ค์๊ณผ ๊ฐ์ด proxy๋ผ๋ ํค์ ๋ํ ๊ฐ์ผ๋ก ๊ฐ์ฒด๋ฅผ ์ถ๊ฐํด์ฃผ๋ฉด ๋์ด๋ค.
์ด๋ฐ ๊ตฌ์ฑ์ ํ์ฉํ๋ฉด Vite ๊ฐ๋ฐ ์๋ฒ๊ฐ ํ๋ก์ ์๋ฒ์ ๊ธฐ๋ฅ๋ ๊ฒธํ๊ฒ ๋๋ค. ๊ทธ๋์ ๋๋ ์๋ฒ๋ ๋ฉ์ธ ์๋ฒ ์ญํ ๋ง ์ํํ ์ ์๊ณ ํ๋ก์ ์๋ฒ๋ ๋ณ๋๋ก ๊ตฌ์ฑํด์ผ ํ๋ค๊ณ ์๊ฐํ๋๋ฐ, ์ด๋ ๊ฒ ๋ ๊ฐ์ง ์ญํ ์ ๊ฒธํ ์ ์๋ค๋ ๋ถ๋ถ์ด ์ฒ์ ์ ํ์ ๋ ๋ฌด์ฒ ์ ๊ธฐํ๊ฒ ๋๊ปด์ก๋ค.
ํ๋ก์
์ฌ๊ธฐ์ ์ ๊น, ํน์๋ ํ๋ก์๊ฐ ๋ฌด์์ธ์ง ๋ชจ๋ฅด๋ ์ฌ๋์ ์ํด ์งง๊ฒ ์ค๋ช ํ๋ ค๊ณ ํ๋ค. ํ๋ก์๋ ํด๋ผ์ด์ธํธ์ ์๋ฒ ์ฌ์ด์์ ๋ฐ์ดํฐ๋ฅผ ์ค๊ณํ๋ ์ญํ ์ ํ๋ค. ์ฝ๊ฒ ๋งํด ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์์ฒญ์ ๋ฐ์ ์๋ฒ๋ก ์ ๋ฌํ๊ณ ์๋ฒ๋ก๋ถํฐ ๋ฐ์ ์๋ต์ ํด๋ผ์ด์ธํธ์๊ฒ ๋ฐํํ๋ ์ผ์ด๋ค. ํ๋ก์๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ์ฉ์์ ์์ฒญ์ ํํฐ๋งํ๊ฑฐ๋ ์์ ํด ๋ณด์์ ๊ฐํํ๊ณ , ์ฌ๋ฌ ๋์ ์๋ฒ์ ์์ฒญ์ ๋ถ์ฐ์ํค๋ ๋ก๋๋ฐธ๋ฐ์ฑ์ผ๋ก ๋คํธ์ํฌ ์ฑ๋ฅ์ ๋์ผ ์๋ ์๋ค.
์ด๋ ํด๋ผ์ด์ธํธ ์ธก์์ ๋์ํ๋ ํ๋ก์๋ฅผ ํฌ์๋ ํ๋ก์๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ, ์๋ฒ ์ธก์์ ๋์ํ๋ ํ๋ก์๋ฅผ ๋ฆฌ๋ฒ์ค ํ๋ก์๋ผ๊ณ ๋ถ๋ฅธ๋ค.
- ํฌ์๋ ํ๋ก์(Forward Proxy): ํด๋ผ์ด์ธํธ ์ธก์์ ๋์ํ๋ฉฐ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ธ๋ถ ์๋ฒ๋ก ์ค๊ณํ๋ค. ์ฃผ๋ก ์ต๋ช ์ฑ ๋ณด์ฅ, ๋ณด์, ์บ์ฑ ๋ฑ์ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋๋ค. ์๋ฅผ ๋ค์ด, ํ์ฌ๋ ํ๊ต์์ ๋ด๋ถ ๋คํธ์ํฌ๋ก ์ธํฐ๋ท์ ์ ์ํ ๋, ์ฌ์ฉ์์ IP ์ฃผ์๋ฅผ ์จ๊ธธ ๋ ์ธ ์ ์๋ค. Vite Proxy๋ ์ฌ๊ธฐ ํด๋นํ๋ค.
- ๋ฆฌ๋ฒ์ค ํ๋ก์(Reverse Proxy): ์๋ฒ ์ธก์์ ๋์ํ๋ฉฐ ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์์ฒญ์ ๋ฐ์ ๋ฐฑ์๋ ์๋ฒ๋ก ์ ์กํ๋ค. ์ฃผ๋ก ๋ก๋ ๋ฐธ๋ฐ์ฑ, ๋ณด์, ์บ์ฑ, SSL ์ํธํ ๋ฑ์ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์น ์๋ฒ ์์ ๋ฐฐ์น๋ ๋ฆฌ๋ฒ์ค ํ๋ก์๊ฐ ํด๋ผ์ด์ธํธ ์์ฒญ์ ๋ฐ์ ํธ๋ํฝ์ ์ฌ๋ฌ ์๋ฒ์ ๋ถ์ฐํ๊ฑฐ๋ ๋ณด์ ๊ธฐ๋ฅ์ ์ ๊ณตํ ์ ์๋ค.
HTTP์์ HTTPS๋ก API๋ฅผ ์์ฒญํ๊ธฐ ์ํ ์ฌ์
1. Vite Proxy ๊ตฌ์ฑ
์ด์ ํ์ํ ๊ฐ๋ ์ ๋ชจ๋ ์๊ฐํ์ผ๋, ๋ณธ๊ฒฉ์ ์ผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๊ณผ์ ์ ์๊ฐํ ๊น ํ๋ค. ์ฐ์ ์ฐ๋ฆฌ๋ Vite Proxy ์๋ฒ๋ฅผ ๊ตฌ์ฑํ๋ค.
import { defineConfig, loadEnv } from 'vite';
import vue from '@vitejs/plugin-vue';
import path from 'path';
// https://vitejs.dev/config/
export default ({ mode }) => {
process.env = { ...process.env, ...loadEnv(mode, process.cwd()) };
return defineConfig({
plugins: [vue()],
server: {
proxy: {
'/api': {
target: process.env.VITE_API_ORIGIN,
changeOrigin: true,
},
},
},
resolve: {
alias: [
{
find: '@',
replacement: path.resolve(__dirname, 'src'),
},
],
},
});
};
๊ณต์ ๋ฌธ์์ ์ฝ๋์ ๋ฌ๋ฆฌ ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด defineConfig ํจ์๋ฅผ ํ ๋ฒ ๋ ํจ์๋ก ๊ฐ์๋ค. ์ด ํจ์๋ defineConfig ํจ์ ์คํ๊ฐ์ ๋ฆฌํดํ๋ฏ๋ก ๊ฒฐ๊ณผ์ ์ผ๋ก๋ ๋๊ฐ๋ค. ๋ค๋ง defineConfig ํจ์์ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ณด๋ฉด server ๊ฐ์ฒด ์์ proxy ๊ฐ์ฒด๊ฐ ์๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
์ด์ ํด๋ผ์ด์ธํธ ๊ฐ๋ฐ์ฉ ์๋ฒ๋ /api
๋ก ์์ํ๋ ๊ฒฝ๋ก๋ก ๋ณด๋ด๋ ์์ฒญ์ target์ ์ค์ ๋ ํธ์คํธ ํค๋(๋๋ฉ์ธ)๋ก ์ ์กํ๋ค. ๋ง์ฝ changeOrigin์ false๋ก ์ค์ ํ๋ฉด ๋๋ฉ์ธ์ด ๋ฐ๋์ง ์์ ์ฌ์ค์ ํ๋ก์ ๊ธฐ๋ฅ์ด ๋ฌดํจ๊ฐ ๋๋ค. ๋ง์ฝ ์์ฒญ ๊ฒฝ๋ก๋ฅผ ์ธ๋ถํํด์ ๊ด๋ฆฌํด์ผ ํ๋ค๋ฉด ์ต์์ ๊ฒฝ๋ก์ ๋ํ changeOrigin์ ntrue๋ก ํ๊ณ , ์ธ๋ถ ๊ฒฝ๋ก์ ๋ฐ๋ผ false๋ก ์ค์ ํ ์๋ ์๋ค. ํ์์ ๋ฐ๋ผ ์ ์ฉํ๊ฒ ์ฌ์ฉํ๋ฉด ๋๋ค.
์ค์ ํ์ผ ๊ตฌ์ฑ์ด ๋๋๊ณ ๋๋ฉด API๋ฅผ ํธ์ถํ ์ฐจ๋ก๋ค. API๋ฅผ ํธ์ถํ ๋๋ base url์์ด ์์ฒญํด์ผ ํ๋ค. ๊ทธ๋์ผ Vite Proxy๊ฐ ์์ฒญ์ ์ค๊ณํ๊ณ ์๋ต์ ๊ฐ์ ธ๋ค์ค ๊ฒ์ด๋ค.
2. OIDC redirect URL ๋ถ๊ธฐ
์์ ์ ํ๋ค ๋ณด๋ ํ ๊ฐ์ง ์์์น ๋ชปํ ๋ณต๋ณ์ ๋ง๋ฌ๋ค. ๋ฐ๋ก ๋ฉ์ธ ์๋ฒ ์ธ์ ์ธ์ฆ ์๋ฒ๊ฐ ๋ฐ๋ก ์๋ค๋ ์ ์ด์๋ค. ์ฐ๋ฆฌ ํ๋ก์ ํธ๋ ์ธ๋ถ OIDC(OpenID Connect)๋ฅผ ํตํ ์ธ์ฆ์ ํ์ฉํ๊ณ ์์๋ค. OIDC๋ ์ 3์ ์๋น์ค์ ์ฌ์ฉ์ ์ธ์ฆ ๊ด๋ฆฌ๋ฅผ ์์ํ๋ ๋ฐฉ์์ด๋ค.
๋ก๊ทธ์ธ ์์ฒญ์ด ์ค๋ฉด ๋ฐฑ์๋ ์๋ฒ๋ OIDC ์๋น์ค์ ์์ฒญํ์ฌ redirect url์ ๋ฐ์ ํ, ์ฌ์ฉ์์๊ฒ ์ด์ชฝ์ผ๋ก ๋ก๊ทธ์ธํ๋ผ ๋ฉฐ ์ฟ ํค์ ํจ๊ป ํด๋น url์ ์ ๋ฌํ๋ค. ๊ทธ๋ฌ๋ฉด ์ฌ์ฉ์๋ ์๋ฒ๋ก๋ถํฐ ๋ฐ์ ์ฟ ํค๋ฅผ ๋ค๊ณ ์ด๋ํด OIDC ์๋น์ค์ ๋ก๊ทธ์ธํ๋ค. OIDC ์ธ์ฆ์ด ์ฑ๊ณตํ๋ฉด ์๋ก์ด ์ฟ ํค๊ฐ ๋ฐ๊ธ๋๊ณ , ์ด์ ํจ๊ป ์ฌ์ฉ์๋ ๋ค์ ๊ธฐ์กด ๋ก๊ทธ์ธ ์๋ํฌ์ธํธ๋ก ์ด๋ํ์ฌ ๋ฐฑ์๋ ์๋ฒ์ ๋ก๊ทธ์ธ์ ์์ฒญํ๋ค. ๋ฐฑ์๋ ์๋ฒ๋ ์ฌ์ฉ์๊ฐ ๋ค๊ณ ์จ ์ฟ ํค๊ฐ OIDC ์๋ฒ์์ ๋ฐ๊ธํด ์ค ๊ฒ ๋ง๋์ง ํ์ธ ์ ์ฐจ๋ฅผ ๊ฑฐ์น๋ค. ๋ฌธ์ ๊ฐ ์๋ค๋ฉด ๋ก๊ทธ์ธ์ ์น์ธํ๊ณ ์๋ก์ด ์ฟ ํค๋ฅผ ๋ฐ๊ธํ๋ค. ์ด ๋ง์ง๋ง ์ฟ ํค๊ฐ ์ดํ ์ฌ์ฉ์์ API ์์ฒญ ํค๋์ ๋ด๊ธฐ๋ ์ฟ ํค๊ฐ ๋๋ค.
๊ทธ๋ฆผ์์๋ ํ๋ก ํธ์ ๋ก๊ทธ์ธ์ ๋ ๋ฒ ์์ฒญํ๋ ๊ฒ์ฒ๋ผ ํํํ์ง๋ง, OIDC ๋ก๊ทธ์ธ์ด ์ฑ๊ณตํ๋ฉด ์์์ ๋ก๊ทธ์ธ ์๋ํฌ์ธํธ๋ก ์ด๋ํ๊ธฐ ๋๋ฌธ์ ์ค์ ์ฌ์ฉ์ ์ ์ฅ์์๋ ๋ก๊ทธ์ธ API๋ฅผ ํ ๋ฒ๋ง ์์ฒญํ ์ ์ด ๋๋ค.
์ฐ๋ฆฌ ์๋น์ค๋ ์ฌ์ฉ์๊ฐ ์๋ก ์ง์ ํ ๋๋ง๋ค ์ธ์ API๋ฅผ ์์ฒญํ๋ค. ์ธ์ ์ ๋ณด๊ฐ ์์ ๋๋ ๋ก๊ทธ์ธ ํ์ด์ง๋ก ๋ณด๋ธ๋ค. ๋ง์ฝ ๋ก๊ทธ์ธ์ ์ฑ๊ณตํ๋ค๋ฉด, ์๋ฒ์๊ฒ ๋ฐ์ ์ฟ ํค๊ฐ ์์ฒญ ํค๋์ ๋ด๊ฒจ ์๋ค. ๋ฐ๋ผ์ ์ธ์ API ์์ฒญ์ ์ฑ๊ณตํ๊ณ ์๋น์ค๊ฐ ์ ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ฌ ์ ์๊ฒ ๋๋ค.
์ด๋ ๊ฒ ์ ๋ฆฌํ๊ณ ๋ณด๋ฉด ํน๋ณํ ๋ณต์กํ์ง๋ ์์ ํ๋ฆ์ด์ง๋ง, Vite Proxy ์ค์ ๊ณผ OIDC์ ๋ํด ์ ๋ชฐ๋๋ ํ์ ๊ฐ๋ฐ ๋์ค CORS ์๋ฌ์ ์๋นํ ๋ง์ด ๋ถ๋ชํ๋ค. ์์ ๋งํ๋ฏ ์ฟ ํค๋ ๋ฏผ๊ฐํ ๋ณด์ ์ ๋ณด์ด๊ธฐ ๋๋ฌธ์ HTTP ์ฌ์ดํธ์์ HTTPS ์ฌ์ดํธ๋ก ๋คํธ์ํฌ๋ฅผ ์ ์กํ ๋ ๋ธ๋ผ์ฐ์ ์ ์ํด ์ฐจ๋จ๋๋ค. ๊ทธ ๊ฒฐ๊ณผ, ์ด๋ฐ ์๋ฌ ๋ฉ์์ง๊ฐ ๋ํ๋ฌ๋ค.
๋ํ ๋๋ ๋ฐฑ์๋ ์๋ฒ์์ ๋ฐ๊ธํ ์ฟ ํค๊ฐ ๊ณ์ ์ฐ์ธ๋ค๊ณ ์ฐฉ๊ฐํ๊ณ ์์๋๋ฐ, ์ธ์ฆ ์๋ฒ์ ๋ฐฑ์๋ ์๋ฒ๊ฐ ๊ฐ๊ฐ ์ฟ ํค๋ฅผ ๋ฐ๊ธํด ์ฃผ๊ณ ์๋ค๋ ์ฌ์ค์ ๋๋ฒ๊น ๊ณผ์ ์์ ๋ค๋ฆ๊ฒ ์๊ฒ ๋์๋ค. ์๊ฐํด ๋ณด๋ฉด ๊ฐ๊ฐ์ ์๋ฒ๊ฐ ์ง์ ์ฟ ํค๋ฅผ ๋ฐ๊ธํด ์ฃผ๋ ๊ฒ ๋๋ฌด๋ ๋น์ฐํ๋ค. ์ฟ ํค ํ๋๋ฅผ ์ฌ๋ฌ ๋ฒ ์ฌ์ฌ์ฉํ๋ฉด ๋ณด์ ๋ฉด์์ ์ข์ง ์๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก ์ฒ์ ๋ก๊ทธ์ธํ ๋๋ ๋ฐฑ์๋ ์๋ฒ์์ OIDC ์๋ฒ์ redirect url์ localhost
๋๋ฉ์ธ์ผ๋ก ๋ฌ๋ผ๊ณ ์์ฒญํด ํด๋ผ์ด์ธํธ์ ์ ๋ฌํ๋ค. ์ด๋ก์จ ํด๋ผ์ด์ธํธ๊ฐ ๋ฌธ์ ์์ด redirect url์ ์ฟ ํค๋ฅผ ๋ค๊ณ ์ด๋ํ ์ ์๊ฒ ๋์๋ค. ๋ก๊ทธ์ธ์ ์ฑ๊ณตํ ๋ค์ ์ธ์
API๋ฅผ ํธ์ถํ ๋ ๋ฐ์ํ ๋ฐฑ์๋ ์๋ฒ์์ CORS ๋ฌธ์ ๋ ์์ ๋งํ Vite Proxy ์ค์ ์ ํตํด ์ฐํํ ์ ์์๋ค.
๋ ์ฝ๊ณ , ๋ ์์ ํ๊ฒ ๊ฐ๋ฐํ๊ธฐ
๋ต๋ตํดํ๊ธฐ๋ณด๋ค ๋ธ๋ผ์ฐ์ ์ ๊ณ ๋ง์์ ๊ฐ์
์ด๋ฒ ์์ ์ผ๋ก Vite Proxy ์ค์ ์ ํ์ฉํด ๊ตณ์ด API ์๋ฒ๋ฅผ ๋ก์ปฌ์์ ์คํ์ํค์ง ์๊ณ ๋ ์์ ํ ๋ฐฉ์์ผ๋ก ๋ฐฐํฌ ์๋ฒ์ ํต์ ํ๋ ๋ฐฉ๋ฒ์ ์ฐพ์๋ค. ์ฌ์ค ๊ฐ๋ฐ ์๋ฒ ์์ฒด๋ฅผ HTTPS๋ก ์คํ์ํค๋ ๋ฐฉ๋ฒ๋ ์๋๋ฐ, ๋ณ๋ก ์์ ํ์ง ์์ ๊ถ์ฅ๋์ง ์๋ ๋ฏํ๋ค. HTTPS๋ ๋ณด์ ๋ ์ด์ด๊ฐ ์ถ๊ฐ๋ ํ๋กํ ์ฝ์ธ ๋งํผ ๊ณต์ธ๋ ๊ธฐ๊ด์์ ๋ฐ๊ธํ ์ธ์ฆ์๋ฅผ ์ฌ์ฉํด์ผ ์ ์์ ์ผ๋ก ๋์ํ๋ค. ๊ฐ๋ฐ ์๋ฒ๋ฅผ ๊ฐ๋จํ๊ฒ HTTPS๋ก ๋น๋ํ๊ณ ์ถ๋ค๋ฉด ์์ ์ธ์ฆ์๋ฅผ ๋ฐ๊ธ๋ฐ๊ฑฐ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค. ์ด๋ฐ ๋ฐฉ์์ผ๋ก ๊ฐ๋ฐ ์๋ฒ๋ฅผ ๋์ฐ๋ฉด ๋ธ๋ผ์ฐ์ ์์ ์์ ํ์ง ์๋ค๊ณ , ์ ๋ง๋ก ์ด ์ฌ์ดํธ์ ์ ๊ทผํ ๊ฑฐ๋๊ณ , ๊ณ์ ๋ฌผ์ด๋ณธ๋ค.
์น ๊ฐ๋ฐ์ ํ๋ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๋ค์ CORS ์๋ฌ๋ฅผ ๋ง์ฃผํ๋ฉด ๋ถํ์ ์์ ๋ด๊ณ ๋ ํ๋ค. ๋๋ ๊ทธ๋ฌ๋ค. ํ์ง๋ง ์ด๋ฒ ํ๊ฒฝ ์ธํ ๊ณผ์ ์์ ํ๋์ฉ ๊ณต๋ถํ๋ค ๋ณด๋ ์๊ฐ์ด ๋ฐ๋์๋ค. ์น์ ๊พธ์คํ ์ฌ์ฉ์๋ฅผ ๋ณดํธํ๋ ๋ฐฉํฅ์ผ๋ก ๋ฐ์ ํด ์๋ค. ์ด์ ์ ์๋ HTTPS ํ๋กํ ์ฝ์ ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ๋ณดํธํ๊ธฐ ์ํด ๋ณด์ ๋ ์ด์ด๋ฅผ ๋ํ๋ฉฐ ์๊ฒจ๋ฌ๋ค. ๋ํ ๋ธ๋ผ์ฐ์ ์์ ์ฌ๋ฌ ๋ณด์ ์ ์ฑ ์ ๋ง๋ค์ด ์ฃผ์๊ธฐ์ ์ฐ๋ฆฌ๊ฐ ์ง๊ธ์ฒ๋ผ (๋น๊ต์ ) ์์ ํ๊ฒ ์ธํฐ๋ท์ ์ฌ์ฉํ ์ ์๋ค. ๊ฐ๋ฐ ํ๊ฒฝ์์์ผ ๋ถํ์ํ๊ฒ ๋๊ปด์ง๊ณ ๋ต๋ตํ๋๋ผ๋, ๊ทธ ์ ์ฑ ์ ์ ์ดํดํ๊ณ ๋ฐ๋ฅด๋ฉด์ ๊ฐ๋ฐํ ํ์๊ฐ ์ฌ๊ธฐ ์๋ค.
์ด๋ป๊ฒ ๋ณด๋ฉด ๊ณ ๋ง์ด ์ผ์ด๋ค. ๋ง์ฝ ๋ธ๋ผ์ฐ์ ์์ ๋ณด์์ ์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํด ์ฃผ์ง ์์๋ค๋ฉด, ์๋ก์ด ํ๋ก์ ํธ๋ฅผ ๋ง๋ค ๋๋ง๋ค ๊ฐ๋ฐ์๊ฐ ์ผ์ผ์ด ๋ณด์ ์กฐ์น๋ฅผ ์ทจํด์ผ ํ์ ๊ฒ์ด๋ค. ์์๋ง ํด๋ ๋๋ ต์ง ์์๊ฐ? ๊ทธ๋ฌ๋ ์๊ฐ์ ์กฐ๊ธ ๋ฐ๊พธ์ด๋ณด์. ์กฐ๊ธ ๋์๊ฐ๋ ํธ์ด ์คํ๋ ค ๋ ์ฝ๊ณ , ๋ ์์ ํ๋ค.