금요일까지 일정 관련 답장이 오지 않을 경우 확인을 해야 했기 때문에

해당 키워드로 전체 메일을 확인해서 분류해둔 다음 테스트코드를 미리 정리하기로 했다.

 

엄청 많이 나왔지만 그나마 클래스와 트리거는 17개로

17개에 맞는 테스트코드 매칭 작업을 시작했다.

 

5개정도는 이미 테스트코드가 존재했기 떄문에 퍼세트를 기록하는 정도에서 넘어갔고

나머지 2개는 필드 변경으로 인해 작동 자체가 되지 않았기 떄문에

필드 수정 및 추가된 트리거 또는 함수의 테스트를 진행해서 기준치 75%를 넘겼다.

 

남은 12개의 테스트코드를 하나씩 작성하는데

생각보다 순조롭게 테스트코드를 해결할 수 있었지만

마지막 하나의 테스트에서 문제가 발생했다.

 

다른 테스트코드 또는 코드에서는 전혀 상관없이 사용하던 특정 상태값에서

상태값 api를 입력했음에도 값이 들어가지 않았다.

 

생각해보면 테스트코드 외에서만 사용했고 테스트코드 내부에서는 api 코드르 사용하지 않았기 때문에

테스트코드는 pickList에 있는 api를 인식하지 못한다는 의심이 들기 시작했고

대부분의 팁들도 필드 내부에 있는 “선택 목록을 값 세트에 정의된 값으로 제한합니다.”를 끄고 진행하기를 권장했다.

 

api가 아닌 value를 넣어보기도 하고 하나씩 뺴보기도 했지만

확실히 테스트에서는 api값을 넣어도 pickList가 되지 않는다는 확인만 하게 된 후

필드 내부에 가서 “선택 목록을 값 세트에 정의된 값으로 제한합니다.”를 해제하니

해당 부분은 정상 처리되었지만 에러가 다시 발생했다.

 

에러의 원인을 보니 다른분이 만든 pdf 생성까지 트리거로 엮여있었기 때문에

특정 상태값이 되면 만들게 되는 것이었고

결국 해당 상태값만 테스트를 제외하니 99%로 통과할 수 있었다.

 

sfdc에서 home, end 키를 통해서 개체나 필드, 클래스 등을 대량으로 확인해야 빠르게 로딩이 되는데

언제부턴가 home, end 키가 되지 않아서 답답하면서도 그냥 사용하고 있었는데

오늘 참지 못하고 인터넷에 검색해보니 캐럿브라우징이라는 기능이 멋대로 켜져서 그런 것이었다.

 

캐럿브라우징은 마우스가 없는 환경에서 웹서핑을 할 수 있게 돕는 보조적인 기능이라고 하는데

F7을 눌러서 끌 수 있기 때문에 당장 꺼버리고 home, end 키를 정상 사용했다.

 

테스트코드를 모두 작성했기 때문에

남은 업무는 PDF 생성(전달 아직 못받음), 인터페이스 오류 탐색(회신 대기), 요청사항 수정(완료 후 연구실 회신 대기) 등 전부 회신 대기 상태였기 때문에

기본 sfdc 개발에도 필수적이면서 인터페이스팀으로서 정말 중요한 SQL 학습을 하기로 했다.

 

SQL 학습을 시작하면서 충격적인 것을 발견했는데

ORDER BY a , b 형태로 두가지 정렬을 할 수 있는 것이었다.

 

SFDC의 정렬은 멍청해서 하나로 밖에 되지 않고

두개로 하려면 해당 필드를 다시 재조회 하라는 등의 답변만 봤기 때문에

이런건 처음 알았다고 동기분과 대화하던 중

어? 그거 세일즈포스에서 안돼요?? 안해봐서 모르겠네 라고 하셔서

직접 안되는 모습을 보여드렸는데 황당하게도 잘 됐다.

 

저번에 자바스크립트로 5~10분이면 해결할 수 있는 것을 apex로 3시간이 걸렸다고 했었는데

이것만 알았어도 apex로도 10분이면 해결할 수 있었는데 확실히 아는 것이 힘인 것 같다.

 

