cd client로 경로를 클라이언트 쪽으로 변경해준 후 npm install axios -- save
설치 후 client의 LandingPage.js와 server의 index.js에서 axios test
// client - LandingPage.js
import React, { useEffect } from "react";
import axios from 'axios';
function LandingPage() {
useEffect(() => { // useEffect사용해서 랜딩페이지에 들어오자마자 이 부분을 실행한다는 의미
axios.get('/api/hello')
.then(response => console.log(response))
}, [])
return (
<div>
LandingPage 랜딩페이지
</div>
)
}
export default LandingPage
// server - index.js
app.get('/api/hello', (req,res) => {
res.send("안녕하세요 블레어입니다.")
})
각각 서버와 클라이언트에서 3000, 5000에서 오는걸 받을 수 있도록 해결할 수 있다.
Proxy로 해결하는 방법 도 있다.
1. client경로에 와서 npm install http-proxy-middleware --save
2. src 디렉토리에 setupProxy.js파일 생성 후 아래코딩
//setupProxy.js
const proxy = require('http-proxy-middleware');
module.exports = function(app) {
app.use(
'/api',
proxy({
target: 'http://localhost:5000',
changeOrigin: true,
})
);
};
그렇다면 proxy server란?
- 유저와 인터넷의 통신의 중간에는 proxy server가 있다. 유저의 아이피를 인터넷에서 받을때 프록시서버가
임의로 변경할 수 있기 때문에 받는 쪽에서는 실제 IP를 모를 수 있다.!
- 보내는 데이터도 임의로 바꿀 수 있다.
- 방화벽 기능
- 웹 필터기능
- 캐쉬 데이터, 공유 데이터 제공기
- 사용이유?
- 회사에서 직원들의 인터넷 사용제어, 집에서 아이들의 인터넷사용 제어
- 더 나은 보안제공
- 캐쉬를 이용해 더 빠른 인터넷 이용
서버와 클라이언트르 따로 키지않고 한번에 킬 수 있게 concurrently 라이브러리 사용해보기
npm install concurrently --save 로 다운
server- package.json에서 설정
"scripts"에 아래 추가하기
"dev" : "concurrently \"npm run backend\" \"npm run start --prefix client\""
Props vs State 차이를 아는가? (보관방법의 차이도 생각하기)
- Props는 부모컴포넌트가 자식 컴포넌트에게 State를 내려주면 자식컴포넌트는 그것을 Props라는 이름으로 받는다.
(반드시 부모->자식으로만 전달가능)
- Props는 한번받으면 immutability함 ! 변하게 하고싶으면 다시 부모에서(변경 후)내려줘야 함
* State는 컴포넌트 안에서 관리가 필요한 데이터 등 이다.
* State가 들어있는 해당 컴포넌트안에서 변경가능하다.
* State가 변경되면 저절로 rerendering된다.
리덕스가 있고 없고의 차이??
- state의 관리를 용이하게 해준다.
- 리덕스가 없으면 가장 상위의 공간에서 상태들을 관리해서 컴포넌트마다 타고 올라가야하지만
리덕스가 있으면 별도의 store라는 공간이 생기고 그 안에서 store값들을 관리하므로 모든 컴포넌드들에서
한번에 접근이 가능하다.(딘계별로 전달하고 전달받을 필요가 없다.)
- flow 흐름 이해하기 dispatch-action-reducer(변한 state를 리턴)-store
Redux setting
redux-promise redux-thunk 두가지(redux middleware)는 리덕스를 잘 쓸수있게해주는 역할을 한다. 어떻게??
다운받은 것들 적용시키기
store에는 여러개의 reducer들이 있을 수 있다. (reducer는 store의 값을 변화시킨다.) -> 여러 리듀서들을 rootReducer로 합친다.