springboot를 사용해서 web 개발을 하면 초반에 ERR_ABORTED 404를 심상치 않게 만나볼 수 있다.
404는 알다시피 경로에 있는 파일을 못찾는 경우이다. 즉 잘못된 경로를 입력했다는 것이다.
static resource 구조
<script type="text/javascript" src="<ct:jsUrl uri="/public/js/jquery/jquery.js" />" charset="utf-8"></script>
<script type="text/javascript" src="<ct:jsUrl uri="/public/js/jquery/plugins/jquery.hotkeys.js" />" charset="utf-8"></script>
<script type="text/javascript" src="<ct:jsUrl uri="/public/js/jquery/plugins/jquery.mask.min.js" />" charset="utf-8"></script>
<script type="text/javascript" src="<ct:jsUrl uri="/public/js/jquery/plugins/jquery.cookie.js" />" charset="utf-8"></script>
<script type="text/javascript" src="<ct:jsUrl uri="/public/js/jquery/plugins/jquery.alphanumeric.pack.js" />" charset="utf-8"></script>
필자의 static resource 구조와 그 안에 있는 js 파일에 대한 정의를 한 소스이다. springboot의 특성상 정적자원을 읽어오는 위치는 classpath:/static, classpath:/public, classpath:/resources 이어야 한다. public이라는 폴더명을 선택하여 사용하였다. 위에 나온것중 아무거나 써도 무방하다.
내가 만약 /public/images/abc.png 라는 파일을 접근하고 싶다면 localhost:8080/images/abc.png 로 접근이 가능하다. 기본 리소스 위치는 없는 것으로 취급을 하는 것이다. 그렇기 때문에 위와 같은 소스는 다음과 같이 변경이 되어야 한다.
<script type="text/javascript" src="<ct:jsUrl uri="/js/jquery/jquery.js" />" charset="utf-8"></script>
<script type="text/javascript" src="<ct:jsUrl uri="/js/jquery/plugins/jquery.hotkeys.js" />" charset="utf-8"></script>
<script type="text/javascript" src="<ct:jsUrl uri="/js/jquery/plugins/jquery.mask.min.js" />" charset="utf-8"></script>
<script type="text/javascript" src="<ct:jsUrl uri="/js/jquery/plugins/jquery.cookie.js" />" charset="utf-8"></script>
<script type="text/javascript" src="<ct:jsUrl uri="/js/jquery/plugins/jquery.alphanumeric.pack.js" />" charset="utf-8"></script>
관련 정보를 더 알고 싶으면 이 글을 참조하도록 하자.
하지만!
이렇게 변경을 잘 했다 하더라도 계속 ERR_ABORTED 404 를 맛볼수가 있다.
분명 springboot 규칙대로 static resource를 호출할때 기본 경로(static, resources, public) 을 제외하고 잘 사용했는데도 이런 오류가 발생을 한다. 이것때문에 삽질하느라 시간을 많이 보낸것 같다. 이럴때는 다음과 같이 해보자.
WebConfig.java
@Configuration
public class WebConfig extends WebMvcConfigurationSupport {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**").addResourceLocations("classpath:/public/");
super.addResourceHandlers(registry);
}
...
}
web 설정을 하는 곳(WebMvcConfigurationSupport 상속 클래스)에서 위와 같이 addResourceHandlers()에 나의 static resource가 있는 장소를 명시를 해주자.
<resources mapping="/resources/**" location="/resources/" />
필자는 webapplicationcontext를 xml로 설정했을때는 위와 같은 설정이 없었음에도 불구하고 JAVA Config로 전환을 했을때는 WebConfig에 addResourceHandlers를 넣어줘야지 제대로 동작을 했다.
출처 : https://oingdaddy.tistory.com/227
'Back-End > Spring' 카테고리의 다른 글
[SpringBoot] Springboot + JWT 이용하여 API 서버간 인증하기 (0) | 2023.06.26 |
---|---|
[SpringBoot] ChatGPT와 연동하기 (0) | 2023.06.23 |
[SpringBoot] 기동시 Failed to scan : FileNotFoundException *.jar 오류 (0) | 2023.06.23 |
[Springboot] SolrServerException 발생 with actuator (0) | 2023.06.23 |
[Spring] 스프링 의존성 주입 (Dependency Injection) 개념 및 종류 (0) | 2023.06.23 |