MVC 구조 완전 쉽게 + @ResponseBody까지

2025. 8. 5. 10:53Spring

🐢 MVC?

Model, View, Controller의 약자 

역할 분리해서 개발 효율성과 유지보수성 높이는 패턴 

안 그러면 코드 스파게티 대환장 파티 

 

🐢 역할분담

 

  • Model: 데이터랑 비즈니스 로직 담당 → 똑똑한 거북이 🐢💻
  • Controller: 요청 받고 Model 불러서 View에 넘김 → 중간 전달 거북이 🐢📨
  • View: 화면 그리기만 함 → 예쁜 거북이 🐢🎨

 

🔥 정리 

Model/Controller는 서버 뇌근육, View는 디자인 담당임

 

🐢 MVC동작 흐름 

1.브라우저에서 URL 요청함 
2. 내장 톰캣 서버가 받음 → 스프링 컨트롤러 호출 
3. 컨트롤러가 name: spring 데이터 세팅하고 hello-template 리턴함 
4. ViewResolver가 templates/hello-template.html 찾음 
5. Thymeleaf가 name 값 넣어서 HTML 생성함 
6.  완성된 HTML 브라우저로 전달 → 거북이 배달 완료 

 

 

🐢 @ResponseBody없을 때?

  • 컨트롤러가 문자열 리턴하면 -> 뷰 이름으로 착각하고 템플릿 찾아감 
  • "hello"리턴하면 hello.html 찾아감 

🐢 @ResponseBody붙으면? 

  • "야 이거 뷰 아니고 그냥 데이터임!" 
  • HTTP 응답 BODY에 그대고 본냄
  • 그래서 브라우저가 HTML 렌더링 안하고 그대로 텍스트 JSON 형식으로 보여줌

🐢 객체를 던지면? 

  • return new Hello("Spring"); 이런식으로 객체 리턴하면? 
  • "문자 아니네ㄸ ㄸ" 스프링이 당황하지 않고 HttpMessageConver호출

🐢 HttpMessageConverter

  • 스프링 내부에 "변환 알바생" 있음
  • 기본 문자처리 : StringHttpMessageConverter
  • 기본 객체처리 : MappingJackson2HrrpMessageConverter(JSON 변환)

🔥 정리 

문자열이면 ? 그냥 문자열 그대로 던짐. 

객체면? JSON으로 변환해서 던짐.

스프링이 문자/JSON 구분해서 자동 변환해줌.

 

MVC는 "역할 분리 거북이 3총사"임 🐢🐢🐢

@ResponseBody는 "뷰 안 거치고 데이터 직배송 거북이(근데 그대로 던지는)"임 🐢🚀