공정
제품이 어떤 공정을 어떤 순서로 거치고, 그 공정에 어떤 설비가 속하며, 설비끼리 무엇이 무엇으로 흐르는지를 등록하는 화면입니다(공정).
계층 트리(기업 → 사이트 → 구역 → 라인 → 설비)가 **「무엇이 무엇에 속하는가」**를 말한다면, 이 화면은 **「무엇이 무엇으로 흐르는가」**를 말합니다.
사슬이 한 방향입니다 — 그래서 탭 순서가 읽는 순서입니다
제품 → 경로 → 단위 공정 → 설비 → 설비 간 연결
| 탭 | 무엇을 정하나 | 답하는 질문 |
|---|---|---|
| ① 제품 경로 | 제품이 거치는 단위 공정의 순서 | 「이 제품은 어떻게 만들어지나」 |
| ② 단위 공정 | 공정의 정의 — 이름과 소속 설비 | 「포장 공정이란 무엇이고 어떤 설비인가」 |
| ③ 연결도 | 설비끼리의 흐름과 의존 | 「이 설비가 서면 어디까지 멈추나」 |
한 제품이 어떻게 만들어지는지부터 묻는 사람이 많아 ① 이 첫 화면입니다. 설비 그림부터 보고 싶으면 ③ 으로 바로 가셔도 됩니다.
「포장」은 제품 A 에서 3번째이고 제품 B 에서 2번째일 수 있습니다. 그래서 순서는 공정이 아니라 제품 경로가 갖습니다. 공정 쪽에 순서를 적으면 두 제품을 동시에 말할 수 없습니다.
① 제품 경로

| 번호 | 자리 | 하는 일 |
|---|---|---|
| ① | 탭 줄 | 제품 경로 · 단위 공정 · 연결도 셋 |
| ② | 왼쪽 「제품」 | 제품 목록. 옆 숫자는 단계 수이고, 「–」 는 아직 경로가 없다는 뜻입니다 |
| ③ | 가운데 단계 목록 | 위·아래 화살표로 순서를 바꾸고, × 로 단계를 뺍니다 |
| ④ | 아래 고르기 줄 | 공정을 골라 + 로 단계를 더합니다 |
| ⑤ | 우측 상단 | 「경로 저장」 |
③ ④ 에서 한 일은 화면 안의 초안입니다. 저장을 누르기 전에는 서버에 아무것도 가지 않습니다 — 고치는 순간 저장되는 다른 화면들과 다릅니다.
저장하지 않은 상태에서는 「아직 저장되지 않았습니다」 안내가 목록 아래에 뜹니다. 그 줄이 보이면 아직 안 간 것입니다.
저장은 단계 하나가 아니라 목록 전체를 한 번에 보냅니다. 그래서 단계 번호를 매기는 곳이 서버 한 곳뿐입니다.
④ 의 고르기 줄이 「더 넣을 공정이 없습니다」로 잠기는 경우가 있습니다. 이 사이트의 공정을 그 제품이 이미 전부 거치고 있을 때입니다 — 같은 공정은 한 경로에 두 번 들어가지 않습니다(경계 참고).
② 단위 공정

| 번호 | 자리 | 하는 일 |
|---|---|---|
| ① | 탭 줄 | 「단위 공정」 |
| ② | 왼쪽 「공정」 | 공정 목록. + 로 만들고, 연필로 이름·설명을 고치고, 휴지통으로 지웁니다. 옆 숫자는 소속 설비 수입니다 |
| ③ | 「소속 설비」 | 이 공정에 속한 설비. 고르기 줄에서 골라 + 로 넣고, 칩의 × 로 뺍니다 |
| ④ | 「이 공정을 쓰는 제품」 | 읽기 전용 — 제품 경로에서 유도한 값입니다 |
「이 공정을 쓰는 제품」은 경로에서 유도됩니다. 여기서도 고칠 수 있게 두면 제품의 순서가 두 군데에 적히고, 둘이 어긋나도 아무것도 빨개지지 않습니다. 그래서 길을 하나로 두었습니다.
소속 설비는 ③ 연결도의 인스펙터에서도 넣고 뺄 수 있습니다. 같은 표를 고치는 두 입구이고, 어느 쪽에서 고쳐도 같은 결과입니다.
③ 연결도

