Astro 렌더링 컨텍스트
페이지를 렌더링할 때 Astro는 현재 렌더링에 특정한 런타임 API를 제공합니다. 여기에는 현재 페이지 URL과 같은 유용한 정보와 다른 페이지로 리디렉션하는 등의 작업을 수행하는 API가 포함됩니다.
.astro
컴포넌트에서 이 컨텍스트는 Astro
전역 객체에서 사용할 수 있습니다. 엔드포인트 함수도 이 동일한 컨텍스트 객체를 첫 번째 인수로 사용하여 호출되며, 그 속성은 Astro 전역 속성을 반영합니다.
일부 속성은 요청 시 렌더링되는 경로에서만 사용할 수 있거나 미리 렌더링된 페이지에서 기능이 제한될 수 있습니다.
Astro
전역 객체는 모든 .astro
파일에서 사용할 수 있습니다. 정적 또는 라이브 서버 엔드포인트를 제공하려면 엔드포인트 함수에서, 페이지 또는 엔드포인트가 렌더링될 때 동작을 삽입하려면 미들웨어에서 context
객체를 사용합니다.
컨텍스트 객체
섹션 제목: 컨텍스트 객체다음 프로퍼티는 Astro
전역(예: Astro.props
, Astro.redirect()
)에서 사용할 수 있으며 엔드포인트 함수 및 미들웨어에 전달되는 컨텍스트 객체(예: context.props
, context.redirect()
)에서도 사용할 수 있습니다.
props
섹션 제목: propsprops
는 컴포넌트 속성으로 전달된 값을 포함하는 객체입니다.
props
객체에는 정적 경로를 렌더링할 때 getStaticPaths()
에서 전달된 모든 props
도 포함됩니다.
더 보기: props
로 데이터 전달
params
섹션 제목: paramsparams
는 요청과 일치하는 동적 경로 세그먼트의 값을 포함하는 객체입니다. 해당 키는 페이지 또는 엔드포인트 파일 경로의 매개변수와 일치해야 합니다.
정적 빌드에서는 동적 경로를 미리 렌더링하는데 사용되는 getStaticPaths()
가 반환하는 params
가 됩니다.
경로가 요청 시 렌더링될 때 params
는 동적 경로 패턴의 경로 세그먼트와 일치하는 임의의 값일 수 있습니다.
더 보기: params
url
섹션 제목: url타입: URL
astro@1.0.0
url
은 현재 request.url
값으로 구성된 URL 객체입니다. pathname 및 origin과 같은 요청 URL의 개별 속성과 상호 작용할 때 유용합니다.
Astro.url
은 new URL(Astro.request.url)
을 수행하는 것과 동일합니다.
개발 모드에서 url
은 localhost
URL이 됩니다. 사이트를 빌드할 때 미리 렌더링된 경로는 site
및 base
옵션에 기반한 URL을 받게 됩니다. site
가 구성되지 않은 경우 미리 렌더링된 페이지도 빌드 중에 localhost
URL을 받게 됩니다.
url
을 new URL()
의 인자로 전달하여 새 URL을 만들 수도 있습니다.
site
섹션 제목: site타입: URL | undefined
site
는 Astro 구성의 site
에서 만든 URL
을 반환합니다. Astro 구성에서 site
에 대한 값을 설정하지 않은 경우 undefined
를 반환합니다.
clientAddress
섹션 제목: clientAddress타입: string
astro@1.0.0
clientAddress
는 요청의 IP 주소를 지정합니다. 이 속성은 요청 시 렌더링되는 경로에만 사용할 수 있으며 미리 렌더링된 페이지에는 사용할 수 없습니다.
isPrerendered
섹션 제목: isPrerendered타입: boolean
astro@5.0.0
현재 페이지가 미리 렌더링된 페이지인지 여부를 나타내는 부울입니다.
이 속성을 사용하여 미들웨어에서 조건부 로직을 실행할 수 있습니다(예: 미리 렌더링된 페이지의 헤더에 액세스하지 않도록 하기 위해).
generator
섹션 제목: generator타입: string
astro@1.0.0
generator
는 프로젝트가 실행 중인 Astro의 현재 버전을 제공합니다. 현재 사용 중인 Astro 버전과 함께 <meta name="generator">
태그를 추가하는 편리한 방법입니다. 이 태그는 "Astro v5.x.x"
형식을 따릅니다.
request
섹션 제목: request타입: Request
request
는 표준 Request 객체입니다. 요청의 url
, headers
, method
, 본문을 가져오는 데 사용할 수 있습니다.
미리 렌더링된 페이지에서는 request.url
에 ?type=new
와 같은 검색 매개변수가 포함되지 않습니다. 정적 빌드 중에 값을 미리 결정할 수 없기 때문입니다. 그러나 요청 시 렌더링되는 페이지에서는 request.url
에 검색 매개변수가 포함됩니다. 서버 요청으로부터 값을 결정할 수 있기 때문입니다.
response
섹션 제목: response타입: ResponseInit & { readonly headers: Headers }
response
는 표준 ResponseInit
객체입니다. 다음과 같은 구조를 가집니다.
status
: 응답의 숫자 상태 코드(예:200
).statusText
: 상태 코드와 연관된 상태 메시지(예:'OK'
).headers
: 응답의 HTTP 헤더를 설정하는 데 사용할 수 있는Headers
인스턴스.
Astro.response
는 페이지의 응답의 status
, statusText
, headers
를 설정하는 데 사용됩니다.
헤더를 설정할 수도 있습니다:
redirect()
섹션 제목: redirect()타입: (path: string, status?: number) => Response
astro@1.5.0
redirect()
는 다른 페이지로 리디렉션할 수 있는 Response 객체를 반환하며, 선택적으로 HTTP 응답 상태 코드를 두 번째 파라미터로 제공합니다.
리디렉션이 발생하려면 하위 컴포넌트가 아닌 페이지가 Astro.redirect()
의 결과를 반환
해야 합니다.
정적으로 생성된 경로에서는 <meta http-equiv="refresh">
태그를 사용하여 클라이언트 리디렉션을 생성하며 상태 코드는 지원하지 않습니다.
요청 시 렌더링되는 경로에서는 리디렉션 시 사용자 지정 상태 코드를 설정하는 것이 지원됩니다. 지정하지 않으면 리디렉션은 302
상태 코드와 함께 제공됩니다.
다음 예시는 사용자를 로그인 페이지로 리디렉션합니다:
rewrite()
섹션 제목: rewrite()타입: (rewritePayload: string | URL | Request) => Promise<Response>
astro@4.13.0
rewrite()
를 사용하면 브라우저를 새 페이지로 리디렉션하지 않고 다른 URL 또는 경로의 콘텐츠를 제공할 수 있습니다.
이 메서드는 경로 위치에 대한 문자열, URL
또는 Request
를 받습니다.
명시적 경로를 제공하려면 문자열을 사용합니다:
리라이트를 위한 URL 경로를 구성해야 한다면 URL
타입을 사용합니다. 다음 예시는 상대 "../"
경로에서 새 URL을 생성하여 페이지의 상위 경로를 렌더링합니다:
새 경로에 대해 서버로 전송되는 Request
를 완벽하게 제어하려면 Request
타입을 사용합니다. 다음 예시는 상위 페이지를 렌더링하는 요청에 헤더를 포함하여 전송합니다:
locals
섹션 제목: locals
Added in:
astro@2.4.0
locals
는 요청의 수명 주기 동안 임의의 정보를 저장하고 액세스하는 데 사용되는 객체입니다. Astro.locals
는 미들웨어가 설정한 context.locals
객체의 모든 값을 포함하는 객체입니다. 이를 사용하여 .astro
파일에서 미들웨어가 반환한 데이터에 액세스할 수 있습니다.
미들웨어 함수는 context.locals
의 값을 읽고 쓸 수 있습니다:
Astro 컴포넌트와 API 엔드포인트는 렌더링할 때 locals
에서 값을 읽을 수 있습니다:
preferredLocale
섹션 제목: preferredLocale타입: string | undefined
astro@3.5.0
preferredLocale
은 방문자의 브라우저 언어 기본 설정과 사이트에서 지원하는 로케일 간에 가장 잘 일치하는 것을 찾기 위해 계산된 값입니다.
이 값은 i18n.locales
배열에 구성된 로케일과 Accept-Language
헤더를 통해 사용자의 브라우저에서 지원하는 로케일을 확인하여 계산됩니다. 일치하는 항목이 없으면 이 값은 undefined
입니다.
이 속성은 요청 시 렌더링되는 경로에서만 사용할 수 있으며 미리 렌더링된 정적 페이지에는 사용할 수 없습니다.
preferredLocaleList
섹션 제목: preferredLocaleList타입: string[] | undefined
astro@3.5.0
preferredLocaleList
는 브라우저에서 요청하고 웹사이트에서 지원하는 모든 로케일의 배열을 나타냅니다. 이렇게 하면 사이트와 방문자 간에 호환되는 모든 언어의 목록이 생성됩니다.
브라우저에서 요청한 언어가 로케일 배열에 없으면 값은 []
가 됩니다. 이는 방문자가 선호하는 로케일을 지원하지 않을 때 발생합니다.
브라우저에 기본 설정 언어가 지정되지 않은 경우 이 값은 i18n.locales
가 되며, 기본 설정이 없는 방문자에게는 지원되는 모든 로케일이 동일하게 기본 설정된 것으로 간주됩니다.
이 속성은 요청 시 렌더링되는 경로에서만 사용할 수 있으며 미리 렌더링된 정적 페이지에는 사용할 수 없습니다.
currentLocale
섹션 제목: currentLocale타입: string | undefined
astro@3.5.6
locales
구성에 지정된 구문을 사용하여 현재 URL에서 계산된 로케일입니다. URL에 /[locale]/
접두사가 포함되지 않았다면 기본값은 i18n.defaultLocale
이 됩니다.
getActionResult()
섹션 제목: getActionResult()타입: (action: TAction) => ActionReturnType<TAction> | undefined
astro@4.15.0
getActionResult()
는 액션 제출의 결과를 반환하는 함수입니다. 이 함수는 액션 함수(예: actions.logout
)를 인수로 받아 제출이 수신되면 data
또는 error
객체를 반환합니다. 그렇지 않으면 undefined
을 반환합니다.
callAction()
섹션 제목: callAction()
Added in:
astro@4.15.0
callAction()
은 Astro 컴포넌트에서 액션 핸들러를 직접 호출하는 데 사용되는 함수입니다. 이 함수는 액션 함수를 첫 번째 인수로 받고(예: actions.logout
), 액션이 수신하는 모든 입력을 두 번째 인수로 받습니다. 이 함수는 액션의 결과를 프로미스로 반환합니다.
routePattern
섹션 제목: routePattern타입: string
astro@5.0.0
현재 페이지 또는 경로를 생성하는 경로 패턴입니다. 파일 기반 라우팅에서는 경로를 생성하는 데 사용되는 프로젝트의 파일 경로와 유사합니다. 통합이 프로젝트의 경로를 생성하는 경우 context.routePattern
은 injectRoute.pattern
의 값과 동일합니다.
이 값은 선행 슬래시로 시작하며 파일 확장자가 없는 src/pages/
폴더를 기준으로 한 페이지 컴포넌트의 경로와 유사하게 표시됩니다.
예를 들어, src/pages/en/blog/[slug].astro
파일은 routePattern
에 대해 /en/blog/[slug]
를 반환합니다. 해당 파일에 의해 생성된 사이트의 모든 페이지(예: /en/blog/post-1/
, /en/blog/post-2/
등)는 routePattern
에 대해 동일한 값을 공유합니다. index.*
경로의 경우, 경로 패턴에 “index.”라는 단어가 포함되지 않습니다. 예를 들어 src/pages/index.astro
는 /
를 반환합니다.
이 속성을 사용하여 컴포넌트를 렌더링하는 경로를 파악할 수 있습니다. 이를 통해 유사하게 생성된 페이지 URL을 함께 타겟팅하거나 분석할 수 있습니다. 예를 들어 특정 정보를 조건부로 렌더링하거나 어떤 경로가 느린지에 대한 메트릭을 수집하는 데 사용할 수 있습니다.
cookies
섹션 제목: cookies타입: AstroCookies
astro@1.4.0
cookies
에는 요청 시 렌더링되는 경로에 대한 쿠키를 읽고 조작하기 위한 유틸리티가 포함되어 있습니다.
쿠키 유틸리티
섹션 제목: 쿠키 유틸리티cookies.get()
섹션 제목: cookies.get()타입: (key: string, options?: AstroCookieGetOptions) => AstroCookie | undefined
쿠키를 AstroCookie
객체로 가져옵니다. 이 객체에는 value
와 쿠키를 문자열이 아닌 타입으로 변환하기 위한 유틸리티 함수가 포함되어 있습니다.
cookies.has()
섹션 제목: cookies.has()타입: (key: string, options?: AstroCookieGetOptions) => boolean
이 쿠키가 존재하는지 여부. 쿠키가 Astro.cookies.set()
을 통해 설정된 경우 true를 반환하고, 그렇지 않으면 Astro.request
에서 쿠키를 확인합니다.
cookies.set()
섹션 제목: cookies.set()타입: (key: string, value: string | object, options?: AstroCookieSetOptions) => void
쿠키의 key
를 지정된 값으로 설정합니다. 쿠키 값을 문자열로 변환하려고 시도합니다. 옵션은 maxAge
또는 httpOnly
와 같은 쿠키 기능을 설정하는 방법을 제공합니다.
cookies.delete()
섹션 제목: cookies.delete()타입: (key: string, options?: AstroCookieDeleteOptions) => void
만료일을 과거(유닉스 시간 기준 0)로 설정하여 쿠키를 무효화합니다.
쿠키가 “삭제”(만료)되면 Astro.cookies.has()
는 false
를 반환하고 Astro.cookies.get()
은 value
가 undefined
인 AstroCookie
를 반환합니다. 쿠키를 삭제할 때 사용할 수 있는 옵션은 다음과 같습니다: domain
, path
, httpOnly
, sameSite
, secure
.
cookies.merge()
섹션 제목: cookies.merge()타입: (cookies: AstroCookies) => void
새 AstroCookies
인스턴스를 현재 인스턴스에 병합합니다. 새 쿠키가 현재 인스턴스에 추가되고 같은 이름의 쿠키가 있으면 기존 값을 덮어씁니다.
cookies.headers()
섹션 제목: cookies.headers()타입: () => Iterator<string>
응답과 함께 전송될 Set-Cookie
의 헤더 값을 가져옵니다.
AstroCookie
타입
섹션 제목: AstroCookie 타입Astro.cookies.get()
을 통해 쿠키를 가져올 때 반환되는 타입입니다. 다음과 같은 속성을 가집니다:
value
섹션 제목: value타입: string
쿠키의 원시 문자열 값입니다.
json
섹션 제목: json타입: () => Record<string, any>
JSON.parse()
를 통해 쿠키 값을 구문 분석하여 객체를 반환합니다. 쿠키 값이 유효한 JSON이 아닐 경우 오류가 발생합니다.
number
섹션 제목: number타입: () => number
쿠키 값을 숫자로 구문 분석합니다. 유효한 숫자가 아닌 경우 NaN을 반환합니다.
boolean
섹션 제목: boolean타입: () => boolean
쿠키 값을 부울로 변환합니다.
AstroCookieGetOptions
섹션 제목: AstroCookieGetOptions
Added in:
astro@4.1.0
AstroCookieGetOption
인터페이스를 사용하면 쿠키를 받을 때 옵션을 지정할 수 있습니다.
decode
섹션 제목: decode타입: (value: string) => string
쿠키가 값으로 역직렬화되는 방식을 사용자 지정할 수 있습니다.
AstroCookieSetOptions
섹션 제목: AstroCookieSetOptions
Added in:
astro@4.1.0
AstroCookieSetOptions
는 쿠키를 설정할 때 Astro.cookies.set()
에 전달하여 쿠키 직렬화 방식을 사용자 지정할 수 있는 객체입니다.
domain
섹션 제목: domain타입: string
도메인을 지정합니다. 도메인을 설정하지 않으면 대부분의 클라이언트는 현재 도메인에 적용되는 것으로 해석합니다.
expires
섹션 제목: expires타입: Date
쿠키가 만료되는 날짜를 지정합니다.
httpOnly
섹션 제목: httpOnly타입: boolean
true이면 클라이언트 측에서 쿠키에 액세스할 수 없습니다.
maxAge
섹션 제목: maxAge타입: number
쿠키가 유효한 기간(초)을 숫자로 지정합니다.
path
섹션 제목: path타입: string
쿠키가 적용되는 도메인의 하위 경로를 지정합니다.
sameSite
섹션 제목: sameSite타입: boolean | 'lax' | 'none' | 'strict'
SameSite 쿠키 헤더의 값을 지정합니다.
secure
섹션 제목: secure타입: boolean
true인 경우 쿠키는 https 사이트에만 설정됩니다.
encode
섹션 제목: encode타입: (value: string) => string
쿠키가 직렬화되는 방식을 사용자 지정할 수 있습니다.
더 이상 사용되지 않는 객체 속성
섹션 제목: 더 이상 사용되지 않는 객체 속성Astro.glob()
섹션 제목: Astro.glob()Vite의 import.meta.glob
을 사용하여 프로젝트 파일을 쿼리합니다.
Astro.glob('../pages/post/*.md')
를 다음과 같이 변환할 수 있습니다.
Object.values(import.meta.glob('../pages/post/*.md', { eager: true }));
더 많은 정보와 사용법은 가져오기 가이드를 참조하세요.
Astro.glob()
은 정적 사이트 설정에 많은 로컬 파일을 로드하는 방법입니다.
.glob()
은 하나의 매개변수만 받습니다: 가져오려는 로컬 파일의 상대 URL. 이 함수는 비동기식이며 일치하는 파일에서 내보낸 값들로 이루어진 배열을 반환합니다.
.glob()
은 통계적으로 분석할 수 없으므로 변수나 보간하는 문자열을 받을 수 없습니다. (해결 방법은 가져오기 가이드를 참조하세요.) 이는 Astro.glob()
이 Vite의 import.meta.glob()
의 래퍼이기 때문입니다.
다음과 같은 경우 Astro 프로젝트에서 import.meta.glob()
를 사용할 수도 있습니다:
- API 라우트와 같이
.astro
가 아닌 파일인 경우.Astro.glob()
은.astro
파일에서만 사용할 수 있지만import.meta.glob()
은 프로젝트의 어느 곳에서나 사용할 수 있습니다. - 각 파일을 즉시 로드하고 싶지 않은 경우.
import.meta.glob()
은 콘텐츠 자체를 반환하는 대신 파일 콘텐츠를 가져오는 함수를 반환할 수 있습니다. 여기에는 가져온 파일에 대한 모든 스타일과 스크립트가 포함됩니다. 파일이 실제로 사용되는지 여부는 런타임이 아닌 정적 분석에 의해 결정되므로 이러한 파일은 번들로 묶여 페이지에 추가됩니다. - 각 파일의 경로에 액세스하려는 경우.
import.meta.glob()
은 파일 경로의 콘텐츠 맵을 반환하고Astro.glob()
은 콘텐츠 목록을 반환합니다. - 여러 패턴을 전달하려는 경우(예를 들어, 특정 파일을 필터링하기 위한 “네거티브 패턴” 등을 추가하려는 경우).
import.meta.glob()
는 선택적으로 단일 문자열이 아닌 문자열 배열을 받을 수 있습니다.
Vite 문서에서 더 자세히 알아보세요.
Markdown 파일
섹션 제목: Markdown 파일Astro.glob()
으로 가져온 Markdown 파일은 다음과 같은 MarkdownInstance
인터페이스를 반환합니다:
선택적으로 TypeScript 제네릭을 사용하여 frontmatter
변수에 타입을 제공할 수 있습니다.
Astro 파일
섹션 제목: Astro 파일Astro 파일에는 다음과 같은 인터페이스가 있습니다:
기타 파일
섹션 제목: 기타 파일기타 파일에는 다양한 인터페이스가 있을 수 있지만 Astro.glob()
은 인식할 수 없는 파일 형식이 정확히 무엇인지 알고 있는 경우 TypeScript 제네릭을 허용합니다.