프로젝트에 관하여

주문서 열설정은 내부 개발자나, 내부운영팀 일부에서만 이해하고 설정할 수 있는 부분을 고객이 직접 또는 운영팀이 개발자를 통하지 않고도 편하게 수정 할 수 있도록 개선 하는 프로젝트다.

2차 3차 프로젝트에서는 템플릿의 구분 및 수동, 자동의 파편화된 데이터 정렬, UI개선의 위주로 진행됬다.

이번 3차에서는 2차에 구현되어있던 API를 가지고 프론트엔드 테스트와 데이터 마이그레이션 및 데이터 유효성검사를 진행을 하였다.

판매처리스트 페이지템플릿 데이터 수정 페이지
개선된-디자인초안-판매처개선된-디자인초안-리스트

JSON 마침표 전쟁

데이터의 특이점

셀메이트의 개발자면 한번정도 보는 포팅열설정의 데이터는 한 칼럼 안에 String 형태의 JSON 으로 저장되어있다.

String으로 저장된 JSON에서 약간의 특이점을 발견 할 수 있다.

1
2
3
 { 
   "items.code": "itemCode"
 }

위와 같이 Key에 . (dot)이 저장되는 특이점이다.

알기로는 . 으로 인해 Parsing 할때 Parser에 따라서 다음과 같이 깊이가 달라지는것으로 알고 있다.

1
2
3
4
5
 { 
 "items": {
       "code": "itemCode"
   }
 }

내부 테스트

개발이 완료되고 Postmen에서 테스트 Validation이 통과된것을 확인후 프론트에 배포를 하였다.

테스트 중 프론트에서 API 요청을하면 Validation오류가 도출되고 있었다. 유효성검사-응답

당시 validation Code

1
2
3
4
5
6
7
    protected function validator(array $data)
    {
        return Validator::make($data, [
            'code' => 'required|string',     
            'items.code' => 'required|string',
        ]);
    }

살펴보니 API응답이 이상하다. 원했던건 items.code 였지만 items->code로 잡히고 있던것이다.

최종적으로 수정된 코드는 다음과 같다

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
    protected function validator(array $data)
    {
        $array = [];
        foreach ($data as $key => $value) {
            Arr::set($array, $key, $value);
        }

        return Validator::make($array, [
            'code' => 'required|string',            
            'items.code' => 'required|string',    
        ]);
    }

참조: https://web-tuts.com/laravel-arr-set-function-example/

3차 프로젝트를 마치며

주문서 열설정이라는 기능이 셀메이트의 주기능인 주문입력이 연관되어 있어 다루기 힘든 부분이기도 했습니다. 주 기능인만큼 초창기 코드부터 데이터 구조의 케이스가 많아서 모두 분석하기에는 무리가 있었습니다. 따라서 개발을 진행하면서 예상하지 못한 케이스들이 발견이되고, 또 다시 고민하는 과정을 반복하였습니다. 비록 3차 프로젝트는 Fail로 끝났지만, 이로써 케이스를 줄여나가면서 안정적으로 배포가 되면 사용자가 더욱 편리하게 사용될것으로 보입니다.