가자마자 23년도 파일 분할 작업을 진행했고
파일을 올리려다가 개선 작업에 더 흥미가 생겨서 결국 손을 대버렸다.
기존엔 row 내부에 list 형태로 담아서 처리했었는데
초기 처리 부분에서 row List 내부에 map으로 담게 만들어줬고
각각의 이후 프로세스들에서 row[0] 형태에서 row.xx 형태로 변경해줬다.
forEach 형태로 진행된 sell table도 각각 할당해주고
중간중간 에러가 발생하는 부분들도 로직 순서대로 따라가면서
잘못 할당된 값들도 처리해서 원하는 대로 좀 더 깔끔하게 변경해줄 수 있었다.
이 부분에 대해서 동시 처리를 고려해보다가
promiseAll은 문제가 많아보였고
어떻게 해야 progress도 처리하고 작업도 순차적으로 잘 진행되면서
여러개의 작업이 제대로 진행될까 고려해봤는데
List에 index들을 먼저 담아둔 다음
6개에서 각자 pop으로 index들을 하나씩 꺼내서 처리하게 하고
처리가 끝나면 끝난 index에 state를 넣어주면 자연스럽게 처리되고
끝난 index는 completeList 같은 부분에 넣어준 다음
indexList가 없으면 6개의 promise 작업이 알아서 결국 끝날거고
진행도는 completeList의 길이가 변경될 때마다
길이와 table.Length를 비교해서 %를 잡아주면 될 것 같았다.
하지만 저렇게 한다고 6배가 아니라 2배라도 빨라질지는 모르는 일이고
테스트하겠다고 뜯어서 하면 시간이 엄청 걸릴 것 같은데
놀랍게도 다운로드 되지 않는 나쁜 파일들도 발견되고
엑셀에서 수만건을 필터로 넣다보니 자기들 멋대로 다른 url이 들어간 것이 발견되었기 때문에
안타깝지만 결국 운영에 여태 넣은 모든 데이터를 다 지워줘야 했다.
특히 pdf, avi, text, csv 등 base64로 처리한 값들이 많이 깨져있었는데
결국 base64가 아닌 partForm인가 하는 방식으로 처리해야 할 것 같았다.
다행히 이전 다우오피스 발송 부분에서 pdf 때문에 만저본 경험이 있었고
이번에도 대용량 처리는 multyForm? 방식으로 진행했기 때문에
그 코드로만 처리되게 하니 정상적으로 파일이 등록되는 부분이 확인되었다.
중간에 sellType 관련 로직 문의도 답변해주고
ORDR SAP 발송 시 이상하게 기입되는 부분 수정 및 운영 배포도 하고
다른 로직 관련 유지보수 문의도 처리해야 했는데
안그래도 바쁜데 유지보수가 넘어와서 시간이 정말 없었다.
파일 깨짐 현상도 어떻게 해결이 되긴 했지만
파일 삭제 부분이 쉽지 않았는데
파일을 이미 2만건 이상 밀어넣었기 때문인지
contenversion에서 documentId를 가져오는 부분이 쉽지 않았고
firstPublishedId같은 것을 사용하려고 했지만
.Name 등으로 비교를 할 수도 없었다.
결국 apex를 사용해서 id값을 가져와서 object를 특정해서 처리해줬는데
아래와 같이 Object를 특정할 수 있는 Id 앞자리로 비교해줬지만
수량이 많으니 에러가 발생해서 천건 정도씩 한참 기다리며 20회 반복해서 정리해줄 수 있었다.
List<Contentversion> cvList = [SELECT FirstPublishLocationId, ContentDocumentId
FROM ContentVersion
where CreatedDate > 2025-02-28T05:42:19.000+0000
order by CreatedDate desc
limit 100];
List<String> cvIdList = new List<String>();
for(ContentVersion cv : cvList){
if(String.valueOf(cv.FirstPublishLocationId).substring(0,5) == 'XXXXX'){
cvIdList.add(cv.ContentDocumentId);
}
}
List<ContentDocument> cdList = [Select Id From ContentDocument Where Id IN :cvIdList order by createdDate];
System.debug(cdList.size());
// delete cdList;
이후 마이그레이션을 multy part form? 방식으로 처리하는 것은 더 느린 것 같은데
해당 부분은 기존 방식대로 처리해도 문제 없던 gif, jpg 등의 타입을 체크한 다음
안전했던 타입은 기존 sfdc contentversion api를 사용해서 base64로 되게 개조해야 할지
아니면 시간이 없으니 그냥 밀어넣어보고 생각해야 할지
아니면 6개가 가능하게 뜯어 고쳐서 파일을 넣는게 더 좋을지
시간만 넉넉하면 다른 org에서도 사용해야 하기 때문에 개선하는게 맞는데
오픈 전에 모든 마이그레이션이 끝나야 하기 때문에 부담이 크다.
(1).백준 30033번 Rust Study는 목표한 페이지를 읽었는지 묻는 문제로
각각 index를 순회하며 목표 이상의 페이지를 읽었는지 확인 후 count를 증가시키는 방식으로 해결했다.
const input = `5
5 6 7 8 9
5 5 5 10 10`.split('\n').map(el => el.split(' ').map(Number))
let count = 0
for(let i = 0 ; i < input[0][0] ; i++){
if(input[1][i] <= input[2][i]){
count++
}
}
console.log(count)'회고' 카테고리의 다른 글
| [개발일지] - 614(주말) (0) | 2025.03.08 |
|---|---|
| [개발일지] - 613 (0) | 2025.03.07 |
| [개발일지] - 611 (0) | 2025.03.05 |
| [개발일지] - 610 (0) | 2025.03.04 |
| [개발일지] -609(대체휴일) (0) | 2025.03.03 |
