티스토리 뷰

반응형

웹 기반 업무 시스템을 개발하다 보면, 각 파트별 작업 상태를 저장하고 이를 바탕으로 전체 작업의 완료 여부를 판정해야 하는 상황이 자주 발생합니다. 특히, 제조업이나 생산 관리 시스템처럼 여러 구성품의 조립 및 설치가 필요한 업무에서는 각각의 항목이 ‘완료’되었는지를 체크하는 로직이 필수입니다. 이번 글에서는 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;
}

이 함수는 다음과 같은 로직으로 동작합니다:

  1. JSON 데이터가 비어 있다면 완료된 것으로 간주합니다. (선택적으로 다르게 처리할 수도 있습니다)
  2. JSON 문자열을 배열로 디코딩합니다.
  3. 배열을 순회하면서 col15 값이 "완료"가 아닌 항목이 하나라도 있으면 false를 반환합니다.
  4. 모든 항목이 "완료"일 경우에만 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 데이터를 활용하면 작업 항목들의 상태를 쉽게 점검하고, 그에 따라 전체 작업의 진행 상황을 판단할 수 있습니다. 복잡한 조건문 없이 함수 하나로 정리하면 유지보수도 훨씬 수월해지죠. 시스템을 구성하면서 이런 로직을 적용해보면 생산성과 가독성 모두 향상될 수 있습니다.

반응형
댓글