템플릿에 pdf 출력이 되지 않는 문제가 발생했고 글꼴 관련 에러인 것 같은데 자세히 확인해보니

회사에서 기본 제공하는 템플릿을 사용할 때 SalesforceSans라는 기본 글꼴을 사용하지 않으면

다른 글꼴들은 지원되지 않아서 에러가 발생하는 문제였다.

 

일단 글꼴을 기본 글꼴로 변경해주려고 했지만

이미 있는 전체 rich text를 선택 후 글꼴 변경을 시도해도 적용되지 않았고

그 이후에는 라인별로 글꼴 변경을 시도하고 글자로 변경을 시도해도 되지 않았다.

 

원인은 모르겠지만 일단 되지 않기 때문에 방법을 고민하다가

현재 있는 내용을 전부 복사한 다음 메모장에 옮겨두고

글꼴을 선택해둔 상태에서 붙여넣으니 정상적으로 글꼴이 변경되는 것을 확인할 수 있었다.

 

S사에서는 자주 붙여넣기로 작성하는 문서기 때문에 이 개체에 대해서만이라도 글꼴 고정을 희망하셨지만

서식 있는 텍스트 편집기 내부 글꼴 제한 기능은 아무리 찾아봐도 없었다.

 

하지만 프론트엔드를 했던 입장에서 저장된 데이터를 보면 단순히 style을 입힌 것이기 때문에

rich text 내부의 font-family를 삭제해봤는데 다행히 정상적으로 동작했고

로직을 좀 더 고민하면서 style=””만 남겨도 에러가 발생하지 않는지도 확인했지만 정상 동작했다.

 

중간에 내가 관여하지도 않았던 인터페이스 에러 확인을 해달라고 요청하셔서

봤더니 간단한 에러라 쿼리와 에러에 대해 전달드린 다음 기본값 설정 방식을 고민했다.

 

여러가지 로직이 가능하겠지만 제일 좋은건 아무래도 정규식이었고

아래와 같이 트리거를 생성해서 font-family가 들어가는 경우 전부 지워버려서

기본값인 Salesforce Sans 폰트를 사용하게 만들었다.

Public without sharing class Object_tr extends TriggerHandler {
    public List<Object__c>        newObjList    {get; set;}
    public Map<Id, Object__c>     oldObj        {get; set;}

    public override void beforeInsert(){
        System.debug('■ Object_tr> beforeInsert');
        this.newObjList  = (List<Object__c>)     Trigger.new;
        this.oldObj      = (Map<Id, Object__c>)  Trigger.oldMap;
        changeFont(this.newObjList);
    }

    public override void beforeUpdate(){
        System.debug('■ Object_tr> beforeUpdate');
        this.newObjList  = (List<Object__c>)     Trigger.new;
        this.oldObj      = (Map<Id, Object__c>)  Trigger.oldMap;
        changeFont(this.newObjList);
    }

    Public void changeFont(List<Object__c> oList) {
        Pattern fontFamilyPattern = Pattern.compile('font-family:[^;]*;');
    
        for (Object__c record : oList) {
            if (String.isNotBlank(record.Contents__c)) {
                record.Contents__c = fontFamilyPattern.matcher(record.Contents__c).replaceAll('');
            }
            if (String.isNotBlank(record.Contents2__c)) {
                record.Contents2__c = fontFamilyPattern.matcher(record.Contents2__c).replaceAll('');
            }
        }
    }
    
}

 

중간에 도저히 이해가 안되는 일이 발생했다고 팀원분이 문의를 주셨는데

고객사에서는 에러가 발생한다고 하는데 본인이 하면 된다고 하셔서 가장 먼저 권한을 떠올렸지만

문의를 준 사용자의 계정으로 발송 테스트 후 정상 전송이 되었다고 하셨고

그렇다면 발생할 이유가 없을 것 같지만 로그를 찍어서 역추적을 해보자고 했다.

 

로그를 찍기 전부터 이미 역으로 가다보니 아우라가 나타났고

아우라 내부에서는 화면단에서 값을 가져오는 부분이 있는데 그 값이 전달되지 않은 것인데

보자마자 다우오피스 전송을 시도할 때 발생한 문제와 거의 똑같다는 것을 알 수 있었다.

 

js에서 로딩을 할 경우 값이 전달되기 전에 다음을 누르면 null값이 넘어가는 문제로

단순히 고객사에서는 로딩이 다 되기 전에 다음 버튼을 눌러서 해당 값이 전달되지 않았고

팀원분은 정상적인 처리 절차에 따라서 진행했기 때문에 괜찮았던 것이었고

로그를 통해 팀원분도 빠르게 진행 후 동일 에러를 재현하고

그 레코드로 다시 천천히 해서 정상 처리가 되는 모습을 본 다음 고객사에 안내하는 방식으로 마무리했다.

 

사실 다우오피스 에러가 발생할 당시에도 상당히 황당했었는데

코드와 다른 부분들에서도 에러가 발생할 수 있다는 열린 마음을 가지고 개발해야 할 것 같고

이전 경험들을 빠르게 떠올려서 새로운 문제가 발생해도 바로 해결할 수 있었다는 것은 마음에 들었다.

 

유지보수쪽 문의가 갑자기 마구 들어왔는데

신기하게도 SAP쪽에서 판매주문이 복제된 것으로 추정되는 에러와

SAP에서 생성하고 SFDC에서 복제한 것으로 추정되는 에러 두가지였지만

발생 시기도 달랐고 문의주신 분도 다른데 두건 다 비슷한 시기에 문의가 들어왔다.

 

원인 파악은 로그를 통해 확인해보니 하나는 key값을 동일하게 가지고 있어 파악하기 쉬웠고

다른 하나는 둘다 key가 없지만 대체 key로 사용하는 값이 들어간 레코드가 SFDC에 두개 있었다.

 

둘 다 원인과 해결 방법에 대해 안내드렸지만

SFDC에 두개가 있는 경우에는 권한 문제로 처리되지 않는다고도 하고

납품, 출고가 서로 다른 개체에 엮여있기 때문에 하나를 지우기도 애매한 상태가 되어버렸고

내가 연결된 id들을 수동으로 교체해서 처리해보기로 했지만

기존 개발건 테스트를 진행중이었기 때문에

마감기한에 대해 문의 후 급하지 않다고 하셔서 내일 오전에 시도해보기로 했다.

 

글꼴변경 트리거 테스트를 해보고

테스트클래스까지 작성해서 운영에 배포한 다음 6시 10분쯤 퇴근했다.

 

 

(1).백준 23825번 SASA 모형을 만들어보자는 S와 A 2개씩 필요한 모형을 만들 수 있는 개수를 구하는 문제로

둘 중 적은 개수에서 2를 나눈 몫을 출력하는 방식으로 해결했다.

const input = `4 5`.split(' ')

console.log(Math.floor(Math.max(input[0], input[1]) / 2))

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

[개발일지] - 666  (0) 2025.04.30
[개발일지] - 665  (0) 2025.04.29
[개발일지] - 663(주말)  (0) 2025.04.27
[개발일지] - 662(주말)  (0) 2025.04.26
[개발일지] - 661  (0) 2025.04.25

+ Recent posts