spring boot + vue.js 환경 구성하기

dev·2022년 3월 25일
2

블로그 이전했습니다.
https://wifi-z.tistory.com

나는 원래 프론트엔드 개발자이다.
정확히 말하면 안드로이드 앱 개발자로 일하고 있다.
그러다 기회가 생겨 웹 개발을 잠시하게 되었는데 spring boot안에 vue.js를 함께 쓰는 아키텍처로 구성이 된 프로젝트였다.
프리랜서에 도움이 받아 개발을 진행하게 되었는데 그때 당시에는 너무 모르는게 많아 원래 그런가보다 하고 일을 진행하다가
어느 순간 불편한 부분들과 마주하게 되었다.
하지만 개발이 많이 진행되어 되돌릴수 없기 때문에 불편한걸 감수하고 그대로 진행하기로 했다.
프로젝트가 마무리되고 나서 spring boot에 vue가 들어가면 router를 사용 할 수 없는건가? 하는 의구심이 들어 찾아보았고 답을 찾을 수 있었다.
기본적인 java, node, vue cli 등은 설치가 되어 있다고 가정하고 진행한다.

- https://start.spring.io 에서 spring boot 프로젝트 생성하기

혼자서 개발하는것이라면 사용하는 IDE에서 프로젝트를 생성해도 상관 없지만 여럿이 협업하는 상황이라면 특정 IDE에 종속?되지 않게 Spring Initializr에서 프로젝트를 생성하는것을 추천한다.

- 생성된 프로젝트를 사용하는 IDE에 추가한다.

- 터미널에서 vue 프로젝트를 생성한다.

vue-cli를 이용하여 vue create frontend 명령어로 프로젝트를 생성하였고 스프링부트 프로젝트와는 따로 분리시켰다.

- vue 빌드시 스프링부트에 정적 폴더로 디플로이 작업

package.json 파일에 scripts 부분 수정

vue 수정시 자동으로 컴파일되도록 하기 위하여 수정이 필요하다.

"serve": "vue-cli-service serve"   =>   "serve": "vue-cli-service serve --port 3000" 
"build": "vue-cli-service build"   =>   "build": "vue-cli-service build --watch"

vue.config.js 파일에 아래 내용 추가

module.exports = {
  // npm run build 타겟 디렉토리
  outputDir: '../backend/src/main/resources/static',

  // npm run serve 개발 진행시에 포트가 다르기때문에 프록시 설정
  devServer: {
    proxy: 'http://localhost:8080'
  }
};

이 후에 터미널에서 frontend 폴더에서 npm run build를 하면 스프링부트에 정적 폴더에 vue 프로젝트에 빌드된 파일이 디플로이 된것을 확인할 수 있다.

스프링부트 서버를 실행시키고 브라우저에서 http://localhost:8080 으로 접속하면 vue로 작성된 페이지가 열릴것이다.

- router 사용을 위해 스프링부트에 ErrorController를 implements하여 아래 내용을 구현해 준다.

@Controller
public class WebErrorController implements ErrorController {

    @GetMapping("/error")
    public String redirctRoot() {
        return "index.html";
    }

    public String getErrorPath() {
        return "/error";
    }
}

이 후에 스프링부트를 재시작하고 브라우저에서 확인해보자.

ErrorController를 구현하지 않았을 경우

ErrorController를 구현한 경우

개인적으로 이렇게 spring boot 안에 vue를 넣어 사용하는거보다 완전히 분리하는게 더 좋은거 같다.
그러면 이렇게 수고로운 작업을 안해도 되겠지...
단지.. cors 로 고생좀 하겠지만...

샘플 프로젝트 보러가기

profile
낭만코더

3개의 댓글

comment-user-thumbnail
알 수 없음
2023년 1월 22일
수정삭제

삭제된 댓글입니다.

1개의 답글
comment-user-thumbnail
2023년 5월 25일

덕분에 좋은 내용 잘 보고 갑니다.
정말 감사합니다.

답글 달기
comment-user-thumbnail
2023년 8월 16일

감사합니다..저도 안드로이드 개발하다가 임시로 웹앱에 투입되게 되어 맨땅에 해딩중이었는데
덕분에 많은 도움 되었습니다.

답글 달기