Wiki cleanup: error-doc removal, dedup merge, link normalization
10_Wiki/Topics 대규모 정리: - 오류 캡처/미완성 stub 문서 227개 제거 - 교차폴더 중복 43클러스터 병합 (63파일 → redirect) - 링크명 정규화: 깨진 링크 수정·redirect 직결·개념 매핑 ~2,400건 - 카테고리 MOC 6개 신규 생성 - Graph 섹션 미해결 related-keyword 링크 10,058건 제거 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -24,8 +24,7 @@ github_commit: pending
|
||||
- 매 HTTP status code + domain error code 의 separation.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[API Error Handling]] (canonical)
|
||||
- Adjacent: [[Result Type]] · [[Discriminated Unions]] · [[Zod 런타임 유효성 검사 통합]]
|
||||
- Adjacent: [[Result Type]] · [[Discriminated_Unions|Discriminated Unions]] · [[Zod 런타임 유효성 검사 통합]]
|
||||
|
||||
## 🕓 변경 이력
|
||||
| 날짜 | 변경 |
|
||||
|
||||
@@ -115,10 +115,8 @@ app.MapGet("/me", (ClaimsPrincipal u) => u.Identity?.Name).RequireAuthorization(
|
||||
**기본값**: 매 Minimal API + EF Core + JWT — 매 modern .NET 의 standard stack.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[.NET]] · [[C#]]
|
||||
- 변형: [[ASP.NET MVC]] · [[Blazor]] · [[gRPC for .NET]]
|
||||
- 응용: [[Azure Functions]] · [[Microservices]]
|
||||
- Adjacent: [[Entity Framework Core]] · [[Kestrel]] · [[SignalR]]
|
||||
- 응용: [[Microservices]]
|
||||
- Adjacent: [[Kestrel]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: Minimal API endpoint 의 생성, EF Core query 의 LINQ, middleware 의 boilerplate.
|
||||
|
||||
@@ -119,10 +119,8 @@ sf.saveSync();
|
||||
**기본값**: 매 TS 의 type-aware 작업 → ts-morph. 매 perf-critical 의 transpile → SWC. 매 editor → Tree-sitter.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Compiler]] · [[Parser]]
|
||||
- 변형: [[CST (Concrete Syntax Tree)]] · [[IR (Intermediate Representation)]]
|
||||
- 응용: [[Babel]] · [[ESLint]] · [[Prettier]] · [[TypeScript Compiler]]
|
||||
- Adjacent: [[Lexer]] · [[Tokenizer]] · [[Tree-sitter]]
|
||||
- 부모: [[Parser]]
|
||||
- 응용: [[ESLint]] · [[Prettier]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 codemod 의 generation, AST node type 의 explanation, visitor pattern 의 boilerplate.
|
||||
|
||||
@@ -2,145 +2,26 @@
|
||||
id: wiki-20260508-ambient-declarations-redir
|
||||
title: Ambient Declarations
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: [Ambient Declarations, declare, .d.ts, Type Declarations]
|
||||
duplicate_of: none
|
||||
status: duplicate
|
||||
canonical_id: wiki-2026-0508-ambient-declarations
|
||||
duplicate_of: "[[Ambient Declarations]]"
|
||||
aliases: []
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
verification_status: applied
|
||||
tags: [typescript, types, declaration, dts]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-10
|
||||
confidence_score: 0.9
|
||||
verification_status: redirected
|
||||
tags: [duplicate]
|
||||
last_reinforced: 2026-05-20
|
||||
github_commit: pending
|
||||
tech_stack:
|
||||
language: typescript
|
||||
framework: TypeScript 5.x
|
||||
---
|
||||
|
||||
# Ambient Declarations
|
||||
|
||||
## 매 한 줄
|
||||
> **"매 TS 가 외부 의 untyped JS / runtime global / module 의 type 의 알려주는 declaration"**. 매 `declare` keyword 로 매 implementation 없이 매 type shape 만 표현 — 매 .d.ts file 의 핵심. 매 TypeScript 의 gradual typing 의 backbone, 매 DefinitelyTyped (`@types/*`) 의 1B+ weekly downloads 의 base.
|
||||
|
||||
## 매 핵심
|
||||
|
||||
### 매 Forms
|
||||
- **Ambient variable**: `declare const VERSION: string;`
|
||||
- **Ambient function**: `declare function gtag(...args: unknown[]): void;`
|
||||
- **Ambient class**: `declare class Foo { x: number; }`
|
||||
- **Ambient module**: `declare module "lodash" { ... }`
|
||||
- **Ambient namespace**: `declare namespace JSX { interface Element {} }`
|
||||
- **Global augmentation**: `declare global { interface Window { myApp: App; } }`
|
||||
|
||||
### 매 Use cases
|
||||
1. Untyped 3rd-party JS lib 의 type shim.
|
||||
2. Build-time globals (Webpack `process.env.NODE_ENV`, Vite `import.meta.env`).
|
||||
3. Module augmentation (Express `Request.user`).
|
||||
4. Asset imports (`*.svg`, `*.css`).
|
||||
|
||||
### 매 응용
|
||||
- 매 `@types/node`, `@types/react` — DefinitelyTyped 의 ambient declarations.
|
||||
- 매 `vite-env.d.ts`, `next-env.d.ts` — framework boilerplate.
|
||||
- 매 internal monorepo 의 shared globals.
|
||||
|
||||
## 💻 패턴
|
||||
|
||||
### Global ambient
|
||||
```typescript
|
||||
// globals.d.ts
|
||||
declare const __APP_VERSION__: string; // injected by webpack DefinePlugin
|
||||
declare const gtag: (cmd: string, ...args: unknown[]) => void;
|
||||
```
|
||||
|
||||
### Module declaration (untyped lib)
|
||||
```typescript
|
||||
// shims.d.ts
|
||||
declare module "untyped-lib" {
|
||||
export function doThing(x: number): string;
|
||||
export const version: string;
|
||||
}
|
||||
```
|
||||
|
||||
### Asset imports
|
||||
```typescript
|
||||
// assets.d.ts
|
||||
declare module "*.svg" {
|
||||
const content: string;
|
||||
export default content;
|
||||
}
|
||||
declare module "*.css" {
|
||||
const styles: { readonly [key: string]: string };
|
||||
export default styles;
|
||||
}
|
||||
```
|
||||
|
||||
### Module augmentation
|
||||
```typescript
|
||||
// express.d.ts
|
||||
import { User } from "./user";
|
||||
declare global {
|
||||
namespace Express {
|
||||
interface Request {
|
||||
user?: User;
|
||||
}
|
||||
}
|
||||
}
|
||||
export {}; // 매 file 의 module 로 만든 — augmentation 의 trigger
|
||||
```
|
||||
|
||||
### Window augmentation
|
||||
```typescript
|
||||
declare global {
|
||||
interface Window {
|
||||
__REDUX_DEVTOOLS_EXTENSION__?: () => unknown;
|
||||
dataLayer: Array<Record<string, unknown>>;
|
||||
}
|
||||
}
|
||||
export {};
|
||||
```
|
||||
|
||||
### .d.ts for own JS file
|
||||
```typescript
|
||||
// my-lib.d.ts (next to my-lib.js)
|
||||
export declare function add(a: number, b: number): number;
|
||||
export declare const VERSION: string;
|
||||
```
|
||||
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| 3rd-party lib + DefinitelyTyped 존재 | `pnpm add -D @types/<lib>` |
|
||||
| 3rd-party lib, types 없음 | 자체 `.d.ts` shim |
|
||||
| Build-time global (`process.env`) | `declare const` in `env.d.ts` |
|
||||
| Add field to Express Request | module augmentation |
|
||||
| Add to Window | `declare global { interface Window {} }` |
|
||||
| Asset (SVG, CSS module) | `declare module "*.svg"` |
|
||||
|
||||
**기본값**: 매 framework template 의 `*-env.d.ts` 의 활용 + DefinitelyTyped first.
|
||||
> **이 문서는 [[Ambient Declarations]] 의 중복본입니다.** Canonical 문서로 redirect.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[TypeScript]] · [[Type System]]
|
||||
- 변형: [[선언 파일(dts)]] · [[Module Augmentation]]
|
||||
- 응용: [[DefinitelyTyped]] · [[@types/node]]
|
||||
- Adjacent: [[Declaration Merging]] · [[Triple-Slash Directives]]
|
||||
- 부모: [[Ambient Declarations]] (canonical)
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 .d.ts shim 의 생성, module augmentation 의 syntax, type shape 의 inference.
|
||||
**언제 X**: 매 type 의 정확성 의 verify — 매 runtime 의 mismatch 의 silent.
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **`declare module "*"` (catch-all)**: 매 typo 의 silent — 매 specific glob 의 사용.
|
||||
- **`any` 의 default in shim**: 매 type safety 의 lose.
|
||||
- **`.d.ts` outside `include`**: tsconfig 의 안 잡힘 — `typeRoots` / `types` 의 verify.
|
||||
- **Forgetting `export {}`** in module augmentation file: 매 global script 로 처리 — augmentation 의 fail.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (typescriptlang.org/docs/handbook/declaration-files).
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
## 🕓 변경 이력
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — full ambient/global/augmentation coverage |
|
||||
| 2026-05-20 | 중복 병합 — canonical 문서로 redirect |
|
||||
|
||||
@@ -2,111 +2,26 @@
|
||||
id: wiki-20260508-beat-saber-redir
|
||||
title: Beat Saber
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: [Beat Saber, 비트 세이버, BS]
|
||||
duplicate_of: none
|
||||
status: duplicate
|
||||
canonical_id: wiki-2026-0508-beat-saber
|
||||
duplicate_of: "[[Beat Saber]]"
|
||||
aliases: []
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
verification_status: applied
|
||||
tags: [vr, game, exergaming, rhythm, unity]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-10
|
||||
confidence_score: 0.9
|
||||
verification_status: redirected
|
||||
tags: [duplicate]
|
||||
last_reinforced: 2026-05-20
|
||||
github_commit: pending
|
||||
tech_stack:
|
||||
language: csharp
|
||||
framework: Unity, OpenXR
|
||||
---
|
||||
|
||||
# Beat Saber
|
||||
|
||||
## 매 한 줄
|
||||
> **"매 VR rhythm 의 lightsaber slashing 의 game"**. 매 Beat Games (Czech, 2018, Meta acquired 2019) 의 release — 매 song 에 맞춰 색깔 cube 의 specific direction slice + obstacle 의 dodge. 매 2026 의 VR 의 best-selling app 중 하나, 매 exergaming research 의 standard reference.
|
||||
|
||||
## 매 핵심
|
||||
|
||||
### 매 Gameplay
|
||||
- **Red/Blue cube**: left/right saber 의 매칭.
|
||||
- **Direction arrow**: 8-way slice direction.
|
||||
- **Obstacles** (red wall): squat / lean.
|
||||
- **Bombs**: avoid.
|
||||
- 매 difficulty: Easy, Normal, Hard, Expert, Expert+.
|
||||
|
||||
### 매 Tech
|
||||
- Unity engine, OpenXR / Meta SDK.
|
||||
- 매 90 Hz frame target — 매 motion sickness 의 minimize.
|
||||
- 매 input: hand-tracked controller (6DoF, sub-mm precision).
|
||||
- 매 audio sync: <20 ms latency.
|
||||
|
||||
### 매 Research relevance
|
||||
1. **Exergaming**: 매 calorie burn ~6-8 kcal/min — moderate cardio.
|
||||
2. **VR locomotion**: 매 stationary play — 매 motion sickness 의 less.
|
||||
3. **Reaction time**: 매 expert 의 <300 ms.
|
||||
4. **Custom song**: BSMG modding community 의 huge — research 의 stimulus 의 source.
|
||||
|
||||
## 💻 패턴
|
||||
|
||||
### Custom map JSON (Beat Saber 의 .dat)
|
||||
```json
|
||||
{
|
||||
"_version": "2.0.0",
|
||||
"_notes": [
|
||||
{ "_time": 4.0, "_lineIndex": 1, "_lineLayer": 1, "_type": 0, "_cutDirection": 1 }
|
||||
],
|
||||
"_obstacles": [
|
||||
{ "_time": 8, "_lineIndex": 0, "_type": 0, "_duration": 2, "_width": 1 }
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### Unity OpenXR controller
|
||||
```csharp
|
||||
[SerializeField] InputActionReference rightTrigger;
|
||||
void Update() {
|
||||
if (rightTrigger.action.WasPressedThisFrame()) SwingSaber(Hand.Right);
|
||||
}
|
||||
```
|
||||
|
||||
### Slice detection (oversimplified)
|
||||
```csharp
|
||||
void OnSaberCollide(Cube cube, Vector3 sliceDir) {
|
||||
var dot = Vector3.Dot(sliceDir.normalized, cube.expectedDir);
|
||||
if (dot > 0.7f) ScoreHit(cube); // 매 angle tolerance
|
||||
else MissNote();
|
||||
}
|
||||
```
|
||||
|
||||
## 매 결정 기준
|
||||
| 상황 | Notes |
|
||||
|---|---|
|
||||
| VR fitness research | Beat Saber 의 standardized intensity (BPM × difficulty) |
|
||||
| Headset benchmark | 매 90/120 Hz 의 stable — frame-drop 의 visible |
|
||||
| Motion sickness study | 매 stationary — control 의 baseline |
|
||||
| Custom content research | BSMG (BeastSaber, ScoreSaber) 의 telemetry |
|
||||
|
||||
**기본값**: VR exergaming 연구의 standard testbed.
|
||||
> **이 문서는 [[Beat Saber]] 의 중복본입니다.** Canonical 문서로 redirect.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[VR Game]] · [[Rhythm Game]]
|
||||
- 변형: [[비트 세이버(Beat Saber) 엑서게임 연구]] · [[비트 세이버(Beat Saber) 실험]]
|
||||
- 응용: [[엑서게임(Exergaming)]] · [[VR 자전거 시뮬레이터]]
|
||||
- Adjacent: [[VR Sickness]] · [[Vergence-Accommodation Conflicts]] · [[OpenXR]]
|
||||
- 부모: [[Beat Saber]] (canonical)
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 custom map 의 design, gameplay logic 의 brainstorm, Unity scripting 의 boilerplate.
|
||||
**언제 X**: 매 official content 의 reverse-engineering — 매 ToS 의 violate.
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **Frame drop 무시**: 매 VR 의 sub-90Hz → 매 nausea — 매 profile 의 강제.
|
||||
- **Latency >30 ms**: 매 saber → cube 의 desync — 매 prediction.
|
||||
- **Room scale 무시**: 매 obstacle 의 player 의 hit — 매 chaperone 의 enforce.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (Beat Games official, BSMG wiki, Meta Store metrics).
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
## 🕓 변경 이력
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — VR rhythm game treatment with research relevance |
|
||||
| 2026-05-20 | 중복 병합 — canonical 문서로 redirect |
|
||||
|
||||
@@ -2,143 +2,26 @@
|
||||
id: wiki-20260508-ci-cd-pipeline-redir
|
||||
title: CI/CD Pipeline
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: [CI/CD, CI CD Pipeline, 파이프라인, Continuous Delivery]
|
||||
duplicate_of: none
|
||||
status: duplicate
|
||||
canonical_id: wiki-2026-0508-ci-cd-pipeline
|
||||
duplicate_of: "[[CI CD Pipeline]]"
|
||||
aliases: []
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
verification_status: applied
|
||||
tags: [cicd, devops, automation, deployment]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-10
|
||||
confidence_score: 0.9
|
||||
verification_status: redirected
|
||||
tags: [duplicate]
|
||||
last_reinforced: 2026-05-20
|
||||
github_commit: pending
|
||||
tech_stack:
|
||||
language: yaml
|
||||
framework: GitHub Actions, GitLab CI, ArgoCD
|
||||
---
|
||||
|
||||
# CI/CD Pipeline
|
||||
|
||||
## 매 한 줄
|
||||
> **"매 commit 의 production 의 automated path"**. 매 Continuous Integration (build+test on every push) + Continuous Delivery/Deployment (artifact → staging → prod 의 자동) 의 결합 — 매 2026 의 GitHub Actions 의 dominant 의 + GitLab CI / Jenkins / CircleCI / ArgoCD (GitOps) 의 ecosystem. 매 trunk-based dev + feature flag 의 pair.
|
||||
|
||||
## 매 핵심
|
||||
|
||||
### 매 Stages
|
||||
1. **Source**: trigger (push, PR, schedule, manual).
|
||||
2. **Build**: compile, package (Docker image, JAR, npm).
|
||||
3. **Test**: unit → integration → e2e → security scan.
|
||||
4. **Artifact**: registry push (ECR, GHCR, Artifactory).
|
||||
5. **Deploy**: staging → smoke test → prod (canary / blue-green / rolling).
|
||||
6. **Observe**: metrics, alerts, rollback trigger.
|
||||
|
||||
### 매 CI vs CD
|
||||
- **CI**: 매 main branch 의 always-green — fast feedback (<10 min).
|
||||
- **CD (delivery)**: 매 always-deployable artifact — manual prod gate.
|
||||
- **CD (deployment)**: 매 fully automated — canary + auto-rollback.
|
||||
|
||||
### 매 응용
|
||||
1. SaaS web app: GitHub Actions → Docker → ECS/K8s.
|
||||
2. Mobile: Fastlane + TestFlight/Play Console.
|
||||
3. Library: tag → npm/PyPI/Maven publish.
|
||||
4. Infrastructure: Terraform plan/apply via CI.
|
||||
|
||||
## 💻 패턴
|
||||
|
||||
### GitHub Actions (Node + Docker)
|
||||
```yaml
|
||||
name: ci
|
||||
on: { push: { branches: [main] }, pull_request: {} }
|
||||
jobs:
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
with: { node-version: 20, cache: pnpm }
|
||||
- run: pnpm install --frozen-lockfile
|
||||
- run: pnpm lint && pnpm test --coverage
|
||||
- uses: codecov/codecov-action@v4
|
||||
build-deploy:
|
||||
needs: test
|
||||
if: github.ref == 'refs/heads/main'
|
||||
runs-on: ubuntu-latest
|
||||
permissions: { id-token: write, contents: read }
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: aws-actions/configure-aws-credentials@v4
|
||||
with: { role-to-assume: arn:aws:iam::123:role/ci, aws-region: us-east-1 }
|
||||
- run: docker build -t $ECR/app:${{ github.sha }} . && docker push $ECR/app:${{ github.sha }}
|
||||
- run: aws ecs update-service --cluster prod --service app --force-new-deployment
|
||||
```
|
||||
|
||||
### GitLab CI (matrix + cache)
|
||||
```yaml
|
||||
stages: [test, build, deploy]
|
||||
test:
|
||||
stage: test
|
||||
image: node:20
|
||||
cache: { paths: [node_modules/] }
|
||||
script: [npm ci, npm test]
|
||||
parallel:
|
||||
matrix: [{ NODE_VERSION: ["18", "20", "22"] }]
|
||||
```
|
||||
|
||||
### ArgoCD (GitOps)
|
||||
```yaml
|
||||
apiVersion: argoproj.io/v1alpha1
|
||||
kind: Application
|
||||
metadata: { name: app, namespace: argocd }
|
||||
spec:
|
||||
source: { repoURL: https://git.../infra, path: k8s/prod, targetRevision: HEAD }
|
||||
destination: { server: https://kubernetes.default.svc, namespace: prod }
|
||||
syncPolicy: { automated: { prune: true, selfHeal: true } }
|
||||
```
|
||||
|
||||
### Canary deploy (Argo Rollouts)
|
||||
```yaml
|
||||
strategy:
|
||||
canary:
|
||||
steps: [{ setWeight: 10 }, { pause: { duration: 10m } }, { setWeight: 50 }, { pause: {} }]
|
||||
analysis: { templates: [{ templateName: success-rate }] }
|
||||
```
|
||||
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| GitHub-hosted repo | GitHub Actions |
|
||||
| Self-hosted, full DevOps suite | GitLab CI |
|
||||
| Java-heavy enterprise | Jenkins |
|
||||
| K8s native, declarative | ArgoCD / Flux |
|
||||
| Mobile | Fastlane + Bitrise |
|
||||
| Monorepo | Nx Cloud / Turborepo Remote Cache |
|
||||
|
||||
**기본값**: GitHub Actions + Docker + ArgoCD (cloud-native) or ECS/Cloud Run (PaaS).
|
||||
> **이 문서는 [[CI CD Pipeline]] 의 중복본입니다.** Canonical 문서로 redirect.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[DevOps]] · [[Software Delivery]]
|
||||
- 변형: [[Continuous Integration (CI)]] · [[Continuous Delivery]] · [[GitOps]]
|
||||
- 응용: [[Blue-Green Deployment]] · [[Canary Deployment]] · [[Feature Flag]]
|
||||
- Adjacent: [[Docker]] · [[Kubernetes]] · [[Terraform]] · [[TeamCity]]
|
||||
- 부모: [[CI CD Pipeline]] (canonical)
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 workflow YAML 의 generation, matrix 의 expansion, action 의 lookup.
|
||||
**언제 X**: 매 production 의 deploy script — 매 review + canary + rollback 의 always.
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **No rollback path**: 매 deploy 의 forward-only — 매 disaster.
|
||||
- **Secrets in YAML**: 매 GitHub Secrets / OIDC 의 사용.
|
||||
- **Slow CI** (>15 min): 매 dev 의 PR 의 stack — 매 cache + parallelize.
|
||||
- **Deploy on every push**: 매 manual gate or canary 의 사용 — 매 prod 의 break.
|
||||
- **No artifact pinning** (`:latest`): 매 reproducibility 의 lose.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (GitHub Actions docs, GitLab CI docs, ArgoCD docs).
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
## 🕓 변경 이력
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — full CI/CD treatment with Actions/ArgoCD examples |
|
||||
| 2026-05-20 | 중복 병합 — canonical 문서로 redirect |
|
||||
|
||||
@@ -4,7 +4,7 @@ title: CI/CD 파이프라인 자동화
|
||||
category: 10_Wiki/Topics
|
||||
status: duplicate
|
||||
canonical_id: ci-cd-pipeline
|
||||
duplicate_of: "[[CI/CD Pipeline]]"
|
||||
duplicate_of: "[[CI_CD_Pipeline|CI/CD Pipeline]]"
|
||||
aliases: []
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
@@ -16,14 +16,14 @@ github_commit: pending
|
||||
|
||||
# CI/CD 파이프라인 자동화
|
||||
|
||||
> **이 문서는 [[CI/CD Pipeline]] 의 중복본입니다.** Canonical 문서로 redirect.
|
||||
> **이 문서는 [[CI_CD_Pipeline|CI/CD Pipeline]] 의 중복본입니다.** Canonical 문서로 redirect.
|
||||
|
||||
## 핵심 요약 (specialization aspects)
|
||||
- 매 한국어 alias 의 lookup 용.
|
||||
- 매 build → test → deploy 의 자동화 — 매 GitHub Actions / GitLab CI / Jenkins 의 modern stack.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[CI/CD Pipeline]] (canonical)
|
||||
- 부모: [[CI_CD_Pipeline|CI/CD Pipeline]] (canonical)
|
||||
- Adjacent: [[Continuous Integration (CI)]] · [[TeamCity]] · [[데브섹옵스 (DevSecOps) 환경에서의 지속적인 보안 검사]]
|
||||
|
||||
## 🕓 변경 이력
|
||||
|
||||
@@ -4,7 +4,7 @@ title: CI/CD 파이프라인
|
||||
category: 10_Wiki/Topics
|
||||
status: duplicate
|
||||
canonical_id: ci-cd-pipeline
|
||||
duplicate_of: "[[CI/CD Pipeline]]"
|
||||
duplicate_of: "[[CI_CD_Pipeline|CI/CD Pipeline]]"
|
||||
aliases: []
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
@@ -16,14 +16,14 @@ github_commit: pending
|
||||
|
||||
# CI/CD 파이프라인
|
||||
|
||||
> **이 문서는 [[CI/CD Pipeline]] 의 중복본입니다.** Canonical 문서로 redirect.
|
||||
> **이 문서는 [[CI_CD_Pipeline|CI/CD Pipeline]] 의 중복본입니다.** Canonical 문서로 redirect.
|
||||
|
||||
## 핵심 요약 (specialization aspects)
|
||||
- 매 한국어 alias.
|
||||
- 매 commit → build → test → deploy 의 자동화.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[CI/CD Pipeline]] (canonical)
|
||||
- 부모: [[CI_CD_Pipeline|CI/CD Pipeline]] (canonical)
|
||||
- Adjacent: [[Continuous Integration (CI)]] · [[CI_CD 파이프라인 자동화]]
|
||||
|
||||
## 🕓 변경 이력
|
||||
|
||||
@@ -24,8 +24,7 @@ github_commit: pending
|
||||
- 매 vs AST: AST 는 semantic 만, CST 는 surface 의 모든 token.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[CST (Concrete Syntax Tree)]] (canonical)
|
||||
- Adjacent: [[AST (Abstract Syntax Tree)]] · [[Tree-sitter]] · [[Parser]]
|
||||
- Adjacent: [[AST (Abstract Syntax Tree)]] · [[Parser]]
|
||||
|
||||
## 🕓 변경 이력
|
||||
| 날짜 | 변경 |
|
||||
|
||||
@@ -96,10 +96,9 @@ node --inspect-brk app.js
|
||||
**기본값**: 매 web app 의 Electron / Tauri 의 ship — 매 user-facing 의 자체 fork X.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Browser Engine]]
|
||||
- 변형: [[Chrome]] · [[Edge]] · [[Brave]] · [[Electron]]
|
||||
- 응용: [[Puppeteer]] · [[Playwright]] · [[CEF]]
|
||||
- Adjacent: [[Blink]] · [[V8]] · [[WebKit]] · [[Gecko]]
|
||||
- 변형: [[Chrome]] · [[Electron]]
|
||||
- 응용: [[Playwright]]
|
||||
- Adjacent: [[Blink]] · [[V8]] · [[WebKit]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: CDP 사용법, Puppeteer/Playwright script, Chromium component 의 explanation.
|
||||
|
||||
@@ -134,10 +134,10 @@ const heavyConst = /*#__PURE__*/ buildHeavy();
|
||||
**기본값**: esbuild minify + tree shake + source maps + Sentry upload.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Build_Tools]] · [[Web_Performance]]
|
||||
- 변형: [[Tree_Shaking]] · [[Code_Splitting]] · [[Compression]]
|
||||
- 부모: [[Web_Performance]]
|
||||
- 변형: [[Code_Splitting]] · [[Compression]]
|
||||
- 응용: [[Bundle_Analysis]] · [[Source_Maps]]
|
||||
- Adjacent: [[esbuild]] · [[Vite]] · [[Webpack]] · [[Rollup]]
|
||||
- Adjacent: [[esbuild]] · [[Vite]] · [[Rollup]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: build config 작성, minifier option tuning, bundle analysis.
|
||||
|
||||
+1
-1
@@ -25,7 +25,7 @@ github_commit: pending
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Code Splitting]] (canonical)
|
||||
- Adjacent: [[Tree Shaking]] · [[Dynamic Import]]
|
||||
- Adjacent: [[Dynamic Import]]
|
||||
|
||||
## 🕓 변경 이력
|
||||
| 날짜 | 변경 |
|
||||
|
||||
@@ -2,141 +2,26 @@
|
||||
id: wiki-20260508-continuous-integration-ci--redir
|
||||
title: Continuous Integration (CI)
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: [CI, Continuous Integration, 지속적 통합]
|
||||
duplicate_of: none
|
||||
status: duplicate
|
||||
canonical_id: wiki-2026-0508-continuous-integration-ci
|
||||
duplicate_of: "[[Continuous Integration (CI)]]"
|
||||
aliases: []
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
verification_status: applied
|
||||
tags: [cicd, devops, automation, testing]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-10
|
||||
confidence_score: 0.9
|
||||
verification_status: redirected
|
||||
tags: [duplicate]
|
||||
last_reinforced: 2026-05-20
|
||||
github_commit: pending
|
||||
tech_stack:
|
||||
language: yaml
|
||||
framework: GitHub Actions, GitLab CI, Jenkins
|
||||
---
|
||||
|
||||
# Continuous Integration (CI)
|
||||
|
||||
## 매 한 줄
|
||||
> **"매 every commit 의 main branch 의 automated build + test"**. 매 Grady Booch (1991) 의 coin → Martin Fowler (2000) 의 popularize → 매 2026 의 trunk-based dev + GitHub Actions 의 dominant practice. 매 integration hell 의 prevent — 매 small frequent merge + fast feedback (<10 min).
|
||||
|
||||
## 매 핵심
|
||||
|
||||
### 매 Practices
|
||||
- **Single source repo** (trunk-based, optionally short-lived feature branches).
|
||||
- **Automated build** on every push.
|
||||
- **Self-testing build** (unit + integration).
|
||||
- **Daily commit** to main (최소).
|
||||
- **Build fast** (<10 min target).
|
||||
- **Test in clone of prod** (Docker, ephemeral env).
|
||||
- **Visible status** (badge, Slack notify).
|
||||
- **Fix red main immediately** (revert > forward fix).
|
||||
|
||||
### 매 CI vs CD
|
||||
- **CI**: build + test on every push — main 의 always green.
|
||||
- **CD (Delivery)**: 매 always-shippable artifact + manual prod gate.
|
||||
- **CD (Deployment)**: 매 fully automated to prod.
|
||||
|
||||
### 매 응용
|
||||
1. Pre-merge: PR check (lint, test, type, build).
|
||||
2. Post-merge: artifact build + push.
|
||||
3. Nightly: e2e, perf, security scan.
|
||||
4. Release: tag → publish (npm, container).
|
||||
|
||||
## 💻 패턴
|
||||
|
||||
### GitHub Actions PR check
|
||||
```yaml
|
||||
name: pr
|
||||
on: { pull_request: { branches: [main] } }
|
||||
jobs:
|
||||
ci:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: pnpm/action-setup@v3
|
||||
- uses: actions/setup-node@v4
|
||||
with: { node-version: 20, cache: pnpm }
|
||||
- run: pnpm install --frozen-lockfile
|
||||
- run: pnpm lint
|
||||
- run: pnpm typecheck
|
||||
- run: pnpm test --coverage
|
||||
- run: pnpm build
|
||||
- uses: codecov/codecov-action@v4
|
||||
```
|
||||
|
||||
### Branch protection (main)
|
||||
```yaml
|
||||
# .github/branch-protection.yml (or via API)
|
||||
required_status_checks:
|
||||
strict: true
|
||||
contexts: [ci/lint, ci/test, ci/build]
|
||||
required_pull_request_reviews: { required_approving_review_count: 1 }
|
||||
enforce_admins: true
|
||||
```
|
||||
|
||||
### Parallel matrix
|
||||
```yaml
|
||||
jobs:
|
||||
test:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
node: [18, 20, 22]
|
||||
os: [ubuntu-latest, macos-latest, windows-latest]
|
||||
runs-on: ${{ matrix.os }}
|
||||
```
|
||||
|
||||
### Cache
|
||||
```yaml
|
||||
- uses: actions/cache@v4
|
||||
with:
|
||||
path: ~/.pnpm-store
|
||||
key: pnpm-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }}
|
||||
```
|
||||
|
||||
### Pre-commit (Husky + lint-staged)
|
||||
```json
|
||||
{ "lint-staged": { "*.{ts,tsx}": ["eslint --fix", "prettier --write"] } }
|
||||
```
|
||||
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| GitHub repo | GitHub Actions |
|
||||
| GitLab self-host | GitLab CI |
|
||||
| Java enterprise | Jenkins (with Jenkinsfile) |
|
||||
| Monorepo, perf-critical | Nx Cloud / Turborepo Remote Cache |
|
||||
| OSS multi-platform | GitHub Actions + matrix |
|
||||
|
||||
**기본값**: 매 GitHub Actions + branch protection + required check.
|
||||
> **이 문서는 [[Continuous Integration (CI)]] 의 중복본입니다.** Canonical 문서로 redirect.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[CI/CD Pipeline]] · [[DevOps]]
|
||||
- 변형: [[Continuous Delivery]] · [[Continuous Deployment]]
|
||||
- 응용: [[Trunk-Based Development]] · [[Pull Request Workflow]]
|
||||
- Adjacent: [[TeamCity]] · [[Jenkins]] · [[GitOps]] · [[Pre-commit Hook]]
|
||||
- 부모: [[Continuous Integration (CI)]] (canonical)
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 workflow YAML 의 generation, action 의 lookup, matrix 의 expansion.
|
||||
**언제 X**: 매 secret handling — 매 OIDC + GitHub Secrets manual review.
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **Long-lived feature branch**: 매 merge hell — 매 short-lived (<3 day).
|
||||
- **Skipping tests** (`[skip ci]` 의 abuse): 매 main 의 break.
|
||||
- **Slow CI** (>15 min): 매 PR backlog — 매 cache + parallelize.
|
||||
- **Flaky tests** 의 retry abuse: 매 fix 의 root cause.
|
||||
- **Manual deploy from laptop**: 매 reproducibility 의 zero — 매 CI 의 only.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (Fowler "Continuous Integration", GitHub Actions docs).
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
## 🕓 변경 이력
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — practices + Actions/branch protection patterns |
|
||||
| 2026-05-20 | 중복 병합 — canonical 문서로 redirect |
|
||||
|
||||
@@ -150,9 +150,8 @@ const handlers = {
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[TypeScript]] · [[DOM]]
|
||||
- 변형: [[Discriminated_Unions]] · [[Type_Guards]]
|
||||
- 응용: [[DOM_요소_조작]] · [[Web_Components]] · [[Form_Validation]]
|
||||
- Adjacent: [[strictNullChecks]] · [[Generic_Constraints]]
|
||||
- 변형: [[Discriminated_Unions]]
|
||||
- 응용: [[DOM_요소_조작]] · [[Web_Components]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: helper 작성, type guard 추출, refactor untyped jQuery → typed TS.
|
||||
|
||||
@@ -167,10 +167,10 @@ list.append(frag); // 매 single reflow
|
||||
**기본값**: querySelector + classList + textContent + delegation + Observer APIs.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[DOM]] · [[Web_APIs]]
|
||||
- 부모: [[DOM]]
|
||||
- 변형: [[DOM_요소_조작_및_타입_좁히기]] · [[Shadow_DOM]]
|
||||
- 응용: [[Web_Components]] · [[Browser_Extensions]] · [[Hotwire]]
|
||||
- Adjacent: [[IntersectionObserver]] · [[MutationObserver]] · [[Sanitizer_API]]
|
||||
- 응용: [[Web_Components]] · [[Hotwire]]
|
||||
- Adjacent: [[IntersectionObserver]] · [[MutationObserver]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: vanilla widget scaffold, Observer setup, jQuery → modern migration.
|
||||
|
||||
@@ -25,7 +25,6 @@ github_commit: pending
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Depth Pre-Pass]] (canonical)
|
||||
- Adjacent: [[Z-Buffer]] · [[Hi-Z Culling]]
|
||||
|
||||
## 🕓 변경 이력
|
||||
| 날짜 | 변경 |
|
||||
|
||||
@@ -114,10 +114,9 @@ float3 SampleCubeSeamless(TextureCube tex, SamplerState s, float3 dir, float rou
|
||||
**기본값**: 매 padding 2px + half-texel inset, 매 mipmap 매 사용 시 2 * (mip levels) px.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Texture Mapping]] · [[Texture Filtering]]
|
||||
- 변형: [[Atlas Bleeding]] · [[Cubemap Seam]]
|
||||
- 응용: [[Sprite Atlas]] · [[Lightmap]] · [[Texture Array]]
|
||||
- Adjacent: [[Mipmap]] · [[Bilinear Filtering]] · [[UV Mapping]]
|
||||
- 변형: [[Atlas Bleeding]]
|
||||
- 응용: [[Texture Array]]
|
||||
- Adjacent: [[Mipmap]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: sprite atlas / tilemap / lightmap 매 visible seam, 매 mipmap 매 사용한 atlas, 매 cubemap face 경계 artifact.
|
||||
|
||||
@@ -146,7 +146,7 @@ const parse = Schema.decodeUnknown(User)
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Functional Programming]] · [[TypeScript 타입 시스템 및 인터페이스 설계]]
|
||||
- 변형: [[Result Type]] · [[neverthrow]]
|
||||
- 변형: [[Result Type]]
|
||||
- 응용: [[견고한 도메인 모델 및 API 계약 설계]] · [[API 응답 및 에러 핸들링 아키텍처]]
|
||||
- Adjacent: [[Zod 런타임 유효성 검사 통합]] · [[ts-brand]]
|
||||
|
||||
|
||||
@@ -135,9 +135,8 @@ port1.on('message', (msg) => console.log('result', msg))
|
||||
**기본값**: 매 Electron 33+ + contextIsolation + electron-builder + auto-updater.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Chromium]] · [[Nodejs]]
|
||||
- 변형: [[Tauri]] · [[NW.js]]
|
||||
- 응용: [[VS Code]] · [[Slack Desktop]]
|
||||
- 부모: [[Chromium]] · [[Nodejs_and_Backend_Optimization|Nodejs]]
|
||||
- 변형: [[Tauri]]
|
||||
- Adjacent: [[Chrome DevTools(크롬 개발자 도구)]] · [[V8 엔진 힙 아키텍처]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
|
||||
@@ -178,10 +178,10 @@ function App() {
|
||||
**기본값**: 매 declarative 매 first — 매 hatch 매 last resort.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[React]] · [[React Hooks]]
|
||||
- 부모: [[React]]
|
||||
- 변형: [[Vue Composition API]] · [[Solid Signals]]
|
||||
- 응용: [[Three.js Integration]] · [[D3 Integration]] · [[IntersectionObserver]]
|
||||
- Adjacent: [[useEffect]] · [[useRef]] · [[useImperativeHandle]]
|
||||
- 응용: [[IntersectionObserver]]
|
||||
- Adjacent: [[useEffect]] · [[useRef]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 third-party imperative library 의 React 의 integration, DOM 의 manual control.
|
||||
|
||||
@@ -96,10 +96,10 @@ npx speedscope profile.cpuprofile
|
||||
**기본값**: Chrome DevTools Performance panel — 매 60% case cover.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Performance Profiling]] · [[Chrome DevTools(크롬 개발자 도구)]]
|
||||
- 부모: [[Performance_Profiling_and_Memory|Performance Profiling]] · [[Chrome DevTools(크롬 개발자 도구)]]
|
||||
- 변형: [[할당 타임라인(Allocation Timeline)]]
|
||||
- 응용: [[Nodejs 성능 디버깅]] · [[SPA 라우트 전환 성능 최적화]]
|
||||
- Adjacent: [[Cumulative Layout Shift (CLS)]] · [[Google Lighthouse]]
|
||||
- Adjacent: [[Core Web Vitals Optimization (INP, LCP 개선)|Cumulative Layout Shift (CLS)]] · [[Google Lighthouse]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 latency / jank / unknown bottleneck 발견 → flame chart 의 first tool.
|
||||
|
||||
@@ -131,7 +131,7 @@ WORKDIR $SRC/myproject
|
||||
- 부모: [[DAST (동적 애플리케이션 보안 테스트)]]
|
||||
- 변형: [[SCA (소프트웨어 구성 분석)]]
|
||||
- 응용: [[OSS-Fuzz]] · [[V8 엔진 힙 아키텍처]]
|
||||
- Adjacent: [[Symbolic Execution]] · [[Property-Based Testing]]
|
||||
- Adjacent: [[Property-Based Testing]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 untrusted input 의 parser, codec, deserializer 가 있는 경우. 매 security-critical library 의 release 전 mandatory.
|
||||
|
||||
@@ -147,10 +147,8 @@ java -XX:+UseShenandoahGC -XX:ShenandoahGCMode=generational -jar app.jar
|
||||
**기본값**: 매 strong ref + escape analysis 신뢰. WeakReference 는 매 진짜 leak 패턴 (cache, listener, ThreadLocal in pool) 에만.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Garbage Collection]] · [[JVM Memory Model]]
|
||||
- 변형: [[ZGC]] · [[G1 GC]] · [[Shenandoah]]
|
||||
- 응용: [[Memory Leak Detection]] · [[Heap Dump Analysis]]
|
||||
- Adjacent: [[Reference Types]] · [[Escape Analysis]] · [[ThreadLocal]]
|
||||
- 부모: [[Garbage Collection]]
|
||||
- 응용: [[Memory Leak Detection]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: heap dump 의 leak suspect 해석, root path 의 의미 설명, ThreadLocal/static leak pattern detection.
|
||||
|
||||
@@ -4,28 +4,24 @@ title: Garbage Collection(가비지 컬렉션)
|
||||
category: 10_Wiki/Topics
|
||||
status: duplicate
|
||||
canonical_id: wiki-2026-0508-garbage-collection
|
||||
duplicate_of: "[[Garbage Collection (가비지 컬렉션)]]"
|
||||
aliases: [GC]
|
||||
duplicate_of: "[[Garbage Collection]]"
|
||||
aliases: []
|
||||
source_trust_level: A
|
||||
confidence_score: 0.9
|
||||
verification_status: redirected
|
||||
tags: [duplicate, gc, memory]
|
||||
last_reinforced: 2026-05-10
|
||||
tags: [duplicate]
|
||||
last_reinforced: 2026-05-20
|
||||
github_commit: pending
|
||||
---
|
||||
|
||||
# Garbage Collection(가비지 컬렉션)
|
||||
|
||||
> **이 문서는 [[Garbage Collection (가비지 컬렉션)]] 의 중복본입니다.** (parenthesis spacing 만 의 차이) Canonical 문서로 redirect.
|
||||
|
||||
## 핵심 요약
|
||||
- Title 의 spacing variant — 매 canonical 의 [[Garbage Collection (가비지 컬렉션)]].
|
||||
> **이 문서는 [[Garbage Collection]] 의 중복본입니다.** Canonical 문서로 redirect.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Garbage Collection (가비지 컬렉션)]] (canonical)
|
||||
- 부모: [[Garbage Collection]] (canonical)
|
||||
|
||||
## 🕓 변경 이력
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | 중복 처리 — canonical 문서로 redirect |
|
||||
| 2026-05-20 | 중복 병합 — canonical 문서로 redirect |
|
||||
|
||||
@@ -135,10 +135,9 @@ const report = await flow.generateReport()
|
||||
**기본값**: 매 lhci + budgets.json + GitHub Action + 3 runs median.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Performance Profiling]]
|
||||
- 변형: [[WebPageTest]] · [[CrUX]]
|
||||
- 응용: [[CI_CD Pipeline]] · [[Continuous Integration (CI)]]
|
||||
- Adjacent: [[Cumulative Layout Shift (CLS)]] · [[SPA 라우트 전환 성능 최적화]]
|
||||
- 부모: [[Performance_Profiling_and_Memory|Performance Profiling]]
|
||||
- 응용: [[CI_CD_Pipeline|CI_CD Pipeline]] · [[Continuous Integration (CI)]]
|
||||
- Adjacent: [[Core Web Vitals Optimization (INP, LCP 개선)|Cumulative Layout Shift (CLS)]] · [[SPA 라우트 전환 성능 최적화]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: pre-deploy quality gate, regression catch, web vitals tracking.
|
||||
|
||||
@@ -144,9 +144,7 @@ int idx = ((int)(counter) & ((int)CAP - 1)); // counter must be non-negative
|
||||
**기본값**: 매 ring/hash table 는 power-of-two + bitmask. 매 capacity 의 dynamic 이면 round-up.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Bitwise Operations]]
|
||||
- 변형: [[Modulo Reduction]] · [[Fastrange]]
|
||||
- 응용: [[Ring Buffer]] · [[Object Pooling (오브젝트 풀링)]] · [[Hash Table]]
|
||||
- 응용: [[Object Pooling (오브젝트 풀링)]]
|
||||
- Adjacent: [[SharedArrayBuffer로 스레드 간 메모리 공유 효율 높이기]] · [[Pointer Compression]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
|
||||
@@ -232,9 +232,7 @@ function disposeInstanced(mesh: THREE.InstancedMesh) {
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[InstancedMesh 최적화]] · [[Three.js]]
|
||||
- 변형: [[BatchedMesh]] · [[GPU Particle Systems]]
|
||||
- 응용: [[Realtime Editors]] · [[Voxel Streaming]]
|
||||
- Adjacent: [[Free List]] · [[Geometric Resize]] · [[Buffer Pool]]
|
||||
- 변형: [[BatchedMesh]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: dynamic spawn/despawn 시스템 설계, free list vs chunked 의 trade-off 설명.
|
||||
|
||||
@@ -146,8 +146,7 @@ pass.dispatchWorkgroups(Math.ceil(N / 64));
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[GPU Instancing]] · [[Three.js]]
|
||||
- 변형: [[BatchedMesh]] · [[GPU Particle]]
|
||||
- 응용: [[Foliage Rendering]] · [[Crowd Rendering]]
|
||||
- 변형: [[BatchedMesh]]
|
||||
- Adjacent: [[Frustum Culling]] · [[LOD]] · [[Indirect Draw]] · [[WebGPU]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
|
||||
@@ -201,8 +201,7 @@ mesh.instanceMatrix.needsUpdate = true;
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Three.js]] · [[GPU Instancing]] · [[WebGL/WebGPU]]
|
||||
- 변형: [[BatchedMesh]] · [[InstancedBufferGeometry]]
|
||||
- 응용: [[Particle Systems]] · [[Vegetation Rendering]] · [[Voxel Engines]]
|
||||
- 변형: [[BatchedMesh]]
|
||||
- Adjacent: [[InstancedMesh 동적 버퍼 확장]] · [[Frustum Culling]] · [[LOD]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
|
||||
@@ -125,10 +125,9 @@ if (await document.hasStorageAccess() === false) {
|
||||
**기본값**: 매 Baseline Newly Available + Interop 2025 통과 feature 만 의 default 사용.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Web Platform Standards]]
|
||||
- 변형: [[Interop 2024]] · [[Interop 2026]]
|
||||
- 응용: [[CSS Anchor Positioning]] · [[View Transitions API]] · [[Navigation API]]
|
||||
- Adjacent: [[Chromium]] · [[web-platform-tests]] · [[Baseline]]
|
||||
- 변형: [[Interop 2026]]
|
||||
- 응용: [[View Transitions API]] · [[Navigation API]]
|
||||
- Adjacent: [[Chromium]] · [[Baseline]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 web platform feature 의 cross-browser readiness 의 query, polyfill strategy, modern CSS/JS adoption 결정.
|
||||
|
||||
@@ -128,7 +128,7 @@ function never(x: never): never { throw new Error(`unhandled: ${x}`) }
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Domain-Driven Design]] · [[견고한 도메인 모델 및 API 계약 설계]]
|
||||
- 변형: [[Result Type]] · [[Discriminated Unions]]
|
||||
- 변형: [[Result Type]] · [[Discriminated_Unions|Discriminated Unions]]
|
||||
- 응용: [[Zod 파싱과 브랜디드 타입을 결합한 런타임 데이터 검증]]
|
||||
- Adjacent: [[브랜디드 타입 (Branded Types)]] · [[ts-brand]] · [[완전성 검사(Exhaustiveness Checking)]]
|
||||
|
||||
|
||||
@@ -207,7 +207,7 @@ class BoundedPool<T> {
|
||||
- 부모: [[Garbage Collection]] · [[V8 엔진 힙 아키텍처]]
|
||||
- 변형: [[bitECS와 SharedArrayBuffer를 결합한 멀티스레드 고성능 아키텍처]]
|
||||
- 응용: [[InstancedMesh 최적화]] · [[가변적 LOD(Level of Detail) 시스템]]
|
||||
- Adjacent: [[Old Space]] · [[세대 가설(Generational Hypothesis)]]
|
||||
- Adjacent: [[Old_Space|Old Space]] · [[세대 가설(Generational Hypothesis)]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: game loop / real-time pipeline 의 GC pause 회피, expensive resource (DB conn, GPU buffer) 의 reuse.
|
||||
|
||||
@@ -112,8 +112,8 @@ v8.writeHeapSnapshot('after.heapsnapshot')
|
||||
## 🔗 Graph
|
||||
- 부모: [[V8 엔진 힙 아키텍처]]
|
||||
- 변형: [[Orinoco 가비지 컬렉터]]
|
||||
- 응용: [[Incremental Marking]] · [[Mark-Sweep-Compact 알고리즘]]
|
||||
- Adjacent: [[Generational Hypothesis]] · [[Old Space]] · [[Write Barrier]]
|
||||
- 응용: [[Incremental_Marking|Incremental Marking]] · [[Mark-Sweep-Compact 알고리즘]]
|
||||
- Adjacent: [[Garbage Collection|Generational Hypothesis]] · [[Old_Space|Old Space]] · [[Write Barrier]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: V8 GC 의 internals 설명, Node.js / Chrome heap tuning, `--trace-gc` 분석.
|
||||
|
||||
@@ -2,146 +2,26 @@
|
||||
id: wiki-20260508-pointer-compression-redir
|
||||
title: Pointer Compression
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: [pointer-compression, V8 pointer compression, 32-bit pointer]
|
||||
duplicate_of: none
|
||||
status: duplicate
|
||||
canonical_id: wiki-2026-0508-pointer-compression
|
||||
duplicate_of: "[[Pointer Compression]]"
|
||||
aliases: []
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
verification_status: applied
|
||||
tags: [v8, memory, gc, optimization, runtime]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-10
|
||||
confidence_score: 0.9
|
||||
verification_status: redirected
|
||||
tags: [duplicate]
|
||||
last_reinforced: 2026-05-20
|
||||
github_commit: pending
|
||||
tech_stack:
|
||||
language: JavaScript/C++
|
||||
framework: V8
|
||||
---
|
||||
|
||||
# Pointer Compression
|
||||
|
||||
## 매 한 줄
|
||||
> **"매 64-bit pointer를 32-bit offset으로 packing해서 heap memory를 거의 반으로 줄임"**. V8 v8.0 (2020) 부터 default — heap base register + 32-bit compressed pointer 의 조합. 매 modern 2026 V8 (Node 22, Chrome 120+)에서 매 표준 동작.
|
||||
|
||||
## 매 핵심
|
||||
|
||||
### 매 동작 원리
|
||||
- 매 4GB heap 안의 모든 object 의 32-bit offset 으로 표현 — base pointer 1개만 64-bit, 나머지는 32-bit.
|
||||
- 매 Tagged pointer scheme: 매 LSB 1 bit 의 SMI (Small Integer) vs HeapObject 구분 의 사용.
|
||||
- 매 decompression: `real_addr = base + (compressed << 1)` — 매 single ALU op.
|
||||
- 매 compression: 매 store 시 `(real_addr - base) >> 1` 의 자동 계산.
|
||||
|
||||
### 매 trade-off
|
||||
- 매 heap size limit: 매 single isolate 의 4GB cap — 매 worker / cluster 의 우회.
|
||||
- 매 CPU overhead: 매 매 dereference 의 add 1 instruction — 매 ~3% slower.
|
||||
- 매 memory savings: 매 typical Node heap 의 30-43% 감소 — 매 pointer-heavy workload 의 클수록 효과 큼.
|
||||
|
||||
### 매 응용
|
||||
1. Chrome tab 의 RAM 의 ~10% 감소 — 매 tab 수십 개 의 환경.
|
||||
2. Node.js process 의 startup memory 의 약 200MB→130MB.
|
||||
3. Edge / serverless 의 cold start 의 RSS reduction.
|
||||
|
||||
## 💻 패턴
|
||||
|
||||
### 매 Compressed pointer 구조 의 이해
|
||||
```cpp
|
||||
// V8 internal — Tagged<Object> representation
|
||||
class Tagged {
|
||||
uint32_t ptr_; // 32-bit compressed pointer (was 64-bit)
|
||||
|
||||
// Decompress on access
|
||||
Address decompress(Address base) const {
|
||||
return base + (ptr_ & ~kSmiTagMask);
|
||||
}
|
||||
};
|
||||
```
|
||||
|
||||
### 매 Heap base register 의 활용
|
||||
```cpp
|
||||
// Generated machine code (x86_64)
|
||||
// Before: mov rax, [rbx+0x8] ; 8 bytes load
|
||||
// After: mov eax, [rbx+0x8] ; 4 bytes load
|
||||
// add rax, r13 ; r13 holds heap base
|
||||
```
|
||||
|
||||
### 매 Node 의 heap 의 4GB cap 우회
|
||||
```javascript
|
||||
// 매 single isolate 의 4GB 제한 — worker thread 의 분리
|
||||
import { Worker } from 'node:worker_threads';
|
||||
|
||||
// 매 각 worker 의 own isolate (own 4GB heap)
|
||||
const workers = Array.from({ length: 4 }, () =>
|
||||
new Worker('./heavy-task.js')
|
||||
);
|
||||
// 총 16GB heap usage 가능 (4GB × 4 isolates)
|
||||
```
|
||||
|
||||
### 매 SMI (Small Integer) 활용
|
||||
```javascript
|
||||
// 매 V8 의 SMI optimization — 31-bit int 의 boxing 없이 tagged pointer 안에 직접
|
||||
const x = 42; // 매 SMI — 매 heap 할당 X
|
||||
const y = 2**32; // 매 HeapNumber — 매 heap allocation
|
||||
// 매 SMI 의 GC pressure 의 감소 효과
|
||||
```
|
||||
|
||||
### 매 Pointer compression 의 disable (rare)
|
||||
```bash
|
||||
# 매 Node build flag — 매 4GB heap 초과 필요 시
|
||||
node --no-pointer-compression server.js
|
||||
# 매 large in-memory cache (>4GB) 의 use case
|
||||
```
|
||||
|
||||
### 매 Heap 측정
|
||||
```javascript
|
||||
import v8 from 'node:v8';
|
||||
|
||||
const stats = v8.getHeapStatistics();
|
||||
console.log({
|
||||
total: stats.total_heap_size / 1e6, // MB
|
||||
limit: stats.heap_size_limit / 1e6, // 매 ~4GB 의 cap
|
||||
external: stats.external_memory / 1e6,
|
||||
});
|
||||
// 매 pointer compression 의 enabled 의 limit 의 4GB 근처
|
||||
```
|
||||
|
||||
### 매 SharedArrayBuffer 의 outside-heap 활용
|
||||
```javascript
|
||||
// 매 4GB cap 의 우회 — 매 binary data 의 SAB 의 사용
|
||||
const sab = new SharedArrayBuffer(8 * 1024 * 1024 * 1024); // 8GB
|
||||
// 매 SAB 의 V8 heap 의 외부 allocation — 매 limit 의 영향 X
|
||||
```
|
||||
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| 일반 Node 앱 | default ON (compression enabled) |
|
||||
| Heap > 4GB 필요 | --no-pointer-compression OR worker split |
|
||||
| 대용량 binary | SharedArrayBuffer / Buffer (off-heap) |
|
||||
| Memory-constrained | default 의 유지 — 매 30%+ saving |
|
||||
|
||||
**기본값**: pointer compression의 ON 의 유지. 매 4GB cap 의 hit 시 worker thread 의 split.
|
||||
> **이 문서는 [[Pointer Compression]] 의 중복본입니다.** Canonical 문서로 redirect.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[V8 Engine]] · [[Garbage Collection]]
|
||||
- 변형: [[Tagged Pointer]] · [[SMI Small Integer]]
|
||||
- 응용: [[Nodejs 메모리 최적화]] · [[V8 엔진 힙 아키텍처 및 로그 분석]]
|
||||
- Adjacent: [[Old Space]] · [[Mark-Sweep-Compact 알고리즘]]
|
||||
- 부모: [[Pointer Compression]] (canonical)
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: V8 heap memory 의 분석, Node.js 의 RSS 의 unexpected size 의 explain, 4GB OOM 의 debug.
|
||||
**언제 X**: 매 user 의 application code 의 직접 영향 X — 매 V8 internal optimization 임 의 인지.
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **Disable 의 무분별**: `--no-pointer-compression` 의 default 의 사용 — 매 30% memory waste.
|
||||
- **Single-isolate 의 4GB+**: 매 limit 의 무시 후 OOM — worker split 의 필요.
|
||||
- **SMI 의 violation**: 매 hot path 의 large int 의 사용 — 매 HeapNumber boxing 의 GC pressure.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (V8 blog "Pointer Compression in V8" 2020, Chromium docs).
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
## 🕓 변경 이력
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — V8 pointer compression FULL 작성 |
|
||||
| 2026-05-20 | 중복 병합 — canonical 문서로 redirect |
|
||||
|
||||
@@ -2,158 +2,26 @@
|
||||
id: wiki-20260508-reachability-analysis-redir
|
||||
title: Reachability Analysis
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: [reachability, GC reachability, mark-and-sweep reachability]
|
||||
duplicate_of: none
|
||||
status: duplicate
|
||||
canonical_id: wiki-2026-0508-reachability-analysis
|
||||
duplicate_of: "[[Reachability Analysis]]"
|
||||
aliases: []
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
verification_status: applied
|
||||
tags: [gc, memory, algorithm, runtime]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-10
|
||||
confidence_score: 0.9
|
||||
verification_status: redirected
|
||||
tags: [duplicate]
|
||||
last_reinforced: 2026-05-20
|
||||
github_commit: pending
|
||||
tech_stack:
|
||||
language: JavaScript/C++
|
||||
framework: V8
|
||||
---
|
||||
|
||||
# Reachability Analysis
|
||||
|
||||
## 매 한 줄
|
||||
> **"매 GC root 부터 reference graph 의 traverse — reachable object 의 keep, unreachable 의 collect"**. 매 modern GC 의 fundamental algorithm — V8, JVM, .NET, Go 의 동일 원리. 2026 의 incremental + concurrent variant 의 mainstream.
|
||||
|
||||
## 매 핵심
|
||||
|
||||
### 매 GC Root 종류
|
||||
- **Stack root**: 매 active call stack 의 local variable / parameter.
|
||||
- **Global root**: 매 globalThis / window — 매 module-level binding.
|
||||
- **Register root**: 매 CPU register 의 held reference.
|
||||
- **Compilation root**: 매 V8 의 compiled code 의 reference table.
|
||||
- **Handle root**: 매 native binding 의 Handle / Persistent reference.
|
||||
|
||||
### 매 Traversal algorithm
|
||||
- **Tri-color marking**: White (unvisited) → Gray (queued) → Black (done).
|
||||
- **Worklist-based**: 매 root 의 enqueue → pop → mark → push referents.
|
||||
- **Incremental**: 매 small chunks 의 분할 — 매 main thread pause 의 단축.
|
||||
- **Concurrent**: 매 background thread 의 동시 mark — write barrier 의 sync.
|
||||
|
||||
### 매 응용
|
||||
1. V8 의 Mark-Sweep-Compact GC 의 base.
|
||||
2. Memory leak 의 발견 — DevTools heap snapshot 의 retainer path.
|
||||
3. Cycle detection — refcount 의 약점 의 보완.
|
||||
|
||||
## 💻 패턴
|
||||
|
||||
### 매 Reachability 의 tri-color 의 idea
|
||||
```javascript
|
||||
// 매 conceptual mark phase
|
||||
function mark(roots) {
|
||||
const gray = new Set(roots); // 매 worklist
|
||||
const black = new Set(); // 매 marked
|
||||
|
||||
while (gray.size > 0) {
|
||||
const obj = gray.values().next().value;
|
||||
gray.delete(obj);
|
||||
black.add(obj);
|
||||
|
||||
for (const ref of getReferences(obj)) {
|
||||
if (!black.has(ref)) gray.add(ref);
|
||||
}
|
||||
}
|
||||
// 매 black = reachable, 매 white (heap - black) = collect
|
||||
}
|
||||
```
|
||||
|
||||
### 매 DevTools Heap snapshot 의 root 의 확인
|
||||
```javascript
|
||||
// Chrome DevTools → Memory → Heap snapshot
|
||||
// 매 retainer path 의 (GC root) 까지 추적
|
||||
// 매 closure / detached DOM / event listener 의 leak 의 발견
|
||||
|
||||
// 매 typical leak pattern
|
||||
let leakedRef;
|
||||
window.addEventListener('click', () => {
|
||||
leakedRef = bigData; // 매 GC root (global) 까지 retained
|
||||
});
|
||||
```
|
||||
|
||||
### 매 WeakRef 의 reachability 의 우회
|
||||
```javascript
|
||||
// 매 weak reference — 매 reachability 의 contribute X
|
||||
const cache = new Map();
|
||||
function set(key, val) {
|
||||
cache.set(key, new WeakRef(val)); // 매 GC 의 collect 가능
|
||||
}
|
||||
function get(key) {
|
||||
return cache.get(key)?.deref(); // 매 collected 시 undefined
|
||||
}
|
||||
```
|
||||
|
||||
### 매 FinalizationRegistry 의 cleanup hook
|
||||
```javascript
|
||||
const registry = new FinalizationRegistry((heldValue) => {
|
||||
console.log('Object collected:', heldValue);
|
||||
externalResources.delete(heldValue);
|
||||
});
|
||||
|
||||
function trackResource(obj, id) {
|
||||
registry.register(obj, id);
|
||||
}
|
||||
// 매 obj 의 unreachable 시 cleanup 의 trigger
|
||||
```
|
||||
|
||||
### 매 v8 의 heap snapshot 의 programmatic
|
||||
```javascript
|
||||
import v8 from 'node:v8';
|
||||
import fs from 'node:fs';
|
||||
|
||||
const snapshot = v8.getHeapSnapshot();
|
||||
snapshot.pipe(fs.createWriteStream('heap.heapsnapshot'));
|
||||
// 매 Chrome DevTools 의 import → reachability graph 의 분석
|
||||
```
|
||||
|
||||
### 매 Cycle 의 detection
|
||||
```javascript
|
||||
// 매 Refcount 의 약점 — 매 cycle 의 leak
|
||||
let a = {}, b = {};
|
||||
a.ref = b;
|
||||
b.ref = a;
|
||||
// 매 V8 의 reachability-based GC 의 cycle 의 collect (root 의 unreachable 시)
|
||||
```
|
||||
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| 일반 object | implicit reachability — 매 default |
|
||||
| Cache | WeakRef + FinalizationRegistry |
|
||||
| External resource | FinalizationRegistry 의 cleanup |
|
||||
| Cycle 의심 | heap snapshot 의 retainer path |
|
||||
| Memory leak debug | DevTools Memory tab |
|
||||
|
||||
**기본값**: 매 explicit ref 의 nullify 보다 매 scope 의 의도된 사용 의 reachability 의 자연스러운 종료.
|
||||
> **이 문서는 [[Reachability Analysis]] 의 중복본입니다.** Canonical 문서로 redirect.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Garbage Collection]] · [[Mark-Sweep-Compact 알고리즘]]
|
||||
- 변형: [[Incremental Marking]] · [[Tri-color Marking]]
|
||||
- 응용: [[GC Root]] · [[Memory Leak Debugging]]
|
||||
- Adjacent: [[Generational Hypothesis]] · [[Write Barrier]]
|
||||
- 부모: [[Reachability Analysis]] (canonical)
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: GC 동작 의 explain, memory leak 의 diagnose, WeakRef vs Map 의 권장.
|
||||
**언제 X**: 매 application 의 GC 의 strict timing 의 의존 의 답변 — 매 non-deterministic 임 의 인지.
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **Global cache**: 매 unbounded Map 의 GC root 까지 retained — 매 WeakMap 의 사용.
|
||||
- **Closure leak**: 매 outer function 의 large var 의 inner closure 의 capture.
|
||||
- **Detached DOM**: 매 removed node 의 JS reference 의 retained — 매 listener cleanup.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (V8 docs, Garbage Collection Handbook by Jones).
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
## 🕓 변경 이력
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — Reachability analysis FULL 작성 |
|
||||
| 2026-05-20 | 중복 병합 — canonical 문서로 redirect |
|
||||
|
||||
@@ -145,8 +145,8 @@ function match<T, E, R>(r: Result<T, E>, on: { ok: (v: T) => R; err: (e: E) => R
|
||||
**기본값**: 매 domain layer 는 Result, infrastructure boundary 에서 unwrap → throw 변환.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Error Handling]] · [[Discriminated Unions]]
|
||||
- 변형: [[Effect TS]] · [[Either Monad]]
|
||||
- 부모: [[Error Handling]] · [[Discriminated_Unions|Discriminated Unions]]
|
||||
- 변형: [[Effect TS]]
|
||||
- 응용: [[Zod 런타임 유효성 검사 통합]] · [[API 응답 및 에러 핸들링 아키텍처]]
|
||||
- Adjacent: [[Type Theory]] · [[Functional Programming]]
|
||||
|
||||
|
||||
@@ -3,32 +3,25 @@ id: wiki-2026-0508-sca-소프트웨어-구성-분석
|
||||
title: SCA (소프트웨어 구성 분석)
|
||||
category: 10_Wiki/Topics
|
||||
status: duplicate
|
||||
canonical_id: software-composition-analysis
|
||||
duplicate_of: "[[Software Composition Analysis]]"
|
||||
canonical_id: wiki-2026-0508-sca-fundamentals
|
||||
duplicate_of: "[[SCA_Fundamentals]]"
|
||||
aliases: []
|
||||
source_trust_level: A
|
||||
confidence_score: 0.9
|
||||
verification_status: redirected
|
||||
tags: [duplicate, security, supply-chain, sast]
|
||||
last_reinforced: 2026-05-10
|
||||
tags: [duplicate]
|
||||
last_reinforced: 2026-05-20
|
||||
github_commit: pending
|
||||
---
|
||||
|
||||
# SCA (소프트웨어 구성 분석)
|
||||
|
||||
> **이 문서는 [[Software Composition Analysis]] 의 중복본입니다.** Canonical 문서로 redirect.
|
||||
|
||||
## 핵심 요약 (specialization aspects)
|
||||
- 매 dependency 의 known CVE 의 scan — npm audit, Snyk, Dependabot, Trivy.
|
||||
- 매 SBOM (Software Bill of Materials) 의 generate — CycloneDX / SPDX format.
|
||||
- 매 transitive dependency 의 vulnerability 의 catch.
|
||||
> **이 문서는 [[SCA_Fundamentals]] 의 중복본입니다.** Canonical 문서로 redirect.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Software Composition Analysis]] (canonical)
|
||||
- Adjacent: [[DAST (동적 애플리케이션 보안 테스트)]] · [[CI_CD 파이프라인]]
|
||||
- 부모: [[SCA_Fundamentals]] (canonical)
|
||||
|
||||
## 🕓 변경 이력
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | 중복 처리 — SCA canonical 로 redirect |
|
||||
| 2026-05-20 | 중복 병합 — canonical 문서로 redirect |
|
||||
|
||||
@@ -101,9 +101,8 @@ startTransition(() => {
|
||||
**기본값**: 매 long loops 의 `scheduler.yield()` + 매 background work `postTask({priority:'background'})`.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Browser_Event_Loop]] · [[Core_Web_Vitals]]
|
||||
- 변형: [[requestIdleCallback]] · [[queueMicrotask]]
|
||||
- 응용: [[INP_Optimization]] · [[Long_Task_Breakup]]
|
||||
- 부모: [[Core Web Vitals Optimization (INP, LCP 개선)|Core_Web_Vitals]]
|
||||
- 응용: [[INP_Optimization]]
|
||||
- Adjacent: [[AbortController]] · [[React_useTransition]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
|
||||
@@ -156,7 +156,6 @@ strategy:
|
||||
## 🔗 Graph
|
||||
- 부모: [[Distributed Systems]] · [[Cloud Native]]
|
||||
- 변형: [[Microservices]] · [[Serverless]] · [[Event-Driven Architecture]]
|
||||
- 응용: [[SaaS Architecture]] · [[E-commerce Architecture]]
|
||||
- Adjacent: [[Kubernetes]] · [[Service Mesh]] · [[Observability]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
|
||||
@@ -25,7 +25,7 @@ github_commit: pending
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[SharedArrayBuffer]] (canonical)
|
||||
- Adjacent: [[Web Workers]] · [[Atomics API]]
|
||||
- Adjacent: [[Web Worker (웹 워커)|Web Workers]]
|
||||
|
||||
## 🕓 변경 이력
|
||||
| 날짜 | 변경 |
|
||||
|
||||
@@ -127,10 +127,9 @@ const memory = new WebAssembly.Memory({ initial: 10, maximum: 100, shared: true
|
||||
**기본값**: 매 small data postMessage, 매 hot-path large buffer SAB.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Web_Workers]] · [[JavaScript_Concurrency]]
|
||||
- 변형: [[SharedArrayBuffer_보안_이슈와_Cross-Origin_Isolation]]
|
||||
- 응용: [[WebAssembly_Threads]] · [[OffscreenCanvas]]
|
||||
- Adjacent: [[Atomics_API]] · [[Structured_Clone]]
|
||||
- 응용: [[OffscreenCanvas]]
|
||||
- Adjacent: [[Structured_Clone]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 large data parallel processing (image/video/ML inference) 의 + 매 worker 간 frequent sync 필요 시.
|
||||
|
||||
@@ -126,10 +126,10 @@ const names = pluck([{ name: 'a' }, { name: 'b' }], 'name');
|
||||
**기본값**: structural typing 의 활용. 매 ID confusion 의 risk 시 branded type 의 추가.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[TypeScript]] · [[Type System]]
|
||||
- 변형: [[Nominal Typing]] · [[Duck Typing]]
|
||||
- 응용: [[Excess Property Checking]] · [[ts-brand]]
|
||||
- Adjacent: [[Discriminated Unions]] · [[Type Casting]]
|
||||
- 부모: [[TypeScript]] · [[TypeScript 타입 시스템 (TypeScript Type System)|Type System]]
|
||||
- 변형: [[Nominal-Typing-in-TypeScript|Nominal Typing]] · [[Duck Typing]]
|
||||
- 응용: [[Excess_Property_Checking|Excess Property Checking]] · [[ts-brand]]
|
||||
- Adjacent: [[Discriminated_Unions|Discriminated Unions]] · [[Type Casting]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: TS type error 의 explain, branded type 의 권장, structural vs nominal 의 비교.
|
||||
|
||||
@@ -134,10 +134,8 @@ features {
|
||||
**기본값**: 매 enterprise JVM/.NET 의 TeamCity, 매 OSS GitHub repo 의 Actions.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[CI_CD]] · [[Build_Automation]]
|
||||
- 변형: [[Jenkins]] · [[GitHub_Actions]] · [[GitLab_CI]]
|
||||
- 응용: [[Gradle]] · [[Kotlin_DSL]]
|
||||
- Adjacent: [[Artifact_Repository]] · [[Test_Reporting]]
|
||||
- 부모: [[CI_CD_Pipeline|CI_CD]]
|
||||
- 변형: [[GitHub_Actions]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 enterprise CI 설계, 매 build chain 의존성 모델링, 매 Kotlin DSL 마이그레이션.
|
||||
|
||||
@@ -2,154 +2,26 @@
|
||||
id: wiki-20260508-type-casting-redir
|
||||
title: Type Casting
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: [type assertion, type coercion, as cast]
|
||||
duplicate_of: none
|
||||
status: duplicate
|
||||
canonical_id: wiki-2026-0508-type-casting
|
||||
duplicate_of: "[[Type Casting]]"
|
||||
aliases: []
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
verification_status: applied
|
||||
tags: [typescript, type-system, fundamentals]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-10
|
||||
confidence_score: 0.9
|
||||
verification_status: redirected
|
||||
tags: [duplicate]
|
||||
last_reinforced: 2026-05-20
|
||||
github_commit: pending
|
||||
tech_stack:
|
||||
language: TypeScript
|
||||
framework: tsc
|
||||
---
|
||||
|
||||
# Type Casting
|
||||
|
||||
## 매 한 줄
|
||||
> **"매 compiler 에 'trust me' 의 signal — runtime 의 영향 X 의 compile-time 만 의 type 변경"**. TS 의 `as` operator / angle-bracket — 매 runtime conversion 의 X (cf. JS coercion). 매 2026 의 best practice 의 minimize + zod / type guard 의 prefer.
|
||||
|
||||
## 매 핵심
|
||||
|
||||
### 매 종류
|
||||
- **Type assertion** (TS): `value as Type` — 매 compile-time only.
|
||||
- **Type coercion** (JS): `Number(x)`, `+x`, `String(x)` — 매 runtime 변환.
|
||||
- **Type guard**: `typeof / instanceof / in / custom predicate` — 매 narrowing.
|
||||
- **Type predicate**: `function isFoo(x): x is Foo` — 매 user-defined narrowing.
|
||||
|
||||
### 매 동작 원리
|
||||
- `as` 의 compile time 만 의 type swap — 매 generated JS 의 동일.
|
||||
- 매 unsafe — 매 actual shape 의 mismatch 시 runtime error 의 latent.
|
||||
- 매 double assertion `as unknown as T` — 매 incompatible type 의 강제.
|
||||
- 매 runtime validation (zod / valibot) 의 결합 의 권장.
|
||||
|
||||
### 매 응용
|
||||
1. External API response 의 typing — 매 zod 의 parse 후 타입 의 narrow.
|
||||
2. JSON.parse 의 unknown 의 narrowing.
|
||||
3. DOM query 의 Element → HTMLInputElement.
|
||||
|
||||
## 💻 패턴
|
||||
|
||||
### 매 Type assertion (basic)
|
||||
```typescript
|
||||
const el = document.querySelector('input') as HTMLInputElement;
|
||||
el.value = 'hello'; // 매 HTMLElement 가 아닌 HTMLInputElement 의 value 접근
|
||||
```
|
||||
|
||||
### 매 Double assertion (last resort)
|
||||
```typescript
|
||||
const raw = JSON.parse(text); // 매 any
|
||||
const data = raw as unknown as MyType; // 매 강제 cast
|
||||
// 매 BAD — 매 zod 의 prefer
|
||||
```
|
||||
|
||||
### 매 Type guard (preferred)
|
||||
```typescript
|
||||
function isUser(x: unknown): x is User {
|
||||
return typeof x === 'object' && x !== null
|
||||
&& 'id' in x && typeof (x as any).id === 'string';
|
||||
}
|
||||
|
||||
const data: unknown = JSON.parse(text);
|
||||
if (isUser(data)) {
|
||||
data.id; // 매 narrowed
|
||||
}
|
||||
```
|
||||
|
||||
### 매 Zod 의 runtime validation 의 결합
|
||||
```typescript
|
||||
import { z } from 'zod';
|
||||
|
||||
const UserSchema = z.object({
|
||||
id: z.string(),
|
||||
email: z.string().email(),
|
||||
});
|
||||
type User = z.infer<typeof UserSchema>;
|
||||
|
||||
const parsed = UserSchema.parse(JSON.parse(text));
|
||||
// 매 parsed 의 User type — 매 cast X, 매 actual validation
|
||||
```
|
||||
|
||||
### 매 const assertion
|
||||
```typescript
|
||||
const config = { url: '/api', method: 'GET' } as const;
|
||||
// 매 type: { readonly url: '/api'; readonly method: 'GET' }
|
||||
// 매 literal type 의 보존
|
||||
```
|
||||
|
||||
### 매 Non-null assertion
|
||||
```typescript
|
||||
const input = document.getElementById('email')!; // 매 null 의 부정
|
||||
// 매 dangerous — 매 optional chaining + guard 의 prefer
|
||||
const safe = document.getElementById('email');
|
||||
if (!safe) throw new Error('missing');
|
||||
```
|
||||
|
||||
### 매 Satisfies operator (TS 4.9+)
|
||||
```typescript
|
||||
type Color = 'red' | 'green' | 'blue';
|
||||
const palette = {
|
||||
primary: 'red',
|
||||
secondary: 'green',
|
||||
} satisfies Record<string, Color>;
|
||||
// 매 cast 와 달리 actual literal type 의 보존 + check 의 둘 다
|
||||
palette.primary; // type: 'red' (not Color)
|
||||
```
|
||||
|
||||
### 매 JS coercion (different topic)
|
||||
```javascript
|
||||
const n = Number('42'); // 매 string → number 의 runtime 변환
|
||||
const s = String(123); // 매 number → string
|
||||
const b = Boolean(0); // 매 falsy → false
|
||||
// 매 TS 의 cast 와 무관 — 매 actual conversion
|
||||
```
|
||||
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| External JSON | zod / valibot parse |
|
||||
| DOM query | type assertion `as HTMLInputElement` |
|
||||
| Custom narrowing | type predicate `x is T` |
|
||||
| Literal preserve | satisfies / as const |
|
||||
| any → known | type guard 의 prefer over cast |
|
||||
|
||||
**기본값**: 매 cast 의 minimize. 매 type guard / runtime validation 의 default.
|
||||
> **이 문서는 [[Type Casting]] 의 중복본입니다.** Canonical 문서로 redirect.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[TypeScript]] · [[Type System]]
|
||||
- 변형: [[Type Guard]] · [[Type Predicate]]
|
||||
- 응용: [[Zod 파싱과 브랜디드 타입을 결합한 런타임 데이터 검증]] · [[DOM 요소 조작 및 타입 좁히기]]
|
||||
- Adjacent: [[Discriminated Unions]] · [[Structural Typing]]
|
||||
- 부모: [[Type Casting]] (canonical)
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: TS unsafe cast 의 detect, zod migration 의 권장, satisfies 의 도입.
|
||||
**언제 X**: 매 cast 의 단순 추가 의 답변 — 매 root cause (validation 부재) 의 fix.
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **`as any`**: 매 type system 의 escape — 매 unknown + guard 의 사용.
|
||||
- **Double cast**: `as unknown as T` 의 frequent 사용 — 매 design smell.
|
||||
- **Non-null `!`의 남용**: 매 actual null 시 silent crash.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (TypeScript Handbook "Type Assertions").
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
## 🕓 변경 이력
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — Type casting FULL 작성 |
|
||||
| 2026-05-20 | 중복 병합 — canonical 문서로 redirect |
|
||||
|
||||
@@ -138,10 +138,9 @@ divPos x y = x `div` y -- 매 SMT solver 가 y > 0 검증
|
||||
**기본값**: 매 application 은 Haskell/Rust/TS 의 expressive type system; 매 critical proof 는 Lean 4.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Type System]] · [[Lambda Calculus]] · [[Formal Methods]]
|
||||
- 변형: [[Dependent Types]] · [[Refinement Types]] · [[Linear Types]] · [[HoTT]]
|
||||
- 응용: [[Lean 4]] · [[Coq]] · [[Idris]] · [[Haskell GADT]]
|
||||
- Adjacent: [[Curry-Howard]] · [[System F]] · [[Calculus of Constructions]]
|
||||
- 부모: [[TypeScript 타입 시스템 (TypeScript Type System)|Type System]] · [[Formal Methods]]
|
||||
- 응용: [[Coq]]
|
||||
- Adjacent: [[Curry-Howard]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 type system design 이해, advanced FP, formal verification, TS type-level wizardry.
|
||||
|
||||
@@ -174,10 +174,10 @@ function move(p: Pet) {
|
||||
**기본값**: 매 discriminated union with literal `kind`/`tag` field — exhaustiveness 보장.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Type System]] · [[Algebraic Data Types]]
|
||||
- 부모: [[TypeScript 타입 시스템 (TypeScript Type System)|Type System]] · [[Algebraic Data Types]]
|
||||
- 변형: [[Discriminated Union]] · [[Tagged Union]] · [[Sum Types]] · [[Variant]]
|
||||
- 응용: [[Result Type]] · [[Option Type]] · [[State Machine]] · [[AST]]
|
||||
- Adjacent: [[Pattern Matching]] · [[Type Narrowing]] · [[Exhaustiveness Check]]
|
||||
- 응용: [[Result Type]] · [[State Machine]] · [[AST]]
|
||||
- Adjacent: [[Pattern Matching]] · [[Type Narrowing]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 모델링 "A or B" 의 alternatives, error handling (Result), state representation.
|
||||
|
||||
@@ -2,173 +2,26 @@
|
||||
id: wiki-20260508-vr-sickness-redir
|
||||
title: VR Sickness
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: [cybersickness, simulator sickness, VR motion sickness]
|
||||
duplicate_of: none
|
||||
status: duplicate
|
||||
canonical_id: wiki-2026-0508-vr-sickness
|
||||
duplicate_of: "[[VR Sickness]]"
|
||||
aliases: []
|
||||
source_trust_level: A
|
||||
confidence_score: 0.91
|
||||
verification_status: applied
|
||||
tags: [vr, ux, perception, three-js]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-10
|
||||
confidence_score: 0.9
|
||||
verification_status: redirected
|
||||
tags: [duplicate]
|
||||
last_reinforced: 2026-05-20
|
||||
github_commit: pending
|
||||
tech_stack:
|
||||
language: TypeScript
|
||||
framework: Three.js / WebXR
|
||||
---
|
||||
|
||||
# VR Sickness
|
||||
|
||||
## 매 한 줄
|
||||
> **"매 visual motion 과 vestibular 의 mismatch 의 motion sickness 의 trigger"**. 매 VR 의 가장 큰 UX 장벽 — 매 frame rate / FOV / locomotion 의 careful design 의 mitigation. 2026 의 Quest 3 / Vision Pro / PCVR 의 90Hz+ 의 default — 매 여전히 design pattern 의 핵심.
|
||||
|
||||
## 매 핵심
|
||||
|
||||
### 매 원인
|
||||
- **Sensory mismatch**: 매 eye 의 motion 의 perceive — 매 inner ear 의 stationary 의 report.
|
||||
- **Low frame rate**: <72fps 의 judder 의 sickness 의 trigger.
|
||||
- **Vection**: 매 large optical flow 의 self-motion 의 illusion.
|
||||
- **Latency**: motion-to-photon >20ms 의 mismatch 의 amplify.
|
||||
- **FOV motion**: peripheral 의 motion 의 sensitivity 가장 큼.
|
||||
|
||||
### 매 mitigation 기법
|
||||
- **Teleport locomotion**: 매 smooth 대신 fade-to-black + jump.
|
||||
- **Tunnel vision (vignette)**: 매 motion 시 peripheral mask — 매 vection 감소.
|
||||
- **Snap turning**: 매 smooth rotation 대신 30° step.
|
||||
- **Comfort settings**: 매 user 의 individual tuning.
|
||||
- **High frame rate**: 90Hz+ 의 mandatory — Quest 3 의 default 90/120Hz.
|
||||
- **Stable horizon**: 매 cockpit / fixed reference frame.
|
||||
|
||||
### 매 응용
|
||||
1. Beat Saber — 매 stationary play 의 zero motion sickness.
|
||||
2. Half-Life Alyx — 매 teleport + smooth 의 toggle.
|
||||
3. 매 자전거 simulator — 매 physical motion 의 real vestibular alignment.
|
||||
|
||||
## 💻 패턴
|
||||
|
||||
### 매 Three.js + WebXR 의 framerate 의 monitor
|
||||
```typescript
|
||||
import * as THREE from 'three';
|
||||
|
||||
const renderer = new THREE.WebGLRenderer({ antialias: true });
|
||||
renderer.xr.enabled = true;
|
||||
|
||||
let lastTime = performance.now();
|
||||
renderer.setAnimationLoop((time) => {
|
||||
const dt = time - lastTime;
|
||||
if (dt > 14) console.warn(`Frame drop: ${dt.toFixed(1)}ms`); // 매 <72fps 의 경고
|
||||
lastTime = time;
|
||||
renderer.render(scene, camera);
|
||||
});
|
||||
```
|
||||
|
||||
### 매 Vignette 의 motion 시 적용
|
||||
```glsl
|
||||
// fragment shader
|
||||
uniform float u_vignetteStrength;
|
||||
varying vec2 vUv;
|
||||
|
||||
void main() {
|
||||
vec2 center = vUv - 0.5;
|
||||
float dist = length(center);
|
||||
float vignette = smoothstep(0.5, 0.3 - u_vignetteStrength * 0.2, dist);
|
||||
gl_FragColor = vec4(color.rgb * vignette, 1.0);
|
||||
}
|
||||
```
|
||||
|
||||
```typescript
|
||||
// 매 movement 의 detect 후 strength 의 ramp
|
||||
const speed = velocity.length();
|
||||
material.uniforms.u_vignetteStrength.value = THREE.MathUtils.clamp(speed / 5, 0, 0.6);
|
||||
```
|
||||
|
||||
### 매 Snap turn 의 implementation
|
||||
```typescript
|
||||
let lastTurnTime = 0;
|
||||
const SNAP_ANGLE = Math.PI / 6; // 30°
|
||||
const COOLDOWN = 250;
|
||||
|
||||
function update(controller: THREE.Group, input: GamepadAxes) {
|
||||
const now = performance.now();
|
||||
if (Math.abs(input.thumbstickX) > 0.7 && now - lastTurnTime > COOLDOWN) {
|
||||
rig.rotation.y -= Math.sign(input.thumbstickX) * SNAP_ANGLE;
|
||||
lastTurnTime = now;
|
||||
fadeOutIn(50); // 매 brief blackout 의 ease
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 매 Teleport locomotion
|
||||
```typescript
|
||||
function teleport(targetPos: THREE.Vector3) {
|
||||
fadeToBlack(150).then(() => {
|
||||
rig.position.copy(targetPos);
|
||||
fadeFromBlack(150);
|
||||
});
|
||||
}
|
||||
```
|
||||
|
||||
### 매 Stable horizon (cockpit reference)
|
||||
```typescript
|
||||
// 매 vehicle simulator 의 cockpit mesh 의 always-visible
|
||||
const cockpit = new THREE.Mesh(cockpitGeo, cockpitMat);
|
||||
camera.add(cockpit); // 매 head 에 follow — 매 vestibular reference
|
||||
scene.add(camera);
|
||||
```
|
||||
|
||||
### 매 Comfort 설정 의 노출
|
||||
```typescript
|
||||
const settings = {
|
||||
movementType: 'teleport' as 'teleport' | 'smooth',
|
||||
vignetteEnabled: true,
|
||||
snapTurn: true,
|
||||
snapAngle: 30,
|
||||
};
|
||||
// 매 in-game menu 의 user 노출 — 매 individual variance 의 대응
|
||||
```
|
||||
|
||||
### 매 Latency 의 측정
|
||||
```typescript
|
||||
const xrSession = renderer.xr.getSession();
|
||||
xrSession?.requestAnimationFrame((time, frame) => {
|
||||
// 매 frame.predictedDisplayTime - performance.now() = motion-to-photon
|
||||
});
|
||||
```
|
||||
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| Casual user | teleport + snap turn (default) |
|
||||
| Hardcore VR | smooth + comfort toggle |
|
||||
| Vehicle sim | cockpit + stable horizon |
|
||||
| Stationary game | minimal locomotion (Beat Saber) |
|
||||
| Motion ride | physical motion 의 sync |
|
||||
|
||||
**기본값**: teleport + snap turn 의 default. 매 user toggle 의 expose.
|
||||
> **이 문서는 [[VR Sickness]] 의 중복본입니다.** Canonical 문서로 redirect.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Virtual Reality UX]]
|
||||
- 변형: [[VR 멀미 (VR Sickness)]] · [[VR 멀미(VR sickness)]] (Korean variants)
|
||||
- 응용: [[Beat Saber]] · [[가상현실(VR) 자전거 시뮬레이터]]
|
||||
- Adjacent: [[Vergence-Accommodation Conflicts]] · [[깊이 지각(Depth perception)]] · [[Edge Bleeding]]
|
||||
- 부모: [[VR Sickness]] (canonical)
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: VR app 의 design 의 comfort 권장, frame rate budget 의 explain, snap turn / teleport 의 trade-off.
|
||||
**언제 X**: 매 medical 진단 — 매 individual variance 의 큼 의 인지.
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **<72fps 의 ship**: 매 sickness 의 garantee.
|
||||
- **Smooth-only locomotion**: 매 casual user 의 alienate.
|
||||
- **Forced camera shake**: 매 vection 증폭.
|
||||
- **Unstable horizon**: 매 vehicle 의 wobble.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (Oculus VR Best Practices, Valve Half-Life Alyx postmortem).
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
## 🕓 변경 이력
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — VR sickness FULL 작성 |
|
||||
| 2026-05-20 | 중복 병합 — canonical 문서로 redirect |
|
||||
|
||||
@@ -121,8 +121,6 @@ function clampInteractionDistance(target: THREE.Object3D) {
|
||||
**기본값**: 0.5-2m comfort zone 의 default, 매 UI 의 1.5m 의 fixed.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Stereoscopic Display]] · [[Virtual Reality UX]]
|
||||
- 변형: [[Light Field Display]] · [[Varifocal Display]]
|
||||
- 응용: [[VR Sickness]] · [[깊이 지각(Depth perception)]]
|
||||
- Adjacent: [[Edge Bleeding]] · [[가상현실(VR) 자전거 시뮬레이터]]
|
||||
|
||||
|
||||
@@ -24,8 +24,6 @@ github_commit: pending
|
||||
- 만약 "war"가 의도적이라면 [[Game Theory]] 의 cooperation game / iterated prisoner's dilemma 참조.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[yes (Unix command)]] (canonical 추정)
|
||||
- Adjacent: [[Unix Coreutils]] · [[Shell Scripting]]
|
||||
|
||||
## 🕓 변경 이력
|
||||
| 날짜 | 변경 |
|
||||
|
||||
@@ -118,9 +118,9 @@ console.timeEnd('store-loop');
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Garbage Collection]] · [[Memory Management]]
|
||||
- 변형: [[SATB]] · [[Card Marking]] · [[Load Barrier]]
|
||||
- 응용: [[Generational GC]] · [[Incremental GC]] · [[Orinoco]]
|
||||
- Adjacent: [[Remembered Set]] · [[Mark Sweep Compact]] · [[Generational Hypothesis]]
|
||||
- 변형: [[Card Marking]]
|
||||
- 응용: [[Incremental GC]] · [[Orinoco]]
|
||||
- Adjacent: [[Mark Sweep Compact]] · [[Garbage Collection|Generational Hypothesis]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: GC internals 의 understanding, runtime tuning, performance 의 explain.
|
||||
|
||||
@@ -183,10 +183,10 @@ const PasswordSchema = z
|
||||
**기본값**: Zod 3.x — 매 modern TS app 의 default validation layer.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[TypeScript]] · [[Runtime Type Validation]]
|
||||
- 변형: [[Valibot]] · [[Yup]] · [[ArkType]] · [[io-ts]]
|
||||
- 응용: [[tRPC]] · [[React Hook Form]] · [[env validation]]
|
||||
- Adjacent: [[JSON Schema]] · [[Type Inference]] · [[과잉 속성 체크 (Excess Property Checking)]]
|
||||
- 부모: [[TypeScript]] · [[Runtime_Validation|Runtime Type Validation]]
|
||||
- 변형: [[Valibot]] · [[Yup]] · [[ArkType]]
|
||||
- 응용: [[React Hook Form]]
|
||||
- Adjacent: [[JSON Schema]] · [[과잉 속성 체크 (Excess Property Checking)]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: untrusted boundary (API, form, env, LLM output) 매 parse. tool/function calling 의 매 input schema.
|
||||
|
||||
@@ -164,10 +164,10 @@ const subset = pick(user, ["id", "name"] as const);
|
||||
**기본값**: 매 literal data 에는 항상 `as const` 를 시도. 매 widening 이 의도일 때만 제외.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[TypeScript]] · [[Type Assertions]]
|
||||
- 부모: [[TypeScript]]
|
||||
- 변형: [[const Assertion]] · [[satisfies Operator]]
|
||||
- 응용: [[Discriminated Unions]] · [[Tuple Types]] · [[Literal Types]]
|
||||
- Adjacent: [[Readonly]] · [[Type Narrowing]] · [[Type Inference]]
|
||||
- 응용: [[Discriminated_Unions|Discriminated Unions]] · [[Literal Types]]
|
||||
- Adjacent: [[Readonly]] · [[Type Narrowing]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 fixed set of values (action types, route names, status codes), tuple return, config object 정의 시 사용.
|
||||
|
||||
+1
-2
@@ -202,8 +202,7 @@ for (let i = start; i < end; i += 4) {
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[ECS]] · [[bitECS]] · [[Web Worker]] · [[SharedArrayBuffer]]
|
||||
- 변형: [[Bevy ECS]] · [[Flecs]] · [[Unity DOTS]]
|
||||
- 응용: [[Browser Game Engine]] · [[Particle System]] · [[Boid Simulation]]
|
||||
- 응용: [[Particle System]]
|
||||
- Adjacent: [[Web Worker와 SharedArrayBuffer를 이용한 실제 고부하 병렬 처리 구현체 (실패_성공 포함)]] · [[OffscreenCanvas]] · [[가변적 LOD(Level of Detail) 시스템]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
|
||||
@@ -129,10 +129,7 @@ for src_path in Path("GameData").rglob("*.ndf"):
|
||||
**기본값**: 매 ndf-parse + Python script + git for version control. 매 manual NDF text edit 의 X.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Game Modding]] · [[Domain-Specific Parser]]
|
||||
- 변형: [[Lark Parser]] · [[Tree-sitter]]
|
||||
- 응용: [[WARNO Modding]] · [[Steel Division Modding]]
|
||||
- Adjacent: [[AST Manipulation]] · [[Source-to-Source Transformation]]
|
||||
- 응용: [[WARNO Modding]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: NDF mod 작성 + LLM 의 patch generation, schema 추론, balance tweak suggestion.
|
||||
|
||||
@@ -120,7 +120,7 @@ function clean(s: string): Clean {
|
||||
**기본값**: 매 domain 의 distinct identity 의 string/number type → 매 brand 의 use.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[TypeScript]] · [[Nominal Typing]]
|
||||
- 부모: [[TypeScript]] · [[Nominal-Typing-in-TypeScript|Nominal Typing]]
|
||||
- 변형: [[Branded Types]] · [[Opaque Types]]
|
||||
- 응용: [[Zod]] · [[Effect-TS]] · [[Type Safety]]
|
||||
- Adjacent: [[Structural Typing]] · [[Runtime Validation]]
|
||||
|
||||
@@ -185,9 +185,8 @@ function applyLOD(mesh: Mesh, level: number) {
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Rendering]] · [[Optimization]]
|
||||
- 변형: [[Nanite]] · [[Meshlet]] · [[Progressive Mesh]] · [[Imposter]]
|
||||
- 응용: [[Voxel Engine]] · [[Open World]] · [[Vegetation Rendering]]
|
||||
- Adjacent: [[bitECS와 SharedArrayBuffer를 결합한 멀티스레드 고성능 아키텍처]] · [[Frustum Culling]] · [[Occlusion Culling]]
|
||||
- 변형: [[Nanite]]
|
||||
- Adjacent: [[bitECS와 SharedArrayBuffer를 결합한 멀티스레드 고성능 아키텍처]] · [[Frustum Culling]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 large scene, 매 다양한 distance, 매 GPU/CPU bound. 매 1k+ object scene.
|
||||
|
||||
@@ -146,10 +146,10 @@ java -XX:+UseG1GC -XX:MaxGCPauseMillis=200 MyApp
|
||||
**기본값**: 매 modern JVM 의 **G1** (or ZGC for >4GB heap), Go 의 **default concurrent collector**.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[메모리 관리]] · [[Runtime Systems]]
|
||||
- 변형: [[Generational GC]] · [[Concurrent GC]] · [[Reference Counting]]
|
||||
- 응용: [[JVM Internals]] · [[V8 Engine]] · [[Go Runtime]]
|
||||
- Adjacent: [[Memory Leak]] · [[Heap]] · [[Stack vs Heap]]
|
||||
- 부모: [[메모리 관리]]
|
||||
- 변형: [[Reference Counting]]
|
||||
- 응용: [[V8 Engine]]
|
||||
- Adjacent: [[Memory Leak]] · [[Heap]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: GC tuning, OOM 분석, GC log 해석, allocation pattern 최적화.
|
||||
|
||||
@@ -141,10 +141,8 @@ public class CockpitAnchor : MonoBehaviour {
|
||||
**기본값**: 매 90Hz+, teleport locomotion, snap turn 30°, comfort vignette, motion-to-photon <20ms.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Virtual Reality]] · [[Human Factors]]
|
||||
- 부모: [[Virtual Reality]]
|
||||
- 변형: [[Cybersickness]] · [[Simulator Sickness]]
|
||||
- 응용: [[VR Game Design]] · [[VR Training]]
|
||||
- Adjacent: [[Vestibular System]] · [[Frame Rate]] · [[Motion-to-Photon Latency]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: VR UX review, comfort rating 추정, locomotion design feedback.
|
||||
|
||||
@@ -168,10 +168,9 @@ double area(Shape s) {
|
||||
**기본값**: 매 immutable record + composition + interface + constructor DI. 매 deep inheritance 의 X.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Programming Paradigms]]
|
||||
- 변형: [[Functional Programming]] · [[Procedural Programming]] · [[Actor Model]]
|
||||
- 변형: [[Functional Programming]]
|
||||
- 응용: [[Design Patterns]] · [[SOLID]]
|
||||
- Adjacent: [[Domain-Driven Design]] · [[Type Systems]] · [[Encapsulation]]
|
||||
- Adjacent: [[Domain-Driven Design]] · [[TypeScript 타입 시스템 (TypeScript Type System)|Type Systems]] · [[Encapsulation]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: class design review, SOLID 위반 발견, refactor toward composition.
|
||||
|
||||
@@ -192,8 +192,7 @@ async function listOrders(cursor?: string): Promise<Page<OrderDto>> {
|
||||
## 🔗 Graph
|
||||
- 부모: [[Domain-Driven Design]] · [[API Design]]
|
||||
- 변형: [[Hexagonal Architecture]] · [[Event Sourcing]] · [[CQRS]]
|
||||
- 응용: [[Stripe API]] · [[Shopify API]]
|
||||
- Adjacent: [[Type-Driven Development]] · [[OpenAPI]] · [[gRPC]]
|
||||
- Adjacent: [[OpenAPI]] · [[gRPC]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: schema generation, contract review, illegal-state 발견, migration 전략.
|
||||
|
||||
@@ -128,8 +128,8 @@ class AuditAspect {
|
||||
## 🔗 Graph
|
||||
- 부모: [[Software Architecture]]
|
||||
- 변형: [[Hexagonal Architecture]] · [[Clean Architecture]] · [[Onion Architecture]]
|
||||
- 응용: [[Spring Boot]] · [[Django]] · [[ASP.NET Core]]
|
||||
- Adjacent: [[Separation of Concerns]] · [[Dependency Injection]] · [[Repository Pattern]]
|
||||
- 응용: [[Spring Boot]] · [[ASP.NET Core]]
|
||||
- Adjacent: [[Separation of Concerns]] · [[Dependency Injection]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: scaffolding generation, layer 위반 review, refactor towards layered.
|
||||
|
||||
@@ -121,9 +121,9 @@ const config = {
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[TypeScript]] · [[구조적 타이핑(Structural Typing)]]
|
||||
- 변형: [[Strict Mode (TS)]] · [[satisfies operator]]
|
||||
- 응용: [[React Props]] · [[API Contract]]
|
||||
- Adjacent: [[Index Signature]] · [[Type Narrowing]] · [[Discriminated Union]]
|
||||
- 변형: [[satisfies operator]]
|
||||
- 응용: [[API Contract]]
|
||||
- Adjacent: [[Type Narrowing]] · [[Discriminated Union]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: TS error 디버깅 ("excess property"), refactor 시 EPC 의도 검증.
|
||||
|
||||
@@ -3,31 +3,25 @@ id: wiki-20260508--excess-property-checking--redir
|
||||
title: 과잉 속성 체크(Excess Property Checking)
|
||||
category: 10_Wiki/Topics
|
||||
status: duplicate
|
||||
canonical_id: excess-property-checking
|
||||
duplicate_of: "[[Excess Property Checking]]"
|
||||
canonical_id: wiki-2026-0508-과잉-속성-체크-excess-property-checkin
|
||||
duplicate_of: "[[과잉 속성 체크 (Excess Property Checking)]]"
|
||||
aliases: []
|
||||
source_trust_level: A
|
||||
confidence_score: 0.9
|
||||
verification_status: redirected
|
||||
tags: [duplicate, typescript, type-system]
|
||||
last_reinforced: 2026-05-10
|
||||
tags: [duplicate]
|
||||
last_reinforced: 2026-05-20
|
||||
github_commit: pending
|
||||
---
|
||||
|
||||
# 과잉 속성 체크(Excess Property Checking)
|
||||
|
||||
> **이 문서는 [[Excess Property Checking]] 의 중복본입니다.** Canonical 문서로 redirect.
|
||||
|
||||
## 핵심 요약
|
||||
- 매 object literal 의 unknown property 의 TS 의 reject.
|
||||
- 매 fresh literal 만 의 적용 — 매 alias 의 변수 의 escape.
|
||||
> **이 문서는 [[과잉 속성 체크 (Excess Property Checking)]] 의 중복본입니다.** Canonical 문서로 redirect.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Excess Property Checking]] (canonical)
|
||||
- Adjacent: [[Structural Typing]] · [[TypeScript]]
|
||||
- 부모: [[과잉 속성 체크 (Excess Property Checking)]] (canonical)
|
||||
|
||||
## 🕓 변경 이력
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | 중복 처리 — canonical 문서로 redirect |
|
||||
| 2026-05-20 | 중복 병합 — canonical 문서로 redirect |
|
||||
|
||||
@@ -152,9 +152,9 @@ shipping-service/ ← 매 carrier integration
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Software Design Principles]]
|
||||
- 변형: [[Single Responsibility Principle]] · [[Modularity]] · [[High Cohesion / Low Coupling]]
|
||||
- 변형: [[Single Responsibility Principle (SRP)|Single Responsibility Principle]] · [[Modularity]]
|
||||
- 응용: [[Layered Architecture]] · [[Hexagonal Architecture]] · [[Microservices]]
|
||||
- Adjacent: [[SOLID]] · [[Design by Contract]] · [[Aspect-Oriented Programming]]
|
||||
- Adjacent: [[SOLID]] · [[Aspect-Oriented Programming (AOP)|Aspect-Oriented Programming]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: refactor proposal, code smell detection (mixed concerns), boundary 설정.
|
||||
|
||||
@@ -4,7 +4,7 @@ title: 관점 지향 프로그래밍 (AOP)
|
||||
category: 10_Wiki/Topics
|
||||
status: duplicate
|
||||
canonical_id: aspect-oriented-programming
|
||||
duplicate_of: "[[Aspect-Oriented Programming]]"
|
||||
duplicate_of: "[[Aspect-Oriented Programming (AOP)|Aspect-Oriented Programming]]"
|
||||
aliases: []
|
||||
source_trust_level: A
|
||||
confidence_score: 0.9
|
||||
@@ -16,14 +16,14 @@ github_commit: pending
|
||||
|
||||
# 관점 지향 프로그래밍 (AOP)
|
||||
|
||||
> **이 문서는 [[Aspect-Oriented Programming]] 의 중복본입니다.** Canonical 문서로 redirect.
|
||||
> **이 문서는 [[Aspect-Oriented Programming (AOP)|Aspect-Oriented Programming]] 의 중복본입니다.** Canonical 문서로 redirect.
|
||||
|
||||
## 핵심 요약
|
||||
- 매 cross-cutting concern (logging, security) 의 aspect 의 weave.
|
||||
- 매 Spring AOP, AspectJ 의 example.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Aspect-Oriented Programming]] (canonical)
|
||||
- 부모: [[Aspect-Oriented Programming (AOP)|Aspect-Oriented Programming]] (canonical)
|
||||
- Adjacent: [[Separation of Concerns]] · [[OOP]]
|
||||
|
||||
## 🕓 변경 이력
|
||||
|
||||
@@ -4,7 +4,7 @@ title: 관점 지향 프로그래밍(AOP)
|
||||
category: 10_Wiki/Topics
|
||||
status: duplicate
|
||||
canonical_id: aspect-oriented-programming
|
||||
duplicate_of: "[[Aspect-Oriented Programming]]"
|
||||
duplicate_of: "[[Aspect-Oriented Programming (AOP)|Aspect-Oriented Programming]]"
|
||||
aliases: []
|
||||
source_trust_level: A
|
||||
confidence_score: 0.9
|
||||
@@ -16,13 +16,13 @@ github_commit: pending
|
||||
|
||||
# 관점 지향 프로그래밍(AOP)
|
||||
|
||||
> **이 문서는 [[Aspect-Oriented Programming]] 의 중복본입니다.** Canonical 문서로 redirect.
|
||||
> **이 문서는 [[Aspect-Oriented Programming (AOP)|Aspect-Oriented Programming]] 의 중복본입니다.** Canonical 문서로 redirect.
|
||||
|
||||
## 핵심 요약
|
||||
- 매 spacing variant 의 동일 concept.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Aspect-Oriented Programming]] (canonical)
|
||||
- 부모: [[Aspect-Oriented Programming (AOP)|Aspect-Oriented Programming]] (canonical)
|
||||
|
||||
## 🕓 변경 이력
|
||||
| 날짜 | 변경 |
|
||||
|
||||
@@ -130,9 +130,9 @@ const config = {
|
||||
**기본값**: 매 TS / Go 의 structural 활용 + 매 unit safety 가 필요한 곳만 brand. 매 모든 type 의 brand 의 X.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Type Systems]]
|
||||
- 변형: [[Nominal Typing]] · [[Duck Typing]] · [[Row Polymorphism]]
|
||||
- 응용: [[TypeScript]] · [[Go Interface]] · [[OCaml Object]]
|
||||
- 부모: [[TypeScript 타입 시스템 (TypeScript Type System)|Type Systems]]
|
||||
- 변형: [[Nominal-Typing-in-TypeScript|Nominal Typing]] · [[Duck Typing]]
|
||||
- 응용: [[TypeScript]]
|
||||
- Adjacent: [[과잉 속성 체크 (Excess Property Checking)]] · [[Branded Type]] · [[Discriminated Union]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
|
||||
@@ -164,10 +164,8 @@ public class IdempotentSubmit {
|
||||
**기본값**: 매 multi-step media workflow 매 trinity 전체 사용. 매 simple CRUD 매 Optimus only.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Netflix Engineering]] · [[Workflow Orchestration]]
|
||||
- 변형: [[Conductor (Netflix)]] · [[Temporal]] · [[AWS Step Functions]]
|
||||
- 응용: [[AV1 Encoding Pipeline]] · [[Studio Post-Production Automation]]
|
||||
- Adjacent: [[Titus]] · [[Kafka]] · [[Saga Pattern]] · [[Event-Driven Architecture]]
|
||||
- 변형: [[Temporal]]
|
||||
- Adjacent: [[Kafka]] · [[Event-Driven Architecture]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 large-scale media platform 설계, 매 multi-step workflow + GPU compute, 매 internal PaaS.
|
||||
|
||||
@@ -24,7 +24,6 @@ github_commit: pending
|
||||
- 핵심 컴포넌트: Optimus (workflow), Plato (rules), Stratum (function runtime).
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Netflix Cosmos Platform]] (canonical)
|
||||
|
||||
## 🕓 변경 이력
|
||||
| 날짜 | 변경 |
|
||||
|
||||
@@ -25,7 +25,7 @@ github_commit: pending
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Loose Coupling]] (canonical)
|
||||
- 인접: [[Dependency Injection]] · [[High Cohesion]]
|
||||
- 인접: [[Dependency Injection]]
|
||||
|
||||
## 🕓 변경 이력
|
||||
| 날짜 | 변경 |
|
||||
|
||||
@@ -4,7 +4,7 @@ title: 단일 책임 원칙 (SRP)
|
||||
category: 10_Wiki/Topics
|
||||
status: duplicate
|
||||
canonical_id: single-responsibility-principle
|
||||
duplicate_of: "[[Single Responsibility Principle]]"
|
||||
duplicate_of: "[[Single Responsibility Principle (SRP)|Single Responsibility Principle]]"
|
||||
aliases: []
|
||||
source_trust_level: A
|
||||
confidence_score: 0.9
|
||||
@@ -16,7 +16,7 @@ github_commit: pending
|
||||
|
||||
# 단일 책임 원칙 (SRP)
|
||||
|
||||
> **이 문서는 [[Single Responsibility Principle]] 의 중복본입니다.** Canonical 문서로 redirect.
|
||||
> **이 문서는 [[Single Responsibility Principle (SRP)|Single Responsibility Principle]] 의 중복본입니다.** Canonical 문서로 redirect.
|
||||
|
||||
## 핵심 요약
|
||||
- SOLID 의 S. "한 클래스는 하나의 변경 이유만 가져야 한다."
|
||||
@@ -24,7 +24,7 @@ github_commit: pending
|
||||
- Cohesion 향상, coupling 감소.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Single Responsibility Principle]] (canonical)
|
||||
- 부모: [[Single Responsibility Principle (SRP)|Single Responsibility Principle]] (canonical)
|
||||
- 인접: [[SOLID Principles]]
|
||||
|
||||
## 🕓 변경 이력
|
||||
|
||||
@@ -4,7 +4,7 @@ title: 단일 책임 원칙 (Single Responsibility Principle)
|
||||
category: 10_Wiki/Topics
|
||||
status: duplicate
|
||||
canonical_id: single-responsibility-principle
|
||||
duplicate_of: "[[Single Responsibility Principle]]"
|
||||
duplicate_of: "[[Single Responsibility Principle (SRP)|Single Responsibility Principle]]"
|
||||
aliases: []
|
||||
source_trust_level: A
|
||||
confidence_score: 0.9
|
||||
@@ -16,7 +16,7 @@ github_commit: pending
|
||||
|
||||
# 단일 책임 원칙 (Single Responsibility Principle)
|
||||
|
||||
> **이 문서는 [[Single Responsibility Principle]] 의 중복본입니다.** Canonical 문서로 redirect.
|
||||
> **이 문서는 [[Single Responsibility Principle (SRP)|Single Responsibility Principle]] 의 중복본입니다.** Canonical 문서로 redirect.
|
||||
|
||||
## 핵심 요약
|
||||
- SOLID 의 S. 한 클래스는 매 하나의 변경 이유.
|
||||
@@ -24,7 +24,7 @@ github_commit: pending
|
||||
- 응집도 ↑, 결합도 ↓.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Single Responsibility Principle]] (canonical)
|
||||
- 부모: [[Single Responsibility Principle (SRP)|Single Responsibility Principle]] (canonical)
|
||||
- 인접: [[SOLID Principles]]
|
||||
|
||||
## 🕓 변경 이력
|
||||
|
||||
@@ -208,8 +208,8 @@ await generate({
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Software Architecture]] · [[TypeScript]]
|
||||
- 변형: [[Modular Monolith]] · [[Hexagonal Architecture]] · [[Clean Architecture]]
|
||||
- 응용: [[Nx Monorepo]] · [[Turborepo]] · [[Effect-TS]]
|
||||
- 변형: [[Cloud_Native|Modular Monolith]] · [[Hexagonal Architecture]] · [[Clean Architecture]]
|
||||
- 응용: [[Turborepo]] · [[Effect-TS]]
|
||||
- Adjacent: [[브랜디드 타입 (Branded Types)]] · [[Domain-Driven Design]] · [[Project References]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
|
||||
@@ -154,10 +154,9 @@ tsc -p . --generateTrace ./trace
|
||||
**기본값**: 매 monorepo = 매 Turborepo + project references + swc emit + tsc --build --noEmit.
|
||||
|
||||
## Graph
|
||||
- 부모: [[TypeScript]] · [[Build System]]
|
||||
- 부모: [[TypeScript]]
|
||||
- 변형: [[Project References]] · [[Incremental Build]]
|
||||
- 응용: [[Turborepo]] · [[Nx]] · [[swc]] · [[esbuild]]
|
||||
- Adjacent: [[Tree Shaking]] · [[Module Resolution]] · [[d.ts Generation]]
|
||||
|
||||
## LLM 활용
|
||||
**언제**: 매 tsconfig 작성/리뷰, 매 monorepo 구조 설계, 매 trace 분석, 매 generic 단순화.
|
||||
|
||||
@@ -24,7 +24,6 @@ github_commit: pending
|
||||
- CI: `turbo lint --filter=...[origin/main]`.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Turborepo Lint Orchestration]] (canonical)
|
||||
- 인접: [[Monorepo]] · [[ESLint]]
|
||||
|
||||
## 🕓 변경 이력
|
||||
|
||||
@@ -25,7 +25,7 @@ github_commit: pending
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Duck Typing]] (canonical)
|
||||
- 인접: [[Structural Typing]] · [[Protocol (Python)]]
|
||||
- 인접: [[Structural Typing]]
|
||||
|
||||
## 🕓 변경 이력
|
||||
| 날짜 | 변경 |
|
||||
|
||||
@@ -24,8 +24,7 @@ github_commit: pending
|
||||
- Policy as code: OPA / Conftest.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[DevSecOps Continuous Security]] (canonical)
|
||||
- 인접: [[SAST]] · [[Container Security]]
|
||||
- 인접: [[SAST]]
|
||||
|
||||
## 🕓 변경 이력
|
||||
| 날짜 | 변경 |
|
||||
|
||||
@@ -212,10 +212,8 @@ function liveness(cfg: Map<string, BB>): Map<string, Set<string>> {
|
||||
**기본값**: Forward worklist algorithm + Boolean lattice. 매 type narrowing 매 data-flow + reach 결합.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Static Analysis]] · [[Compiler]]
|
||||
- 변형: [[Liveness Analysis]] · [[Constant Propagation]] · [[Available Expressions]]
|
||||
- 응용: [[Dead Code Elimination]] · [[Register Allocation]] · [[Type Narrowing]]
|
||||
- Adjacent: [[Control Flow Graph]] · [[Data Flow Analysis]] · [[Abstract Interpretation]]
|
||||
- 부모: [[Static Analysis]]
|
||||
- 응용: [[Type Narrowing]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 compiler 설계, 매 linter 작성, 매 IDE feature, 매 type system 분석.
|
||||
|
||||
@@ -23,7 +23,6 @@ github_commit: pending
|
||||
- 매 game balance / level design 의 핵심 parameter.
|
||||
|
||||
## Graph
|
||||
- 부모: [[게임 디자인 — 이동 메커니즘]] (canonical)
|
||||
|
||||
## 변경 이력
|
||||
| 날짜 | 변경 |
|
||||
|
||||
@@ -23,7 +23,6 @@ github_commit: pending
|
||||
- 매 Vite/webpack HMR, 매 Erlang/Elixir hot code swap.
|
||||
|
||||
## Graph
|
||||
- 부모: [[Hot Reload]] (canonical)
|
||||
|
||||
## 변경 이력
|
||||
| 날짜 | 변경 |
|
||||
|
||||
@@ -152,8 +152,7 @@ node --trace-gc --trace-gc-verbose --max-old-space-size=4096 app.js
|
||||
|
||||
## Graph
|
||||
- 부모: [[Garbage Collection]] · [[Memory Management]]
|
||||
- 변형: [[Mark-Compact]] · [[Generational GC]] · [[Concurrent GC]] · [[ZGC]] · [[Shenandoah]]
|
||||
- 응용: [[JVM]] · [[V8]] · [[Go runtime]] · [[CRuby]]
|
||||
- 응용: [[JVM]] · [[V8]]
|
||||
- Adjacent: [[Tri-color Marking]] · [[Write Barrier]] · [[Reference Counting]]
|
||||
|
||||
## LLM 활용
|
||||
|
||||
@@ -23,7 +23,6 @@ github_commit: pending
|
||||
- 매 long-session 후 매 visual fatigue / aftereffect.
|
||||
|
||||
## Graph
|
||||
- 부모: [[HMD 시각 후유증 — 연구]] (canonical)
|
||||
|
||||
## 변경 이력
|
||||
| 날짜 | 변경 |
|
||||
|
||||
@@ -165,8 +165,7 @@ heaptrack_gui heaptrack.app.<pid>.gz
|
||||
|
||||
## Graph
|
||||
- 부모: [[Memory Management]] · [[Performance]]
|
||||
- 변형: [[Manual Leak]] · [[GC Retention]] · [[Native Handle Leak]]
|
||||
- 응용: [[Heap Profiling]] · [[Cache Eviction]] · [[WeakRef]]
|
||||
- 응용: [[Cache Eviction]] · [[WeakRef]]
|
||||
- Adjacent: [[Garbage Collection]] · [[Reference Counting]] · [[RAII]] · [[OOM]]
|
||||
|
||||
## LLM 활용
|
||||
|
||||
@@ -4,7 +4,7 @@ title: 명목적 타이핑(Nominal Typing)
|
||||
category: 10_Wiki/Topics
|
||||
status: duplicate
|
||||
canonical_id: nominal-typing
|
||||
duplicate_of: "[[Nominal Typing]]"
|
||||
duplicate_of: "[[Nominal-Typing-in-TypeScript|Nominal Typing]]"
|
||||
aliases: []
|
||||
source_trust_level: A
|
||||
confidence_score: 0.9
|
||||
@@ -16,7 +16,7 @@ github_commit: pending
|
||||
|
||||
# 명목적 타이핑(Nominal Typing)
|
||||
|
||||
> **이 문서는 [[Nominal Typing]] 의 중복본입니다.** Canonical 문서로 redirect.
|
||||
> **이 문서는 [[Nominal-Typing-in-TypeScript|Nominal Typing]] 의 중복본입니다.** Canonical 문서로 redirect.
|
||||
|
||||
## 핵심 요약
|
||||
- 타입 동등성을 매 이름(declaration) 기준으로 판단.
|
||||
@@ -24,7 +24,7 @@ github_commit: pending
|
||||
- TS 는 structural 이지만 branded type 으로 nominal 흉내 가능.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Nominal Typing]] (canonical)
|
||||
- 부모: [[Nominal-Typing-in-TypeScript|Nominal Typing]] (canonical)
|
||||
- 인접: [[Structural Typing]] · [[Branded Types]]
|
||||
|
||||
## 🕓 변경 이력
|
||||
|
||||
@@ -23,8 +23,7 @@ github_commit: pending
|
||||
- 각 package 가 extend 만. 매 single source of truth.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Monorepo Config Centralization]] (canonical)
|
||||
- 인접: [[Monorepo Architecture]]
|
||||
- 인접: [[Monorepo|Monorepo Architecture]]
|
||||
|
||||
## 🕓 변경 이력
|
||||
| 날짜 | 변경 |
|
||||
|
||||
@@ -23,8 +23,7 @@ github_commit: pending
|
||||
- 매 leaf package 는 extend 만. 매 변경 시 전체 일관성 유지.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Monorepo Config Centralization]] (canonical)
|
||||
- 인접: [[Monorepo Architecture]]
|
||||
- 인접: [[Monorepo|Monorepo Architecture]]
|
||||
|
||||
## 🕓 변경 이력
|
||||
| 날짜 | 변경 |
|
||||
|
||||
@@ -25,7 +25,7 @@ github_commit: pending
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Monorepo Architecture]] (canonical)
|
||||
- 인접: [[Turborepo]] · [[Nx]] · [[pnpm Workspaces]]
|
||||
- 인접: [[Turborepo]] · [[Nx]]
|
||||
|
||||
## 🕓 변경 이력
|
||||
| 날짜 | 변경 |
|
||||
|
||||
@@ -169,10 +169,9 @@ module.exports = {
|
||||
**기본값**: Modular monolith. 매 boundary 가 stable 해진 후 strangler-fig pattern 으로 extract.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Software Architecture]] · [[Deployment Models]]
|
||||
- 변형: [[Modular Monolith]] · [[Layered Architecture]] · [[Distributed Monolith]]
|
||||
- 응용: [[Shopify Architecture]] · [[Basecamp HEY]] · [[GitHub Rails Monolith]]
|
||||
- Adjacent: [[Microservices]] · [[Service-Oriented Architecture]] · [[Strangler Fig Pattern]]
|
||||
- 부모: [[Software Architecture]]
|
||||
- 변형: [[Cloud_Native|Modular Monolith]] · [[Layered Architecture]] · [[Distributed Monolith]]
|
||||
- Adjacent: [[Microservices]] · [[Service-Oriented Architecture]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: MVP 설계, 매 small-team product, 매 strong consistency 요구, 매 deployment simplicity 우선.
|
||||
|
||||
@@ -24,8 +24,7 @@ github_commit: pending
|
||||
- 패턴: WeakRef/FinalizationRegistry, object pool, off-heap (SharedArrayBuffer).
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[JavaScript Memory Tuning]] (canonical)
|
||||
- 인접: [[V8 Engine]] · [[Memory Leaks]]
|
||||
- 인접: [[V8 Engine]] · [[Memory_Leaks|Memory Leaks]]
|
||||
|
||||
## 🕓 변경 이력
|
||||
| 날짜 | 변경 |
|
||||
|
||||
@@ -167,10 +167,9 @@ function deleteBucket(token: AdminToken) { /* ... */ }
|
||||
**기본값**: ID + validated input 매 brand. 매 internal scratch 매 X.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[TypeScript Type System]] · [[Nominal Typing]]
|
||||
- 변형: [[Phantom Types]] · [[Newtype (Haskell)]] · [[Opaque Types]]
|
||||
- 응용: [[Zod Schema Brand]] · [[Effect Brand Module]] · [[Domain Modeling]]
|
||||
- Adjacent: [[Smart Constructor Pattern]] · [[Parse Don't Validate]] · [[Type-Driven Development]]
|
||||
- 부모: [[TypeScript Type System]] · [[Nominal-Typing-in-TypeScript|Nominal Typing]]
|
||||
- 변형: [[Opaque Types]]
|
||||
- Adjacent: [[Parse Don't Validate]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: ID confusion 우려, 매 validated input 강제, 매 unit safety, 매 capability-based security.
|
||||
|
||||
@@ -161,10 +161,6 @@ GROUP BY user_id;
|
||||
**기본값**: Hard mode, 20 min/day, 5 days/week — 매 ACSM moderate-intensity guideline 충족.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Exergame Research]] · [[VR Fitness]]
|
||||
- 변형: [[Supernatural VR]] · [[Les Mills Body Combat VR]] · [[FitXR]]
|
||||
- 응용: [[Cardiac Rehabilitation]] · [[Obesity Intervention]] · [[Workplace Wellness]]
|
||||
- Adjacent: [[METs ACSM Guidelines]] · [[Heart Rate Reserve]] · [[Polar H10]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: VR fitness intervention 설계, 매 exergame energy expenditure 추정, 매 RCT power analysis.
|
||||
|
||||
@@ -160,9 +160,8 @@ func shade(p *byte) {
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Garbage Collection]] · [[Memory Management]]
|
||||
- 변형: [[Read Barrier]] · [[Load Barrier]] · [[Reference Counting Barrier]]
|
||||
- 응용: [[G1 GC]] · [[ZGC]] · [[Shenandoah]] · [[Go GC]] · [[V8 Orinoco]]
|
||||
- Adjacent: [[Tri-color Marking]] · [[Card Table]] · [[Remembered Set]] · [[Concurrent Marking]]
|
||||
- 응용: [[V8 Orinoco]]
|
||||
- Adjacent: [[Tri-color Marking]] · [[Concurrent Marking]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 GC 동작 분석, 매 GC overhead 측정, 매 custom runtime 설계, 매 JIT compiler 최적화.
|
||||
|
||||
@@ -225,7 +225,7 @@ const u: User = {
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[TypeScript Type System]] · [[Domain-Driven Design]]
|
||||
- 변형: [[Parse Don't Validate]] · [[Smart Constructor]] · [[Type-Driven Development]]
|
||||
- 변형: [[Parse Don't Validate]] · [[Smart Constructor]]
|
||||
- 응용: [[Zod]] · [[Effect Schema]] · [[Valibot]] · [[ArkType]]
|
||||
- Adjacent: [[브랜디드 타입 (Branded Types)]] · [[약한 타입 탐지 (Weak Type Detection)]] · [[대규모 TypeScript 애플리케이션 아키텍처 설계]]
|
||||
|
||||
|
||||
@@ -152,7 +152,6 @@ fetchStrict("/api", {}); // 매 type error
|
||||
## 🔗 Graph
|
||||
- 부모: [[TypeScript Type System]] · [[Structural Typing]]
|
||||
- 변형: [[Excess Property Check]] · [[Discriminated Union]]
|
||||
- 응용: [[Config Object Pattern]] · [[Plugin Options]] · [[Partial DTO]]
|
||||
- Adjacent: [[브랜디드 타입 (Branded Types)]] · [[Type Narrowing]] · [[안전한 TypeScript 데이터 모델링 및 설정 관리 구축]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
|
||||
@@ -25,7 +25,6 @@ github_commit: pending
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Exergaming]] (canonical)
|
||||
- Adjacent: [[VR Fitness]] · [[Game-based Learning]]
|
||||
|
||||
## 🕓 변경 이력
|
||||
| 날짜 | 변경 |
|
||||
|
||||
@@ -24,8 +24,7 @@ github_commit: pending
|
||||
- 매 modern (V8 12+): 매 baseline incremental marking, 매 unified young generation.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[V8 Garbage Collection]] (canonical)
|
||||
- Adjacent: [[Old Space]] · [[Young Generation]] · [[Mark and Sweep]]
|
||||
- Adjacent: [[Old_Space|Old Space]] · [[Young Generation]] · [[Mark and Sweep]]
|
||||
|
||||
## 🕓 변경 이력
|
||||
| 날짜 | 변경 |
|
||||
|
||||
@@ -25,7 +25,7 @@ github_commit: pending
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Overdraw]] (canonical)
|
||||
- Adjacent: [[GPU Rendering]] · [[Fillrate]] · [[Z-Prepass]]
|
||||
- Adjacent: [[Fillrate]] · [[Z-Prepass]]
|
||||
|
||||
## 🕓 변경 이력
|
||||
| 날짜 | 변경 |
|
||||
|
||||
@@ -4,7 +4,7 @@ title: 외부 API 데이터 및 설정 파일 처리
|
||||
category: 10_Wiki/Topics
|
||||
status: duplicate
|
||||
canonical_id: runtime-type-validation
|
||||
duplicate_of: "[[Runtime Type Validation]]"
|
||||
duplicate_of: "[[Runtime_Validation|Runtime Type Validation]]"
|
||||
aliases: []
|
||||
source_trust_level: A
|
||||
confidence_score: 0.9
|
||||
@@ -16,7 +16,7 @@ github_commit: pending
|
||||
|
||||
# 외부 API 데이터 및 설정 파일 처리
|
||||
|
||||
> **이 문서는 [[Runtime Type Validation]] 의 중복본입니다.** Canonical 문서로 redirect.
|
||||
> **이 문서는 [[Runtime_Validation|Runtime Type Validation]] 의 중복본입니다.** Canonical 문서로 redirect.
|
||||
|
||||
## 매 핵심 요약 (specialization)
|
||||
- 매 API response + 매 config file (JSON/YAML/TOML) 의 schema 의 validate.
|
||||
@@ -24,8 +24,8 @@ github_commit: pending
|
||||
- 매 pattern: 매 boundary 에서 parse — 매 internal logic 은 매 typed data 만 다룸.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Runtime Type Validation]] (canonical)
|
||||
- Adjacent: [[Configuration Management]] · [[Zod]] · [[JSON Schema]]
|
||||
- 부모: [[Runtime_Validation|Runtime Type Validation]] (canonical)
|
||||
- Adjacent: [[Zod]] · [[JSON Schema]]
|
||||
|
||||
## 🕓 변경 이력
|
||||
| 날짜 | 변경 |
|
||||
|
||||
@@ -4,7 +4,7 @@ title: 외부 API 데이터의 런타임 검증 후 처리
|
||||
category: 10_Wiki/Topics
|
||||
status: duplicate
|
||||
canonical_id: runtime-type-validation
|
||||
duplicate_of: "[[Runtime Type Validation]]"
|
||||
duplicate_of: "[[Runtime_Validation|Runtime Type Validation]]"
|
||||
aliases: []
|
||||
source_trust_level: A
|
||||
confidence_score: 0.9
|
||||
@@ -16,7 +16,7 @@ github_commit: pending
|
||||
|
||||
# 외부 API 데이터의 런타임 검증 후 처리
|
||||
|
||||
> **이 문서는 [[Runtime Type Validation]] 의 중복본입니다.** Canonical 문서로 redirect.
|
||||
> **이 문서는 [[Runtime_Validation|Runtime Type Validation]] 의 중복본입니다.** Canonical 문서로 redirect.
|
||||
|
||||
## 매 핵심 요약 (specialization)
|
||||
- 매 외부 API response 의 매 trust 의 X — 매 runtime parse + validate 의 필수.
|
||||
@@ -24,7 +24,7 @@ github_commit: pending
|
||||
- 매 pattern: `schema.parse(data)` → 매 typed result, parse 실패 시 throw.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Runtime Type Validation]] (canonical)
|
||||
- 부모: [[Runtime_Validation|Runtime Type Validation]] (canonical)
|
||||
- Adjacent: [[Zod]] · [[Schema Validation]] · [[Parse Don't Validate]]
|
||||
|
||||
## 🕓 변경 이력
|
||||
|
||||
@@ -24,8 +24,7 @@ github_commit: pending
|
||||
- 매 modern (2026): TypeScript-first, 매 `exports` field (subpath), 매 ESM-only 의 trend.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[API Design Principles]] (canonical)
|
||||
- Adjacent: [[Semantic Versioning]] · [[Library Design]] · [[Backward Compatibility]]
|
||||
- Adjacent: [[Library Design]] · [[Backward Compatibility]]
|
||||
|
||||
## 🕓 변경 이력
|
||||
| 날짜 | 변경 |
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user