내가 진행하지 않은 회사 관련해서
toLabel(FieldName__c) FieldMapName 이라는 내용에 대해서
고객사쪽에서 해당 필드의 마스터 명칭이 띄워쓰기가 포함되게 변경됐는데
이걸 변경해도 되는지 문의가 들어왔고
내가 작성한 것도 아니고 내가 하는 project도 아니라 기반지식은 없지만
사용되는 클래스들을 모아서 확인하니 전송할 때만 사용하고 있었고
내부적으로도 그냥 가져온 값을 String으로 전달하는 TXT 필드였기 때문에
고객사 내부적으로 이미 변경한 값이라면 우리쪽 PickList도 변경하는게 맞고
대신에 다 전달해줘야 값이 띄워쓰기된 것으로 넘어갈 것 같은데
해당 테이블의 필드를 해당 라벨명칭으로 조회한 다음
띄워쓰기한 값을 DB쪽에서 업데이트 하거나 sfdc로 요청을 날리는 방식으로 정리해줘야 할 것 같다고 전달했다.
이전에 Label값을 가져올 때는 직접 Object에 있는 값들을 다 가져온 다음
전달 할 때 map에서 매칭되는 Label을 넘겨주는 방식으로 했던 것 같은데
toLabel이 있다는 사실을 너무 늦게 기억해버린 것 같다.
왜 이런 문제가 발생헀나 생각해보면
일반적인 인터페이스를 진행할 때는 쌍방 api명칭만 전달하는게 보통이고
그 외에 LWC 등의 개발을 할 때는 PickList를 화면에 뿌려줘야 하기 때문에
toLabel을 사용하는 것이 아니라 Object에서 가져와서 화면에 띄우기 때문에
api명칭만 가져와도 바로 맵핑이 가능해서 사용할 일이 너무 오랫동안 없었기 때문인 것 같다.
마이그레이션을 진행했던 내용 중 mp4가 제대로 올라갔는지 확인해봤는데
다운로드 후 실행되는 것 까지 정상적으로 작동하고 있었기 때문에
현재 마이그레이션 로직에는 문제가 없을 것 같은데
도대체 왜 예전 클레임 파일을 개발에 올릴 때만 에러가 발생한건지는 아직도 의문이다.
예비군 훈련을 받는 도중 변경된 내용이 있다고 해서 확인해야 했는데
로직이 뭔가 복잡하고 전혀 관련없어 보이긴 하지만 대충 변경 사항은 다 파악했고
이 부분이 변경만 적용됐지 테스트는 반영되지 않았기 때문에 내가 테스트클래스도 수정해야 할 것 같은데
결국 테스트를 진행할 때 이 부분에서 시간을 많이 잡아먹을 것 같다.
3월 최신 테스트용 데이터들 파일이 잘 올라갔는지 확인했는데
예전 레코드 기준으로 mp4가 에러가 나던 것과 달리 다 정상이었는데
운영에도 잘 올라가고 개발에도 다른 데이터는 잘 올라가는 것을 보면
오래된 mp4관련 메타데이터에 문제가 있어서 에러가 나는 것이 아닐까 의심됐다.
클레임, 품질쪽에 특수 필드들 추가 요청을 받았는데
이제 마이그레이션을 통해서 필드 수정 등에 숙달되었기 때문에
빠르게 엑셀로 추출한 다음 값을 변경해서 넣어줄 수 있었다.
다른 부분들은 다 요청자체가 없었기 떄문에 누락이 당연한 부분이었고
운영에 넣을 떄 처리만 하면 되는 부분이었지만
공임 금액 부분이 이상하다는 문의가 들어와서 확인했더니 실제로 이상했는데
뭐가 문제인가 보니 최신 일부 데이터만 넣어달라고 했던 부분은
단가 계산하는 공식이 적용되지 않고 필드를 바로 써서 발생한 문제로
이 부분은 잊지 않게 정리해둔 다음 빠르게 수정했다.
이후 마이그레이션 관련된 개발서버쪽 문제는 다 처리된 상태고
운영에 반영하기에는 필드 등 개발쪽에서 반영한 이후에 가능하기 때문에
인터페이스쪽 테스트클래스 작성이나 로직수정을 할까 하다가
운영에 반영할 때도 파일 업로드 속도가 문제될 수 있기 때문에
파일 마이그레이션 시스템 개선을 만져봤다.
현재 진행되는 것과 동일하지만
이전에 구상만 하다 중단된 로직을 적용해봤는데
데이터의 개수만큼 row를 0부터 n-1까지 넣어주고
list를 reverse로 뒤집어서 pop으로 역순으로 시간복잡도 문제 없이 꺼낼 수 있게 해주고
BatchSize에 따라서 초기 호출을 n회 반복하게 만든 다음
진행되는 로직들을 단계적으로 수정해주고
이건 여러개가 동시에 되기 떄문에 각자 시작되는 부분의 state에
이전 회색, 빨강, 초록으로 표기되는 것에 하나 더 회전하는 화살표 문자를 추가해줬고
파일 처리가 완료되는 시점에서 completeList에 index를 담아준 다음
담긴 List의 길이가 table의 길이와 같아진 경우 중단으로 인지하고
저장된 에러, 비매칭 등 에러 메세지들을 담은 리스트를 출력하는 방식으로 진행했다.
6시쯤 마무리해서 돌려보고 저녁을 먹고 와서 추가로 확인했는데
200여개의 테스트 파일을 넣었는데 1번 파일만 한참 걸려서 고장났나 했는데
다행히 모든 파일이 다 정상적으로 업로드는 됐고
마지막 파일들이 다 에러가 나서 배치사이즈 6만큼 6개가 에러가 떠있었는데
에러코드를 눌러보니 js 중단점까지 정확하게 표기되고 있었기 때문에
종료 후 호출하는 pop 이후 index를 넣어주는 방식에서
size 체크 없이 pop된 값을 넘겨서 nullPointException이 발생하는 것으로
size 체크 후 0보다 큰 경우에만 pop 및 전달하도록 수정했다.
어쨌거나 전체 파일이 다 잘 올라가긴 했는데
이게 6개의 배치로 나눴다고 속도가 6배로 빨라졌는지는 잘 모르겠는데
운영에서 진행하면 좀 더 여유있게 알 수 있겠지만
10배정도 느리게 올라가는 개발서버라서 이전 기록이 기억나지 않아 쉽진 않았다.
어쨌거나 시간이 나면 해보고 싶은 배치도 적용은 했는데
async를 적용하면 더 개선되는지도 궁금하고
월요일에 빠르게 인터페이스 배포 준비를 마치고 또 개선작업을 해봐야겠다.
(1).백준 28490번 Area는 가장 넓은 사이즈를 출력해야 하는 문제로
각자 계산하지 않고 그냥 map에서 넓이를 각자 구해준 다음 math.max로 출력했는데
맨 앞에 NaN이 있으면 Math.max가 에러가 나기 때문에 shift로 뺸 다음 출력하게 처리했다.
const input = `3
5 9
19 4
8 10`.split('\n').map(el => el.split(' ')).map(el => el[0] * el[1])
input.shift()
console.log(Math.max(...input))