드디어 스프링 부트와 Vue 앱을 연동해보자.
1. build
먼저 yarn build 명령을 이용해서 vue 앱의 배포 버전을 생성한다.
dist 경로에 index.html 파일도 생성되는데 이 파일에서 다른 js, css 들을 링크해서 사용중이다.
주의할 점은 이 경로들이 절대경로라는 점이다.
모든 경로를 상대경로로 바꿔주자.
<!DOCTYPE html>
<html lang=en>
<head>
<meta charset=utf-8>
<meta http-equiv=X-UA-Compatible content="IE=edge">
<meta name=viewport content="width=device-width,initial-scale=1">
<link rel=icon href=./favicon.ico> <title>vue-frontend</title>
<link href=./css/app.6af8ca07.css rel=preload as=style>
<link href=./js/app.a6ccf608.js rel=preload as=script>
<link href=./js/chunk-vendors.704f239b.js rel=preload as=script>
<link href=./css/app.6af8ca07.css rel=stylesheet>
</head>
<body>
<div id=app></div>
<script src=./js/chunk-vendors.704f239b.js> </script> <script src=./js/app.a6ccf608.js> </script> </body> </html>
2. 스프링 부트에 파일 배포
src/main/webapp/WEB-INF/에 Vue의 dist를 이동시키고 vue-dist로 rename 해준다.(다른 dist가 있을 것을 대비해서)
또한 index.html 파일도 vue.html로 변경한다.
3. 스프링 부트에서 정적 리소스를 연결한다.
@SpringBootApplication
public class DemoApplication implements WebMvcConfigurer{
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
System.out.println("resource 등록");
registry.addResourceHandler("/vue/**").addResourceLocations("/WEB-INF/resource/vue-dist");
}
}
4. jsp에서 vue 페이지를 호출해보고 동작을 확인한다.
<%@ page contentType="text/html;charset=utf-8"%>
<html>
<body>
${message}<br>
<a href="/vue/vue.html">vue page</a>
</body>
</html>
위와 같은 상황에서 url의 # 이 거슬린다면 router의 mode를 history로 변경할 수 있다. 이경우
와 같이 일반적인 경로가 표시된다. vue/vue.html# 부분이 삭제된다.
하지만 처음 기본 페이지인 / 에서 router가 연결되지 못하는 문제가 발생했다.
/ 인 상태에서 표시할 내용을 별도로 구성하는 것이 좋을것 같다.
다음글: https://goodteacher.tistory.com/92