(1).백준 3711번 학번은 최소값으로 주어진 숫자들의 나머지가 서로 다른 값을 구해야 한다는 문제였다.

 

일단 테스트케이스들을 for문으로 분리시켜주고

나머지는 각자 숫자를 1씩 증가시켜가면서 나머지를 map에 담다가

한번이라도 중복이 발생하면 flag를 false로 바꿔주고 나머지처리 순회는 중단시켰고

전체 순회 후 문제가 없는 경우 flag가 true기 때문에 해당 i값을 반환하는 방식으로 처리했다.

const input = `2
1
124866
3
124866
111111
987651`.split('\n').map(Number)

const result = []
const modCheck = (arr) => {
    let map = {}
    for(let i = 1 ; i < 1000000 ; i++){
        map = {}
        let flag = true
        for(let j = 0 ; j < arr.length ; j++){
            if(map[arr[j] % i]){
                flag = false
                break
            }else{
                map[arr[j] % i] = true
            }
        }

        if(flag){
            return i
        }
    }
}



for(let i = 1 ; i < input.length ; i++){
    const arr = [...input.slice(i+1, i + input[i]+1)]
    result.push(modCheck(arr))

    i += input[i]
}

console.log(result.join('\n'))

 

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

[개발일지] - 581  (0) 2025.02.03
[개발일지] - 580(주말)  (0) 2025.02.02
[개발일지] - 579(주말)  (0) 2025.02.01
[개발일지] - 578  (0) 2025.01.31
[개발일지] - 577(설날)  (0) 2025.01.30

출근하자마자 연말정산 서류를 먼저 정리해야 했는데

아래 내용과 같이 7개나 됐기 때문에 준비하는데 시간이 생각보다 오래 걸렸다.

 

1.소득세액공제 2.공제신고서 3.연말정산 사전질문지 4.주민등록등본 5.중기청 감면 6.월세액 임대차 사본 7.이체내역서류

중간에 특정 출고 가격 관련해서 0원이 입력되는 문제가 있다고 하고

그걸 해결하기 위해서 다른 개체에서 가져와서 처리하는 방안에 대해 논의하는데

SAP이랑 업무할 때는 그냥 재전송해라, 필드 값 없다 라고 전달하면 바로 처리해주셨지만

여기는 뭔가 처리를 잘 안해주려고 하는지 알아서 하라는 식으로 답이 왔다고 했고

회의 중 팀장님까지 오셔서 진행했지만 결론적으로는 키값이 없어서 역매칭이 안된다고 마무리됐다.

 

결국 다시 값이 없으면 안된다고 전달해서 정상적으로 보내준다는 마무리가 됐는데

애초에 오던 필드 값들을 본인들이 안넣어놓고

그 값을 전달하지 않으려고 하는 것에 대해서는 잘 이해가 가지 않는다.

 

유지보수쪽에 상태 업데이트 관련 문의가 넘어왔는데

이번엔 이전 에러와는 다르게 단순히 중복된 레코드가 존재하는 것으로

복제를 했던 아니면 수동으로 기입을 했던 비정상적으로 두개가 존재하는 상태로

복제된 데이터를 기준으로 업데이트가 안된다고 문의가 넘어왔지만

실제로는 기존 레코드에 업데이트가 정상적으로 되고 있기 때문에 해당 내용을 공유했다.

 

오전에 진행한 출고 관련 내용은 잘 마무리됐지만

여태 없는 값들은 우리쪽에서 수동으로 기입하라는 요청이 넘어왔고

전달받은 값을 postman으로 발송해서 정상 처리되는 것 까지 확인하고 다음 작업으로 넘어갔다.

 

SSO 관련 토큰 권한 확인 문제가 있었는데

분명 다른 org에서는 되는데 여기선 안되서 온갖 권한을 다 뒤져봤지만 해결되지 않았고

문득 뭔가 이상해서 site 주소를 확인하니 api를 정상적으로 주는 getSessionId의 경우

my가 들어가는 주소값이라는 것을 알 수 있었다.

 

