웹 애플리케이션의 역사
MPA 방식
- 초창기 웹은 텍스트 중심의 단순 문서로 멀티 페이지 애플리케이션이라고 MPA 방식으로 구현되어 있음
- MPA 는 다중 페이지로 이뤄져 있어 변경사항이 있을 때마다 서버로 페이지를 요청받는 방
- MPA 는 서버로부터 계속해서 HTML 파일을 내려받기 때문에 새로고침이 발생하고, 유저는 새로고침이 발생할 때마다 깜빡이는 화면을 볼 수 밖에 없었음
- 웹이 발전하면서 사진, 영상, 그리고 유저 인터렉션 등이 많아져 복잡도가 높아지면서 MPA 로는 성능 이슈 문제를 맞음
Ajax
- 이런 문제를 해결하기 위해 나온 것이 Ajax 라는 기술.
- Ajax 는 변화가 생길 때마다 통째로 HTML 파일을 서버로부터 내려받는 것이 아닌 필요한 부분만 리로드할 수 있도록 도와주게 되었음
SPA(Single Page Application)
- SPA 다음으로 나온 기술인 싱글 페이지 애플리케이션인 SPA 방식.
- 단일 페이지로 구성되어 Ajax 에서는 계속 HTML 파일을 새로 갱신을 받았지만, 갱신될 부분에서만 데이터를 요청하게 됨
- 따라서 새로고침이 발생하지 않아서 사용자 경험에 좋다는 특징이 있음
설명 이유
이렇게 웹 애플리케이션의 역사를 설명한 이유는 MPA 방식과 SPA 방식이 각각 CSR 과 SSR 방식과 채택하고 있기 때문입니다.
CSR & SSR
CSR 은 클라이언트 사이드 렌더링, SSR 은 서버 사이드 렌더링으로 이름에서 알 수 있듯이 어디서 렌더링을 처리할지에 따라서 차이가 나게 됨
CSR
- CSR 은 클라이언트 측에서 렌더링을 담당을 하는 것이고, 첫 로딩에 빈 HTML 파일에 필요한 번들 파일을 모두 다운로드 받는 방식
- 사용자가 웹에 접속
- 사용자가 웹에 접속하게 되면, 브라우저가 서버에 리소스 요청을 보냄
- 서버는 JS 코드와 CSS 를 불러올 수 있는 빈 HTML 파일을 브라우저에게 전송
- 브라우저는 코드들을 다운받은 후에 렌더링 진행해 사용자에게 페이지 제공
- 이런 방식은 요청을 보내고, 응답의 첫 번째 바이트가 도착하기까지의 시간인 TTFB(Time To First Bye)가 빠르다는 장점이 있지만, 사용자가 화면에서 콘텐츠를 볼 수 있는 페이지 로드 타임라인의 첫 번째 지점인 FCP(First Contentful Paint)는 좋지 않다는 단점이 존재.
SSR
- SSR 은 서버 측에서 렌더링 페이지를 그려서 클라이언트에 내려주는 방식
- SSR 방식에서도 요청 즉시 동적으로 HTML 파일을 만드느냐 아님, 미리 다 만들어둔 정적 페이지를 제공하느냐에 따라서 Static Site Generation 이라는 개념도 나오게 됨
- SSG 는 예로 들어 3명의 사용자가 어떤 특정 블로그 게시글에 방문한다고 했을 때, 모두 같은 내용의 게시글 내용을 확인할 수 있음. 하지만, 마이페이지같은 경우는 3명의 사용자 모두 다른 내용을 보게 됨. 때문에 이렇게 모두에게 같은 내용의 데이터를 제공할 때에는 SSG 방법을 사용하기도 함
- 사용자가 웹에 접속
- 브라우저는 리소스 요청
- 서버는 초기 컨텐츠가 로딩된 페이지를 제공
- 브라우저는 초키 컨텐트가 로딩된 페이지와 JS 코드를 다운받고 먼저 HTML 파일을 사용자에게 보여줌. 해당 페이지는 정적인 페이지이며 버튼을 눌러도 응답이 없을 수도 있음
- 다운받은 JS 코드를 실행해 이벤트리스너들을 할당해서 인터랙티브한 페이지를 제공하게 됨
- SSR 의 장점으로는 FCP(First Content Painting) 이 빠르다는 장점이 있지만, TBT(Total Blocking Time) 이 생긴다는 단점이 존재
- TBT 는 FCP 로부터 TTI(Time To Interact) 사이의 시간을 의미
- TTI 는 사용자가 페이지에서 상호작용이 가능하기까지의 시간을 의미
CSR & SSR 장단점
CSR 장단점
- 장점
- 화면 깜빡임이 없어 좋은 사용자 경험을 제공
- 초기 로딩 이후 구동 속도가 빠름
- 단점
- 초기 구동 속도가 느림
- SEO 가 어려움
SSR 장단점
- 장점
- 초기 로딩속도가 빠름
- SEO 가 쉬움
- 단점
- 페이지를 이동할 때마다 화면이 깜빡여 사용자 경험 저하
- 매번 요청을 보내기 때문에 서버가 과부화 될 우려
SEO 란
- SEO 는 Search Engine Optimization 이라고 해서 웹 사이트 검색 결과가 더 잘 보이도록 최적화 하는 과정을 의미
- 검색을 했을 때 좀 더 상단에 뜨기 위해 최적화를 함
- SEO 는 검색봇이 웹사이트를 크롤링해가면서 정보를 수집하며 색인화 과정을 거침 그래서 이런 저장된 정보를 바탕으로 SEO 를 수행
- 그치만 만약 빈 HTML 파일을 만나게 된다면 검색봇은 어떤 내용의 HTML 파일인지 알 수 없게 됨. 하지만, 구글의 검색봇은 JavaScript 를 실행할 수 있어 해석가능
- SSR 을 통해 초기 콘텐츠가 로딩된 HTML 파일을 일반 검색봇들이 보게 되면 정보를 알 수 있어 검색 우선순위에 해당될 수 있음
어떤 방식이 좋은 방식일까?
- 위 설명에서 알 수 있듯이 각각의 장단점이 존재하고, 필요 이유가 있어 적재적소에 서비스 특징에 맞게 필요한 방식을 채택하는 것이 중요
- 개인적으로는 CSR 은 사내에서만 사용하는 서비스라 SEO 가 불필요한 경우, SSR 은 이커머스 사이트처럼 검색 유입이 중요한 경우와 사용자 경험이 우선시되어 초기 로딩속도가 중요한 경우, SSG 는 데이터 변동이 없는 정적 페이지를 렌더링하는 경우가 될 수 있을 것 같음
CSR + SSR(Univers Rendering)
- 요즘엔 이런 두 방식의 장점을 모두 살려 사용하는 것을 유니버셜 렌더링이라고 함
- 보통 초기 렌더링은 SSR 방식을 사용하고, 다른 페이지로 이동할 때는 CSR 방식을 사용
'Next.js' 카테고리의 다른 글
[NNN]_CSS 서버사이드 렌더링 준비 (0) | 2024.02.25 |
---|---|
[NNN]_트러블슈팅3_SSR시 쿠키 공유하기 (0) | 2024.02.24 |
[NNN]_트러블슈팅2_Infinite Scroll 멈추기 (0) | 2024.02.22 |
[NNN]_express.static 미들웨어, 사진 미리보기 (0) | 2024.02.21 |
[NNN]_multer 로 이미지 업로드하기 (0) | 2024.02.14 |