Style QA Test Post

마크다운 요소 렌더링 확인용 테스트 글

  • Haram Lee
  • 2026-03-12
  • memo

헤딩 레벨

h3 제목

h3 아래 본문.

h4 제목

h4 아래 본문.

h5 제목

h5 아래 본문.

h6 제목

h6 아래 본문.

콜아웃

컬럼을 지우기 전에 다운스트림 영향도를 확인한다.

리니지에 잡히지 않는 대시보드가 남아 있을 수 있다.

이 파이프라인의 병목은 어디인가?

  • 소스에서 읽는 데이터 양
  • 셔플 단계의 파티션 수
  • 싱크의 쓰기 처리량

제목 없이 본문만 쓸 수도 있다.

Delta Lake는 ACID 트랜잭션을 지원한다.

파티션 조건 없이 전체 테이블을 스캔하면 비용이 커진다.

프로덕션 토픽의 리텐션을 줄이면 지나간 메시지는 되돌릴 수 없다.

DROP TABLE은 복구되지 않는다.

스키마 레지스트리의 호환성 설정을 먼저 맞춘다.

WHERE dt = CURRENT_DATE() - 1처럼 파티션을 명시한다.

브로드캐스트 조인은 작은 테이블에만 쓴다.

정의되지 않은 타입.

콜아웃 안의 코드:

Airflow DAG 정의

python
with DAG("daily_etl", schedule="0 3 * * *") as dag:
    extract() >> transform() >> load()

코드 블록

인라인 코드: pip install pandas 이렇게 쓸 수 있다.

하이라이팅 없는 text 펜스:

text
Client
  │
  ▼
Root Server
  │
  ├── Intermediate Server
  │
  └── Leaf Server ──▶ Storage

글롭이 든 경로:

