개발 기록 2026-10-17 docs/devlog/2026-10-17-1-프로젝트-선정과-작업-원칙.md GitHub에서 보기

프로젝트 선정과 작업 원칙

목표

삼정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로 옮겼다.

  1. 개발 과정을 docs/devlog에 계속 기록한다.
  2. 문서 파일명은 {YYYY-MM-DD}-{시퀀스}-{제목}.md로 한다.
  3. 설계, 기획, 디자인 문서는 docs 아래 카테고리 폴더로 관리한다 (devlog, planning, architecture, design, domain).
  4. 커밋 메시지는 한글로 쓴다 (type과 scope만 영어).
  5. 팀 에이전트로 병렬 개발하고, 메인 세션이 오케스트레이션한다.

원칙을 구체화하면서 내린 결정:

결정 이유 대안
시퀀스는 카테고리별이 아니라 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 precommit alias를 기본 제공한다. 내용은 compile --warnings-as-errors, deps.unlock --unused, format, test이고, 커밋 전 검증 명령으로 그대로 쓴다.

다음 할 일

  • 워커 문서 2종을 검토하고 계약 충돌을 정리한다.
  • mix setup과 mix precommit이 통과하는지 확인한 뒤 첫 커밋을 만든다.
  • 10/18: 마이그레이션, 인증, engagement, 합성 GL 생성기, CSV 적재.