SFDC에서 일반적으로 aura, vf, lwc 등은 전부 my가 없는 주소값이고

설정탭이나 개발자도구 등의 경우에는 my가 들어가는 값이라서

토큰을 화면단에서 출력되게 하면 에러가 발생하고 개발자도구에서는 정상 출력되는 것이었다.

 

String sessionId = UserInfo.getSessionId();
Integer mid = sessionId.length() / 2;
System.debug('First Half: ' + sessionId.substring(0, mid));
System.debug('Second Half: ' + sessionId.substring(mid));

일단 토큰 관련 자꾸 찾다보니 토큰을 찾는건 별 문제가 없어졌는데

수동 토큰 입력을 시키는 것이 좀 부담스러웠는데

관리자권한이 있는 사용자의 경우 이런 방식으로 토큰을 받으라고 하면

굳이 app manager 등에 connected app 설정 및 토큰발급이 필요 없기 때문에

팀장님에게 필요한 정보는 찾지 못했지만 개인적으로는 의미있는 확인 시간이었다.

 

갑작스럽게 데브옵스 관련 회의가 3분 뒤로 초대가 날아왔는데

배포 등에 깃허브가 연동되는 시스템 관련 정보로

일단 도입한다고는 하지만 계정 연동이 되지는 않은 상태기도 하고

다른 작업이 워낙 많이 밀려있어서 일단 연동되면 알아보던지 하기로 했다.

 

팀원분이 내가 만들었던 클래스가 테스트에 잡혀서 진행이 안된다고 문의를 주셨는데

전체 클래스가 있지 않아서 검색되지 않았던 것으로

당연하지만 trigger를 통해서 내 클래스가 호출되기 떄문에 발생한 문제였고

내 클래스 테스트클래스에 있는 입력 데이터를 넣어주는 방식으로 해결되었다고 했다.

 

어드민분이 단가 관련 자동승인 에러 문의를 주셨는데

다행인지는 모르겠지만 이전에도 다른 문제로 해당 flow, class를 확인한적 있기 때문에

빠르게 원인을 파악해서 해결할 수 있었다.

 

파일이 아니라 전체 마이그레이션 업무도 진행하려고 하는데

다른 업무들이 워낙 많았어서 그냥 개체 정보만 조금 확인하다 마무리하고 퇴근했다.

 

 

(1).백준 11256번 사탕은 여러가지 박스 사이즈들과 사탕의 수량이 제공될 때

사탕을 포장하기 위해 몇개의 박스를 최소로 소비할 수 있는지 출력해야 하는 문제였다.

 

박스 사이즈를 따로 배열에 담아준 다음 내림차순으로 정렬하고

박스를 하나씩 소모해서 사탕이 다 담긴 시점에 사용한 박스의 갯수를 각자 result에 담은 다음

다른 케이스를 하나씩 진행한 후 최종 결과를 출력하는 방식으로 해결했다.

const input = `2
12 3
2 7
1 5
3 2
20 3
2 7
1 5
3 2`.split('\n').map(el => el.split(' ').map(Number))

const result = []

for(let i = 1 ; i < input.length ; i++){
    const [nums, box] = input[i]
    const boxArr = []
    let sum = 0
    let count = 0
    for(let j = i + 1 ; j <= i + box ; j++){
        const [x, y] = input[j]
        boxArr.push(x * y)
    }
    boxArr.sort((a,b) => b - a)

    for(let j = 0 ; j < boxArr.length ; j++){
        if(sum < nums){
            sum += boxArr[j]
            count++
        }
        else{
            break
        }
    }
    result.push(count)
    i += box
}


console.log(result.join('\n'))

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

[개발일지] - 582  (0) 2025.02.04
[개발일지] - 580(주말)  (0) 2025.02.02
[개발일지] - 579(주말)  (0) 2025.02.01
[개발일지] - 578  (0) 2025.01.31
[개발일지] - 577(설날)  (0) 2025.01.30

(1).백준 11728번 배열 합치기는 배열을 합쳐서 정렬하라는 문제였는데

그냥 concat이나 구조분해할당([...a, ...b]) 형태로 진행한 다음 sort를 써도 됐겠지만

