인터페이스 요청들이 상당히 쌓여있었기 때문에

조회 인터페이스를 바로 개발한 다음 수신용 인터페이스를 개발해야 했다.

 

하지만 수신용 인터페이스는 부가 조건들이 너무 많기도 했고

특정 상황에서 연락처로 등록이 힘든 경우 Lead 생성 요청을 받아버렸는데

협력사에서는 보안상 ID값으로 넘겨주는게 아니고 이름으로 넘기길 요청했기 때문에

여러가지 조건들을 정리하고 해당 내용을 하나씩 적용해나갔다.

 

그냥 인터페이스도 나쁘지 않지만

이번에는 리팩토링에서 배운 것처럼 쪼개면서 가독성을 올려줬고

내부 동작 로직도 신경쓰면서 코딩하다보니 오랜만에 더 재미있게 작업할 수 있었고

완성된 이후에도 고객사에서 바로 추가 작업 요청을 해서 해당 내용까지 반영해야 했다.

 

그 다음 다른 회사에서도 협의되지는 않았지만

내부적으로 원래 해줘야 하는데 나에게 전달되지 않은 느낌의 작업이었기 때문에

해당 내용도 빠르게 진행했는데

이 회사는 좀 특이하게 개발, 운영 구별을 잘 못하고 바로 운영에 테스트했기 때문에

추가로 의사를 물어보지 않고 바로 운영에도 배포를 진행한 다음 전달했고

추가 수정 요청을 하면 다시 운영에 배포하는 방식으로 진행하기로 했다.

 

예전 통화 관련해서 자동 환율 적용 등 여러가지 시스템을 적용한 인터페이스가 있었는데

금액이 미세하게 차이난다는 문의가 날아와서 로그를 전체적으로 조사했고

금액이 차이나는 원인이 대충 짐작은 갔지만 따로 코드를 작성해서 직접 돌려봤는데

예상대로 SAP에서는 대충 라인별로 금액을 정수로 만들어서 발송했지만

SFDC에서는 환율을 받은 가격대로 관리해서 소숫점들이 다 남아있었고

최종 가격에서 노출될 때만 반올림 느낌으로 공개되기 때문에 1원이상 차이가 자주 발생하는 것이었다.

 

애초에 line별 총 금액이나 Order에서 Line들의 총 합을 다루는 필드는 고정이라 수정이 어렵고

그렇다고 소숫점을 앞에서 계산하는 것이 아니라 수량을 곱한 다음 멋대로 계산하는 방식인데

그런 방식을 SFDC에 적용할 수 없어서 새로 필드를 파야 할 것 같았고

그렇게 되면 기존에 진행되는 연결 및 프로세스가 모두 새로 작성하거나 예외처리를 해야 했기 때문에

단순히 SAP과 일치하는 금액이 보고 싶어서 진행하는 것이라면 필드를 파줄 수 있지만

그걸 원본으로 해서 다른 개체들과의 연결 및 프로세스는 불가능 할 것 같다는 답변을 정리지만

추가적인 요청이 있고 퇴근시간이 지났기 떄문에 이 답변과 해당 문제 해결은 내일 한번에 처리하기로 했다.

 

 

(1).백준 10815번 숫자 카드는 그냥 카드 리스트가 있을 때 보유한 카드인지 확인해줘야 하는 문제였다.

 

처음에는 바로 객체로 하면 쉽게 풀릴 것 같았지만 이렇게 진행할 경우 작은 문제가 발생해서 고민이 시작됐다.

 

map에 담는건 처음에는 좋아보일 수 있지만 map에 담을 때마다 내부적으로 정렬처리가 되기 떄문에 시간복잡도가 증가하는데

실제로 50만개의 숫자를 넣어서 진행한다면 시간초과에 걸릴 수밖에 없을 것 같았다.

 

하지만 간단한 방식이기도 하고 어차피 둘 다 비교해볼 생각이 들었기 때문에 제출했는데

생각보다 여유있게 문제가 통과되기는 했다.

 

그 뒤 이번에는 List에 담아서 map 사용을 우회해봤는데

확실히 1004에서 728로 압도적인 속도 향상을 보여줬다.

 

애초에 여러개의 테스트가 겹쳐있어서 개별적 테스트 시간이 따로 있기도 하고

기본적으로 잡아먹는 시간이 있기 때문에 실제로는 1.5배보다 훨씬 큰 차이가 있을 것 같은데

map이 자동정렬기능이 있다는 사실을 모르고 n 이상의 시간복잡도가 추가할 때마다 작동하는걸 몰랐으면 놓칠 부분인데

예전 멘토님이 말씀해주신 것처럼 내장 함수들도 어떻게 동작하는지

어떤 비용이 지불되는지 확인하고 작성하는 습관을 들일 수 있도록 해야겠다..

//186480kb	1004ms
const input = `5
6 3 2 10 -10
8
10 9 -5 2 3 4 5 -10`.split('\n')

const map = {}
const result = []
const have = input[1].split(' ')
const check = input[3].split(' ')

for(let i = 0 ; i < have.length ; i++){
    map[have[i]] = true
}
for(let i = 0 ; i < check.length ; i++){
    if(map[check[i]]){
        result.push(1)
    }
    else{
        result.push(0)
    }
}

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

//180340kb	728ms
const input = `5
6 3 2 10 -10
8
10 9 -5 2 3 4 5 -10`.split('\n')

const plusList = []
const minusList = []
const result = []
const have = input[1].split(' ').map(Number)
const check = input[3].split(' ').map(Number)

for(let i = 0 ; i < have.length ; i++){
    if(have[i] < 0){
        minusList[-have[i]] = true
    }
    else{
        plusList[have[i]] = true
    }
}
for(let i = 0 ; i < check.length ; i++){
    if(check[i] < 0 && minusList[-check[i]]){
        result.push(1)
    }
    else if(check[i] >= 0 && plusList[check[i]]){
        result.push(1)
    }
    else{
        result.push(0)
    }
}

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

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

[개발일지] - 492  (1) 2024.11.06
[개발일지] - 491  (1) 2024.11.05
[개발일지] - 489(주말)  (0) 2024.11.03
[개발일지] - 488(주말)  (0) 2024.11.02
[개발일지] - 487  (0) 2024.11.01

+ Recent posts