0) ํ•ต์‹ฌ ์š”์•ฝ (๊ฒฐ๋ก  ๋จผ์ €)


A. ์ถ”์ฒœ ํ”Œ๋กœ์šฐ: ํ”„๋ก์‹œ(Next rewrites) + LAN ์ ‘์†

๋ธŒ๋ผ์šฐ์ €๋Š” ํ•ญ์ƒ ๊ฐ™์€ ์˜ค๋ฆฌ์ง„(/api, /oauth2)๋งŒ ๋ถ€๋ฅด๊ณ , Next๊ฐ€ ๋žฉํƒ‘ ๋‚ด๋ถ€์—์„œ ๋ฐฑ์—”๋“œ๋กœ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

1) Next๋ฅผ LAN ๋ฐ”์ธ๋”ฉ์œผ๋กœ ์‹คํ–‰

# ์ผ์‹œ ์‹คํ–‰
npx next dev --hostname 0.0.0.0 -p 3000

# (๊ถŒ์žฅ) package.json
"scripts": {
  "dev:lan": "next dev --hostname 0.0.0.0 -p 3000"
}

2) next.config.mjs์— ํ”„๋ก์‹œ(๋ฆฌ๋ผ์ดํŠธ) ์ถ”๊ฐ€

// next.config.mjs
const API_ORIGIN = process.env.API_ORIGIN || '<http://127.0.0.1:8080>';

const nextConfig = {
  // ...๊ธฐ์กด ์˜ต์…˜ ์œ ์ง€
  async rewrites() {
    return [
      { source: '/api/:path*',   destination: `${API_ORIGIN}/api/:path*` },
    ];
  },
};

export default nextConfig;

๊ฐœ๋ฐœ ์„œ๋ฒ„ ์žฌ์‹œ์ž‘ ํ•„์š”.

3) ํด๋ผ์ด์–ธํŠธ ํ˜ธ์ถœ๋ถ€๋ฅผ ์ƒ๋Œ€ ๊ฒฝ๋กœ๋กœ ํ†ต์ผ

// axios ์ธ์Šคํ„ด์Šค
import axios from 'axios';
export const axiosApi = axios.create({
  baseURL: '/api',
  withCredentials: true, // ์ฟ ํ‚ค/์„ธ์…˜์ด๋ฉด
});
export const axiosLogin = axios.create({
  baseURL: '/oauth2',
  withCredentials: true,
});

์ ˆ๋Œ€ URL ๊ธˆ์ง€: http://localhost:8080/...๋กœ ์ง์ ‘ ๋•Œ๋ฆฌ๋ฉด ๋ชจ๋ฐ”์ผ์—์„œ ๋‹ค์‹œ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

4) ์•„์ดํฐ/์•ˆ๋“œ๋กœ์ด๋“œ์—์„œ ์ ‘์†

  1. ๋งฅ IP ํ™•์ธ: ipconfig getifaddr en0 โ†’ ์˜ˆ) 192.168.134.166
  2. ๋ชจ๋ฐ”์ผ ๋ธŒ๋ผ์šฐ์ €์—์„œ http://192.168.134.166:3000 ์ ‘์†
  3. Network ํƒญ(์›๊ฒฉ ๋””๋ฒ„๊น…)์—์„œ **Request URL์ด /api/...*๋กœ๋งŒ ๋ณด์ด๋ฉด ์„ฑ๊ณต