함께 성장하는 프로독학러
0. 리액트 환경 설정하기 (React js, nodejs, webpack 4, babel) 본문
안녕하세요, 프로독학러 입니다.
이번 포스팅부터 React js 에 대해서 공부해 보도록 하겠습니다.
React.js가 무엇인가 부터 알면 좋겠죠?
React.js 에 대해서 간단하게 알아보도록 하겠습니다.
React.js는 facebook 이 만든 자바스크립트 라이브러리입니다.
리액트는 프레임워크가 아닌 라이브러리이기 때문에 Router 와 같은 웹을 만드는 도구는 포함되어 있지 않습니다.
하지만 그렇기 때문에 가볍습니다.
또한 배우기도 그렇게 까다롭지 않습니다.
이런 React.js 에는 세 가지 큰 특징이 있습니다.
첫 번째는 Component 입니다.
Component는 UI를 구성하는 개별적인 구성요소입니다. Component별로 나누어 개발을 하기 때문에 한 번 정의한 컴포넌트를 여러 위치에서 자유롭게 재사용할 수 있습니다.
두 번째는 JSX 입니다.
JSX는 React를 위해 만들어진 새로운 자바스크립트 문법으로, HTML과 비슷한 문법구조를 가지고 있습니다.
이를 통해 React 컴포넌트와 HTML 엘리먼트들을 쉽게 사용할 수 있습니다.
세 번째는 virtual DOM 입니다.
virtualDOM 은 DOM 이 수정 됐을때 전체를 다시 렌더링하는 것이 아니라 기존의 DOM과 바뀐 DOM을 비교해 수정되야할 부분만 렌더링하는 것을 의미합니다. 이 방식을 통해 브라우저의 부담을 줄여주고, 페이지의 로딩 속도 등이 더 빨라지게 됩니다.
그럼 본격적으로 React를 사용하기 위한 세팅을 시작하도록 하겠습니다.
순서는 다음과 같습니다.
- node.js 설치 (npm)
- React project 설정
- webpack 설치
- babel 설치
- React 설치 및 설정 (webpack+babel 프로젝트)
- Hot module replacement 설치
입력하고 엔터를 치면 아래와 같은 같은 창이 뜹니다.
창에 node -v 와 npm -v 를 차례로 쳐 봅시다.
node -v는 설치된 node.js의 버전을 확인하는 명령어이고, npm -v는 npm의 버전을 확인하는 명령어 입니다.
이상없이 설치 됐다면 각각의 버전이 다음과 같이 잘 뜨는 것을 확인 할 수 있습니다.
설치가 완료 되었다면, react 프로젝트를 설정해 보도록 하겠습니다.
2. React project 설정
react를 위한 프로젝트 폴더를 생성하고, 해당 폴더로 이동해 보도록 하겠습니다.
(*폴더의 생성은 윈도우 탐색기를 이용해 해도 상관 없습니다)
저는 e드라이브로 이동해 e드라이브 하위에 react-self-study라는 폴더를 생성하고 해당 폴더를 프로젝트 폴더로 사용하도록 하겠습니다.
터미널에 입력하는 명령어는 다음과 같습니다.
(현재 C드라이브에 있는 상태, E 드라이브로 이동하는 커맨드)
(E 드라이브 하위에 react-self-study 라는 폴더를 make direction - 생성)
(생성한 react-self-study 폴더로 change direction - 이동)
이제 프로젝트 파일에 package.json 파일을 생성해 보도록 하겠습니다.
커맨드는 다음과 같습니다.
이는 npm을 이용해 해당 폴더를 프로젝트 파일 폴더로 initializing (초기화) 하겠다는 의미 입니다.
그리고 뒤에 붙는 -y는 초기화 할 때 설정값을 모두 기본값 (default vlaue) 로 지정하겠다는 의미입니다.
만약 모든 값을 기본값으로 하지 않고 따로 설정하고 싶다면 -y를 빼고 명령어를 입력해 직접 설정하면 됩니다.
(터미널에 npm init -y 를 입력하고 엔터를 치면 자동으로 프로젝트 폴더로 초기화 합니다.)
(우리의 프로제트 폴더에 package.json 파일이 생성되었습니다. - 초기화에 의해 자동으로 생성)
react 폴더 안에 package.json 파일이 생성 되었습니다. 파일의 내용의 위와 같은 상태입니다.
이제 루트폴더(react폴더) 하위에 dist폴더를 만들고 그 안에 index.html 파일을 만들어 보도록 하겠습니다.
이 index.html 파일은 react를 이용해 렌더링할 컴포넌트들이 위치하는 html파일입니다.
즉 이 index.html 파일에 리액트를 이용해 렌더링할 컴포넌트들이 들어가는 것입니다.
(지금 이해가 되지 않아도 괜찮습니다. 환경설정 이후에 천천히 알아갈 예정입니다.)
(dist/index.html)
1 2 3 4 5 6 7 8 9 10 | <!DOCTYPE html> <html> <head> <title>React Webpack Babel Setup</title> </head> <body> <div id="root"></div> <script src="/bundle.js"></script> </body> </html> | cs |
index.html의 내용은 위와 같습니다.
(dist 폴더와 index 파일을 직접 만들어줍니다.)
index.html 파일까지 만들었다면, webpack 설치 및 설정 단계로 넘어가겠습니다.
3. webpack 설치 및 설정
웹팩은 모듈 번들러 입니다.
하나의 웹 어플리케이션은 여러 종류의 다양한 파일을의 관계에 의해서 이루어 집니다.(modules with dependencies)
어플리케이션의 크기가 커 질 수록 파일의 관계는 복잡해지고 무거워 집니다.
그리고 이 관계를 브라우저에 그대로 전달하면 브라우저가 이를 해석하고 사용자에게 출력하는 과정이 점점 버거워지게 됩니다.
따라서 다양한 파일들이 의존하는 그 관계(의존성 그래프)들을 정리하고, 최적화 하는 것이 필요해 지게 됩니다.
이 역할을 webpack이 수행해 주는 것입니다.
어플리케이션의 의존성 그래프들을 해석해 묶어줍니다. (번들링)
그리고 묶은 파일은 최적화, 압축 등을 통해 더 가볍게 작동할 수 있도록 도와줍니다.
이제 우리의 프로젝트 파일에 웹팩을 설치해 보도록 하겠습니다. (웹팩 버전 - 4)
루트 폴더(react)에서 npm을 통해 개발을 할 때 필요한 Dependencies 를 설치해 보겠습니다.
터미널 프로그램을 이용해 루트 폴더에서 위의 명령어를 입력합니다.
--save는 Dependencies 들을 package.json 파일에 저장하는 것을 의미합니다.
-dev는 개발에만 사용하는 Dependencies 라는 의미입니다.
설치를 완료하면 package.json 파일이 다음과 같이 변경됩니다.
그리고 노드 패키지들을 설치하면 자동으로 루트 폴더에 node_modules 폴더가 생성됩니다.
개발용 서버를 실행시키기 위해 package.json 파일의 sciprts 부분에 아래의 코드를 추가하여 줍니다.
(./package.json)
1 2 3 4 5 6 7 8 9 10 11 | ... "scripts": { "start": "webpack-dev-server --config ./webpack.config.js --mode development", ... }, ... | cs |
(하이라이트 된 부분에 위의 코드를 복사, 붙여넣기 합니다.)
1 2 3 4 5 6 7 8 9 10 11 12 13 | module.exports = { entry: [ './src/index.js' ], output: { path: __dirname + '/dist', publicPath: '/', filename: 'bundle.js' }, devServer: { contentBase: './dist' } }; | cs |
(루트 폴더에 webpack.config.js 파일을 직접 생성해 위의 코드를 복사, 붙여넣기 합니다.)
1 | console.log('Set up is continuing...'); | cs |
(루트 폴더에 src폴더를 만들고, 그 하위에 idex.js 파일을 만들어 위의 코드를 복사, 붙여넣기 합니다.)
(루트 폴더 위치에서 npm start를 실행.)
(정상적으로 컴파일이 완료된 것을 볼 수 있다.)
그럼 웹브라우저를 열어 콘솔창에 우리가 입력했던 값(index.js)이 뜨는지 확인해 보겠습니다.
브라우저를 열고 브라우저의 주소창에
을 입력해 봅니다.
(webpack-dev-server 의 기본 포트값은 8080 입니다.)
1 2 3 4 5 6 7 8 9 | ... "babel": { "presets": [ "env", "react", "stage-2" ] }, ... | cs |
그리고 webpack.config.js 파일도 수정해줘야 합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 | module: { rules: [ { test: /\.(js|jsx)$/, exclude: /node_modules/, use: ['babel-loader'] } ] }, resolve: { extensions: ['*', '.js', '.jsx'] }, | cs |
위의 코드를 webpack.config.js의 entry와 output 사이에 다음과 같이 붙여 넣습니다.
1 2 3 4 5 6 7 8 | { "presets": [ "env", "react", "stage-2" ] } | cs |
(루트 폴더에 .babelrc 파일을 직접 생성해 위의 코드를 복사, 붙여넣기 합니다.)
1 2 3 4 5 6 7 8 9 10 | import React from 'react'; import ReactDOM from 'react-dom'; const title = 'React Webpack Babel Setup'; ReactDOM.render( <div>{title}</div>, document.getElementById('root') ); | cs |
ReactDOM.render 부분을 살펴봅시다.
메소드의 첫 번째 인자에 HTML 의 div 태그 안에 4번째 줄에서 정의한 title이 들어가 있습니다.
이에 대한 자세한 설명은 다음 포스팅부터 하도록하고, 두 번째 인자에 주목해 봅시다.
두 번째 인자에는 순수 자바스크립트의 문법이 들어있습니다.
이는 index.html 안의 id가 root 인 엘리먼트(태그)를 가리킵니다.
즉, ReactDOM.render 메소드는 첫 번째 인자를 두 번째 인자의 위치에 집어넣어 렌더링 하는 메소드입니다.
(해당 위치에 index.js 에서 렌더링할 컴포넌트를 지정하면 해당 컴포넌트가 렌더링 위치에서 렌더링 된다.)
잘 됐는지 확인해 보겠습니다.
터미널에서 루트 위치에서 npm start 가 되어 있는 상태에서 웹 브라우저를 열고 localhost:8080 에 접속해 봅시다.
(index.js 에서 const 로 지정한 title 의 내용이 잘 출력되는 것을 알 수 있습니다.)
수정을 해도 잘 적용되는지 확인해 보겠습니다. index.js 에서 const title 부분을 임의의 문자열데이터(Is it working?)로 변경해 보겠습니다.
index.js 를 수정하면 webpack-dev-server가 자동으로 브라우저를 새로고침해 변경된 내용을 표시합니다.
(자동으로 새로고침 된다.)
6. Hot module replacement 설치(자동으로 새로고침 된
이제 Hot module replacement 를 설치해 봅시다.
webpack-dev-server 는 친절하게도 우리가 수정한 내용이 있으면 파일의 변화를 감지하여 웹페이지를 새로고침해서 보여줬습니다.
이것만으로도 충분히 편리하지만, 새로고침 없이 수정된 부분만 렌더링 된다면 개발이 더 편리해지겠죠?
이를 가능하게 하는 것이 Hot module replacement 입니다.
터미널에서 루트 폴더 경로인 상태에서 아래의 명령어를 입력해 패키지를 설치합니다.
설치가 완료되면 webpack.config.js 파일을 수정합니다.
(./webpack.config.js)
1 2 3 4 5 6 7 8 9 | const webpack = require('webpack'); ... 'react-hot-loader/patch', ... plugins: [ new webpack.HotModuleReplacementPlugin() ], ... hot: true | cs |
(위 그림에서 하이라이트 된 위치에 위의 코드를 복사, 붙여넣기 해주세요)
webpack.config.js 를 수정한 뒤에는 ./src/index.js 파일도 수정해 줍니다.
(./src/index.js)
1 2 3 | ... module.hot.accept(); | cs |
(하이라이트 된 부분에 위의 코드를 복사, 붙여넣기 해주세요)
모든 설정이 끝났습니다.
제대로 동작하는지 확인해 보도록 하죠.
를 해 dev server를 동작 시킨뒤, 브라우저를 열어 둡니다.
const title 부분을 아무렇게나 수정하고 저장을하면, 브라우저가 새로고침 되지 않고 수정된 내용이 반영됩니다.
여기까지 리액트를 공부하기 위한 기본 환경설정에 대해서 알아보았습니다.
다음 포스팅부터는 리액트를 제대로 공부해 봅시다.
감사합니다.
**ps. webpack 설정부분이 더 낫고 빠른 방법으로 업데이트 되었으니 아래 링크의 글을 참고해 주세요!
http://pro-self-studier.tistory.com/128?category=658753
**참고 자료 (항상 감사드립니다)
https://www.robinwieruch.de/minimal-react-webpack-babel-setup/
*다녀가셨다는 표시는 공감으로 부탁드릴게요! (로그인 하지 않으셔도 공감은 가능합니다 ㅎㅎ)
'Programming > react.js' 카테고리의 다른 글
5-1. 전화번호부 어플리케이션 만들기 - 구상, Contact 검색 기능 구현 (0) | 2018.04.19 |
---|---|
4. 리액트가 내부적으로 작동하는 순서, Component Lifecycle (1) | 2018.04.19 |
3. 컴포넌트 안의 동적인 데이터, state (0) | 2018.04.19 |
2. 하위 컴포넌트로 값을 전달하는, props (0) | 2018.04.18 |
1. React Component, JSX (0) | 2018.04.17 |