SPA와 Spring MVC 조합시 default page 설정

SPA, 예를 들어 Angular 빌드 결과를 Spring Boot(MVC) static 폴더에 올리고, http://host:port/ 만으로 index.html 페이지로 이동하게 하려면 redirect 설정을 해야 함

Angular 에서는 Client-side Routing을 제공하기 때문에 Spring의 Server-side Routing의 제어가 통하지 않는다. 다만 index.html로만 잘 연결해도 클라이언트가 라우팅 상태를 잃지 않고 subdirectory에 대한 path 연결을 이어갈 수 있다.
ex) http://host:port/#/subpage 에서 refresh(F5) 시도 할 때 없는 페이지라며 오류 나던 문제
==> http://host:port/index.html 로 리다이렉트 되면서 다시 한번 Angular Router가 http://host:port/index.html/#/subpage 로 연결해 준다. 최종적인 URL은 http://host:port/#/subpage 로 돌아감

해당 코드 예제
Spring 4.1부터 addRedirectViewController 함수 추가됨
==> addViewController + setViewName 함수의 결합

@Configuration
@EnableWebMvc
public class WebApplicationConfig extends WebMvcConfigurerAdapter {

  private static final String[] CLASSPATH_RESOURCE_LOCATIONS = {
    "classpath:/META-INF/resources/",
"classpath:/resources/",
    "classpath:/static/",
"classpath:/public/"
};

  /*
   * 참고 https://spring.io/blog/2015/06/08/cors-support-in-spring-framework
   */
  @Override
  public void addCorsMappings(CorsRegistry registry) {

        // 일단 모두 해제 상태로 개발하다가 추후 클라이언트의 접근 URL 기준으로 조정
        registry.addMapping("/**");
    }

  // index.html을 찾기 위한 리소스 로케이션 등록
  @Override
  public void addResourceHandlers(ResourceHandlerRegistry registry) {

    if (!registry.hasMappingForPattern("/**")) {
      registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");
    }
  }	

  @Override
  public void addViewControllers(ViewControllerRegistry registry) {
    // **NOTE: forward도 redirect도 안먹힘
    registry.addRedirectViewController("/", "/index.html");
  }

}

** 참고자료
http://www.logicbig.com/tutorials/spring-framework/spring-web-mvc/url-to-url-redirect/

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중

%d 블로거가 이것을 좋아합니다: