💻 참고 사이트 : https://www.youtube.com/watch?v=RCb0UF7Lu90
11.2(화) TIL에 이어서 작성하는 포스트이다. 개발 모드라면 응당 핫 리로딩이 되는게 훨씬 편하다. 내가 이해하는 핫 리로딩은 소스코드가 변경되었을때 자동으로 그 수정사항이 바로바로 반영되는 것을 말한다. CRA를 사용해봤다면 소스코드가 변경되면 바로 반영되는 그 동작을 말하는 것이다.
앗... 영상을 보다보니 핫 리로딩은 상태까지 저장이 되어야 진정한 핫 리로딩이라고 한다. 즉, 우리가 뭔가를 테스트 중에 소스코드를 고쳤다고 해서 초기화되지 않는게 바로 핫 리로딩인 것이다. (오호)
일단 그러기 위해서는 웹팩 데브서버와 핫 리로딩 설정이 필요하다.
핫 리로딩과 관련된 라이브러리를 먼저 설치해주자.
yarn add -D @pmmmwh/react-refresh-webpack-plugin react-refresh
그니까 react-refresh를 쉽게 사용하기 위한 플로그인을 제공하는 것이 @pmmmwh/react-refresh-webpack-plugin 아닐까 생각해본다.
그리고 나서 웹팩 데브 서버를 설치해줍니다. 라이브 재로딩을 제공하는 개발 서버...
yarn add -D webpack-dev-server
const path = require("path");
const ReactRefreshWebpackPlugin = require("@pmmmwh/react-refresh-webpack-plugin");
module.exports = {
name: "wordreplay-setting", // 사실 별 필요는 없지만 처음에 있는거?
mode: "development", // 모드 설정. 운영모드라면 production 로 바꿔주면 된다. 이건 환경변수로 설정해서 조건문 걸어서 바꿔주는게 좋다.
devtool: "eval", // 이건 뭐시여
resolve: {
// 웹팩이 알아서 경로나 확장자를 처리할 수 있게 도와주는 옵션
extensions: [".js", ".jsx"],
},
entry: {
// 시작점. 우리는 시작점을 client.jsx로 할 거임. 근데 resolve 설정을 했으니까 jsx는 입력할 필요가 없음
app: "./client",
},
module: {
rules: [
{
// js, jsx 파일에 바벨을 적용해서 최신문법을 옛날문법으로 호환되도록 바꿔주겠다
test: /\.jsx?/,
loader: "babel-loader",
options: {
presets: ["@babel/preset-env", "@babel/preset-react"],
plugins: ["react-refresh/babel"], // ✅
},
},
],
},
plugins: [new ReactRefreshWebpackPlugin()], // ✅
output: {
// 빌드시 생성되는 폴더와 파일명
path: path.join(__dirname, "dist"),
filename: "app.js",
publicPath: "/dist",
},
devServer: {
// ✅ 개발 서버
devMiddleware: {
publicPath: "/dist", // 나중에 웹팩 실행시 생성될 경로(dev인 경우에는 실제 생성이 아닌 메모리에 올라간다고 함)
},
static: {
directory: path.resolve(__dirname), // 실제로 존재하는 경로
},
hot: true,
},
};
http://localhost:5000
이라고 설정했다면 url(‘./test.png’)에 대해서 url(‘http://localhost:5000/test.png’
);로 치환되어서 결과가 반환될 거? (내가 이해한 바로는 그렇다 - 참고)음... 솔직히 이해가 안되는 부분이 없지 않아 있지만 그건 실제 웹팩 설정을 사용해보면서 배우는 편이 좋을 거 같다...
실행시키는 명령어가 조금 달라졌다. 아래와 같이 수정해주자.
"scripts": {
"dev": "webpack serve --env development"
},
그런다음 실행 시켜보면 데브 서버가 실행되면서 어디로 접속해보라는 URL이 나올 것이다.
접속한 다음에 잘 나오는 것을 확인하고, jsx 코드를 한번 수정해본 다음에 핫리로딩이 적용되는지 확인해보자.
어쨌거나 여기서 배운 부분은 핵심적인 부분에 대해서만 배운 것이다. 개발환경과 배포환경에 대해서도 설정을 달리 해야 하는 로직도 필요하고, 여러가지 플러그인도 많이 존재하고... 그래서 웹팩이 어렵게 느껴지는게 아닐까 싶다.
웹팩 설정을 그리 자주하는 것도 아니라서 쉽게 익숙해지지 않는 것도 한몫하는 듯...ㅠㅠ