이미 정렬된 내용이라고 해서 시간복잡도를 고려해서 둘 중 작은 값을 먼저 넣는 방식으로 진행했다.

const input = `4 3
2 3 5 9
1 4 7`.split('\n').map(el => el.split(' ').map(Number))

let index1 = 0
let index2 = 0
const result = []

while(index1 < input[0][0] || index2 < input[0][1]){
    if(input[1][index1] < input[2][index2]){
        result.push(input[1][index1])
        index1++
    }
    else if(input[1][index1] > input[2][index2]){
        result.push(input[2][index2])
        index2++
    }
    else if(index1 < input[0][0]){
        result.push(input[1][index1])
        index1++
    }
    else{
        result.push(input[2][index2])
        index2++
    }
}

console.log(result.join(' '))

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

[개발일지] - 582  (0) 2025.02.04
[개발일지] - 581  (0) 2025.02.03
[개발일지] - 579(주말)  (0) 2025.02.01
[개발일지] - 578  (0) 2025.01.31
[개발일지] - 577(설날)  (0) 2025.01.30

(1).백준 12723번 Minimum Scalar Product (Small)는 주어진 배열들의 곱에서 최저값을 구해야 하는 문제로

최대값은 큰 수끼리 곱하는 방식이기 때문에 반대로 역정렬을 통해서 곱해서 최저값, 최대값의 곱 순서로 진행했다.

const input = `2
3
1 3 -5
-2 4 1
5
1 2 3 4 5
1 0 1 0 1`.split('\n')

const result = []
let count = 1

for(let i = 2 ; i < input.length ; i++){
    const xArr = input[i].split(' ').map(Number).sort((a,b) => a-b)
    const yArr = input[i+1].split(' ').map(Number).sort((a,b) => b-a)
    let sum = 0
    for(let j = 0 ; j < xArr.length ; j++){
        sum += xArr[j] * yArr[j]
    }
    result.push(`Case #${count++}: ${sum}`)
    i+=2
}

console.log(result.join('\n'))

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

[개발일지] - 581  (0) 2025.02.03
[개발일지] - 580(주말)  (0) 2025.02.02
[개발일지] - 578  (0) 2025.01.31
[개발일지] - 577(설날)  (0) 2025.01.30
[개발일지] - 576(설날)  (0) 2025.01.29

홈페이지 이전 관련해서 추가 요청사항으로 회의까지 했었던 부분에서

당일날 회의가 끝나자마자 이쪽에서 가능한 부분을 바로 처리해서 전달했었는데

오늘 개발서버 테스트가 끝났으니 운영 반영해달라는 요청을 받았고

미리 테스트클래스를 작성해뒀기 때문에 빠르게 배포한 다음 테스트를 마치고 전달했다.

 

마이그레이션 파일 처리 부분에서 다른 org에서도 작동하기 편하게 하려고 apex를 제거하는데

다른 부분들은 다 문제가 없었지만 키값을 기준으로 리스트를 매칭하는 부분에서 문제가 발생했다.

 

SFDC REST API의 경우 제한이 까다로워서 쿼리는 post가 아닌 get으로만 가능했고

각각의 키를 IN ( ‘key1’, ‘key2’) 형태로 담아서 전달하기에는 2048글자라는 제한이 너무 많았다.

 

어찌저찌 로직상으로 async await로 전체 데이터를 순회하며

길이가 2천자정도 되면 전송하면서 완료되면 작업을 끝내는 방법을 채택해봤는데

여기서 또 에러가 발생해서 문제 원인을 파악해보니 발송될 때는 변환되어 가기 때문에

특수기호 같은 경우 3배로 증가되어서 일단 글자 길이 제한을 2배로 줄여서 테스트했다.

 

실제로 키값에 특수문자들만 들어갈 경우도 딱히 없어서 문제는 발생하지 않고 정상 처리되었는데

apex class 생성, 연결 부분까지 포함될 경우 운영으로 넘기려면 테스트클래스도 짜야하고

