React + SpringFramework 연동

초기 환경설정

  • Global Dependency 설치

    sudo npm install -g webpack webpack-dev-server
    
  • cmd에서 cd를 사용해 개발하고자 하는 workspace로 이동함
  • webpack : 브라우저 위에서 import 및 require로 불러올 수 있게 해주고, 자바스크립트 파일을 하나로 합쳐주는 역할
  • webpack-dev-server : 별도의 서버를 구축하지 않고도 static 파일을 다루는 웹서버를 열 수 있으며, hot-loader를 통하여 코드가 수정될 때마다 자동으로 reload 되게 해 줌

프로젝트 생성

  mkdir react
  cd react
  npm init
  • npm init 명령어를 사용하여 프로젝트에 대한 여러 정보를 입력할 수 있게 하고, 그 정보를 기반으로 기본 package.json 파일을 생성함

Dependency 및 Plugin 설치

  • react 설치

    npm install --save react react-dom
    
  • 개발에 필요한 의존 모듈 설치

    npm install --save-dev react-hot-loader webpack webpack-dev-server
    npm install --save-dev babel-core babel-loader babel-preset-es2015 babel-preset-react
    
  • redux 모듈 설치

    npm install --save redux react-redux
    
  • immutability helper 사용을 위한 모듈 설치

    npm install --save react-addons-update
    

디렉토리 설정

  react 
      package.json
      public                            # 서버 public path
                  index.html            # 메인 페이지
      src                               # React.js 프로젝트 루트
                  components            # 컴포넌트 폴더
                            App.js      # App 컴포넌트
                  index.js              # Webpack Entry point
      webpack.config.js                 # Webpack 설정파일(직접 만들어야함)

모듈 파일 디렉토리 생성

  • webpack 을 이용한 Front-End 개발시에는 모듈들을 모아두는 디렉토리가 필요
  • 모듈 파일을 빌드시 포함되지 않는 위치인 src/main에 front폴더 생성

webpack 설정

  • global로 설치한 webpack을 project level(위에서 front 폴더 만든 src/main)에 한번 더 설치
  • 추가로 –save 옵션을 주어 package.json 파일에 자동으로 dependency를 추가해줌
npm install --save-dev webpack

webpack.config.js

const path = require('path');

module.exports = {
  context: path.resolve(__dirname, 'front'),
  entry: {
    home: './home.js',
  },
  output: {
    path: path.resolve(__dirname, 'webapp/resources'),
    filename: '[name].js',
    publicPath: '/proejctName/resources',
  }
};

  • context 설정 : 앞서 생성한 모듈 파일의 디렉토리로 설정
  • path 설정 : 엔트리 파일(번들 파일)이 저장 될 위치를 설정. 이 디렉토리는 빌드시 포함되는 디렉토리이며, WAS를 통해 접근이 가능해야함
  • publicPath 설정 : 각종 리소스를 URL로 통해 접근시 URL 앞에 붙는 공통 경로. 따라서 WAS의 root context와 리소스가 저장되는 디렉토리르 합쳐서 설정

Spring Context 설정

  • 엔트리 파일(번들 파일)이 저장되는 디렉토리는 WAS를 통해 접근 가능해야함. 따라서 Spring Context 파일 설정
<resources mapping="/resources/**" location="/resources/" />

package.json 파일 설정

  • 해당 스크립트들은 npm run 스크립트명 으로 실행이 가능
  • w(watch) 옵션을 주어서 모듈 파일이 변경시 바로바로 번들링 되게끔 함
"scripts": {
  "develop": "webpack -w --mode development --devtool inline-source-map",
  "build": "webpack --mode production"
  },

Spring 프로젝트에 webpack 적용

  • Spring 프로젝트는 개발 후 배포시 보통 war 파일로 배포됨.
  • 그리고 webpack 을 이용해서 Front-End 개발을 하면 모듈 파일과, 번들 파일 두 종류의 파일이 생성.
  • 모듈 파일은 개발시에만 필요. 어차피 번들링하면 번들 파일에 모듈이 모두 포함되기 때문. 따라서 배포시 모듈 파일을 괜히 war 파일에 포함시켜 war 파일의 용량을 키울 필요도 없음.

Categories:

Updated:

Comments