[Next.js] Rendering

귤티·2025년 4월 16일

Next.js

목록 보기
4/6

Rendering

Rendering은 내가 작성한 코드를 유저 인터페이스로 변환한다.
React와 Next.js는 코드 일부를 서버 또는 클라이언트로 렌더링할 수 있는 하이브리드 웹 애플리케이션을 생성해준다.

기초 지식

  • 애플리케이션 코드는 server 또는 client 환경에서 실행될 수 있다.
  • Request-Response Lifecycle은 유저가 애플리케이션에 방문하거나 상호작용할 때 시작된다.
  • Network Boundary는 server와 client 코드를 분리한다.

Rendering 환경

웹 애플리케이션이 렌더링될 수 있는 환경이 2가지가 있다.
1. client

  • 서버에 애플리케이션 코드를 요청한다.
  • 서버로부터 유저 인터페이스로 응답이 돌아온다.
  1. server
  • 애플리케이션 코드를 저장 중인 데이터센터 있는 컴퓨터를 의미한다.
  • 클라이언트로부터 요청을 받고 적절한 응답을 반환한다.

역사적으로, 개발자는 서버와 클라이언트 코드를 작성할 때 다른 언어와 프레임워크를 사용해왔다.
React를 사용하면서 개발자는 같은 언어와 같은 프레임워크를 사용할 수 있게 되었다.
이 유연성은 context switching 없이 두 환경 모두에게 비슷하게 코드를 작성할 수 있다.
하지만 각각의 환경은 자기만의 기능과 제약사항을 가진다. 그렇기에 서버와 클라이언트 코드가 항상 같지 않다. 어느 한 환경에 알맞는 연산이 있다.

Request-Response Lifecycle

널리 알려진 Request-Response Lifecycle은 다음과 같다:
1. User Action

  • 링크를 클릭하거나, 폼을 제출하거나, 브라우저 주소창에 URL을 직접적으로 타이핑하는 것처럼 유저는 웹 애플리케이션과 상호작용한다.
  1. HTTP Request
  • 클라이언트가 서버로 HTTP 요청을 보낸다. 요청한 자원에 대한 필수적인 정보를 포함해서 보낸다.
  • GET, POST 메소드가 사용된다.
  • 필요하면 추가 정보도 함께 붙인다.
  1. Server
  • 서버는 요청을 처리하고 적절한 자원을 응답한다.
  • routing, fetching data 등의 단계를 거친다.
  1. HTTP Response
  • 요청이 처리된 후에 서버는 클라이언트에게 HTTP 응답을 보낸다.
  • 이 응답은 status code와 요청된 자원을 포함하고 있다.
  1. 클라이언트
  • 클라이언트는 받은 리소스를 유저 인터페이스에 렌더하기 위해 파싱한다.
  1. 유저 액션
  • 유저 인터페이스가 렌더되고 나면, 유저는 상호작용할 수 있고 모든 과정이 다시 시작된다.

하이브리드 웹 애플리케이션을 만드는 중요한 부분은 라이프사이클에서 작동을 어떻게 분리할지를 결정하는 것이고 네트워크 바운더리를 어디에 둘 것인가를 결정하는 것이다.

Network Boudary

  • 다른 환경을 분리하는 개념적인 선이다.
    리액트에서, 가장 알맞은 곳으로 클라이언트-서버 네트워크 바운더리를 둘 곳을 정할 수 있다.

작동은 두 가지 부분으로 분리된다.:

  • client module graph
  • server module graph

서버 모듈 그래프는 클라이언트에게 렌더되는 모든 컴포넌트를 포함한다.

바운더리를 설정하는 데에 "use client"를 사용할 수 있다.
"use server"도 사용 가능하다.

Building Hybrid Applications

애플리케이션의 코드 흐름이 단방향으로 생각하면 도움이 된다!
-> 응답하는 동안 코드는 서버에서 클라이언트로 간다.

클라이언트로부터 서버에 접근해야할 때 같은 요청을 재사용하기 보다는 서버로 새로운 요청을 보낸다.

개발자가 결과를 클라이언트에게 보내고 애플리케이션을 인터랙티브하게 만들기 전에 서버에서 실행할 것을 권장한다.

profile
취준 진입

0개의 댓글