한바다
No static resource index 오류 본문
✅ 프로젝트를 생성 후 실행 시 지속적으로 404 오류와 함께 No static resource index가 발생하였다.
Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.
Thu Oct 10 20:27:19 KST 2024
There was an unexpected error (type=Not Found, status=404).
No static resource index.
org.springframework.web.servlet.resource.NoResourceFoundException: No static resource index.
at org.springframework.web.servlet.resource.ResourceHttpRequestHandler.handleRequest(ResourceHttpRequestHandler.java:585)
✔️ 이 문제는 Spring boot가 index.html을 찾지 못해서 발생하였다.
- 404 오류 : Not Found 페이지를 찾을 수 없음, 페이지가 졸재하지 않거나 잘못된 URL입력
스프링부트 폴더 구조에서 src/main/resources 아래에 templates폴더는 Java 탬플릿(응답화면)을 모아두는 폴더로
주로 html 파일이 존재하는데 분명 해당위치에 파일이 위치 했는데도 스프링부트가 index.html파일을 찾지 못하고 있었다!!
[에러 원인]
현재 Spring Boot가 index.html 파일을 정적리소스로 찾으려고 하고 있기 때문에. 탬플릿으로 인식하고 있지 않아서
원인은 템플릿 엔진과 정적리소스 처리 방식의 차이로인해 발생한 것으로 보여짐
따라서 정적리소스(HTML파일,이미지,CSS,JS 파일등)는 src/main/resource/static 폴더에 있어야 정상적으로 로드된다.
🗹 여기서 templates폴더와 static폴더에 담고 있어야하는 파일을 알아보자!
templates 폴더의 역할
- 동적 HTML 탬플릿 templates 폴더는 주로 동적인 콘텐츠를 렌더링할 때 사용
(ex:동적 HTML 페이지를 렌더링하는 탬플릿 엔진(Thymeleaf, JSP 등)
<h1>Hello, ${name}!</h1> <!-- 'name' 변수가 서버에서 전달되어 출력됨 --> )
static 폴더의 역할
- 정적파일 저장소, Spring Boot는 자동으로 static 폴더에 있는 파일들을 정적자원으로 처리, 별도의 컨트롤러 설정없이도
클라이언트 요청에 응답
- CSS, JS , 이미지 파일 등
따라서 정적리소스로 인식한 index.html은 static폴더 안에 담아야 했다.
src/main/resources/templates/index.html 파일을 src/main/resources/static/index.html 옮기고 나니
더이상 에러는 발생하지 않았따!!
그런데!! 이클립스 개발환경을 껏다가 다시 재실행시 동적리소스 templates에 index.html, test.html
파일을 옮겨 담아도 정상적으로 노출이 되고야 말았다!!!
🌸 스프링부트 src/main/resources에서
static폴더는 정적인 파일 저장소!!
templates 폴더에 담아야할 파일은 동적파일들
따라서 No static resource index 오류는 정적리소스를 찾으려고 했지만 index.html을 찾지
못해서 발생하였다 🌸