text
DEFINE TABLE t AS /path/to/data/*
SELECT TOP(signal1, 100), COUNT(*) FROM t

가로로 긴 코드:

sql
SELECT user_id, event_name, event_timestamp, platform, app_version, country_code, device_model, session_id, experiment_key, variant_name FROM analytics.client_events WHERE dt = CURRENT_DATE() - 1;

Python 코드 펜스:

python
import pandas as pd
from pathlib import Path

def load_data(path: str) -> pd.DataFrame:
    """CSV 파일을 읽어서 DataFrame으로 반환"""
    df = pd.read_csv(Path(path))
    df["created_at"] = pd.to_datetime(df["created_at"])
    return df.dropna(subset=["user_id"])

if __name__ == "__main__":
    data = load_data("events.csv")
    print(f"Loaded {len(data)} rows")

YAML 예시:

yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: api-server
  labels:
    app: harammm
spec:
  replicas: 3

Shell 명령어:

bash
# Kafka 토픽 생성
kafka-topics.sh --create \
  --topic user-events \
  --partitions 6 \
  --replication-factor 3

도구용도상태
Hugo정적 사이트 생성사용 중
Obsidian마크다운 에디터사용 중
Vercel배포사용 중
giscus댓글사용 중

더 긴 표:

이면좋겟네….

학기과목명분류학점
24-1자료구조전공필수A+
24-1이산수학전공필수A
24-2알고리즘전공필수A+
24-2운영체제전공선택A
25-1데이터베이스전공선택A+

인용문

좋은 소프트웨어 설계의 핵심은 변경이 쉬운 구조를 만드는 것이다.

여러 줄 인용문도 테스트.

두 번째 문단이 있는 blockquote. 이렇게 이어질 수 있다.

리스트

순서 없는 리스트:

  • 첫 번째 항목
  • 두 번째 항목
    • 중첩 항목 A
    • 중첩 항목 B
      • 3단 중첩
  • 세 번째 항목

순서 있는 리스트:

  1. Apache Kafka로 이벤트 수집
  2. Spark Structured Streaming으로 실시간 처리
  3. Delta Lake에 적재
  4. dbt로 변환
  5. Looker로 시각화

혼합 리스트:

  1. 데이터 파이프라인 설계
    • 소스 시스템 분석
    • 스키마 정의
    • SLA 설정
  2. 구현
    • Airflow DAG 작성
    • 테스트 데이터 준비
  3. 배포
    • CI/CD 파이프라인
    • 모니터링 대시보드

텍스트 스타일

굵은 텍스트, 기울임 텍스트, 취소선, 굵은 기울임

일반 링크, 외부 링크도 동일하게 보여야 한다.

구분선

위 내용과 아래 내용 사이에 구분선:


구분선 아래 본문이 이어진다.

체크리스트

  • Hugo 테마 구조 설계
  • 타임라인 페이지 구현
  • 다크/라이트 모드
  • 검색 기능
  • i18n 지원

긴 본문 테스트

데이터 엔지니어링에서 가장 중요한 것은 신뢰할 수 있는 데이터 파이프라인을 구축하는 것이다. 파이프라인은 데이터 소스에서 데이터를 추출(Extract)하고, 필요한 형태로 변환(Transform)한 뒤, 목적지에 적재(Load)하는 ETL 또는 ELT 패턴을 따른다.

최근에는 스트리밍 처리의 중요성이 커지면서, 배치 처리와 스트리밍 처리를 통합하는 아키텍처가 주목받고 있다. Apache Kafka를 메시지 브로커로 사용하고, Spark Structured Streaming이나 Flink로 실시간 처리를 수행하는 구조가 일반적이다.

이 프로젝트에서는 다음과 같은 기술 스택을 사용했다:

  1. 수집 계층: Kafka Connect + Debezium으로 CDC 기반 실시간 수집
  2. 처리 계층: Spark Structured Streaming으로 윈도우 집계
  3. 저장 계층: Delta Lake (ACID 트랜잭션 지원)
  4. 오케스트레이션: Airflow 2.x (TaskFlow API)
  5. 모니터링: Prometheus + Grafana

파이프라인의 안정성을 보장하기 위해 데이터 품질 검증(Great Expectations), 스키마 레지스트리(Confluent Schema Registry), 그리고 데이터 리니지 추적(OpenLineage)을 도입했다.

수식

인라인 수식: 시간 복잡도 O(n \log n) , 공간 복잡도 O(n) .

Bayes’ theorem: P(A|B) = \frac{P(B|A) \cdot P(A)}{P(B)}

블록 수식 — Softmax:

\text{softmax}(z_i) = \frac{e^{z_i}}{\sum_{j=1}^{K} e^{z_j}}

Cross-entropy loss:

\mathcal{L} = -\sum_{i=1}^{N} \left[ y_i \log(\hat{y}_i) + (1 - y_i) \log(1 - \hat{y}_i) \right]

Transformer self-attention:

\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right) V

행렬 표현:

\mathbf{W} = \begin{pmatrix} w_{11} & w_{12} & \cdots & w_{1n} \\ w_{21} & w_{22} & \cdots & w_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ w_{m1} & w_{m2} & \cdots & w_{mn} \end{pmatrix}

적분:

\int_{-\infty}^{\infty} e^{-x^2} dx = \sqrt{\pi}

이미지 크기 테스트

기본 (크기 지정 없음):

200px 고정:

400px 고정:

Mermaid 다이어그램

플로우차트:

flowchart LR
    A["Kafka"] --> B["Spark Streaming"]
    B --> C[("Delta Lake")]
    C --> D["dbt"]
    D --> E["Looker"]
    B -.->|"이상 감지"| F["Alert"]

시퀀스 다이어그램:

sequenceDiagram
    participant C as Client
    participant R as Root
    participant L as Leaf
    C->>R: query
    R->>L: rewritten query
    L-->>R: partial result
    R-->>C: final result

문법 오류:

flowchart LR
    A[[[broken

숏코드

링크 카드:

설명 없이 제목만:

YouTube 임베드:

이미지 갤러리 (3열):

이미지 갤러리 (2열):

2단 레이아웃 테스트

왼쪽 칼럼

  • 불릿 리스트
  • 마크다운 작동
  • 굵은 글씨 / inline code
python
print("left")

오른쪽 칼럼

작은 이미지:

인라인 수식: E = mc^2

Discussion