설정·환경 카드 (dotenv/config/viper/configparser 대응) — 파동① 웨이브2
개요
Python/Node/Go의
os.environ/
python-dotenv/
dotenv/
viper/
configparser 감각을
한선씨로 어떻게 대응시키는지, "존재≠동작" 관점에서 실측 검증한 카드. 크라우니 RPN킷
라이브러리카드 시리즈(테스트카드/직렬화카드에 이은 세 번째)의 일부.
무엇을 했는지
- 인벤토리: 내장
환경변수()/환경설정()(opcode 448/779), 환경변수.한선, 설정관리.한선,
환경.한선,
설정.한선,
글로벌설정.한선을 전수 조사·실컴파일·실행.
- 환경 이슈 발견+해결: 정본
crownyc 바이너리가 macOS Gatekeeper spctl rejected 상태라
run 즉시 SIGKILL(exit137)되고 있었음 —
codesign -s - --force crownyc로 재서명해 해결
(이 세션의 카드 작업과 무관한 환경 이슈, 별도 기록).
- 핵심 발견 —
환경.한선 실행 불가: .한선 확장자지만 실제로는 RPN 저수준 방언으로
오작성됨(직렬화카드의
CSV.한선과 동일 계열 버그).
hanseonc_high 컴파일 즉시 실패,
hanseonc_rpn은 컴파일되나 실행 시 무한루프(SIGKILL). → 신규
dotenv파싱() 고수준 구현으로 대체.
- 핵심 발견 — 맵 폴백 함수 군 버그:
환경변수.한선의 환경가져오기기본()과
설정관리.한선의
설정가져오기기본()이
맵꺼내() 없는키 센티넬(-1)을
v==0으로
잘못 체크 — 없는 키 조회 시 기본값이 아니라 리터럴
-1을 무음 반환.
맵있나() 기반
재구현으로 우회 검증.
- 핵심 발견 — 내장
환경변수() 타입 함정: 미존재 시 정수 -1 반환(문자열 아님).
v == "-1" 비교는 항상 거짓,
v == -1만 정확.
설정.한선(gateway.yaml 전용 awk 브리지)을 실제 라이브 95KB gateway.yaml(278라우트)로
실증 — 정상 동작하나 범용 config 로더 아님을 명확화.
글로벌설정.한선은 등록 API만 있고 조회 API가 없어 config 프레임워크로 오인 위험 기록.
- 계층 우선순위 관용구(시스템env > .env맵 > 기본값) 작성·검증(viper 스타일 대응).
- 예제 9개(01~09) 전부 컴파일+실행 검증,
설정환경검증.sh 게이트 9예제/10케이스 전체 PASS.
- 크라우니코드 학습 2건 추가(단일라인으로 저장해 기존 learn.sh 멀티라인 저장버그 회피).
관련 파일
- 카드:
/Users/ef/crowny-rpnkit/라이브러리카드/설정환경카드.md
- 검증 스크립트:
/Users/ef/crowny-rpnkit/라이브러리카드/설정환경검증.sh (9예제/10케이스 PASS)
- 예제:
/Users/ef/crowny-rpnkit/라이브러리카드/예제/설정환경/01~09*.한선
- 조사 대상 라이브러리(읽기만, 미수정):
/Users/ef/CrownyOS/crownyc/libs/{환경,환경변수,설정,설정관리,글로벌설정}.한선
잔여 이슈 (§7 갭 목록과 동일)
- P0:
환경.한선 자체를 신규 dotenv파싱()으로 교체하는 승격 작업(라이브 파일 수정은 별도 승인 필요)
- P0:
환경변수.한선/설정관리.한선의 v==0 버그를 맵있나() 기반으로 실제 패치
- P1:
글로벌설정.한선에 조회 API(설정값조회) 추가
- P1: 불리언 타입 변환 네이티브 함수 없음 —
불리언변환(s) 라이브러리화 필요
- P2: 범용 nested config는 YAML 대신 JSON.한선 채택 권장(직렬화카드 참조)