sql을 학습하는게 오히려 업무시간 효율성이 더 빠르게 증가한다는 사실을 바로 체감할 수 있었기 때문에 조금 더 집중해서 sql 학습을 할 수 있을 것 같다.

 

sql 학습 게임 같은게 없냐고 하시긴 했는데

학습이라도 게임으로 하고 있는건 조금 눈치가 보일 것 같아서

그냥 프로그래머스의 sql 문제를 쉬운 것 부터 차근차근 풀기로 했다.

 

1.fieldName as changeName 형태로 출력 필드명을 변경할 수 있다

2.Count(fieldName) as ChangeName 형태로 출력 숫자 이름을 변경할 수 있다.

3.Like로 검색을 할 때는 중간일 경우 ‘%a%’형태로 해야 앞뒤 공백까지 검색이 된다.

4.IFNULL(fieldName, value)로 할 경우 해당 필드가 null인 경우 value로 변하게 된다.

5.IFNULL 형태로 할 경우 해당 값이 그대로 필드명이 되기 때문에 AS newFieldName으로 변경해줘야한다.

6.ORDER BY 로 진행할 경우 ORDER BY a ASC, b DESC 처럼 여러개를 지정할 수 있으며 앞순번부터 진행된다.

7.날짜 포맷을 지정할 경우 DATE_FORMAT(fieldName, '%Y-%m-%d') AS fieldName 형태로 한다.

 

4시쯤 다시 한번 문의를 했는데 해당 부분에 대해 확인을 할 수 있었고

고객사의 요구사항을 드디어 만족시킬 수 있었기 때문에

해당 리스트의 권한 체크를 각 프로필 계정으로 로그인해서 진행한 다음

고객 요청사항이 끝났기 때문에 내용을 정리해서 메일을 보냈다.

 

이번에는 조금 더 가독성이 좋게 하기 위해서

대제목은 bold로 크기를 키웠고

알 수 없지만 n번 밑에 n번이 있는 구조인 것은

중간에 위치한 n번은 사이즈를 조금만 더 키우고 bold 처리했다.

 

그리고 처리가 불가능한 부분이거나 처리는 됐지만 주의사항이 있는 부분들은 빨간색 처리했고

담당자에게 전달한 부분은 노란색으로 처리했다.

 

SQL은 2시간도 못했는데 

진작 2시간치만 학습했어도 벌써 3시간은 절약할 수 있었을 것 같다.

 

원래는 자바스크립트 자격증이나 dp2를 취득하려고 생각했는데

이사님이 신기하게 마구 사용하시면서 쿼리만으로 데이터 정보를 취합하는 모습을 보고

저런 사용법도 있구나 하면서 맛만 봤는데 

쿼리 실력도 세일즈포스에 적용이 생각보다는 많이 될 것 같아서

내일도 시간이 남으면 sql 학습을 같이 해야겠다.

SQL 학습

 

(1).백준 15178번 Angles는 주어진 각들을 체크해서

합이 180도가 되는지 확인하고 출력해야 하는 문제였다.

 

number type으로 변경해야 하기 때문에 가져온 값을 구조분해할당으로 가져오고

합이 180도인지 확인해서 check / OK인지 기존 input값에 더해줬다.

const input = `10
59 60 60
42 68 70
65 65 50
120 31 28
61 61 58
78 61 41
85 85 9
64 82 35
29 102 49
120 30 30`.split('\n')

const result = []

for(let i = 1 ; i < input.length ; i++){
    const [a, b, c] = input[i].split(' ').map(Number)
    result.push(input[i] + ' ' +((a + b + c) === 180 ? 'Seems OK' : 'Check'))
}

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

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

[개발일지] - 78(주말)  (0) 2023.09.16
[개발일지] - 77  (0) 2023.09.15
[개발일지] - 75  (0) 2023.09.13
[개발일지] - 74  (0) 2023.09.12
[개발일지] - 73  (0) 2023.09.11

오늘은 그동안 작성하지 않은 4일치 사례를 정리했다.

 

