MMeshOps
AI가 놓치는 엣지 케이스까지: Next.js와 TypeScript 실전
9예상 3입문

[요약] Part 2. 화면을 구성하는 Next.js와 React 기초

Part 2. 화면을 구성하는 Next.js와 React 기초의 핵심 내용을 정리하고 복습하는 요약 회차입니다.

Part 2에서 다룬 React 컴포넌트 생태계와 Next.js 코어 아키텍처를 요약합니다.

  • 화면의 구역을 분할하고 조립하는 방법
  • 컴포넌트 간 데이터 전달 규칙 (Props & State)
  • 서버/클라이언트 컴포넌트의 역할 분담 체계
  • 폴더 기반 라우팅 및 폼 핸들링 핵심 개념 복습

컴포넌트 분리 예시

export default function Board() {
  return (
    <div>
      <PostList />
      <CommentForm />
    </div>
  );
}

화면을 세밀하게 조립하는 블록: 컴포넌트, Props, State

거대한 페이지를 한 번에 찍어내지 않고, 작고 독립적인 부품을 조립하여 완성합니다.

독립적이고 재사용 가능한 UI 부품, 컴포넌트

  • 개념: 버튼, 입력창, 네비게이션 바 등을 각각 독립된 자바스크립트 함수로 쪼갠 단위.
  • AI 프롬프트 팁: "게시판 전체를 만들어 줘" 대신, "글 목록 컴포넌트와 댓글 입력 컴포넌트를 분리해서 만들어 줘"로 세밀하게 지시할 것.

부품 간의 끈끈한 소통: Props와 State

  • Props (Properties): 부모가 자식에게 전달하는 읽기 전용 설정값. (위에서 아래로 단방향 전달)
  • State (상태): 컴포넌트 스스로 기억하고 갱신하는 역동적인 데이터 (예: 체크박스 상태, 모달 열림 여부).
  • 리렌더링: State가 변하면 해당 컴포넌트와 자식 요소들은 새로운 데이터를 반영해 즉시 화면을 다시 그림.

Props와 State의 엄격한 철학적 규칙

  1. 1데이터의 폭포수 원칙: Props는 오직 위에서 아래로(부모에서 자식으로) 단방향으로만 흐릅니다.
  2. 2반응성 원칙: State의 값이 조금이라도 변경되는 순간, 해당 컴포넌트와 하위 컴포넌트들은 즉시 리렌더링 됩니다.

권력의 분할: 서버 컴포넌트와 클라이언트 컴포넌트 구분

Next.js에서 가장 에러가 자주 발생하는, 가장 중요한 두 컴포넌트의 역할 분담입니다.

성능의 제왕, 서버 컴포넌트 (Server Component)

  • 기본값: Next.js의 모든 파일은 특별한 지시어가 없으면 서버 컴포넌트입니다.
  • 역할: 보이지 않는 뒷단 서버에서 실행되며 DB 접근 및 보안 처리에 탁월.
  • 장점: 무거운 JS 덩어리를 브라우저로 보내지 않아 쾌속 로딩 속도완벽한 SEO(검색엔진 최적화) 보장.

상호작용의 선봉장, 클라이언트 컴포넌트 (Client Component)

  • 선언: 파일 최상단에 마법의 주문 `'use client'` 선언 필수.
  • 역할: 브라우저 상에서 동작하며 사용자와 실시간 상호작용 처리.
  • 사용 타이밍: `onClick` 등 이벤트 리스너가 필요하거나, `useState` 등 동적 상태 관리가 필요할 때 사용. (선언 누락 시 치명적 에러 발생)

두 컴포넌트 사이의 정확한 선택 가이드

상황선택이유
서버에서 데이터만 읽어 정적으로 화면에 뿌려줄 때서버 컴포넌트 (지시어 없음)무거운 코드가 유저에게 전송되지 않아 성능이 압도적으로 빠름
클릭(onClick)이나 상태 변화(useState) 등 조작이 수반될 때클라이언트 컴포넌트 ('use client' 명시)지시어 누락 시 이벤트 리스너 인식 불가로 화면 멈춤 에러 발생

직관의 끝: 폴더 시스템 기반의 라우팅과 폼 핸들링

복잡한 설정 파일 없이 폴더 트리만으로 URL과 통신을 조작합니다.

폴더 이름이 곧 접속 주소가 되는 라우팅

  • App Router 규칙: 폴더의 이름과 배치 구조가 곧 브라우저 URL이 됨.
  • 정적 라우팅: `app/profile/settings/page.tsx` ➜ `도메인.com/profile/settings` 접속.
  • 동적 라우팅: `app/products/[id]/page.tsx` ➜ 대괄호를 사용해 수천 개의 유동적인 상품 주소 번호를 한 번에 처리.

사용자 입력 데이터를 다루는 관문, Form 처리

  • 현대적 폼 핸들링: 버튼 클릭 시 화면 통째 깜빡임 없이(새로고침 방지) 부드럽게 데이터를 서버로 전송.
  • Server Actions: 복잡한 API 엔드포인트 없이 폼 데이터를 바로 서버 함수로 밀어 넣을 수 있는 최신 권장 패턴.

개념 퀴즈

퀴즈 답을 맞춰야 학습 완료가 됩니다.

다음 중 Next.js의 서버 컴포넌트와 클라이언트 컴포넌트 생태계에 대한 설명 중 가장 정확한 것은 무엇입니까?

3줄 요약

  1. 1화면은 재사용 가능한 '컴포넌트'로 쪼개 조립하며, 단방향 'Props'와 스스로 기억하는 'State'를 통해 데이터를 통제합니다.
  2. 2데이터를 퍼오는 작업은 가벼운 '서버 컴포넌트'에, 인터랙션이 일어나는 특정 구역은 '클라이언트 컴포넌트'로 역할을 분리합니다.
  3. 3폴더의 구조 자체가 직관적인 라우팅 주소가 되며, Server Actions 등 폼 핸들링으로 깜빡임 없는 데이터 전송을 구현합니다.