최대한 간소화해서 apex를 제거하려는 시도는 간신히 성공할 수 있었다.

 

이후 추가로 토큰값을 받아서 처리하는 부분의 CSS에서 문제가 발생했었는데

토큰 길이가 길어서 box size를 늘렸더니 아랫부분의 dropdown이 어긋났고

자동 중앙 정렬인데 left도 안먹히고 위치 고정을 하자니 그것도 문제가 있을 것 같고

결국은 사이즈 조절을 통해 증가된 만큼 줄이는 방식으로 해결했다.

 

이번에는 sheet js를 static이 아닌 코드로 가져와서

추후에 이전할 때 파일이 없이 진행할 수 있는 방법이 있나 잠깐 생각하다가

프로젝트 WBS 관리 요청이 들어와서 그 부분으로 넘어갔다.

 

인터페이스 일정은 팀장님에게 가서 문의드렸는데

내가 담당한 부분들은 일단 postman 테스트 및 테스트클래스 작성까지 끝냈지만

우리쪽에서만 끝나고 저쪽에서 발송테스트를 해주지 않았기 때문에 퍼센트 산정이 애매했고

게다가 개발쪽에서도 필드가 맞는지 한번 더 확인하고 수정하는 작업이 있어서 적당히 조절했다.

 

그 외에 파일이 아닌 그냥 마이그레이션도 많이 있었는데

책임이 인터페이스로 되어있는 부분에 대해 문의한 다음 내가 담당하기로 했다.

 

개발쪽에서 마이그레이션할 데이터들에 대해 아는 분을 찾아가서

어떤 필드들이랑 매칭되는지 문의드려서 인수인계를 대충 받았고

마이그레이션 일정 등에 대해서 잠깐 논의한 다음 마무리했다.

 

 

(1).백준 20233번 Bicycle는 루트별 요금과 이동거리가 제공될 때 월 21일 출근 기준 비용을 계산해야 했는데

0보다 작은 경우 0을 넣어 기본요금을 출력하고 그 외에는 공제거리와 이동거리의 차이에 금액과 21일을 곱해서 계산해줬다.

const [a, x, b, y, t] = `10
1
20
5
50`.split('\n').map(Number)

let aRoute = a + Math.max(0, t - 30) * x * 21
let bRoute = b + Math.max(0, t - 45) * y * 21

console.log(aRoute, bRoute)

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

[개발일지] - 580(주말)  (0) 2025.02.02
[개발일지] - 579(주말)  (0) 2025.02.01
[개발일지] - 577(설날)  (0) 2025.01.30
[개발일지] - 576(설날)  (0) 2025.01.29
[개발일지] - 575(설날)  (0) 2025.01.28

(1).백준 2167번 2차원 배열의 합은 배열 내부 특정 범위의 합을 구해야 하는 문제였다.

 

간단하게 이중for문으로 x, y축 범위를 지정해줬고

합을 sum에 계산한 다음 result 배열에 담아서 한번에 출력하는 방식으로 해결했다.

const input = `2 3
1 2 4
8 16 32
3
1 1 2 3
1 2 1 2
1 3 2 3`.split('\n').map(el => el.split(' ').map(Number))

const result = []

for(let i = input[0][0] + 2 ; i < input.length ; i++){
    const [x1, y1, x2, y2] = input[i]
    let sum = 0

    for(let j = x1 ; j <= x2 ; j++){
        for(let k = y1 - 1 ; k < y2 ; k++){
            sum += input[j][k]
        }
    }
    result.push(sum)
}


console.log(result.join('\n'))

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

[개발일지] - 579(주말)  (0) 2025.02.01
[개발일지] - 578  (0) 2025.01.31
[개발일지] - 576(설날)  (0) 2025.01.29
[개발일지] - 575(설날)  (0) 2025.01.28
[개발일지] - 574(임시공휴일)  (0) 2025.01.27

(1).백준 33163번 OIJ (OIJ)는 이유는 모르겠지만 J->O->I->J로 변환해야 하는 문제로

주어진 변환 방식을 map에 담은 다음 문자열을 순회하며 변환한 값을 result에 담아 출력했다.

