index.html 한 장입니다./, /events/1, /user/profile 등 모든 URL이 서버에 요청될 때 서버는 항상 index.html을 내려줍니다.여기서 “불러온다”라는 표현은 조금 더 정확히는
“브라우저가 메모리 안에서 Vue가 가지고 있는 JS/CSS를 이용해 화면을 그린다”가 맞습니다.
실제로 서버가 각 URL별 HTML을 내려주는 게 아니므로, 서버에서 “페이지 전체를 불러온다”는 표현은 SPA에서는 틀린 거예요.
index.html 안에는 <script src="app.7f6a4d9.js">, <link href="style.83a2c1.css">가 포함되어 있습니다.axios.get('/api/events/1')
.then(res => {
this.event = res.data; // 화면에 표시
});
[사용자 브라우저]
|
| URL 요청 (/events/1)
V
[서버(Nginx or Node.js)]
-> 항상 index.html 반환
-> index.html 안에서 JS, CSS, 이미지 다운로드
|
V
[브라우저 안 Vue 앱]
-> 라우터가 URL을 보고 어떤 컴포넌트를 렌더링할지 결정
-> 필요한 데이터(API)만 백엔드로 요청
-> 화면에 표시