본문 바로가기

웹개발 풀스택 과정/Spring Legacy

45일차(2022.03.02) _ link 태그의 요청을 처리하는 과정

 

우리가 웹 브라우저에 요청을 보낼 때, 단지 하나의 URL만을 요청보내는 것이 아니다.

 

 

웹브라우저 개발자도구의 네트워크 탭을 보면, 

우리가 HTML 문서 내에 link 태그 내에 걸린 모든 URL에 대한 요청을 한다.

예를 들어, reset.css도 우리가 link태그를 걸어, resources/css/reset.css 로 URL을 링크를 걸어놨었다.

즉, resources/css/reset.css라는 URL로 요청을 보내 저 reset.css파일을 응답받게 되는 것이다.

 

 

실제로 서버가 켜져있을 때, 저 URL로 요청을 보내면 실제 reset.css 코드가 나온다.

 

근데, resources를 처리하는 controller를 우리가 만들었던가? 아니다! 이게 작동하는 이유가 뭘까?

 

servelet-context.xml을 보면 우리가 지금까지 신경쓰지 않았던, 딱 한가지가 있다.

바로 이것이다.

 

	<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
	<resources mapping="/resources/**" location="/resources/" />

 

이 코드는 

/resources/** 로 오는 모든 URL 주소로 오는 요청들은, Conctroller로 보내지 말고

locations이 /resources -> 루트 밑에 resources니까 그 위치로 직접 찾아가라 라는 의미이다.

 

즉, resources/ 로 시작하는 주소는 Controller를 거치지 않는다. 

만약, css파일 같은 것도 resources 폴더 아래에 넣지 않는다면? 

만약, 

 

<link rel="stylesheet" type="text/css" href="../table.css">

 

그냥 css파일의 링크가 이런 식이라고 해보자. 

실제로는 파일의 위치는 resources 폴더 아래에 바로 table.css 파일이 있는 상태이다. 

근데, URL 주소의 경우는 resources로 시작하지 않는다. 

resources로 시작하지 않는다면, Controller에서 찾는다. 

근데 우리는 table.css 를 처리하는 메서드를 만들지 않았기 때문에 css를 불러오지 못하게 된다.