컴포넌트 변수란 무엇인가

Week 2의 시작 — 오늘 배우는 개념은 Astro를 벗어나도 그대로 씁니다

집 짓기로 치면 오늘부터 Week 2, 골조를 세우는 단계입니다 — 컴포넌트가 그 골조를 이루는 기본 단위입니다.

10초 핵심 요약

01

템플릿 변수 — 어디에나 있는 "자리 표시자"

결혼식 초대장 100장을 인쇄한다고 생각해보세요. "안녕하세요, [받는사람 이름]님. [예식 날짜]에 초대합니다"라는 틀(템플릿)을 하나만 만들어두고, 인쇄기가 명단을 보면서 이름 자리에만 값을 하나씩 갈아 끼웁니다. 웹사이트도 똑같습니다. 포스트 카드 100개를 각각 손으로 만드는 대신, 카드 틀 하나를 만들고 제목·날짜 자리에 실제 데이터를 갈아 끼웁니다.

원리는 하나입니다: "이 컴포넌트가 화면에 그려지는 순간, 이 자리를 실제 값으로 바꿔치기한다." Astro에서는 이걸 {title}처럼 씁니다.

* 워드프레스는 <?= $title ?>, 옛날 티스토리는 [##_title_##] 식으로 표기만 다르게 씁니다. 지금은 몰라도 됩니다 — 원리를 한 번 익혀두면 나중에 다른 곳에서도 "아, 여기가 그 자리구나" 하고 알아볼 수 있다는 정도만 기억하면 됩니다.

02

실전 적용 — Astro 컴포넌트 props

.astro 파일은 두 부분으로 나뉩니다. 맨 위 ---로 감싼 frontmatter(빌드 타임에 실행되는 JS 코드)와, 그 아래 실제 화면 구조입니다. props는 frontmatter 안에서 Astro.props로 받습니다.

// PostCard.astro
---
const { title, date } = Astro.props; // ① 여기서 값을 받고
---
<div class="card">
  <h2>{title}</h2> // ② 여기서 화면에 꽂습니다
  <p>{date}</p>
</div>

이 컴포넌트를 쓰는 쪽에서는 마치 원래 있던 HTML 태그처럼 값을 넘겨주기만 하면 됩니다.

// index.astro (사용하는 쪽)
---
import PostCard from '../components/PostCard.astro';
---
<PostCard title="오늘의 글" date="2026-07-14" />
중요한 규칙Astro.props로 구조분해할 때 쓰는 이름(title)과, 사용하는 쪽에서 넘겨주는 속성 이름(title="...")이 정확히 일치해야 합니다. 철자 하나만 달라도 값이 조용히 undefined가 됩니다.
03

자주 실패하는 3가지 패턴

증상원인
화면에 "undefined"가 그대로 보임props 이름 오타 (에러 없이 조용히 실패)
컴포넌트 자체가 안 보임상단 import 문 누락
값을 안 넘겼는데 빈 화면이 아니라 오류가 남기본값 없이 필수 값처럼 사용 (TypeScript Props 타입 검사)
안 될 때 확인하세요 props는 대부분 에러 메시지 없이 조용히 실패합니다. 안 될 때는 frontmatter에 console.log(Astro.props)를 잠깐 넣어 실제로 어떤 값이 들어오는지부터 확인하세요. 터미널(빌드 로그)에 출력됩니다.
04

오늘의 실습

1src/components/에 있는 기존 컴포넌트 하나를 열어 Astro.props로 어떤 값을 받는지 찾아봅니다.
2title/date를 props로 받는 아주 단순한 카드 컴포넌트를 직접 만들어 페이지에서 값을 바꿔가며 렌더링해봅니다.
05

Day 8 완료 체크리스트

템플릿 변수가 플랫폼마다 표기만 다를 뿐 원리는 같다는 걸 설명할 수 있다.
Astro.props로 값을 받고 { }로 화면에 꽂는 흐름을 이해했다.
props 이름 오타가 조용히 undefined로 실패한다는 걸 안다.
스스로 설명해보기 — props 이름이 오타 났을 때 왜 에러 없이 조용히 실패하는지 설명할 수 있나요?

오늘의 용어

템플릿 변수
화면이 그려질 때 값으로 바꿔치기되는 자리 (플랫폼 공통 개념)
frontmatter
.astro 파일 맨 위 --- 사이, 빌드 타임에 실행되는 JS 코드 영역
Astro.props
컴포넌트를 사용하는 쪽에서 넘겨준 값을 받는 객체
컴포넌트
재사용 가능한 화면 조각. import해서 HTML 태그처럼 사용