| 번호 | 자리 | 하는 일 |
|---|---|---|
| ① | 탭 줄 | 「연결도」 |
| ② | 왼쪽 「공정 필터」 | 보는 범위만 좁힙니다 — 고른 공정의 설비만 선명해집니다. 만들기·고치기·지우기는 ② 단위 공정 탭에 있습니다 |
| ③ | 캔버스 좌상단 툴바 | 축소 · 확대 · 원래 크기 · 화면에 맞추기 · 선택 노드 삭제 |
| ④ | 좌하단 미니맵 | 누르면 그 위치로 갑니다 |
| ⑤ | 하단 범례 | 공급(파랑) · 의존(주황) |
| ⑥ | 오른쪽 「선택한 설비」 | 소속 공정 · 생산 제품(읽기 전용) · 연결 |
| ⑦ | 오른쪽 「하류 영향」 | 이 설비가 멈추면 뒤에서 무엇이 영향을 받는지 |
페이지 우측 상단의 **「배치 저장」**은 이 탭에서만 보입니다 — 노드의 좌표를 저장하는 버튼입니다. 관계나 소속은 고치는 즉시 반영되므로 이 버튼과 무관합니다.
관계는 둘입니다
| 관계 | 뜻 | 선 색 |
|---|---|---|
| FEEDS (공급) | 상류가 하류로 흐른다 | 파랑 |
| DEPENDS_ON (의존) | 전력 · 에어 · 냉각 같은 유틸리티에 기댄다 | 주황 |
둘 다 설비에서 설비로만 겁니다. 공정은 캔버스의 노드가 아니라 설비에 붙는 라벨이고, 제품은 경로로 갑니다.
선 긋기
각 노드의 왼쪽 흰 원이 «받는» 포트이고, 오른쪽 원들이 «보내는» 포트입니다.
| 어디서 끄나 | 만들어지는 관계 |
|---|---|
| 오른쪽 파란 원 | FEEDS (공급) |
| 오른쪽 주황 원 | DEPENDS_ON (의존) |
🔴 끌기 시작한 포트가 관계 종류를 정합니다. 선을 놓은 뒤에 종류를 고르는 단계가 없습니다 — 파란 원에서 시작했으면 공급, 주황 원에서 시작했으면 의존입니다.
상대 노드의 «왼쪽 흰 원» 에 놓아야 연결됩니다. 노드 몸통에 놓으면 연결되지 않습니다.
드래그 대신 ⑥ 인스펙터의 「연결」 절에서 골라 넣을 수도 있습니다. 대상이 화면 밖에 있거나 키보드만 쓸 때 이쪽이 편합니다.
이 규칙은 화면과 데이터베이스 양쪽에 같은 내용으로 들어가 있습니다. 화면이 미리 막는 것은 편의이고, 막지 못하고 넘어가도 서버가 거부합니다.
캔버스 옮겨 보기
캔버스는 그려 둔 내용만큼 커집니다. 그래서 가로·세로 스크롤바가 생깁니다.
| 하려는 것 | 방법 |
|---|---|
| 화면을 움직인다 | 빈 배경을 눌러 끕니다(패닝) |
| 노드를 옮긴다 | 노드 몸통을 끕니다 |
| 확대 · 축소 · 원래대로 · 화면 맞추기 | ③ 툴바 |
| 먼 곳으로 한 번에 | ④ 미니맵 |
빈 배경을 끌면 화면이, 노드를 끌면 노드가 움직입니다 — 이 둘을 헷갈리면 「노드가 안 잡힌다」로 느껴집니다.
캔버스를 아무리 스크롤해도 툴바와 미니맵은 따라 움직이지 않습니다. 미니맵이 왼쪽 아래에 있는 것은 플로우 편집기와 같은 쪽이라, 두 화면을 오갈 때 미니맵을 두 군데서 찾지 않게 하려는 것입니다.
경로는 순서 있는 목록 하나입니다
경로에 일부러 넣지 않은 것이 둘 있습니다. 데이터베이스 제약이 그대로 막습니다.
| 못 적는 것 | 막는 제약 |
|---|---|
| 한 단계 안의 병렬 — 한 단계에 공정 둘 | 기본키 (product_id, step_no) — 한 단계에 공정 하나 |
| 되돌아가는 흐름(재투입) — 같은 공정을 두 번 | 고유키 (product_id, segment_id) — 한 경로에 한 번 |
「캡핑기가 두 대인데 어떻게 그리나」 — 캡핑 공정에 두 설비를 모두 넣고, 연결도에서 상류 설비가 두 대 모두에게 FEEDS 를 걸면 됩니다. 갈래는 설비 층에서 보이고, 경로는 그 위를 순서대로 지나갈 뿐입니다.
분기·재투입을 적게 만들려면 「둘 다인가 둘 중 하나인가」 같은 것을 함께 적어야 하고, 그것은 작업지시 · 실적 · LOT · BOM 과 함께 상위 MES 의 영역입니다. 필요해지면 간선 표로 넓히고 지금 넣은 데이터는 그대로 옮겨 갑니다 — 못 하는 것이 아니라 넣지 않은 것입니다.
그려 두면 어디에 쓰이나
- 하류 영향 조회 — 「이 설비가 서면 어디까지 영향인가」를
FEEDS를 따라가 답합니다(⑦). - AI 어시스턴트 — MCP 의 관계 그래프 탐색이 같은 관계를 읽습니다 → MCP 서버
- API — 경로와 관계를 프로그램으로 읽고 쓸 수 있습니다.
| 하려는 것 | 엔드포인트 |
|---|---|
| 제품의 경로 읽기 | GET /api/v5/product/{product_id}/route |
| 제품의 경로 통째로 바꾸기 | PUT /api/v5/product/{product_id}/route — 본문 {"segment_ids":[…]} |
| 설비가 만드는 제품(유도값) 읽기 | GET /api/v5/asset/{asset_id}/product |
빈 segment_ids 는 경로를 지우는 정상적인 편집입니다. 「제품이 없다」(404)와 「경로가 없다」(200, 빈 목록)는 서로 다른 답으로 유지됩니다.
관계를 등록하지 않은 사이트에서 하류 영향을 물으면 빈 결과가 옵니다. 그것은 「영향이 없다」가 아니라 **「그려 둔 것이 없다」**입니다. 두 상태를 구별할 수 있도록 API 응답에 따로 표시가 나옵니다.