โ€ก๐Ÿ‘ฉโ€๐Ÿ’ป โ€ก/ยบSpring

[ํ•ด๊ฒฐ] ๋ฐฐํฌ ํ›„, ๋„๋ฉ”์ธ์„ url์— ์ง์ ‘ ์ž…๋ ฅํ•˜๋ฉด ๋ผ์šฐํŒ…์ด ์•ˆ๋๋˜ ๋ฌธ์ œ

Trudy | ์†ก์—ฐ 2024. 7. 17. 16:59
๋ฌธ์ œ

 

router.js

const router = createRouter({
    history: createWebHistory('/'),
    routes : [
        { path: '/', component: MainPage },
        { path: '/verify', component: VerifyPage },
        { path: '/member/login', component: LoginPage },
        { path: '/seller/login', component: SellerLoginPage },
        { path: '/member/signup', component: SignUpPage },
        { path: '/seller/signup', component: SellerSignUpPage },
        { path: '/cart', component: CartPage },
        { path: '/product/read/:productIdx', component: ProductDetailPage },
        { path: '/product/register', component: ProductRegister },
        { path: '/order/complete', component: OrderCompletePage },
    ]
})

 

๋ผ์šฐํ„ฐ ์„ค์ •์€ ์œ„์™€ ๊ฐ™์ด ๋˜์–ด ์žˆ์—ˆ๋‹ค. 

 

๋„๋ฉ”์ธ์„ ํŒŒ์„œ www.localfoodpam.kro.kr๋กœ ๋กœ ์ ‘์†ํ•ด์„œ ๋ฉ”์ธํŽ˜์ด์ง€์—์„œ ์นดํŠธ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๊ฑฐ๋‚˜ ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ํ•ด๋‹น ํŽ˜์ด์ง€๋กœ ๋ผ์šฐํŒ…์ด ์ •์ƒ์ ์œผ๋กœ ์ด๋ฃจ์–ด์กŒ๋‹ค.

 

ํ•˜์ง€๋งŒ url์— ์ง์ ‘  www.localfoodpam.kro.kr/cart ๋ฅผ ์ž…๋ ฅํ•ด์„œ ์ ‘์†ํ•˜๋ ค๊ณ  ํ•˜๋ฉด 404 ์—๋Ÿฌ๊ฐ€ ๋–ด๋‹ค.

 

 

ํ•ด๊ฒฐ

 

๋จผ์ €, nginx์˜ ์„ค์ • ๋ฌธ์ œ์˜€๋‹ค. 

 

SPA (Single Page Application)์—์„œ๋Š” URL์„ ํ†ตํ•ด ์ง์ ‘ ์ ‘๊ทผํ•˜๋Š” ๊ฒฝ์šฐ Nginx๊ฐ€ ํ•ด๋‹น ๊ฒฝ๋กœ๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•ด์„œ 404 ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. SPA์—์„œ๋Š” ๋ชจ๋“  ๊ฒฝ๋กœ๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•˜๋‚˜์˜ HTML ํŒŒ์ผ (index.html)๋กœ ๋ฆฌ๋””๋ ‰์…˜๋˜์–ด์•ผ ํ•œ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Nginx ์„ค์ • ํŒŒ์ผ์—์„œ ๋ชจ๋“  ์š”์ฒญ์„ index.html๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•˜๋„๋ก ์„ค์ •ํ•˜๋ฉด ๋œ๋‹ค. 

 

Nginx ์„ค์ • ํŒŒ์ผ ์ ‘์†

sudo vi /etc/nginx/sites-available/default

 

 

๊ธฐ์กด ์ฝ”๋“œ

 

 

์ˆ˜์ •๋œ ์ฝ”๋“œ

    location / {
        try_files $uri $uri/ /index.html;
    }

 


 

์š”์•ฝ

 

์ง์ ‘ URL์„ ์ž…๋ ฅํ–ˆ์„ ๋•Œ 404 ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ์ด์œ ๋Š” Vue Router์™€ ๊ฐ™์€ ํด๋ผ์ด์–ธํŠธ ์ธก ๋ผ์šฐํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‹ฑ๊ธ€ ํŽ˜์ด์ง€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(SPA)์—์„œ๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์„œ๋ฒ„์— ํŠน์ • ๊ฒฝ๋กœ๋กœ ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ ์„œ๋ฒ„๊ฐ€ ๊ทธ ๊ฒฝ๋กœ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •๋˜์–ด ์žˆ์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋ฌธ์ œ์˜ ์›์ธ

  1. ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„์˜ ๋ผ์šฐํŒ… ์ฐจ์ด: Vue Router๋Š” ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ ๋ผ์šฐํŒ…์„ ์ฒ˜๋ฆฌํ•œ. ์‚ฌ์šฉ์ž๊ฐ€ /order/complete์™€ ๊ฐ™์€ ๊ฒฝ๋กœ๋กœ ์ด๋™ํ•  ๋•Œ, Vue Router๋Š” ์ด ๊ฒฝ๋กœ๋ฅผ ์ฒ˜๋ฆฌํ•˜์—ฌ ์ ์ ˆํ•œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ Œ๋”๋งํ•œ๋‹ค.
  2. ์„œ๋ฒ„์˜ ๊ธฐ๋ณธ ๋™์ž‘: ์„œ๋ฒ„(Nginx)๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์š”์ฒญ๋œ ๊ฒฝ๋กœ์— ํ•ด๋‹นํ•˜๋Š” ํŒŒ์ผ์„ ์ฐพ๋Š”๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, /order/complete ๊ฒฝ๋กœ์— ๋Œ€ํ•ด ์„œ๋ฒ„๋Š” /var/www/html/order/complete ํŒŒ์ผ์„ ์ฐพ์œผ๋ ค ํ•˜์ง€๋งŒ, ํ•ด๋‹น ํŒŒ์ผ์ด ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด 404 ์˜ค๋ฅ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. 
  3. SPA์˜ ๋ผ์šฐํŒ… ์ฒ˜๋ฆฌ: SPA์—์„œ๋Š” ๋ชจ๋“  ๊ฒฝ๋กœ ์š”์ฒญ์„ ๋‹จ์ผ ์ง„์ž…์  ํŒŒ์ผ์ธ index.html๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ ์ธก ๋ผ์šฐํ„ฐ๊ฐ€ ๊ฒฝ๋กœ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•ด์•ผ ํ•œ๋‹ค.

 

Nginx ์„ค์ •์—์„œ try_files ์ง€์‹œ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์š”์ฒญ๋œ ๊ฒฝ๋กœ์— ํŒŒ์ผ์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ, index.html ํŒŒ์ผ๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•˜๋„๋ก ์„ค์ •ํ•จ์œผ๋กœ์จ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.  ์ด๋ฅผ ํ†ตํ•ด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํŠน์ • URL๋กœ ์ง์ ‘ ์ ‘๊ทผํ•  ๋•Œ๋„ ํด๋ผ์ด์–ธํŠธ ์ธก ๋ผ์šฐํ„ฐ๊ฐ€ ๊ฒฝ๋กœ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.