ERP / Inventory Valuation

Anchor ERP 재고평가 고도화

Period
2026.03
Company
Finger
Role
백엔드 개발 / 재고평가 도메인 담당
Team
1개월 · 팀 4명 (기획 1, 프론트 1, 백엔드 2)
  • Java 11
  • Spring Boot 2.7
  • Spring Security
  • Spring Data Redis
  • MyBatis
  • PostgreSQL
  • NHN Cloud
  • Jenkins

Overview

Pharos ERP 기반의 중견 규모 대상으로 확장한 삼일회계법인의 Anchor ERP에서 재고평가 기능을 전면 고도화한 프로젝트입니다. 기존 기관 단위 단일 평가 구조의 한계를 해소하기 위해 평가 단위를 평가유형 × 공장별로 세분화하고, 총평균법을 신규 추가했습니다. 재료비 Rollup 연계를 위한 평가 로직 추상화 설계 및 마감 도메인 연동 검증을 전면 재설계했습니다.

AS-IS / TO-BE

AS-IS

기관 단위 단일 평가 구조로 평가법이 기관 전체에 하나만 적용되었습니다.

TO-BE

평가유형 × 공장별로 세분화하여 유형별 독립 평가법을 적용했습니다.

AS-IS

마감 연동 개념이 없어 평가 가능 조건이 업무 흐름과 분리되어 있었습니다.

TO-BE

재고실사, 가공비 배부, 생산투입 수량확정 등 평가 유형별 마감 도메인과 연동해 평가 가능 조건을 단계별로 검증했습니다.

AS-IS

재료비 Rollup 개념이 없어 제품·반제품 원가 정확성에 한계가 있었습니다.

TO-BE

재료비 Rollup으로 반제품 단계별 원가를 집계하고 최종 제품 원가에 반영했습니다.

Problem

  • 기관 전체에 하나의 평가법만 적용되어 평가유형별 독립 정책을 반영하기 어려웠습니다.
  • 재고실사, 가공비 배부, 생산투입 수량확정 등 마감 도메인과 평가 가능 조건이 명확히 연결되어 있지 않았습니다.
  • 재료비 Rollup 과정에서 반제품 레벨별 계산 결과와 저장 시점이 섞이면 평가 로직 재사용성과 테스트 가능성이 떨어질 수 있었습니다.

My Ownership

  • 재고평가 도메인 백엔드 설계와 구현을 담당했습니다.
  • 평가 실행과 영속화 책임을 분리하고, 평가 컨텍스트 값 객체를 구성했습니다.
  • 평가법 확장을 위한 전략 + 템플릿메서드 구조와 마감 도메인 연동 검증을 구현했습니다.

Key Decisions

평가 파이프라인평가 실행 / 영속화 분리

Rollup 흐름에서 반제품 레벨별 평가만 반복 실행하고 모든 결과를 취합한 뒤 최종 단계에서 저장하도록 책임을 나눴습니다.

평가법 확장전략 + 템플릿메서드 패턴

총평균법 추가 시 기존 이동평균·선입선출 구현체를 건드리지 않고 확장할 수 있도록 공통 처리와 품목 단위 계산을 분리했습니다.

마감 검증도메인 컬렉션 내부 캡슐화

서비스 레이어에 흩어진 조건 분기를 줄이고, 평가 가능 여부 판단을 도메인 내부 책임으로 유지했습니다.

Implementation

평가 컨텍스트 값 객체

평가년월, 공장, 평가유형, 평가법, 마감 정보, 입출고 목록, 회계 반올림 설정을 하나의 값 객체로 조립해 구현체에 전달했습니다.

마감 도메인 연동

상품·원부자재 평가는 재고실사 마감, 제품·반제품 평가는 가공비 배부와 원부자재 평가 완료 여부를 평가 전 조건으로 검증했습니다.

재료비 Rollup

반제품 레벨별 원가를 순차 계산한 뒤 평가 내역을 취합하고, 마지막 단계에서 영속화와 원가 마감을 수행하도록 구성했습니다.

Detailed Notes

평가 파이프라인 추상화

컨텍스트 조립 → 평가 실행 → 영속화로 단계를 분리했습니다. 평가법, 마감 정보, 입출고 목록을 값 객체로 조립하고 구현체 탐색 후 평가를 실행하며, Rollup 완료 후 결과 기반 엔터티 생성과 영속화를 1회 수행합니다.

  • 평가 실행과 영속화를 분리해 Rollup 흐름에서 평가 로직을 반복 재사용했습니다.
  • 반제품 레벨별 평가 결과를 모두 취합한 뒤 최종 단계에서 저장하도록 구성했습니다.

평가법 확장 구조

  • 추상 정책이 마감 상태 검증, 기초재고 없음 여부 계산, 품목별 grouping 같은 공통 처리를 템플릿으로 정의했습니다.
  • 품목 단위 계산 로직만 각 구현체가 재정의해 기존 구현체 변경 없이 총평균법을 추가할 수 있게 했습니다.
  • 평가 설정의 평가법 enum을 기반으로 구현체를 탐색해 실행했습니다.
이동평균선입선출 FIFO총평균
입출고 순서별 이동평균 단가 산출, 음수재고 처리기초재고 매칭, 판매반품 단가 산출, 원본 불변성 보장기초 + 전체 입고 기준 총평균단가 산출

마감 도메인 연동 검증

평가 유형 / 작업마감 조건
상품·원부자재 평가재고실사 마감 필수 → 평가 전 실사 수량 확정 보장
제품·반제품 평가가공비 배부 마감 + 모든 공장 원부자재 평가 완료 필수 → 원가 산출 완결성 보장
상품·원부자재 삭제생산투입 수량확정 마감 시 불가 → 역산 처리 방지
제품·반제품 삭제판관비 배부 마감 시 불가 → 원가 배부 역산 방지

재료비 Rollup과 단위 테스트

  • 재료비 + 가공비 계산, 원가조정 반영, 반제품 0lv 평가부터 반제품 1lv 평가와 제품 평가까지 레벨별 순차 평가를 수행했습니다.
  • 평가 내역을 취합한 뒤 영속화하고 마지막에 원가 마감을 처리했습니다.
  • 도메인 컬렉션 삭제 조건·이월 검증, 마감 상태별 평가 가능 여부, FIFO 계산 상태, 이동평균·총평균·Rollup 로직 단위 테스트를 수행했습니다.

Result / Impact

  • AS-IS 분석, 이벤트 스토밍, TO-BE 설계로 평가유형 × 공장별 세분화, 마감 연동 검증, 재료비 Rollup 연계를 체계적으로 구현했습니다.
  • 재료비 Rollup 흐름에서 레벨별 반복 재사용 가능한 평가 구조를 확보하고, Rollup 완료 후 영속화 1회 실행 구조를 만들었습니다.
  • 마감 도메인 담당자와 인터페이스 경계를 사전 정의해 두 도메인을 독립적으로 개발·검증했습니다.
  • 마감 상태별 평가 가능 여부, FIFO 계산 상태 관리, 이동평균·총평균·Rollup 핵심 케이스에 대한 단위 테스트를 수행했습니다.