Header 마이그레이션을 위해 없는 필드들을 생성해준 다음

날짜, PickList 값들을 SFDC용 데이터로 변환해줬다.

 

날짜 부분이 특히 문제가 많았는데

초반엔 간단하게 엑셀 수식으로 처리했다고 생각했지만

값이 엉망 진창인 예전 데이터들로 인해 11,11시 00,00분같은 엉터리 데이터나

50시, 90시, 45시 등 말도 안되는 값들이 너무 많아서 다 에러가 발생했다.

 

그 외에도 각 picklist값이 없어서 제한에 걸린다던지

엉터리 값이 들어있어서 넣을 수 없다던지 문제가 너무 많았는데

200건씩 나누는 배치를 기준으로 하다보니 에러가 너무 많이 터져서 진행이 안됐지만

일정 진행 이후 1건씩 하니 에러들만 남아서 조금 더 원활하게 처리할 수 있게 됐다.

 

클레임쪽은 Account, Asset, Campaign, Invoice, 품질 등 연결을 마칠 수 있었고

마이그레이션도 오후가 지나서야 무난하게 마무리할 수 있었다.

 

내부 엮인 원인쪽 마이그레이션은 30분정도만에 해결할 수 있었고

이후 파일 마이그레이션은 운영에 끝내뒀지만

개발서버에도 진행하기 위해 추가로 역순 정리를 한 다음 마이그레이션을 시작했다.

 

승인프로세스의 경우에는 무난하다고 생각했지만 에러가 의외로 여기저기 발생했는데

일단 관련 트리거들을 서로 다른 작성자들이 여기저기서 만든 것들을 끄거나 확인요청을 해야 했고

모두 정리된 다음에서야 마무리하고 다시 트리거들을 작동시킬 수 있었다.

 

저녁식사 후 파일 마이그레이션 중단점을 연결해서 마이그레이션을 진행시켰지만

개발서버는 돌아가는 것도 많고 개발서버 자체의 한계 때문인지

파일을 가져오는 것 까지는 무난하게 잘 돌아갔지만

파일을 SFDC API를 통해 업로드하는 부분에서는 속도 지연이 너무 발생해서

운영에 넣을 때보다 10배정도 느리기 때문에 파일업로드 관련 개선이 필요해보였다.

 

파일 업로드 관련 로직을 어느정도 구상은 했지만 적용은 쉽진 않을 것 같은데

주석으로 변경해야 하는 포인트들을 잡아주고 있던 도중

마이그레이션을 전반적으로 더 넣어서 테스트해야 할 것 같다는 요청을 받았고

목요일에는 10시간짜리 예비군 야근에 들어가야 하기 때문에

수요일까지 마무리하려면 로직개선할 시간이 없어서 다시 마이그레이션쪽으로 돌아와야 했다.

 

로직 개선 및 기능 추가쪽이 제일 재미있고 시간도 잘 가고 좋은 경험인 것 같은데

마이그레이션도 물론 숙련도가 쌓이면서 전혀 새로운 마이그레이션이라도 좀 더 잘 할 수 있을 것 같지만

이쪽은 숙련도가 오른다고 좋을게 별로 없을 것 같고 보람도 별로 없고 지루한 작업인 것 같다.

 

고객사에서 요청해서 파견오신 고객사의 협력사쪽 직원분이 문의를 이것저것 하셨는데

클레임과 Asset 연결이 안된 부분들에서 에러가 발생하는데 어떻게 처리하는지 등이었지만

내가 로직은 정확하게 모르지만 nullPointException 문제가 많을 것 같아서

그 부분을 예외처리하던지 없으면 넘어가게 하는 로직이 사실 맞을 것 같긴 하다고 했지만

실제 데이터는 원래 Asset이 빠지면 안되는게 맞았고

이 부분은 마이그레이션 기준시점에 의해서 몇개의 Asset이 전달되지 않은 부분이기 때문에

