4일차 토이프로젝트 기획(DB+API 설계)
4일차 토이프로젝트 기획(DB+API 설계)
현장에서 MES시스템을 보면서 항상 호기심을 가지고 있었다. 그래서! 이번 토이프로젝트의 주제는 MES시스템으로 결정했다.
이제 실제 업무 흐름과 데이터 연관관계에 기반한 구조를 설계하고 개발하는 단계에 들어섰다.
✅ 오늘 목표
- 프로젝트 기획
- DB 설계
- API 구현(Product, WorkOrder, Equipment, ProductionResult)
💡 설계 고민 과정
1. 어떤 데이터를 중심으로 시스템을 구성할지?
처음엔 단순히 생산 실적을 기록하는 시스템이라고 생각했지만,
실제로 생산이 이루어지기 위해서는 그 전에 반드시 작업지시(WorkOrder) 가 필요하고,
그 작업은 특정 설비(Equipment) 를 통해 수행되며,
작업 대상인 제품(Product) 정보도 필요하다는 걸 명확히 정의했다.
2. 엔티티 간 연관 관계 어떻게 할 것인가?
Product와WorkOrder는 1:N 관계Equipment가ProductionResult와WorkOrder를 각각 1:N 관계
→ 이 구조를 통해 이 설비가 어떤 제품의 생산을 수행했는지 를 추적할 수 있도록 설계
3. API는 어떤 식으로 구성할 것인가?
- 단순한 흐름: 제품 등록 → 작업지시 → 설비 등록 → 생산실적 기록
ERD 구조
MES 시스템의 테이블 관계
- 하나의 Product → 여러 WorkOrder
- 하나의 WorkOrder → 여러 ProductionResult
- 하나의 Equipment → 여러 ProductionResult
API 구성 및 연동 흐름
각 Entity별로 Repository → Service → Controller 구조를 통해 API를 분리 구현했다.
📦 Product API
/products- 제품 등록 / 전체 조회
1
2
3
4
5
{
"name": "스프링너트",
"code": "P001",
"spec": "10mm"
}
🧾 WorkOrder API
/work-orders- 작업지시 등록 시 Product ID 필요
1
2
3
4
5
6
{
"productId": 1,
"quantity": 100,
"dueDate": "2025-05-03T18:00:00",
"status": "대기"
}
🏭 Equipment API
/equipments- 설비 등록 및 조회
1
2
3
4
5
{
"name": "프레스기 A",
"location": "1공장",
"status": "가동"
}
📈 ProductionResult API
/results- 설비 + 작업지시 기준으로 생산실적 기록
Swagger 요청 JSON 예시:
1
2
3
4
5
6
7
8
{
"equipmentId": 1,
"workOrderId": 2,
"producedQty": 80,
"defectiveQty": 3,
"startTime": "2025-05-03T09:00:00",
"endTime": "2025-05-03T11:30:00"
}
🧠 배운 점 & 트러블슈팅 경험
📌 1. Swagger에서 LocalDateTime 파싱 오류
"startTime"같은 필드에서 timestamp 파싱 에러 발생- ✅
@JsonFormat어노테이션으로 해결 → DTO 분리하여 처리
📌 2. Entity vs DTO
- Entity: DB와 직접 매핑되는 객체
- DTO: API 요청/응답용, 필요한 데이터만 포함
- 분리함으로써 보안, 유지보수, 유연성 향상
🔚 마무리
오늘은 API 구현뿐만 아니라 실제 업무 흐름을 엔티티 간 연관관계로 연결하고, 그 흐름을 기반으로 API를 설계했다.
Vue.js를 사용해서 프론트 화면을 만들어보자.
Repository : GitHub
This post is licensed under CC BY 4.0 by the author.
