타임리프는 템플릿 엔진의 일종이며 스프링 버전이 올라가며 view 엔진이 JSP에서 thymeleaf로 변경됐다.
스프링 mvc 모델을 테스트를 위해 적용하며 궁금한 점이 생겼는데, 스프링부트 프로젝트의 resources 폴더 안의 static 폴더와 templates 폴더는 왜 나누는 것일까?
js는 어떤 위치에 들어가는 것이 맞을지 고민했는데 static안에 따로 js 폴더를 만들어 그 안에 js 파일들을 두는게 좋은 것 같다.
<script type = "text/javascript" src="/js/pay-test.js"></script>
<script type = "text/javascript" th:src="@{/js/pay-test.js}"></script>
참조: https://donghyeon.dev/spring/2019/07/02/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-static%EA%B3%BC-template-%EC%B0%A8%EC%9D%B4/
https://wonin.tistory.com/470
이렇게 만든 타임리프 안의 html 파일들이 컨트롤러와 매핑되지 않고 컨트롤러의 return 값이 그대로 string의 형태로 나오게 됐다.
타임리프 적용이 안될 때: @RestController -> @Controller로 변경하기
그러면 여기서 또 RestController와 Controller의 차이점이 뭔지 궁금하지!
공부하기 전에는 Controller는 단순히 mvc 모델에서 사용하는 뷰 매핑용 컨트롤러이고, RestController은 post, get과 같은 rest api를 사용하는 컨트롤러를 의미한다 생각했다.
Controller에서는 json 객체를 반환하기 위해requestbody를 붙여야 하지만 RestController은 그러지 않아도 된다고 예전에 찾아봤었다.
하지만 실제로는 @Controller에서도 rest api를 사용해도 별 문제가 없기 때문에 다시 알아보기로 했다.
타임리프의 경우 스프링 mvc를 사용하는 웹 프로젝트의 일환이기 때문에 jar와 war의 차이도 찾아봤다.
항상 많이 검색했지만 잘 알지 못하는 부분이다.
jar: 클래스와 메타 데이터를 압축해 jre/jdk에서 실행할 수 있다. jar 파일에는 was가 내장되어 있다. 따라서 jar 파일로도 빌드를 할 수 있다. (원하는 구조로 파일 구성이 가능) -> java 어플리케이션이 동작하기 위한 아카이브 파일로 라이브러리의 형태로 배포 가능.
war: 서블릿, html, 자바, jsp 등 웹 어플리케이션 구동에 필요한 파일을 압축한 것으로 was나 웹서버에서 실행 가능하다. 외부 was를 쓰는 경우에는 war를 사용한다. (WEB_INF/META_INF 등의 정의된 구조를 사용) -> 웹 어플리케이션 배포용 아카이브 파일들. war도 java -jar을 통해 패키징한다.
참조:
https://mongsil1025.github.io/til/server/warjar/
https://ifuwanna.tistory.com/224