const input = `10
JOIOOJOOOJ`.split('\n')[1]

const map = {'J' : 'O', 'O' : 'I', 'I' : 'J'}
let result = ''

for(let i = 0 ; i < input.length ; i++){
    result += map[input[i]]
}

console.log(result)

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

[개발일지] - 578  (0) 2025.01.31
[개발일지] - 577(설날)  (0) 2025.01.30
[개발일지] - 575(설날)  (0) 2025.01.28
[개발일지] - 574(임시공휴일)  (0) 2025.01.27
[개발일지] - 573(주말)  (0) 2025.01.26

(1).백준 18411번 試験 (Exam)는 시험 성적 중 더 높은 점수 두개의 합을 출력해야 한다고 했는데

각각의 점수의 합에서 최소 점수를 빼는 방식으로 해결했다.

 

조건문을 가지고 a가 최소값과 같은지, b가 최소값과 같은지 비교하는 if문이나

sort를 사용해서 두개의 값을 더할 수도 있었지만

처음에 떠오른건 최소값을 빼는 방식이었기 때문에 그냥 그대로 진행했다.

const input = `70 80 90`.split(' ').map(Number)

console.log(input.reduce((a,b) => a+b) - Math.min(...input))

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

[개발일지] - 577(설날)  (0) 2025.01.30
[개발일지] - 576(설날)  (0) 2025.01.29
[개발일지] - 574(임시공휴일)  (0) 2025.01.27
[개발일지] - 573(주말)  (0) 2025.01.26
[개발일지] - 572(주말)  (0) 2025.01.25

(1).백준 31610번 飴の袋詰め (Drops Packing)는  

사탕과 봉투의 가격이 주어졌을 때 n개의 사탕 구매 시 지불해야 하는 비용을 구해야 하는 문제로

사탕의 갯수와 가격을 곱한 다음 봉투의 가격을 추가하는 방식으로 해결했다.

const input = `23
10
15`.split('\n').map(Number)

console.log(input[0] * input[1] + input[2])

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

[개발일지] - 576(설날)  (0) 2025.01.29
[개발일지] - 575(설날)  (0) 2025.01.28
[개발일지] - 573(주말)  (0) 2025.01.26
[개발일지] - 572(주말)  (0) 2025.01.25
[개발일지] - 571  (0) 2025.01.24

(1).백준 4108번 지뢰찾기는 지뢰찾기의 맵을 모두 밝혔을 때 출력되는 결과처럼 나오게 해야 하는 문제로

초기에 지뢰가 있는 형태로 제공될 경우 각각의 인접한 공간에 몇개의 지뢰가 있는지 출력해야 했다.

 

주어진 값을 일단 각각의 테스트케이스로 분리처리하고

지뢰처리하는 메서드를 생성한 다음 내부에서 결과를 담을 배열을 다시 생성해줬다.

 

배열이 생성된 다음 다시 주어진 리스트를 토대로 진행하면서

인접 칸들에 지뢰가 아닌 경우 1씩 증가시킨 다음 최종적으로 result에 모아 출력하는 방식으로 해결했다.

const input = `3 2
..
.*
..
5 5
*.*.*
..*..
*****
.....
..**.
0 0`.split('\n')

const result = []
const getMine = (arr, x, y) => {
    const newArr = []
    for(let i = 0 ; i < x ; i++){
        line = []
        for(let j = 0 ; j < y ; j++){
            if(arr[i][j] == '*'){
                line.push('*')
            }
            else{
                line.push(0)
            }
        }
        newArr.push(line)
    }

    for(let i = 0 ; i < newArr.length ; i++){
        for(let j = 0 ; j < newArr[i].length ; j++){
            if(newArr[i][j] == '*'){
                for(let n = Math.max(0, i - 1) ; n < Math.min(newArr.length, i + 2) ; n++){
                    for(let m = Math.max(0, j - 1) ; m < Math.min(newArr[i].length, j + 2) ; m++){
                        if(newArr[n][m] != '*'){
                            newArr[n][m]++
                        }
                    }
                }
            }
        }
    }
    return newArr
}
for(let i = 0 ; i < input.length - 1 ; i++){
    const [x, y] = input[i].split(' ').map(Number)
    const arr = []
    for(let j = i + 1 ; j <= i + x ; j++){
        arr.push(input[j])
    }
    result.push(getMine(arr, x, y).map(el => el.join('')).join('\n'))
    i += x
}

