제조 소프트웨어/설계

제조업 경험을 도메인으로(2) - MES/MSA 설비 관리 설계

문쿼리 2025. 4. 5. 21:11

설비 관리(유지보수)

주요 업무

  • 산소 센서의 전선 생산 자동화 설비 관리
  • 자재 공급 (전선, 씰, 단자)
  • 설비 청소 및 칼날, 그리스 교체
  • 설비 설정값 관리 및 최적화

설계 목적

 

  • 설비 안정성 확보
  • 예방 정비 + 긴급 대응 통합 관리
  • 자재 사용 이력 및 교체 주기 추적
  • 작업자 기술 수준 기반 책임 할당
  • 유지보수 상태 기반 자동 트리거

 

고민한 내용
1. 설비 테이블의 속성으로 유지보수 내역을 추가하는게 좋을까? (1:N 관계)
장점 :설비를 통해 유지보수 내역을 쉽게 조회할 수 있다.
단점 :유지보수 내역만 조회하였을 때, 상위 도메인인 설비가 엮이기 때문에 제약을 두지 않는 이상 성능적 효율성이 낮아진다.
결론 :성능적 효율성을 위해 하위로 List를 두지 않음 (1:N 관계 미설정) 

2. 작업 담당을 개인으로 할 것인가 팀으로 구성할 것인가, 팀으로 한다면?
장점 :일반적으로 주/부 담당 팀이 있을 것이고, 주간/야간 등 다양한 형태의 작업 담당을 표현할 수 있어야 한다
단점 :시스템의 복잡도가 늘어난다. 가령 인력사무소에서 1주일 파견나온 직원의 경우 시스템을 효율적으로 사용하기 어렵다.
결론 :작업 담당 그룹을 통해 다양한 근로 형태를 표현 할 수 있도록 적용한다.

3. 유지보수 항목에서 변경된 설정의 이력을 어떻게 남길것인가?
Enum이나 Code로 모든 설정을 등록하는게 더 어려움이 있을것같다. 설비 자체에 스냅샷처럼 히스토리를 남길 수 있는 기능이 있을수도 있고 없을 수도 있다. 확장성에 근거하여 json을 통해 변경된 설정을 저장하고자한다.
다만, 어떤 설정을 변경한 이력들을 조회한다고 가정했을때 성능적인 고민이된다.

결론 :해당 영역은 고객사에 따라 커스텀이 필수불가결일 것으로 보인다. 설비 스펙과 작업 형태에 근거하여 진행되어야 할 것이다. 설비가 자체 기능을 갖추고 있다면 변경 사항을 확인 할 수 있는 참조정보를 저장하는게 좋을것 같고, 연동이 불가능한 종류의 환경에서는 작업자가 직접 설정 할 수 있도록 UI 구성이 필요해보인다.

 

EquipmentMaintenance (설비 유지보수)

속성명 타입 설명 관계 / 특징
maintenanceId UUID 설비 유지보수 작업 고유 식별자 식별자 Aggregate Root
equipmentId String 유지보수가 필요한 설비의 ID Equipment 엔티티와 연관
type Enum 유지보수 유형 (정기교체/자재공급/긴급) Value Domain (업무 규칙)
startDate LocalDateTime 유지보수 예정 또는 수행 일시 시간 기반 분석 및 일정 기준
endDate LocalDateTime 유지보수 종료 일시 시간 기반 분석 및 일정 기준
technicianSetId String 유지보수 작업 담당 그룹 ID TechnicianSet 또는 Technician과 연관
status Enum 유지보수 작업 상태 상태 전이 기반 흐름 관리
checkItems List<MaintenanceItem> 점검 항목 목록 (칼날 교체, 전선 공급, 씰 공급, 그리스 교체 등등) Value Object 컬렉션 (템플릿 도메인 고려)
remarks String 기타 특이사항 및 비고 자유 기입 필드

 

MaintenanceItem (유지보수 항목)

속성명 타입 설명 관계 / 특징
maintenanceItemId UUID 유지보수 항목 고유 식별자 식별자
type Enum 유지보수 항목 (칼날 교체, 전선 공급, 씰 공급, 그리스 교체 등등) Value Domain (업무 규칙)
isChangeAttr Boolean 속성 변경 유무 설비 스펙과 연관
attrAsIs Json 변경 속성 이전 값 설비 스펙과 연관
attrToBe Json 변경 속성 이후 값 설비 스펙과 연관
replacementCycle Json 점검 및 교체 주기(30일에 1번 교체, 소음 수치 120이상 등등) 설비 스펙과 연관 (유지보수 규칙 도메인으로 분리 고려)
replacementAction Json 점검이 발생하게 된 값 (지난 35일간 교체횟수 0회, 소음 수치 178 발생) 설비 스펙과 연관 (유지보수 트리거 도메인으로 분리 고려)
isUsedMaterial Boolean 자재 사용 유무 재고와 연계
materialList List<Material> 사용 자재 목록(씰, 그리스, 칼날, 전선, 단자 등) 재고와 연계
remarks String 기타 특이사항 및 비고 자유 기입 필드

 

TechnicaianSet (작업 담당 그룹)

속성명 타입 설명 관계 / 특징
setId UUID 작업 담당자 세트 ID 식별자 Aggregate Root
setNm String 작업 담당자 세트 이름(설비1팀, 정비 2팀 등)  
equipmentId String 담당 설비 ID Equipment 와 연관
mainTechnicianId String 주 담당자 ID Technician 와 1:1 참조
subTechnicianIds List<String> 부 담당자 ID 목록 Technician 과 1: N 참조

 

Technicaian (작업자)

속성명 타입 설명 관계 / 특징
technicianId String 작업자 고유 ID 식별자
type Enum 구분(내부 직원/ 외주 업체 등) HR 시스템에 연관
companyId String 식별정보(사번, 외부 코드 등)  
name String 작업자 이름 보고서 및 책임 추적 용
department String 소속 부서 관리 체계 분류용
email String 이메일 보고서 및 책임 추적 용
phone String 전화번호 보고서 및 책임 추적 용
skillLevel Enum (초급, 중급, 고급) 기술 숙련도 특정 설비 유지보수 자격 판단에 사용
certifications List<String> 보유 자격증 목록 유지보수 작업 권한 확인에 사용
assignedEquipmentIds List<String> 담당 설비 목록 장비 배정 관리와 연계
active Boolean 현재 활동 중 여부 퇴사자, 휴가자 필터링용

 

Equipment (설비) 

속성명 타입 설명 관계 / 특징
equipmentId String 설비 고유 ID EquipmentMaintenance에서 참조
name String 설비 이름 (예: 전선 압착기 #1) 사용자 UI 및 보고서에서 사용
model String 설비 모델명 (예: XM-400) 기술 문서 및 유지보수 기준과 연계
location String 설비 설치 위치 작업자 할당 및 위치 기반 점검
status Enum (가동중, 정지, 유지보수중) 설비 현재 상태 자동 유지보수 트리거 조건
installationDate LocalDate 설치일자 설비 수명 및 교체 계획과 연계
lastMaintenanceDate LocalDateTime 최근 유지보수 일자 유지보수 이력 트래킹