인프런 커뮤니티 질문&답변

변지은님의 프로필 이미지
변지은

작성한 질문수

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

정적 컨텐츠

컨트롤러 관련해서 질문 드리고 싶은 것이 있습니다.

작성

·

184

0

java 안에 @GetMapping("hello") 이라는 컨트롤러를 넣은 다음, template 안에 hello.html이라는 파일을 만들고 static 안에도 똑같은 hello.html 이라는 파일을 만들었습니다. 

그 다음 localhost:8080/hello.html 을 검색했을 때 수업 내용대로라면 template안의 hello.html 파일이 출력돼야되는데 static 의 파일이 열렸습니다.

그래서 localhost:8080/hello 라고 검색해보니 이 때 templtate의 hello 파일이 열리더라고요.

따라서 localhost:8080/hello.html 이라고 웹브라우저에 치면 정적 파일이 열리고 localhost:8080/hello 이라 치면 template 파일이 열리는 것으로 봐서 웹 브라우저에 어떻게 검색하냐에 따라 파일이 열려지는게 달라지는 것 같습니다.

제가 수업에서 이해한건 뒤에 localhost:8080/hello.html 이라고 검색했을 때, 컨트롤러 먼저 찾고, 정적 파일을 찾는 우선순위 순으로 동작한다는 것이라서 이론대로라면 template 안에 hello.html이 먼저 열려야될 것 같은데 아니라 제가 이해한 것과 상충되어 이렇게 질문드립니다.

양질의 강의 감사합니다. 정말 잘 듣고 있어요

답변 2

2

제가 생각했을때는 GetMapping에 "hello"를 줄 것이 아니라 "hello.html"을 주셔야 질문자님이 말씀하신대로 동작하지 않을까 생각이 되네요. 영한님이 스프링 컨테이너에서 컨트롤러에 먼저 있나 살펴보고, 없으면 static 하위에 해당 파일명을 찾아본다고 하셨잖아요.

1. 질문자님이 말씀하신 것대로 한다면 hello를 쳤을때는 매핑되는 controller가 있으니 당연히 templates 안에 html이 실행됩니다.

2. hello.html을 쳤을 시 영한님이 설명해주신대로 controller에서 해당 매핑 값을 찾아보겠죠. 하지만 질문자님께서 "hello.html"이라는 매핑값을 넣어준적이 없으시니 당연히 찾지 못하는 것이고 그렇다면 static 하위에 hello.html을 찾는 것이겠죠.

3. 제가 조언드린대로 매핑값을 "hello.html"로 바꿔서 넣으신다면 localhost:8080/hello.html을 치신다면 controller에 매핑값을 먼저 찾기 때문에 templates의 hello.html을 찾아갈 것입니다. 

결과적으로 질문자님은 동일한게 아닌 다른 값 (controller url 값은 hello, static 하위의 파일은 hello.html)을 넣으시고 실험하신 것이 되겠네요.

직접 실험해보니까 유진이님 말씀대로네요. 엄청 헷갈렸는데 감사합니다!!

 

0

안녕하세요. 변지은님, 공식 서포터즈 OMG입니다.

개념의 혼동으로 많이 헷갈려 하시는거 같은데요.

java 안에 @GetMapping("hello") 이라는 컨트롤러를 넣은 다음, 

이라고 말씀하셨는데 말씀하신 @GetMapping 없이 static 안에 hello.html이 존재한다면

localhost:8080/hello.html을 접근하면 hello.html의 내용이 출력됩니다.

반면 templates안에 있는 html 파일 내용을 출력하려면 서버 실행 후

@GetMapping("경로명")

return "파일명";

패턴이 되어야 규칙에 맞게 접근이 가능합니다.

또한 static은 정적인 파일을,

templates에는 템플릿 엔진 파일을 보관하여야 합니다.

감사합니다.

변지은님의 프로필 이미지
변지은

작성한 질문수

질문하기