console.log(result.join('\n'))

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

[개발일지] - 575(설날)  (0) 2025.01.28
[개발일지] - 574(임시공휴일)  (0) 2025.01.27
[개발일지] - 572(주말)  (0) 2025.01.25
[개발일지] - 571  (0) 2025.01.24
[개발일지] - 570  (1) 2025.01.23

(1).백준 23568번 Find the House는 친구의 집을 찾아가는 경로를 제공받을 때

최종적으로 목적지의 위치를 출력해야 하는 문제였다.

 

문제의 중요한 포인트는 현재 위치에서 이동한 경로를 찾아서 순차적으로 연결하는 방식에 대한 것 같지만

결론적으로 오른쪽에 있는 이동거리들의 합이 되기 때문에

그냥 어떤 순서로 이동했는지 확인하는 부분은 무시하고

기존 위치에서 움직인 거리들의 합을 출력하는 방식으로 해결했다.

const input = `5
3 L 3
-1 R 11
5 L 6
1 R 4
10 L 7
1`.split('\n')

let result = Number(input[input.length - 1])

for(let i = 1 ; i < input.length - 1 ; i++){
    const [start, way, length] = input[i].split(' ')

    if(way == 'R'){
        result += Number(length)
    }
    else{
        result -= Number(length)
    }
}

console.log(result)

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

[개발일지] - 574(임시공휴일)  (0) 2025.01.27
[개발일지] - 573(주말)  (0) 2025.01.26
[개발일지] - 571  (0) 2025.01.24
[개발일지] - 570  (1) 2025.01.23
[개발일지] - 569  (0) 2025.01.22

apex에서 자꾸 탭이 2줄로 변경되는 문제가 있지만 그냥 스페이스바나 탭 두번으로 처리했는데

Indent Using Spaces를 통해서 탭 변경이 가능해서 다시 정상적으로 작업할 수 있었다.

 

비활성 유저 관련 중단 사태 문의를 다시 확인해줬는데

결론적으로 여러 채널에서 어드민쪽에 flow 등 요청이 들어갔고

특정 조건일 때 상태값이 초안에서 승인됨으로 변경되고

승인됨인 경우 알림이 날아가야 하는데 비활성이라 에러가 발생한 상태고

비활성 여부와 관련없이 알림을 일단 발송 시도하는 로직도 최근에 추가되었기 때문에

연쇄적으로 발생한 결과에 따라 결국 발송 시도 부분에서 에러가 발생해서 인터페이스에 영향이 온 것이었다.

 

여기서 중요한 부분은 초안에서 승인됨으로 자동 변경되는 부분이라고 추측하고

초안에서 승인됨이 변경될 때

만약 기존에 SAP 전송으로 인해 키값이 넘어온 적 있다면 승인됨 변경 로직을 진행되지 않게 했다.

 

어차피 초안으로 변경 후 이후 단계 변경이 되기 때문에 승인됨이 필요 없어 보였고

로직 적용 이후 인터페이스 재발송을 하니 정상적으로 처리되었기 때문에

해당 로직 원인과 처리한 내용에 대한 로직을 정리해서 고객사에 전달했다.

 

엑셀로 파일 다운롣 ㅡ마이그레이션 페이지 관련해서 개선을 진행하는데

이전에 언급했던 apex 연결을 대체하는 부분들을 처리하는데 생각보다 오래 걸렸다.

 

일단 lwc 내부에서 metadata를 가져오는 방법에 대해서는

url과 session을 가져오는 것이었기 때문에 session은 직접 토큰을 넣게 input을 넣어줬고

url 부분은 lwc에서 window.page? 같은 방식으로 처리해줬지만 계속해서 에러가 발생했다.

 

