# Stack이란?

Stack은 정적인 소프트웨어 아키텍처와 기술 스택 다이어그램을 위한 작은 선언형 언어입니다. UTF-8 `.stack` 파일에 컴포넌트, 경계, 관계를 작성하고 좌표, 간격, 경로, 타이포그래피, 시각 표현은 렌더러가 결정합니다.

이 분리는 소스를 간결하고 리뷰하기 쉽게 만들며 버전 관리에도 적합하게 합니다. 같은 문서를 드로잉 명령으로 바꾸지 않고 호환 도구에서 포맷, 검사, 렌더링할 수 있습니다.

## 기본 모델

모든 문서는 언어 버전과 정확히 하나의 다이어그램을 포함합니다. 다이어그램에는 노드와 선택적인 그룹, 엣지, 테마, 레이아웃 의도가 들어갑니다.

```stack
stack 1.0

diagram "Service architecture" {
  node client "Web app" {
    kind client
  }

  node api "API" {
    kind service
    detail "Order orchestration"
  }

  edge client -> api "HTTPS" {
    kind request
  }
}
```

이 소스는 클라이언트가 서비스를 호출한다는 의미를 나타냅니다. 박스 위치나 화살표 경로는 지정하지 않습니다.

## Stack의 설계 목표

- **간결한 작성:** 이름이 있는 노드와 엣지만으로 유용한 다이어그램을 만듭니다.
- **예측 가능한 생성:** 사람과 언어 모델이 같은 개념을 하나의 제한된 방식으로 안정적으로 표현합니다.
- **의미 기반 소스:** 픽셀이 아니라 토폴로지와 의도를 기록합니다.
- **정돈된 출력:** 렌더러가 일관된 시각 시스템을 소유합니다.
- **실행 가능한 오류:** 진단은 소스 범위, 예상 값, 수정 도움말, 관련 선언을 제공할 수 있습니다.
- **안전한 임베딩:** 소스는 코드를 실행하거나 임의 에셋을 가져오거나 HTML/SVG를 삽입할 수 없습니다.

## Stack이 아닌 것

Stack 1.0은 범용 그래프 언어, 픽셀 단위 캔버스, 인프라 정의, 실행 가능한 프로그래밍 언어가 아닙니다. 변수, import, macro, 조건문, CSS, 좌표, 임의 URL, 내장 HTML이 없으며 sequence, state-machine, class, ER, 전체 UML 표기법도 아닙니다.

큰 시스템은 하나에 압축하지 말고 여러 개의 집중된 다이어그램으로 설명하세요. Stack에는 가독성을 위한 요소 제한이 있습니다.

## 처리 모델

도구는 문서 디코딩과 파싱, 식별자와 기본값 해결, 의미 검증, 테마와 아이콘 해결, 레이아웃, 렌더링 순서로 처리합니다. 소스 오류는 렌더링을 중단합니다. 선택적 테마나 아이콘 누락, 만족할 수 없는 레이아웃 힌트는 경고가 되어 fallback 다이어그램을 반환할 수 있습니다.

작성자를 위한 모든 구문은 [언어 페이지](../language/syntax), 호환성과 신뢰 경계는 [버전과 안전성](../reference/versioning-and-safety)에서 설명합니다.
