Study_Develop/React

react-router๋ฅผ ํ†ตํ•œ ๋ฆฌ์•กํŠธ ์‹ฑ๊ธ€ํŽ˜์ด์ง€ ๋งŒ๋“ค๊ธฐ / ํด๋” ๊ตฌ์กฐ

hiijihyun 2023. 8. 12. 14:57
๋ฐ˜์‘ํ˜•

ํด๋” ๊ตฌ์กฐ

 

์ด๊ฒƒ์ด ํ•„์ˆ˜๋Š” ์•„๋‹˜.

๋ณธ์ธ ์ทจํ–ฅ๊ป ๋‹ค์–‘ํ•œ ํด๋”๊ตฌ์กฐ ์‹œ๋„๋ฅผ ํ•ด๋ณด๋Š” ๊ฒƒ์ด ์ข‹์Œ.

 

- ํŽ˜์ด์ง€๋Š” ํŽ˜์ด์ง€์ด๋‹ค.

 

- ํŽ˜์ด์ง€๊ฐ„ ๊ฒ€์ƒ‰๋˜๋Š” ๊ตฌ์„ฑ์€ layouts

 

- ์ปค์Šคํ…€ ํ›…์€ hooks, ๊ธฐํƒ€๋Š”utils

 

- ๊ฐ ์ปดํฌ๋„ŒํŠธ๋Š” ์ปดํฌ๋„ŒํŠธ ํด๋” ์•„๋ž˜ index.tsx(JSX)์™€ styles.tsx(์Šคํƒ€์ผ๋ง)

 

 

App.tsx>

import React from 'react';
import {Switch, Route, Redirect} from 'react-router-dom';
import LogIn from '@pages/Login';
import SignUp from '@pages/SignUp';

const App = () => {
  return <Switch>
    <Redirect exact path="/" to ="/login"/>
    <Route path="/login" component={LogIn}/>
    <Route path="/signup" component={SignUp}/>
  </Switch>
};

export default App;

 

Switch ๋ž€?

์—ฌ๋Ÿฌ๊ฐ€์ง€ ์„ ํƒ์ง€ ์ค‘์— ํ•˜๋‚˜๋งŒ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ.

3๊ฐ€์ง€ route์ค‘์— ํ•˜๋‚˜๋งŒ ์„ ํƒ ๋˜์–ด์•ผ ํ•จ.

 

Redirect๋ž€?

๋‹ค๋ฅธ ํŽ˜์ด์ง€๋กœ ๋Œ๋ ค ์ฃผ๋Š” ๊ฒƒ.

์ฃผ์†Œ๊ฐ€ '/' ๋กœ ๋๋‚˜๋ฉด login์œผ๋กœ ํŽ˜์ด์ง€๋ฅผ ๋„˜๊ฒจ์คŒ.

 

SPA์—์„œ ํŽ˜์ด์ง€ ๋„˜๊ธฐ๋Š” ๋ฐฉ๋ฒ•

 

โ“SPA  ๋ž€?

- Single Page Application (์‹ฑ๊ธ€ ํŽ˜์ด์ง€ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜)์˜ ์•ฝ์ž์ด๋‹ค. ๋ง ๊ทธ๋Œ€๋กœ, ํŽ˜์ด์ง€๊ฐ€ 1๊ฐœ์ธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋ž€ ๋œป์ด๋‹ค. ์ „ํ†ต์ ์ธ ์ท ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ตฌ์กฐ๋Š”, ์—ฌ๋Ÿฌ ํŽ˜์ด์ง€๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค. ์œ ์ €๊ฐ€ ์š”์ฒญํ•  ๋Œ€๋งˆ๋‹ค ํŽ˜์ด์ง€๊ฐ€ ์ƒˆ๋กœ๊ณ ์นจ ๋˜๋ฉฐ, ํŽ˜์ด์ง€๋ฅผ ๋กœ๋”ฉํ•  ๋•Œ๋งˆ๋‹ค ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฆฌ์†Œ์Šค๋ฅผ ์ „๋‹ฌ๋ฐ›์•„ ํ•ด์„ ํ›„ ๋ Œ๋”๋ง์„ ๋งํ•œ๋‹ค. htmlํŒŒ์ผ, ํ˜น์€ ํ…œํ”Œ๋ฆฟ ์—”์ง„ ๋“ฑ์„ ์‚ฌ์šฉํ•ด์„œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ทฐ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ณด์—ฌ์งˆ์ง€๋„ ์„œ๋ฒ„์—์„œ ๋‹ด๋‹นํ•œ๋‹ค.

 

 

์‹ฑ๊ธ€ํŽ˜์ด์ง€๋ผ๊ณ  ํ•ด์„œ, ํ•œ ์ข…๋ฅ˜์˜ ํ™”๋ฉด๋งŒ์ด ์žˆ๋Š” ๊ฒƒ์ด๋ƒ?

์•„๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ธ”๋กœ๊ทธ๋ฅผ ๋งŒ๋“ ๋‹ค๋ฉด, ํ™ˆ, ํฌ์ŠคํŠธ ๋ชฉ๋ก, ํฌ์ŠคํŠธ, ๊ธ€์“ฐ๊ธฐ ๋“ฑ์˜ ํ™”๋ฉด์ด ์žˆ๋‹ค.

์ด๋Ÿฐ ์‹์œผ๋กœ ๋‹ค๋ฅธ ์ฃผ์†Œ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๋ทฐ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ์„ '๋ผ์šฐํŒ…'์ด๋ผ๊ณ  ํ•œ๋‹ค. 