url을 가져오는 부분에서 왜 에러가 발생하는지 의아했는데

network부분을 확인하니 이상하게 3번이나 발송하는 부분이 존재했고

2번까지는 한번은 preflight라고 생각하더라도 횟수가 3번이라 뭔가 이상하고

토큰 확인도 했지만 401 에러가 발생하고 있기 때문에 조금 더 자세히 확인해봤다.

 

확인 결과 token은 두번째 발송에만 존재했고 나머지 발송에는 존재하지 않았는데

token이 누락된 원인을 찾기 어려웠고 3회 발송이라는 부분은 더 이해가 되지 않았고

url이 도대체 뭐가 문제가 있는지 요청을 발송하기 전 console을 찍어도 확실히 보이지 않았다.

 

더 정확하게 하기 위해 postman에서 복사한 링크 주소를 하드코딩하니 정상 발송되었는데

그 상태에서 console에 찍힌 url을 하드코딩 값과 같이 출력하니 드디어 아래처럼 확인이 가능했다.

<https://xxxxxxxxxx.sandbox.lightning.force.com/services/data/v60.0/sobjects>

GET <https://xxxxxxxxxx.sandbox.my.salesforce.com/services/data/v60.0/sobjects> 401 (Unauthorized)

 

문제는 lightning.force.com으로 발송하지만

언제부턴가 인터페이스의 경우 my.salesforce.com으로 발송해야 했기 때문에

일반적인 주소로 api 요청을 보내면 아래 주소인 my.으로 redirect가 되어버렸고

redirect가 되기 전 요청에 이미 Header로 넣어준 token값은 유실되어버리고

그 이후 발송되는 redirect된 인터페이스 요청에서는 token없이 발송되어 401에러가 발생한 것이었다.

 

결국 기존 주소값에서 lightning.force를 my.salesforce로 교체한 다음

정상적으로 인터페이스 처리가 되는 것을 확인했는데

이 부분까지가 겨우 metadata를 가져와서 처리하는 부분이라 상당히 지쳤다.

 

이후 ObjectList를 가져와서 어떤 Org에서든 아무 개체나 정확히 매칭할 수 있게 했던 부분도 수정했는데

이 부분은 위에서 언급된 services/data/v60.0/sobjects api를 사용한 다음

해당 값을 기존에 apex에서 받아서 처리한 것처럼 진행해서 빠르게 마무리할 수 있었고

엑셀로 정리해서 어떤 객체든 키값에 따른 리스트를 전송하는 부분은 진행 중 퇴근이슈로 멈춰버렸다.

 

설날이라 붐빌 것 같아서 최대한 빨리 마무리하고 퇴근해야 해서 아쉬웠는데

어쨌거나 이 부분은 api 부분의 객체명칭에 선택된 값을 넣어주고

Select 부분에 Where 조건에 Id 리스트를 넣어주면 될 것 같지만

이게 몇천건이 되어버리거나 하면 에러가 발생할 것 같기도 하고

url 뒤에 붙어서 가는 경우 링크 길이 초과로 인해 수천개의 key값을 넣기도 애매하고

문제가 발생하면 이것 또한 배치처럼 분할해서 하나하나 처리하게 로직을 짜야 하는데

apex 배제 마지막 단계가 제일 큰 난관일 것 같았다.

 

 

(1).백준 27219번 Робинзон Крузо는 주어진 숫자에 따라  V와 I로 숫자를 표기해야 하는 문제였다.

 

간단하게 Math.floor로 5의 배수를 구해주고

나머지는 %로 구해서 구분한 다음 각자의 V와 I의 갯수는 .repeat으로 표현했다.

const input = 13
let result = 'V'.repeat(Math.floor(input/5)) + 'I'.repeat(input%5)

console.log(result)

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

[개발일지] - 573(주말)  (0) 2025.01.26
[개발일지] - 572(주말)  (0) 2025.01.25
[개발일지] - 570  (1) 2025.01.23
[개발일지] - 569  (0) 2025.01.22
[개발일지] - 568  (0) 2025.01.21

+ Recent posts