| 1. URL 요청 | 브라우저가 URL 요청 (예: /home). | 브라우저/클라이언트가 API 요청 (예: /api/users). |
| 2. 톰캣 서버 | 톰캣이 요청을 받아 DispatcherServlet으로 전달. | 톰캣이 요청을 받아 DispatcherServlet으로 전달. |
| 3. 스프링 컨테이너 | DispatcherServlet이 URL을 컨트롤러 매핑(예: @GetMapping("/home")) 확인. | DispatcherServlet이 URL을 컨트롤러 매핑(예: @GetMapping("/api/users")) 확인. |
| 4. 컨트롤러 처리 | 컨트롤러가 비즈니스 로직 실행, 모델 데이터 준비 (예: model.addAttribute("name", "John")). | 컨트롤러가 비즈니스 로직 실행, JSON 데이터 반환 (예: return userList). |
| 5. 렌더링 | 템플릿 엔진(Thymeleaf 등)이 모델 데이터를 사용해 동적 HTML 생성 (예: templates/home.html). | 클라이언트(React, Vue.js 등)가 JSON 데이터를 받아 UI 렌더링. |
| 6. 응답 반환 | 톰캣이 동적 HTML을 브라우저에 전송. | 톰캣이 JSON 데이터를 클라이언트에 전송. |
| 7. 정적 컨텐츠 사용 | CSS, JS, 이미지는 /static 폴더에서 제공 (예: <link href="/css/style.css">). | 클라이언트 앱이 자체적으로 정적 파일(CSS, JS) 사용, 서버는 /static에서 제공 가능. |