React에서 URL에 따라 컴포넌트를 렌더링하는 방법과 Axios를 이용한 REST API 호출,
그리고 Material-UI를 이용한 주소 검색 화면을 만들어봤다.
1. React Router
React Router는 URL에 따라 다른 컴포넌트를 보여줄 때 사용하는 노드 모듈이다.
예를 들어 아래처럼 동작한다.
/ → Home 화면
/editor → Editor 화면
/grid → Grid 화면
React Router 구조
사용자가 URL 이동
↓
BrowserRouter가 감싸고 있음
↓
Switch가 현재 URL 확인
↓
Route에 매핑된 컴포넌트 렌더링
메뉴 만들기
<ul>
<li><a href="/editor">editor</a></li>
<li><a href="/grid">grid</a></li>
<li><a href="/">home</a></li>
</ul>
화면에서는 이런 식으로 보인다.

BrowserRouter로 감싸기
React Router를 사용하려면 라우팅이 적용될 영역을 BrowserRouter로 감싸야 한다.
import { BrowserRouter, Route, Switch } from "react-router-dom";
function App() {
return (
<BrowserRouter>
<ul>
<li><a href="/editor">editor</a></li>
<li><a href="/grid">grid</a></li>
<li><a href="/">home</a></li>
</ul>
<Switch>
<Route exact path="/editor" component={FunctionalComponentProps} />
<Route exact path="/grid" component={GridComp} />
<Route exact path="/" />
</Switch>
</BrowserRouter>
);
}
참고: 기존 메모에 적은 <swiich>는 오타이고, 실제 코드는 <Switch>로 작성해야 한다.
Route 설정
<Route exact path="/editor" component={FunctionalComponentProps} />
<Route exact path="/grid" component={GridComp} />
<Route exact path="/" />
Route는 URL과 컴포넌트를 연결해준다.
/editor 주소 접속 → FunctionalComponentProps 실행
/grid 주소 접속 → GridComp 실행
/ 주소 접속 → 기본 화면 실행
exact 속성
exact는 URL이 정확히 일치할 때만 컴포넌트를 렌더링하게 해준다.
<Route exact path="/grid" component={GridComp} />
exact가 없으면 /grid/detail 같은 하위 URL도 같이 포함해서 매칭될 수 있다.
exact 있음
/grid → GridComp 렌더링
/grid/detail → 매칭 안 됨
exact 없음
/grid → GridComp 렌더링
/grid/detail → GridComp 렌더링 가능
실행 결과 예시

2. Rest 호출(Axios)
Axios는 REST API를 호출할 때 자주 사용하는 노드 모듈이다.
서버에서 데이터를 가져오거나, 저장하거나, 수정하거나, 삭제할 때 사용할 수 있다.
npm install axios
Axios의 기본 흐름은 아래와 같다.
React Component
↓
Axios로 API 요청
↓
REST API 서버
↓
응답 데이터 반환
↓
React 화면에 출력
Axios 예시 코드
import axios from "axios";
axios.get("/api/address")
.then((response) => {
console.log(response.data);
})
.catch((error) => {
console.error(error);
});
주소 검색 화면에서는 사용자가 입력한 주소를 기준으로 API를 호출해서 결과를 가져오는 방식으로 사용할 수 있다.
주소 입력
↓
onChange 이벤트 실행
↓
Axios로 주소 검색 API 호출
↓
검색 결과를 Grid에 출력
3. package.json dependency 추가
그리드와 화면 UI 구성을 위해 Material-UI dependency를 추가했다.
처음 React 프로젝트를 만들었을 때 기본 dependencies에
react-router-dom, axios, @material-ui/core, @material-ui/icons를 추가하면 된다.
{
"dependencies": {
"@material-ui/core": "^4.12.4",
"@material-ui/icons": "^4.11.3",
"axios": "^1.6.0",
"react": "^17.0.2",
"react-dom": "^17.0.2",
"react-router-dom": "^5.3.4",
"react-scripts": "4.0.3"
}
}
각 dependency 역할은 아래와 같다.
react-router-dom → URL에 따라 컴포넌트 렌더링
axios → REST API 호출
@material-ui/core → Table, Paper, InputBase 같은 UI 컴포넌트
@material-ui/icons → MenuIcon 같은 아이콘
4. GridComp 만들기
이번 결과물은 간단한 주소 검색 화면이다.
Material-UI를 사용해서 검색창과 테이블 스타일을 만들었다.
StyledTableCell
const StyledTableCell = withStyles((theme: Theme) =>
createStyles({
head: {
backgroundColor: theme.palette.common.black,
color: theme.palette.common.white,
},
body: {
fontSize: 14,
},
})
)(TableCell);
이 코드는 테이블 헤더를 검은색 배경, 흰색 글씨로 바꿔준다.

