티스토리 뷰
웹 기반 업무 시스템을 개발하다 보면, 각 파트별 작업 상태를 저장하고 이를 바탕으로 전체 작업의 완료 여부를 판정해야 하는 상황이 자주 발생합니다. 특히, 제조업이나 생산 관리 시스템처럼 여러 구성품의 조립 및 설치가 필요한 업무에서는 각각의 항목이 ‘완료’되었는지를 체크하는 로직이 필수입니다. 이번 글에서는 PHP에서 JSON 형태로 저장된 데이터를 이용해 각 항목의 상태를 판정하고, 전체 상태를 자동으로 판단하는 방법을 소개합니다.

JSON 형식으로 저장된 구성품 리스트
우선 상황을 이해하기 쉽게 예시부터 살펴보겠습니다. 예를 들어, 제품 하나에는 모터, 브라켓, 무선링크, 배선링크 등의 부품이 포함되어 있다고 가정해보겠습니다. 각각의 부품 리스트는 데이터베이스의 컬럼에 JSON 형태로 저장되어 있으며, 다음과 같이 PHP에서 불러와 $row 배열에 담겨 있다고 생각해봅시다.
$row['motorlist']
$row['wirelessClist']
$row['wireClist']
$row['wirelessLinklist']
$row['wireLinklist']
$row['bracketlist']
각 JSON에는 여러 행의 데이터가 있으며, 그 안에 col15라는 키 값이 존재합니다. 이 col15는 해당 부품의 작업 상태를 나타내는 값이며, 값이 "완료"일 경우 해당 항목은 작업이 끝난 것으로 간주됩니다. 우리는 이 모든 항목이 "완료"일 때에만 최종 판정값을 "완료"로 설정하고, 하나라도 "완료"가 아닌 값이 있다면 공백으로 처리하려고 합니다.
checkAllCompleted 함수 구현하기
이를 처리하기 위해 먼저 필요한 것은 JSON 데이터를 검사해주는 함수입니다. checkAllCompleted() 함수는 아래와 같이 작성할 수 있습니다.
function checkAllCompleted($jsonData) {
if (empty($jsonData)) return true; // 데이터가 비어 있으면 완료로 간주
$list = json_decode($jsonData, true);
if (!is_array($list)) return false;
foreach ($list as $item) {
if (!isset($item['col15']) || trim($item['col15']) !== '완료') {
return false;
}
}
return true;
}
이 함수는 다음과 같은 로직으로 동작합니다:
- JSON 데이터가 비어 있다면 완료된 것으로 간주합니다. (선택적으로 다르게 처리할 수도 있습니다)
- JSON 문자열을 배열로 디코딩합니다.
- 배열을 순회하면서 col15 값이 "완료"가 아닌 항목이 하나라도 있으면 false를 반환합니다.
- 모든 항목이 "완료"일 경우에만 true를 반환합니다.
전체 판정 로직 만들기
이제 앞서 만든 함수를 활용하여 전체 구성품의 상태를 확인하고, 최종 판정 결과를 도출하는 코드를 작성할 수 있습니다. 다음은 그 예시입니다.
$judgement = '완료'; // 기본적으로 완료로 가정
if (
!checkAllCompleted($row['motorlist']) ||
!checkAllCompleted($row['wirelessClist']) ||
!checkAllCompleted($row['wireClist']) ||
!checkAllCompleted($row['wirelessLinklist']) ||
!checkAllCompleted($row['wireLinklist']) ||
!checkAllCompleted($row['bracketlist'])
) {
$judgement = '';
}
여기서는 motorlist, wirelessClist, wireClist, wirelessLinklist, wireLinklist, bracketlist 총 6개의 구성품 리스트를 검사하고 있습니다. 이 중 하나라도 "완료"가 아닌 항목이 있으면 $judgement는 빈 문자열로 설정됩니다. 이 값을 화면에 출력하거나 저장할 때 활용하면 됩니다.
데이터 저장 방식과 호환성
데이터를 저장할 때, 구성품 리스트를 JSON으로 보관하면 유연성과 확장성이 매우 뛰어납니다. 예를 들어 부품의 개수가 바뀌거나 새로운 항목이 추가되더라도 컬럼의 수를 늘릴 필요 없이 JSON 구조 내에서 충분히 대응할 수 있기 때문입니다.
또한 col15 외에도 작업자 이름(col10), 완료 날짜(col14), 비고(col16) 등 여러 속성을 함께 관리할 수 있어, 다양한 정보를 포함한 상태 관리가 가능합니다. 이를 통해 생산관리 시스템이나 품질관리 시스템에서도 활용 범위를 확장할 수 있습니다.
실제 서비스에 적용할 때 주의할 점
- JSON 데이터는 잘못 저장되면 json_decode() 시 오류가 날 수 있습니다. 반드시 유효한 JSON 형식으로 저장되어 있는지 확인해야 합니다.
- checkAllCompleted() 함수는 다른 상태 값이 들어올 경우에도 유연하게 동작하도록 조정할 수 있습니다. 예: "진행중", "대기중" 등.
- 완료 상태 외에 각 항목별 개별 상태를 표시하고 싶다면, JSON 배열을 순회하여 별도로 시각화하는 방법도 고려할 수 있습니다.
이처럼 PHP에서 JSON 데이터를 활용하면 작업 항목들의 상태를 쉽게 점검하고, 그에 따라 전체 작업의 진행 상황을 판단할 수 있습니다. 복잡한 조건문 없이 함수 하나로 정리하면 유지보수도 훨씬 수월해지죠. 시스템을 구성하면서 이런 로직을 적용해보면 생산성과 가독성 모두 향상될 수 있습니다.
'IT tech Coding > php' 카테고리의 다른 글
PHP 경고 메시지 "A non well formed numeric value encountered" 해결 방법 (0) | 2025.03.25 |
---|---|
수입검사 품목에 대한 통계자료 작성 코드 (0) | 2025.03.13 |
json형태로 가이드레일 형태의 정보 및 이미지 저장하는 로직개발 (0) | 2025.03.10 |
PHP에서 특정 단어가 포함되었는지 확인하는 방법 (0) | 2025.03.04 |
계층형 카테고리 관리: MySQL과 PHP로 트리 구조 만들기 (0) | 2025.02.26 |
- Total
- Today
- Yesterday
- 엑셀셀보호
- #데이터무결성
- 구글드라이브API
- #textarea #자동높이조절 #ux개선 #웹개발 #프론트엔드 #자바스크립트 #html팁 #웹디자인 #uiux #코딩팁
- #웹개발
- #트리구조
- #계층형데이터
- #php에러해결 #php경고메시지 #nonwellformednumeric #php초보자팁 #웹개발에러 #프로그래밍디버깅 #php정규식 #코드디버깅팁 #웹개발문제해결 #php숫자형변환
- 엑셀입력보호
- 캐드자동작도
- #동적ui
- json파일편하게보는법
- 오블완
- 도면자동생성
- #tuigrid #자바스크립트그리드 #행삽입 #행삭제 #웹개발팁 #프론트엔드개발 #javascriptgrid #데이터테이블 #ui개선 #그리드커스터마이징
- #데이터베이스설계
- coalesce는 한국어로 "코얼레스크" 또는 "코얼리스"
- 1. #웹개발 2. #로트번호 3. #성적서보기 4. #ajax 5. #jquery 6. #php 7. #프론트엔드 8. #백엔드 9. #부트스트랩 10. #웹기능구현
- #카테고리트리
- Bootstrap 5
- json파일형태보기
- ajax오류메시지
- 효율적코딩방법
- 오토핫키가이드
- General error: 2031
- 코딩튜토리얼
- 엑셀보호
- 웹제작강의안2주차
- isset을 적용해야 하는 이유
- 티스토리챌린지
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |