헥스가 뭐야, Dex? Deterministic Transformation Artifacts 소개

발행: (2026년 3월 13일 오후 04:11 GMT+9)
12 분 소요
원문: Dev.to

Source: Dev.to

번역을 진행하려면, 번역이 필요한 전체 텍스트(코드 블록이나 URL을 제외한 본문)를 제공해 주시겠어요? 텍스트를 주시면 요청하신 대로 한국어로 번역해 드리겠습니다.

문제: 코드 변환은 보통 혼돈이다

소프트웨어 엔지니어는 지속적으로 코드베이스를 변환해야 합니다.
작은 편집만이 아니라, 대규모 구조적 변화를 말합니다:

  • API 마이그레이션
  • 프레임워크 업그레이드
  • 로컬라이제이션 재작성
  • 수백 개 저장소에 걸친 보안 패치
  • 수천 개 파일에 영향을 미치는 리팩터링

대부분의 경우 이러한 변환은 다음과 같은 혼합 방식으로 수행됩니다:

  • 취약한 스크립트
  • 정규식 마법
  • 일회성 코듈모드
  • 닭을 포함한 의심스러운 검색·대체 의식

그리고 스크립트가 실행되면… 행운을 빕니다.

흔히 겪는 문제는:

  • 명확한 감사 로그가 없음
  • 재현 불가
  • 안전한 롤백이 없음
  • 사전에 변환을 검토할 방법이 없음

다시 말해, 코드베이스 전체에 매우 큰 변이를 실행했으며 이제 CI 신들에게 닭이 버그에 대한 갈증을 해소했기를 기도하고 있는 상황입니다.

Source:

하지만… 코드 변환이 아티팩트라면?

상상해 보세요: 변환을 무작위로 실행하는 대신, 이를 일급 아티팩트처럼 다루는 것입니다—다음과 같은 작업을 할 수 있는:

  • 검사
  • 검증
  • 공유
  • 서명
  • 재현
  • 되돌리기 (닭을 잡을 필요 없이)

이것이 DEX의 아이디어입니다.

DEX: 결정론적 변환 아티팩트

DEX 아티팩트는 코드 변환을 결정론적인 방식으로 설명하는 휴대 가능한 패키지입니다. 다음과 같이 생각할 수 있습니다:

Git commit
+ migration script
+ cryptographic signature
+ replayable transformation plan

하지만 특정 저장소 상태에 묶여 있는 것이 아니라, DEX 아티팩트는 변환 자체를 설명합니다.

전형적인 레이아웃:

DEX
├── manifest.json
├── payload/
│   └── plan.json
└── signatures/

변환 계획(plan.json)에는 다음이 포함됩니다:

  • 어떤 파일이 변경되는지
  • 어떤 줄이 수정되는지
  • 원본 코드
  • 교체된 코드
  • 삽입된 모든 헬퍼
  • 각 소스 파일의 정확한 해시

변경을 결정론적으로 재현하는 데 필요한 모든 것이 들어 있습니다. 동일한 입력을 제공하면, 아티팩트는 언제나 동일한 출력을 생성합니다—숨겨진 상태도 없고, 런타임에서의 놀라움도 없습니다.

Dennis 포지

DEX 아티팩트는 Dennis라는 도구에 의해 생성됩니다. Dennis는 간단한 철학을 중심으로 구축된 결정론적 코듀드 엔진입니다:

“변환은 계획되고, 검사 가능하며, 되돌릴 수 있어야 합니다.”

워크플로우

Scan → Plan → Package → Sign → Verify → Apply

프로젝트를 직접 수정하는 대신, Dennis는 먼저 plan을 생성합니다. 집에서도 안전하게 시도해 볼 수 있습니다—닭은 필요 없습니다.

Source:

Let’s Forge an Artifact

1. Clone the example repository

git clone https://github.com/crevilla2050/hello-dennis
cd hello-dennis

Inside you’ll find a minimal Python program:

#!/usr/bin/env python3

def main():
    print("Hello world.")
    print("Thank you for using Dennis. Love, the Dennis Team.")

if __name__ == "__main__":
    main()

특별한 것이 없는, 두 개의 하드코딩된 문자열만 있는 아주 간단한 파이썬 프로그램입니다. 이런 코드는 코드베이스에 조용히 퍼져 있다가 어느 순간 “이걸 국제화해야 할 것 같다”는 이야기가 나오게 됩니다.

2. Generate the Transformation Plan

dennis plan run . \
    --dict messages_en.json \
    --add-helper helper.py \
    --target-file hello.py \
    --line 12

이 명령은 프로젝트를 분석하고 결정론적인 변환 계획(plan.json)을 생성합니다. 아직 파일은 수정되지 않으며, Dennis는 항상 직접 확인할 수 있는 계획부터 시작합니다.

3. Package the Artifact

dennis pack plan.json hello-dennis.dex

이제 변환 내용이 휴대 가능한 아티팩트가 되어 다른 사람과 공유하고, 검사하고, 버전 관리하며, 다른 빌드 아티팩트처럼 저장할 수 있습니다.

