여태까지는 배열을 넘겨줄 경우 [a,b,c,d]형태로 담아서 넘겨준다고 생각했기 때문에
용량을 많이 차지한다고 생각해서 굳이 문자열 형태로 바꾸거나 map 형태로 담아서 키를 전송했었는데
알고보니 배열을 넘길 떄는 담긴 전체 내용이 넘어가는 것이 아니라 주소값만 넘어가기 때문에
아래와 같은 작업을 진행했을 때 arr의 처리 시간은 160ms
str의 처리시간은 1500ms로 오히려 배열로 처리하는 것이 더 안정적인 것을 볼 수 있었다.
사실 더 안정적인지는 정확하게 모르겠지만
str의 길이가 길어질수록 시간이 지연되는 문제는 확인할 수 있지만
arr의 경우 천만개의 데이터가 들어있어도 속도 지연이 현저하게 적다는 것을 알 수 있기 때문에
배열의 값이 아닌 주소를 넘긴다는 것을 확인하는 시간이 되었다.
let startTime = performance.now();
const arr = []
const arrChanger = (arr,num) => {
arr.push(num)
}
for(let i = 0 ; i < 10000000 ; i++){
arrChanger(arr,i)
}
console.log(arr.length)
// let str = ''
// const strChanger = (st, num) => {
// str += num
// }
// for(let i = 0 ; i < 10000000 ; i++){
// strChanger(str,i)
// }
let endTime = performance.now();
console.log(`걸린 작업 시간은 총 ${endTime - startTime} 밀리초입니다.`);
배치를 작성하던 중 외부 아이디를 확정지어야 했는데
이전에 두개를 외부아이디로 설정했었지만
인스펙터로 확인해보니 첫번째 키는 전부 존재하지만
두번째 키는 3개정도 빈 곳을 볼 수 있었다.
결론적으로 저 테이블에서는 첫번째 키를 키로 사용한다는 것을 확신했고
데이터정의서를 보니 그제서야 첫번째 키에 강조 표시가 있다는 것을 볼 수 있었는데
이게 키를 표시해주는 것임을 뒤늦게 인지할 수 있었다.
기존에 설정했던 외부아이디 2개 중 하나인 두번째 키를 원래대로 되돌리고
다시 배치를 작성했다.
(보안 문제로 이름을 첫번째 키, 두번째 키로 변경해 어색함이 있는 상태)
외부 키를 사용해 upsert를 사용할 경우
upsert upsertDataList externalId형태로 기본 upsert 뒤에 외부 아이디를 추가하면 된다.
배치를 작성한 후 스케쥴러를 통해 작업을 진행하려고 했으나
기존에 작성된 스케쥴러가 있었기 때문에 해당 스케쥴러에 추가하려고 했다.
하지만 스케쥴러 내부의 작동 방식은 getTriggerId 같은 뭔가로 jobId를 특정하면서 진행하는데
excute 내부나 excute에서 실행한 함수 내부나 동일한 아이디를 가지고 있어서
두개의 작업을 넣으면 안될 것 같았다.
알고보니 Batch를 연달아 배치(?)하는게 아니고
배치가 끝난 후 final 부분에서 실행시키는 것이었다.
그리고 배치가 기존 실행과 schedule로 실행되는 것을 구분하는 방법이 있었는데
해당 방식을 내 코드에 적용하고 보니 뭔가 이상했고
final에서 다음 작업을 작동시킬지를 확인하는 것이었기 때문에
이전 스케쥴의 마지막 Batch 작업이었던 Batch 내부에서 설정하고
내 코드는 그냥 호출만 당하는 것이었다.
오늘도 좋은 내용을 많이 배울 수 있었고
남는 시간에는 메일을 전부 읽었는데
주어진 일만 하는 것이 아니라 감독하는 입장에서 확인해보니
사용자의 입장에서 필요한 수정이 생각보다 많았고
그 부분을 정리한 다음 금요일에 있을 회의 전에 개선을 시도하거나
개선 방법에 대해 생각해보기로 했다.
(1).백준 10807번 개수 세기는 새싹 문제였는데
실수로 클릭한 새싹 문제들을 풀지 않아서 아직 새싹단계인걸로 착각하고 문제를 풀어버렸다.
자세히 읽어보니 새싹 문제를 다 풀더라도
이쪽은 새싹 태그의 문제가 모여있어서 새싹등급이 아닌 새싹 태그일 뿐이었지만
혹시 새싹 태그를 다 풀면 다음 단계가 있어서 더 체계적으로 문제를 풀 수 있지 않나 기대를 해본다.
갯수 새기는 해당 글자와 일치하는 것의 갯수를 찾는 문제인데
지금 생각해보면 filter와 length를 사용해도 괜찮았을 것 같다.
const input = `11
1 4 1 2 4 2 4 2 3 4 4
2`.split('\n')
const arr = input[1].split(' ')
let count = 0
for(let i = 0 ; i < arr.length ; i++){
if(arr[i] === input[2]) count++
}
console.log(count)
'회고' 카테고리의 다른 글
[개발일지] - 49 (0) | 2023.08.18 |
---|---|
[개발일지] - 48 (0) | 2023.08.17 |
[개발일지] - 46(광복절) (0) | 2023.08.15 |
[개발일지] - 45 (0) | 2023.08.14 |
[개발일지] - 44(주말) (0) | 2023.08.13 |