3주차에 다루는 주제
stream, lambda
optional
<aside> 💡 교재 4.1장
</aside>
이번 챕터의 주제가 화면 구성인 만큼, 템플릿 엔진에 대해서 자세하게 다루었는데요. 우리가 웹 페이지를 위한 서버를 만들고 있기 때문에 템플릿 엔진이 필요합니다. (모바일 앱을 위한 서버라면 HTML을 내려주는 것이 의미가 없으므로 템플릿 엔진이 필요하지 않겠죠?)
서버 템플릿 엔진을 사용하면 SSR(Server Side Rendering) 방식을, 클라이언트 템플릿 엔진을 사용하면 CSR(Client Side Rendering) 방식을 채택하는 것입니다. 추가 실습에서 CSR을 위한 REST 컨트롤러를 만들어봤는데요, 여기서 반환하는 JSON 데이터들을 클라이언트가 받아서 미리 만들어둔 HTML과 조립해 사용자에게 제공합니다.
SSR과 CSR이 무엇이 다른지는 알겠는데, 각각 어떤 장단점이 있을까요? 어떠한 기준으로 HTML 파일을 내려줄 방식을 채택해야할까요? 또 웹 프론트에 관심 있으신 분들은 Next.js를 들어보셨을 것 같은데요, Next.js는 SSR과 CSR의 장점을 취하고 단점을 극복하기 위해 나온 프레임워크라고 합니다. Next.js의 전략이 무엇인지 살펴보시는 것도 재밌을 것 같아요.
SSR(서버사이드 렌더링)과 CSR(클라이언트 사이드 렌더링)
👩💻 SSR vs CSR 비교 설명, Next.js가 탄생하게 된 이유
<aside> 💡 교재 132p
</aside>
IndexController의 index() 메소드를 보면 코드는 단순히 문자열을 반환하고 있는데, 지정된 경로에 있는 문자열 이름의 파일을 찾아서 클라이언트에 반환해줍니다. 이 작업은 View Resolver가 해주는데요, 뷰 리졸버는 단순히 경로 찾기만 해주는 것이 아닙니다. 뷰 리졸버는 controller가 반환한 데이터 타입에 따라 결과를 지정해주는 역할을 합니다. 템플릿 엔진을 썼다면 고정된 경로에서 파일을 찾고, RestController에서 객체를 반환했다면 JSON 타입으로 내려줍니다. 스프링 프레임워크의 코드에서 뷰 리졸버는 인터페이스이고, 타입별로 구현된 구현체 클래스가 동적으로 선택되어 실행되겠죠? 무슨 말인지 이해가 가지 않으신다면 인터페이스 다형성에 대해 찾아보시면 좋을 것 같습니다.