개발서버 테스트용으로 Asset을 아무거나 채워줄 수 있는지 요청을 받았다.

 

이전같으면 답답하게 Apex에서 Select를 해서 가져온 다음

for문으로 내부 필드값들을 넣어서 update를 진행하지만

한번에 너무 많은 값들이 들어가면 에러가 발생하기 때문에 지연되거나 문제가 있을 수 있었지만

이제는 Inspector를 사용하기 때문에 엑셀에 바로 값을 출력해서 필드만 바꾸고 업데이트처리해버렸다.

 

이후 기타, 공임, 부품쪽 마이그레이션 필드를 확인하고 있는데

파견오신분이 LWC 관련 변수 사용 문의를 주셨고

기본적으로 {}내부에 담아서 사용해야 하고 값은 전역선언한 값을 가져올 수 있다고 전달드렸고

코드를 전반적으로 수정해야 하기 때문에

함수 내부에 있는 값에서 할당할 경우 html에서는 빈 값에서 값을 가져오면 nullPointException이 발생하지만

LWC는 불친절해서 에러 원인을 알려주지 않기 때문에 미리 선언해줘야 한다고 헀고

이걸 Constructor에 넣어주면 된다고 알려드리던 중 생각해보니 api 등으로 가져오는 값이 아닌데

굳이 따로 할당하지 않고 바로 그냥 전역변수로 할당 해야 하는 것을 알려드리고

출력되는 내용 확인 후 이후 로직 수정에 대해 대화하다가 돌아와서 기타, 공임, 부품 등에 대해 정리했는데

이번엔 다른 값들이 제대로 나오지 않는 부분에 대해서 같이 확인하다가

소숫점이 10개가까이 나오는 것을 보고 toFixed를 사용하면 된다고 알려드리고

정상적으로 값이 나오는 것을 확인하고

다른 곳들에 this를 사용하지 않고 호출해서 제대로 되지 않을 것 같은 부분들을 전달드린 다음

팀장님도 퇴근하시려고 해서 9시 40분쯤 마무리하고 퇴근했다.

 

 

(1).백준 1296번 팀 이름 정하기는 특이 규칙에 의해 팀별 점수를 획득할 때

가장 높은 점수를 획득한 팀을 출력해야 하는 문제로 각 점수를 계산해줬으며

동점인 경우 동점들 기준 사전순 출력이었기 때문에 다시 전체 목록을 list에 담아줬고

획득 포인트를 기준으로 max 점수인 녀석들만 filter를 통해서 걸러준 다음 

문자열을 sort로 처리하려고 했지만 a-b 형태로는 되지 않고 기본 sort만 사용해야 했기 때문에

map으로 값을 꺼낸 후 다시 정렬해서 첫번째 값을 출력했다.

const input = `VELYLEOCEVE
5
YVXHOVE
LCOKO
OGWSJVEVEDLE
WGFVSJEL
VLOLUVCBLLQVESWHEEKC`.split('\n')

const lists = []
let max = 0

for(let i = 2 ; i < input.length ; i++){
    const strList = (input[0] + input[i]).split('')
    const L = strList.filter(el => el == 'L').length
    const O = strList.filter(el => el == 'O').length
    const V = strList.filter(el => el == 'V').length
    const E = strList.filter(el => el == 'E').length
    const point = ((L+O) * (L+V) * (L+E) * (O+V) * (O+E) * (V+E)) % 100
    max = Math.max(max, point)
    lists.push([point, input[i]])
}

console.log(lists.filter(el => el[0] == max).map(el => el[1]).sort()[0])

'회고' 카테고리의 다른 글

[개발일지] - 626(예비군)  (0) 2025.03.20
[개발일지] - 625  (0) 2025.03.19
[개발일지] - 623  (0) 2025.03.17
[개발일지] - 622(주말)  (0) 2025.03.16
[개발일지] - 621(주말)  (0) 2025.03.15

+ Recent posts