์ด๊ฒƒ์ด ๋ฆฌ์•กํŠธ ์ž์ฒด์—๋Š” ์ด ๊ธฐ๋Šฅ์ด ๋‚ด์žฅ๋˜์–ด์žˆ์ง€ ์•Š๋Š”๋‹ค.

๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๊ฐ€ ์ง์ ‘ ๋ธŒ๋ผ์šฐ์ €์˜ api๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์ƒํƒœ๋ฅผ ์„ค์ •ํ•˜์—ฌ ๋‹ค๋ฅธ ๋ทฐ๋ฅผ ๋ณด์—ฌ์ฃผ์–ด์•ผ ํ•œ๋‹ค.

 

react-router๋Š”, ์จ๋“œํŒŒํ‹ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ์„œ, ๋น„๋ก ๊ณต์‹์€ ์•„๋‹ˆ์ง€๋งŒ, ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ด๋‹ค.

์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ์—์„œ ์ด๋ค„์ง€๋Š” ๋ผ์šฐํŒ…์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•ด์ค€๋‹ค. 

๊ฒŒ๋‹ค๊ฐ€ ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง๋„ ๋„์™€์ฃผ๋Š” ๋„๊ตฌ๋“ค์ด ํ•จ๊ป˜ ๋”ธ๋ ค์˜จ๋‹ค.

์ถ”๊ฐ€์ ์œผ๋กœ ์ด ๋ผ์šฐํ„ฐ๋Š” react-native์—์„œ๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

react-router๋Š” ์„ค์น˜๋˜์–ด ์žˆ๋‹ค๋Š” ๊ฐ€์ •ํ•˜์—,

์•„๋ž˜๋Š” ๊ทธ๊ฒƒ์„ ์„ค์ •ํ•˜๋„๋ก ๋„์™€์ฃผ๋Š” ๊ฒƒ

 

webpack.config.ts>

  devServer: {
    historyApiFallback: true, // react router

 

์—ฌ๊ธฐ์„œ historyApiFallback ์„ true๋กœ ์„ค์ •ํ•ด๋‘๋ฉด,

์ฃผ์†Œ ๋’ค์— ๊ฐ€์งœ ์ฃผ์†Œ(Login, Signup) ์ž…๋ ฅํ•ด์ค€๋‹ค.

์ด ์ฃผ์†Œ๋Š” ์„œ๋ฒ„๋กœ ๊ฐ„๋‹ค. 

 

Ligin/index.tsx>

import React from 'react';

const LogIn =()=>{
return(
    <div>๋กœ๊ทธ์ธ</div>
    );
}

export default LogIn;

 

SPA ์˜ ๋‹จ์ 

 

SPA์˜ ๋‹จ์ ์€, ์•ฑ์˜ ๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ ์‚ฌ์ด์ฆˆ๊ฐ€ ๋„ˆ๋ฌด ์ปค์ง„๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

์œ ์ €๊ฐ€ ์‹ค์ œ๋กœ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์„์ˆ˜๋„ ์žˆ๋Š” ํŽ˜์ด์ง€์— ๊ด€๋ จ๋œ ๋ Œ๋”๋ง ๊ด€๋ จ ์Šคํฌ๋ฆฝํŠธ๋„ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

ํ•˜์ง€๋งŒ, Code Splitting์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, ๋ผ์šฐํŠธ ๋ณ„๋กœ ํŒŒ์ผ๋“ค์„ ๋‚˜๋ˆ ์„œ ํŠธ๋ž˜ํ”ฝ๊ณผ ๋กœ๋”ฉ์†๋„๋ฅผ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋ฆฌ์•กํŠธ ๋ผ์šฐํ„ฐ ๊ฐ™์ด ๋ธŒ๋ผ์šฐ์ € ์ธก์—์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ผ์šฐํŠธ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์˜ ์ž ์žฌ์ ์ธ ๋‹จ์ ์€, 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š๋Š” ์ผ๋ฐ˜ ํฌ๋กค๋Ÿฌ์—์„  ํŽ˜์ด์ง€์˜ ์ •๋ณด๋ฅผ์ œ๋Œ€๋กœ ๋ฐ›์•„๊ฐ€์ง€ ๋ชปํ•œ๋‹ค๋Š” ์ ์ด๋‹ค.

 

๋•Œ๋ฌธ์—, ๊ตฌ๊ธ€, ๋„ค์ด๋ฒ„, ๋‹ค์Œ ๋“ฑ ๊ฒ€์ƒ‰์—”์ง„์—์„œ ํŽ˜์ด์ง€๊ฐ€ ๊ฒ€์ƒ‰๊ฒฐ๊ณผ์—์„œ ์ž˜ ์•ˆํƒ€๋‚ ์ˆ˜๋„ ์žˆ๋‹ค. ์ถ”๊ฐ€์ ์œผ๋กœ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰๋ ๋•Œ๊นŒ์ง€ ํŽ˜์ด์ง€๊ฐ€ ๋น„์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์ด ์•„์ง ์บ์‹ฑ๋˜์ง€ ์•Š์€ ์‚ฌ์šฉ์ž๋Š” ์•„์ฃผ ์งง์€ ์‹œ๊ฐ„๋™์•ˆ ํฐ ํŽ˜์ด์ง€๊ฐ€ ๋‚˜ํƒ€๋‚  ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ๋‹จ์ ๋„ ์žˆ๋‹ค. ์ด๋Š”, ์„œ๋ฒ„์‚ฌ์ด๋“œ ๋ Œ๋”๋ง์„ ํ†ตํ•˜์—ฌ ํ•ด๊ฒฐ ํ•  ์ˆ˜ ์žˆ๋‹ค.