사례를 정리해서 올린 후 유지보수에 대한 이야기를 하다가

문득 7월달에 메뉴얼 작성을 하며 유지보수 관련 작업을 한게 생각나서

이미 시간이 좀 지나긴 했지만 메뉴얼 작성 유지보수 또한 사례를 작성했다.

 

첫번째 프로젝트를 진행하던 곳에서 인터페이스 관련 메일이 왔는데

다른 곳에서도 사용할 필드가 있기 때문에 모든 데이터에 해당 필드를 입력해달라는 요청이었다.

 

수십만 단위의 데이터를 모두 인터페이스를 진행하기는 쉽지 않을 것 같아서

정말로 전체 데이터를 진행해야 하는지 확인을 진행하고

결국 전체 데이터를 확인했는데

해당 필드가 들어있는건 생각보다 적어서 생각보다 부담이 많이 줄어들었다.

 

데이터를 처리하던 도중 SAP에서 만들어준 페이지에서

해당 key 값을 입력하면 자동으로 내용이 채워지는 방식이었는데

생각보다 적다고 하지만 많은 양이라 수동으로 다 하기에는 시간이 너무 걸릴 것 같아서

매크로를 생성해 상태 코드와 처리된 결과만 확인하며 매크로를 반복해서 작동시켰다.

 

인터페이스를 다 하고 크로스체크를 하려고 했는데

데이터 갯수의 차이가 나고

데이터를 인터페이스 해도 총량은 변하지 않는 이상한 문제가 발생했다.

 

다행히 예전에 프로필을 비교하기 위해 만들어둔 스니펫이 있었기 때문에

해당 키들을 조회하고 어떤 키가 인터페이스 되지 않았는지 빠르게 확인할 수 있었는데

덕분에 많은 데이터 사이에서 문제가 되는 데이터만 잡아낼 수 있었고

알고보니 해당 데이터 중 일부는 하나의 키에 여러개가 엮여서

하나의 데이터를 넣으면 기존에 있던 다른 데이터가 사라지고

다시 다른 데이터를 넣어도 방금 넣은 데이터가 사라지는 등의 이상현상을 보였다.

 

파악한 부분을 제외한 전체 부분이 잘 마이그레이션 된 것을 확인하고

해당 부분에 대한 메일을 작성했다.

 

첫번쨰 프로젝트에서 요청사항을 대량으로 보내서 해당 회의도 진행되었는데

어제 오전에 이미 맡은 부분은 끝냈지만 다 끝내고 정리해서 보낼 줄 알았는데

알고보니 각자 맡은 부분들이 끝나면 알아서 메일을 보내는 것으로 정리되었기 떄문에

정리해서 보낼 예정이다.

 

메일을 정리하는 도중 인터페이스 오류에 대해서 SAP와 고객사측에서 문의들이 왔는데

해당 부분을 처리하다가 결국 관련 메일은 처리했지만

요청사항 36개에 대한 메일을 작성하지 못해서 월요일에 처리하기로 했다.

 

 

(1).백준 13225번 Divisors는 주어진 숫자를 나눌 수 있는 모든 값의 갯수를 구해야 하는 문제였다.

 

해당 문제는 1부터 주어진 숫자까지 모두 나눠보며 나머지가 0인지를 확인해야 했는데

다행히 숫자 범위가 낮기 때문에 이중 for문을 사용해서 문제를 해결할 수 있었다.

const input = `10
1
2
3
4
5
9999
31
10
20
1047`.split('\n').map(Number)

const result = []

for(let i = 1 ; i < input.length ; i++){
    let count = 0
    for(let j = 1 ; j <= input[i] ; j++){
        if(input[i] % j === 0){
            count++
        }
    }
    result.push(`${input[i]} ${count}`)
}

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

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

[개발일지] - 65(주말)  (0) 2023.09.03
[개발일지] - 64(주말)  (0) 2023.09.02
[개발일지] - 62  (0) 2023.08.31
[개발일지] - 61  (0) 2023.08.30
[개발일지] - 60  (0) 2023.08.29

+ Recent posts