dsls-bounded-context

5 posts

환경 간 `.env` 파일을 복사하는 것은 설정 전략이 아니다

인프라팀이 환경 간 차이를 명시적이고 타입 안전하게 만드는 컨텍스트별 DSL을 사용하여 dev, staging, production 간 설정을 관리하는 방법.

staging 환경은 작동한다. production 환경은 작동하지 않는다. 두 환경의 파일 간 diff는 400줄이며, 그 중 절반은 아무도 더 이상 믿지 않는 주석이다. 누군가 지난달 staging에 를 추가했다. production에는 아무도 추가하지 않았다. 애플리케이션은…

문법 제약 디코딩: 모든 토큰에서 LLM이 유효한 구문을 출력하도록 강제하기

LLM은 토큰을 확률적으로 샘플링하기 때문에 구문을 환각한다. 문법 제약 디코딩은 각 단계에서 어휘를 필터링하여 구문적 유효성을 유지하는 토큰만 출력되도록 한다.

LLM에게 JSON 객체를 생성하라고 요청하면, 결국 뒤에 쉼표를 붙이거나 문자열 안에 이스케이프되지 않은 줄바꿈을 넣거나, 따옴표로 묶인 키가 있어야 할 자리에 bare word를 출력한다. 이 오류는 모델의 버그가 아니다. autoregressive sampling이 작동하는…

영어에서 테마로 번역하는 것은 쉽다. 결정론적으로 만드는 것이 진짜 문제다.

간단한 영어 설명에서 디자인 토큰을 생성할 수 있지만, 해당 설명을 스키마 계약과 스냅샷 테스트가 있는 한정된 컨텍스트 DSL로 다루는 경우에만 가능하다.

네, 영어로 테마를 설명하고 작동하는 디자인 시스템을 얻을 수 있다. 다만 영어 설명은 프롬프트가 아니다. 소스 파일이다. 그리고 모든 소스 파일처럼 컴파일러, 타입 시스템, 테스트가 필요하다. 챗봇 쿼리처럼 다루면 화요일에는 월요일과 다른 색상 팔레트를 얻게 된다. 한정된 컨텍스트와…

Grammar 파일은 버려라: DSL 파서를 평범한 TypeScript로 작성하라

대부분의 bounded-context DSL에 parser generator은 과하다. 파서 콤비네이터를 사용하면 애플리케이션과 동일한 언어로 작동하는 파서를 생성 코드 없이, 빌드 단계 없이 구축할 수 있다.

Yacc grammar 파일을 열어 보면서 언어를 만드는 데 왜 두 번째 언어를 배워야 하는지 의문을 품어본 적이 있다면, 당신만 그런 것이 아니다. parser generator은 강력하지만, bounded context 안에서 자연스럽게 등장하는 작은 DSL에는 거의 항상 과하다.…

런타임 설정 오류는 허용한 프로덕션 장애다

스키마 검증과 빌드 타임 검사를 사용해 애플리케이션이 트래픽을 처리하기 전에 설정 오류를 잡는 방법.

금요일 저녁, 3시간이 지난 시점에 애플리케이션이 를 던진다. 스택 트레이스는 설정 객체의 깊게 중첩된 속성을 가리킨다. 값은 다. 누군가 검증 로직을 갱신하지 않은 채 변경 사항을 프로덕션에 푸시했다. 이것은 런타임 버그가 아니다. 정책 실패다. 신뢰할 수 없는 데이터를 사전 검사…