StyledTableRow
const StyledTableRow = withStyles((theme: Theme) =>
createStyles({
root: {
"&:nth-of-type(odd)": {
backgroundColor: theme.palette.action.hover,
},
},
})
)(TableRow);
이 코드는 홀수 번째 줄의 배경색을 다르게 보여준다.
1번째 줄 회색 배경
2번째 줄 흰색 배경
3번째 줄 회색 배경
4번째 줄 흰색 배경
표 형태의 데이터를 볼 때 줄 구분이 쉬워져서 가독성이 좋아진다.
5. 주소 검색 입력창 만들기
return (
<div style={{ margin: 15 }}>
<Paper className={classes.root}>
<IconButton className={classes.iconButton} aria-label="menu">
<MenuIcon />
</IconButton>
<InputBase
className={classes.input}
placeholder="address"
inputProps={{ "aria-label": "search google maps" }}
defaultValue={address}
onChange={changeAddress}
/>
</Paper>
</div>
);
주의할 점
classname이 아니라 className
inputPorps가 아니라 inputProps
onchange가 아니라 onChange로 작성해야 한다.
주소 검색 화면 구조

IconButton 안에는 메뉴 아이콘을 넣고,
InputBase에는 주소를 입력할 수 있도록 했다.
전체 실행 화면 예시

6. export default
작성한 컴포넌트를 다른 파일에서 사용하려면 마지막에 export 해준다.
export default GridComp;
그리고 라우터에서 import해서 사용한다.
import GridComp from "./GridComp";
<Route exact path="/grid" component={GridComp} />
최종 정리
이번에는 React Router, Axios, Material-UI를 사용해서 주소 검색 화면을 만들어봤다.
React Router
→ URL에 따라 컴포넌트를 렌더링할 때 사용
Axios
→ REST API를 호출할 때 사용
Material-UI
→ 검색창, 버튼, 테이블 같은 UI를 쉽게 만들 때 사용
GridComp
→ 주소 검색 화면 컴포넌트
전체 흐름은 아래와 같다.
1. react-router-dom 설치
2. BrowserRouter로 전체 감싸기
3. Route로 URL과 컴포넌트 연결
4. Axios 설치
5. Material-UI dependency 추가
6. GridComp 주소 검색 화면 작성
7. /grid 접속 시 주소 검색 화면 출력
라우터는 화면 이동을 담당하고,
Axios는 서버와 통신을 담당하고,
Material-UI는 화면 디자인을 담당한다고 생각하면 이해하기 쉽다.
'Front-end > React' 카테고리의 다른 글
| Zustand란? React 전역 상태 관리 쉽게 이해하기 (0) | 2026.07.02 |
|---|---|
| [React] 리액트 컴포넌트 생명주기(Lifecycle) 총정리: 클래스형부터 useEffect 훅까지 (0) | 2026.07.02 |
| [React] JSX, Props & State (0) | 2026.07.02 |
| [React] 리액트 Basic (0) | 2026.07.02 |
| [React] React란 React Overview (1) | 2026.07.02 |