프로젝트 선정과 작업 원칙
- 작성일: 2026-10-17
- 관련 문서: MVP 범위와 일정
목표
삼정KPMG Audit Innovation Software Engineer(경력) 지원에 쓸 Elixir 포트폴리오 주제를 정하고, 혼자서 AI 에이전트들과 병렬로 개발하기 위한 작업 원칙을 세운다.
공고에서 읽은 신호
- 주요업무 1번은 "회계 전문가와 AI Agent의 협업을 위한 사내 업무 플랫폼(Work OS)"이다. 이 축소판을 직접 만드는 것이 가장 직접적인 증거가 된다.
- 우대 스택은 Phoenix/LiveView, Ecto, Oban, Ash, OpenTelemetry, PostgreSQL/ClickHouse, Terraform, Azure다.
- Elixir 경험이 없어도 "새 도메인과 기술을 주도적으로 학습하고 적용해 온 사람"을 환영한다고 적혀 있다. 그래서 학습 과정 자체를 기록으로 남기는 것이 전략이 된다.
- 1차 기술면접에서 라이브 코딩이 있을 수 있다. 그래서 내가 설명할 수 없는 코드는 쓰지 않는다.
- 마감은 10-25인데 조기 마감 가능성이 있다. 10-23에 MVP 상태로 먼저 지원한다.
검토한 후보
| 후보 | 장점 | 탈락/보류 이유 |
|---|---|---|
| A. Tickmark: 감사인-AI 협업 Work OS (분개 테스트) | 주요업무 1번과 일치, 우대 스택 대부분 사용 | 선택 |
| B. OTP 기반 LLM 에이전트 오케스트레이터 | BEAM 이해를 깊게 보여줌 | UI, RDB, 감사 도메인이 없음. A 안에 일부 흡수 |
| C. ClickHouse 분개 이상탐지 대시보드 | OLAP 우대 항목 | AI 협업 이야기가 약함. A의 2단계로 흡수 |
| D. Desk Ontology 핵심부 Elixir 포팅 | 기존 경험 재활용 | 건설 도메인이라 감사와 멂. 자기소개서 소재로만 사용 |
분개 테스트를 고른 이유:
- 감사기준상 경영진의 통제 무력화 위험에 대응하는 절차로 거의 모든 감사에서 수행된다. 세부 근거는 도메인 문서에서 출처와 함께 정리한다.
- 룰 기반 탐지(결정적)와 AI 판단(확률적)을 함께 보여줄 수 있다.
- 합성 데이터로 정답 라벨을 만들 수 있어 테스트로 정확도를 증명할 수 있다.
작업 원칙 (AGENTS.md)
사용자가 정한 5가지 원칙을 AGENTS.md로 옮겼다.
- 개발 과정을 docs/devlog에 계속 기록한다.
- 문서 파일명은
{YYYY-MM-DD}-{시퀀스}-{제목}.md로 한다. - 설계, 기획, 디자인 문서는 docs 아래 카테고리 폴더로 관리한다 (devlog, planning, architecture, design, domain).
- 커밋 메시지는 한글로 쓴다 (type과 scope만 영어).
- 팀 에이전트로 병렬 개발하고, 메인 세션이 오케스트레이션한다.
원칙을 구체화하면서 내린 결정:
| 결정 | 이유 | 대안 |
|---|---|---|
| 시퀀스는 카테고리별이 아니라 docs 전체 기준으로 센다 | 날짜+시퀀스만으로 시간순이 유일하게 정해진다 | 폴더별 시퀀스 (번호가 겹쳐 혼란) |
| 살아있는 문서는 파일명을 유지하고 Changelog로 갱신한다 | 링크가 깨지지 않는다 | 갱신마다 새 파일 (중복 문서가 쌓임) |
| 병렬 워커의 문서 파일명은 메인 세션이 미리 배정한다 | 동시에 같은 시퀀스를 쓰는 충돌을 막는다 | 워커가 직접 계산 (경합) |
| mix.exs, config, router, migrations는 메인 세션만 고친다 | 마이그레이션 순서, lock, 라우터는 병렬로 고치면 거의 항상 충돌한다 | 워커 자유 수정 후 병합 (충돌 해결 비용이 큼) |
| 코드 워커는 git worktree에서 격리한다 | 같은 체크아웃에서 동시 수정을 막는다 | 같은 체크아웃 + 파일 소유권만 (실수 시 덮어씀) |
| Elixir 코드 파일명은 snake_case | Elixir 관례이며 모듈명과 경로가 대응한다. 전역 규칙(하이픈)과 충돌하므로 AGENTS.md에 예외로 적었다 | 하이픈 (Elixir 생태계와 어긋남) |
Phoenix가 생성한 AGENTS.md는 refs/phoenix-guidelines.md로 분리했다 |
원문이 약 22KB라 CLAUDE.md에서 매 턴 불러오면 비용이 크다. 코드 작업 전에만 읽도록 필독 규칙을 걸었다 | 하나로 합치기 (매 턴 수천 토큰 추가) |
한 일
- 툴체인 설치: Homebrew로 Elixir 1.20.4 / Erlang/OTP 29를 설치했다. Phoenix 설치기는 1.8.15이고, PostgreSQL은 기존 Postgres.app 16.4를 쓴다.
mix phx.new tickmark --binary-id --no-install을 임시 폴더에서 생성한 뒤 저장소로 복사했다. 기존 AGENTS.md와 충돌하지 않게 하려고 임시 폴더를 거쳤다.- 첫 병렬 라운드를 시작했다. 도메인 문서(분개 테스트 룰)와 설계 문서(구조와 데이터 모델)를 워커 2명이 동시에 쓰고, 그동안 메인 세션은 스캐폴딩을 맡았다. 두 문서가 공유하는 계약은 MVP 문서 5장의 GL 컬럼 정의다.
Elixir 학습 포인트
mix는 빌드, 의존성, 태스크 실행을 한 도구로 처리한다 (npm + make에 가깝다).mix phx.new도 Hex에서 받은 archive가 제공하는 태스크다.--binary-id를 주면 생성기가 UUID 기본 키를 쓴다. 2단계에서 Ash를 도입할 때 Ash의 기본값(uuid_primary_key)과도 맞는다.- Phoenix 1.8은
mix precommitalias를 기본 제공한다. 내용은compile --warnings-as-errors,deps.unlock --unused,format,test이고, 커밋 전 검증 명령으로 그대로 쓴다.
다음 할 일
- 워커 문서 2종을 검토하고 계약 충돌을 정리한다.
mix setup과mix precommit이 통과하는지 확인한 뒤 첫 커밋을 만든다.- 10/18: 마이그레이션, 인증, engagement, 합성 GL 생성기, CSV 적재.