4. Sign the Artifact

First generate a signing key:

dennis keygen

Then sign the artifact:

dennis dex sign hello-dennis.dex --key dennis.key

아티팩트에 검증 가능한 서명이 포함되어 출처를 증명합니다. 누군가 페이로드를 수정하고 다시 서명하더라도 이전 서명은 아티팩트 안에 남아 변환 이력의 연쇄를 형성합니다.

5. Inspect the Artifact

dennis inspect hello-dennis.dex

Dennis는 다음 정보를 표시합니다:

  • 아티팩트 메타데이터
  • 페이로드 유형
  • 페이로드 해시
  • 서명들
  • 변환 정보

이를 통해 엔지니어는 아티팩트의 내용을 신뢰하기 전에 직접 확인할 수 있습니다.

6. Apply the Transformation

dennis rehydrate hello-dennis.dex
dennis apply rehydrated-plan.json

파이썬 스크립트가 국제화에 적합한 구조로 변환됩니다. 하드코딩된 문자열 대신 프로그램이 사전(messages_en.json)에서 메시지를 로드하게 됩니다.

7. Test the Result

python hello.py

하드코딩된 리터럴이 아니라 외부 messages_en.json 사전에서 가져온 출력이 표시되어야 합니다.

요약

  • DEX는 코드 변환을 검사 가능하고, 재현 가능하며, 되돌릴 수 있는 아티팩트로 전환합니다.
  • Dennis는 결정론적 파이프라인을 제공합니다: 계획 → 패키지 → 서명 → 검증 → 적용.
  • 이 워크플로우는 감사 추적, 출처에 대한 암호학적 증명, 안전한 롤백을 제공하여 더 이상 눈먼 “실행‑후‑기도” 스크립트나 의식적인 닭을 사용하지 않아도 됩니다.

다른 언어 설정 사용

특정 로케일을 사용하여 스크립트를 실행하려면 명령 앞에 LANG을 붙이면 됩니다:

LANG=es python hello.py

또는

LANG=de python hello.py

프로그램은 자동으로 해당 번역 사전을 로드합니다. “마법” 같은 것이 아니라 – 단순히 결정적이고 되돌릴 수 있는 변환입니다.

변환 되돌리기

Dennis 변환은 설계상 되돌릴 수 있습니다. 문제가 발생하면 역계획을 생성하세요:

dennis invert rehydrated-plan.json
dennis apply rehydrated-plan.undo.json

프로젝트가 원래 상태로 복원됩니다.

  • Git 리셋 없음.
  • 고고학적 복구 없음.
  • 단순히 결정론적인 되돌리기.

암호화된 아티팩트: XDEX

일부 상황에서는 내부 변환 로직을 노출하지 않고 변환 아티팩트를 배포하고 싶을 수 있습니다. 이를 위해 Dennis는 XDEX 아티팩트를 지원합니다.

XDEX 아티팩트는 DEX 파일을 단순히 암호화한 버전입니다:

DEX  →  XDEX

페이로드는 암호화되고 외부 메타데이터는 그대로 표시됩니다. 이를 통해 조직은 변환 계획을 비밀로 유지하면서 검증 가능한 변환 아티팩트를 배포할 수 있습니다.

아티팩트를 다음과 같이 암호화할 수 있습니다:

dennis encrypt hello-dennis.dex

왜 이것이 중요한가

현대 소프트웨어 파이프라인은 많은 것을 아티팩트로 취급합니다:

  • 컨테이너 이미지
  • 컴파일된 바이너리
  • 의존성 잠금 파일
  • 서명된 릴리스

하지만 코드 변환 자체는 종종 눈에 보이지 않습니다. DEX 아티팩트가 이를 바꿉니다. 변환을 휴대 가능하고, 검사 가능하며, 검증 가능한 객체로 만들어 소프트웨어 진화를 추적·감사·재현할 수 있게 합니다.

최종 생각

소프트웨어 역사는 변환을 통해 기록됩니다:

  • 리팩터링
  • 마이그레이션
  • 패치
  • 업그레이드

대부분의 경우 이러한 변환은 실행 후 사라집니다. DEX 아티팩트는 이를 가시화하고, Dennis는 그 변환이 만들어지는 대장간입니다.

대장간은 여기에서 찾을 수 있습니다:

pip 또는 pipx 로 설치하고 코드를 DEX‑ing 하세요. DEX 아티팩트는 변환을 전달·검사·신뢰할 수 있는 형태로 바꿔줍니다.

그리고 닭이 영원히 살아 있기를!

Image

0 조회
Back to Blog

관련 글

더 보기 »

앱을 다국어로 만들기 (재작성 없이)

Internationalizing Your App — A Pragmatic Approach > “We should support Spanish”는 엔지니어링 팀에게 두려움을 불러일으키는 문장입니다. 번역 때문이 아니라…

시작한 일을 끝내나요? 🚀

!‘Do You Finish What You Start?’ 표지 이미지 🚀 https://media2.dev.to/dynamic/image/width=1000,height=420,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-...