grammar-team / whale-grammar

Korean grammar checker extension for whale browser
Other
15 stars 4 forks source link

React Tutorial 실습 - Spinbox 로 React 겉핥기 #7

Open dlehdanakf opened 4 years ago

dlehdanakf commented 4 years ago

개요

시작하기

Modern JavaScript 는 그냥 JavaScript랑 무엇이 다른가?

참조문서

Webpack은 무엇인가?

NAVER Blog (Webpack) 건국대 종정시 (non-Webpack)
스크린샷 2020-01-25 오후 10 02 18 스크린샷 2020-01-25 오후 10 02 49
난독화되어 코드의 의미를 파악하기 힘듬 특수키 사용 방지를 목적으로 하는 코드 파악 가능

참조문서

Babel 은 무엇인가?

React 시작하기

React 개발환경 구축

적당한 빈 폴더에서 아래 명령어를 실행한다. 단, 폴더 이름으로 react 또는 다른 라이브러리 이름과 동일하게 해선 안된다.

$ npm init -y

위 명령에서 달러기호($)는 제외하고 복사한다. 보통 달러($) 또는 샾(#) 기호는 Linux, Unix 운영체제의 CLI 명령어임을 나타내는 말머리이다.

명령어를 실행했다면 폴더에 package.json 파일이 생성된 것을 확인할 수 있다. 해당 파일은 앞으로 실습해볼 프로젝트에 대한 요약정보와 실행방법 및 의존성 라이브러리 목록을 포함하게된다. Modern JavaScript에서 개발된 대부분의 프로젝트는 해당 파일을 열람하여 실행방법을 유추하거나 만든이, 라이센스, 의존성 라이브러리 등 다양한 정보를 파악할 수 있다.

1. npm 의존성 라이브러리 설치

아래 명령어를 복사/붙여넣기 하여 의존성 라이브러리를 설치한다.

$ npm install --save @babel/core @babel/preset-env @babel/preset-react react react-dom babel-loader webpack webpack-cli

2. webpack.config.js 파일 추가

Github Gist - Webpack 예제 페이지를 방문하여 소스코드를 webpack.config.js 파일로 저장한다.

webpack.config.js 파일은 Webpack 프로세서가 어떤 파일들을 번들링하는지, 어디에 번들링이 완료된 파일을 저장해야하는지 지정하고, 번들링 과정을 어떻게 처리해야하는지 명시하는 역할을 한다.

3. .babelrc 파일 추가

.babelrc 파일을 생성하고 아래 텍스트를 붙여넣는다.

{
  "presets": [
    "@babel/preset-env",
    "@babel/preset-react"
  ]
}

.babelrc 파일은 Webpack 프로세서가 번들링을 하는 와중에 소스코드를 어떻게 해석해야하는지 안내하는 역할을 한다. 읽어들인 소스코드 파일을 ECMA Script 6 에서 ECMA Script 5 으로 변환하는 방법이나, React JSX 문법으로 작성된 파일을 ECMA Script 5 으로 변환하는 방법을 지도한다.

4. package.json 파일 수정

package.json 파일을 열어보면 아래와 같은 텍스트를 찾을 수 있을 것이다.

...
"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
},
...

위 텍스트를 아래와 같이 바꾼다.

...
"scripts": {
    "cleanup": "rm -rf dist && mkdir dist",
    "build": "npm run cleanup && ./node_modules/.bin/webpack --mode=none",
    "build:watch": "npm run cleanup && ./node_modules/.bin/webpack --mode=none --watch"
},
...

package.json 파일의 'script' 항목에 작성된 명령어는 아래와 같이 커맨드라인 환경에서 호출할 수 있다. $ npm run cleanup $ npm run build:watch

React 특징점 알아보기

참조문서 : Spinbox로 React 겉핥기

React 에 대해 세가지로 정리하자면 다음과 같다.

  1. JSX (JavaScript XML) 사용
  2. Virtual DOM
  3. 단방향 데이터 플로우(Unidirectional Data Flow)

JSX 란?

기존 jQuery 라이브러리를 사용해 DOM 을 조작한다면 .js 파일에서 HTML 언어를 string 으로 저장해서 관리했기 때문에 HTML 마크업을 관리하기도 어렵고 소스코드 자체가 읽기 어려워지는, 더러워지는 문제가 있었다. React 의 탄생배경은 MVC 패턴에서 View 에 집중하려는 노력에 있는데, JavaScript 상에서 HTML 마크업을 보다 편리하고 가독성있게, 직관적으로 관리할 수 있도록 만드는데 많은 도움이 된다. JavaScript 상에서 HTML 마크업을 거의 그대로 사용할 수 있다.

Virtual DOM

JSX 으로 작성된된 React 컴포넌트는 브라우저에 표현된 DOM Element 와 일대일로 대응하지만 완전히 동일하지는 않다. 랜더링된 React 컴포넌트에서 dataset 이나 innerHTML 같은 속성을 변경하더라도 곧 다시 React 원본 컴포넌트대로 덮어씌워진다. 이는 데이터 무결성을 보장하고 아래 서술할 일방향 데이터 플로우를 만들기 위함이다.

단방향 데이터 블로우

React 컴포넌트 속 state 객체에 담긴 데이터를 토대로 랜더링이 이루어진다. state 객체 값을 바꾸지 않고 랜더링 완료된 DOM Element를 바꾸어봤자 React가 다시 랜더링 될 때 덮어씌워진다.

React를 활용해서 Spinbox 컴포넌트 만들기

스크린샷 2020-01-26 오후 9 58 53

프로젝트 파일 구성

project-root/
├── src/
│   ├── index.js
│   └── spinbox.component.js
├── package.json
├── webpack.config.js
└── .babelrc

전체 소스코드

Github Gist - 전체 소스코드

위 소스코드를 각 파일을 생성하여 붙여넣는다. 시간이 촉박하지 않다면 코드에 익숙해지기 위해 복사/붙여넣기 보다는 한줄 한줄 따라서 쳐보는 것을 추천한다.

index.html

index.js

spinbox.component.js

KimSeongHeon commented 4 years ago

많이 배워갑니다!