스프링 부트에서 의존성(Dependency)은 우리 프로젝트가 제대로 동작하기 위해 필요한 외부 라이브러리나 외부 코드를 의미합니다.
프로그램을 만들 때 모든 기능을 처음부터 끝까지 직접 개발하는 것은 비효율적입니다.
그래서 이미 다른 사람들이 만들어 놓은 편리한 기능(부품)을 가져와 조립해서 사용하는데, 이것이 바로 '의존성'입니다.
서블릿이란?
서버에서 실행되어 클라이언트의 요청을 처리하고, 그 결과를 동적으로 생성하여 응답하는 자바 프로그램입니다.
즉, 정적인 데이터가 아니라, 요청에 따라 다른 결과를 만들어내는 똑똑한 자바 클래스입니다.
자바 웹 애플리케이션에서 특정 URL 요청에 대한 비즈니스 로직을 실행하는 핵심입니다.
→ server(서버) + -let(작은)의 합성어로 작은 서버라는 뜻에서 지어졌습니다
📌jakarta.servlet.http.HttpServlet 클래스를 상속받아 구현합니다.우리가 만든 서블릿 클래스(.java)는 스스로 실행될 수 없습니다.
서블릿을 실행하고 관리하며 웹 서버와 통신하게 해주는 전문적인 환경이 필요한데, 이를 서블릿 컨테이너라고 합니다.
그리고 가장 대표적인 서블릿 컨테이너가 바로 톰캣(Tomcat)입니다.
📌우리가 서블릿에서 겪었던 가장 큰 문제는 역할 분담의 부재였습니다.
📚MVC패턴이란?
MVC 패턴은 하나의 Servlet이 혼자 모든 것을 처리하던 문제를 해결하기 위해
애플리케이션의 코드를 세 가지 역할로 명확하게 나누는 설계 방식입니다.
타임리프(Thymeleaf)란?
서버에서 HTML을 동적으로 만들어주는 자바 기반의 도구, 즉 템플릿 엔진입니다.
→ HTML을 동적으로 만들어줄 수 있음에 주목해주세요!
SSR은 서버가 웹 페이지에 필요한 모든 데이터를 채워 넣어 완벽하게 조립된 HTML 페이지를 브라우저에게 전달하는 방식입니다.
사용자는 거의 즉시 콘텐츠를 볼 수 있어 초기 로딩 속도가 빠르고, 모든 내용이 HTML에 포함되어 있어 검색 엔진 최적화(SEO)에 유리합니다.
타임리프가 바로 이 SSR 방식입니다.
💡쉽게 말하자면 서버에서 완성된 HTML을 통째로 주는 것입니다.
CSR은 서버가 거의 텅 빈 HTML 뼈대와 자바스크립트 파일만 보내주는 방식입니다.
그러면 사용자 브라우저(클라이언트)가 자바스크립트를 실행해 필요한 데이터를 서버에 다시 요청하고, 브라우저가 직접 페이지를 조립하여 ****화면에 그립니다.
💡쉽게 말하자면 클라이언트에서 자바스크립트로 그 때 그 때 HTML을 그려내는 것입니다.
React나 Vue 같은 최신 프론트엔드 프레임워크들이 이 방식을 사용합니다.
CSR은 초기 로딩은 느릴 수 있지만, 이후에는 앱처럼 부드럽고 빠른 화면 전환이 가능합니다.
✅ Controller와 RestController
전통적인 Spring MVC의 컨트롤러인 @Controller는 주로 View를 반환하기 위해 사용합니다.
@RestController는 @Controller에 @ResponseBody가 추가된 것입니다.
📌@ResponseBody란?
@ResponseBody는 Spring MVC 컨트롤러의 메서드에 사용되는 어노테이션입니다.
이 어노테이션이 붙은 메서드가 반환하는 값은 View를 찾는 데 사용되지 않고, HTTP 응답 본문(Response Body)에 직접 작성됩니다.
즉, JSON 형식으로 리턴하기 위해 필수적으로 사용해야하는 어노테이션입니다.
✅ PathVariable과 RequestParam은 언제 어떤 것을 써야할까?
@PathVariable은 URL 경로 자체에 값이 포함되기 때문에 반드시 값이 있어야 합니다.
@RequestParam은 쿼리 파라미터(?key=value)를 받아오게 되는데 각 Key/Value 값은 조건부입니다.
즉, 있어도 되고 없어도 되는 값일 때 사용합니다. 주로 검색용에 많이 쓰입니다.