에러가 발생할 경우 메일 발송으로 대처를 한다는 이야기는 들었지만
아직 작업을 시작할 계획도 없었는데 오전부터 또 에러가 발생해 있었다.
문제는 복합적이었는데 일단 200여개의 파일 뭉탱이가 들어온 것도 문제였지만
자바서버가 죽어서 전달이 되지 않는 문제도 동시에 발생했다.
자바서버의 경우 로그가 길게 쌓여서 하나당 7~8기가까지 쌓였는데
그 로그 파일이 매일 누적되고 있었기 때문에 예전에 내가 확인했던 그 상태에서
오늘까지 누적되었는지 결국 자바서버 용량이 꽉 차버렸는데
운이 좋게도 내가 돌린 배치 부분에서 파일을 일부 생성 시도하다 터져버렸기 떄문에
매일 아침 점검을 하는 내가 빠르게 발견할 수 있었고 다른 사람들의 배치가 터지기 전에 정리됐다.
작업을 시작하려고 했는데 공개 그룹에 관리자들을 모아두고
해당 관리자들에게 메일/알람을 보내려고 헀는데 관리자가 지나치게 많이 들어있었고
원인 파악을 위해 자세히 알아보니 ‘Grant Access Using Hierarchies’에 의해 권한이 추가된 유저들이었다.
결론적으로는 Group의 DeveloperName을 기준으로 Group을 찾고
Group을 기준으로 GroupMember들을 가져온 다음
GroupMember의 Id들을 모아 User를 찾고
User의 Email을 모아서 EmailList에 담을 수 있었다.
Group groupObj = [SELECT Id FROM Group WHERE DeveloperName = 'GroupDevName' LIMIT 1];
List<GroupMember> gmList = [SELECT Id, UserOrGroupId FROM GroupMember WHERE GroupId = :groupObj.Id];
Set<String> IdList = new Set<String>();
for(GroupMember gm : gmList){
IdList.add(gm.UserOrGroupId);
}
List<User> userList = [SELECT Id, Email FROM User WHERE Id IN : IdList];
Set<String> emailList = new Set<String>();
for(User user : userList){
emailList.add(user.Email);
}
메일은 아래와 같이 테스트로 발송할 수 있었는데 위 코드와 조합해서 담당자에게 정상 전송이 가능했다.
Messaging.SingleEmailMessage sendEmail = new Messaging.SingleEmailMessage();
Set<String> emailList = new Set<String>();
emailList.add('test@email.com');
sendEmail.setToAddresses(new List<String>(emailList));
// sendEmail.setCcAddresses(new List<String>(eObj.ccAddresses));
// sendEmail.setInReplyTo(eObj.inReplyTo);
String subject = '[발송 테스트] 테스트 1';
sendEmail.setSubject(subject);
String host = URL.getSalesforceBaseUrl().toExternalForm();
String body = '<body style="font-size:10pt !important;font-family:맑은 고딕;">';
body += '<strong style="font-size:10pt !important;">';
body += ' Asset 자산으로 가기 : <a href="' + host + '/' + '0035g00001BbDuaAAF' + '" style="text-decoration-line: none;">바로가기</a>';
body += '</strong>';
body += '<br /> ';
body += '</body>';
sendEmail.setHtmlBody(body);
Messaging.sendEmail(new Messaging.SingleEmailMessage[] { sendEmail });
알림 또한 아래와 같은 방식으로 발송 확인을 진행했는데
CustomNotification을 생성해야 한다는 부분이 조금 특이했다.
Messaging.CustomNotification notification = new Messaging.CustomNotification();
Set<String> userIdSet = new Set<String>();
notification.setBody('내용');
notification.setTitle('제목');
notification.setSenderId(Userinfo.getUserId());
CustomNotificationType getCustomNotificationType = [SELECT Id
FROM CustomNotificationType
WHERE DeveloperName = 'Error_Notification'];
notification.setNotificationTypeId(getCustomNotificationType.Id);
notification.setTargetId('02i1y000000AATlAAO'); // target object id
userIdSet.add('0051y00000OFqCnAAL');
if(!Test.isRunningTest()){notification.send(userIdSet);}
어제 퇴근 전에 완성한 웹훅 3회 재시도를 운영에 반영하려고 했는데
트리거들 또한 전부 3회 관련 코드로 변경해야 했고 스케줄러도 배포해야 해서
생각보다 배포에 시간이 많이 걸렸다.
고객사에서 테스트를 진행할 수 있도록 자동화 트리거, 플로, 스케줄러 등에 ID 필터를 걸어주고
중간에 문의가 들어와서 화상으로 테스트 지원도 도와줬는데
생각보다 금방 테스트를 마무리할 수 있었다.
이메일 발송의 경우 오히려 개발서버에서 개발 후 발송이 되지 않았는데
해당 부분은 설정 → deliverability? 에서 모두 보내기로 변경하면 정상적으로 할 수 있었다.
중간에 질문을 받았는데
‘sfdc request not supported on this domain’ Enhanced Domains’에러의 경우
향상된 도메인 사용으로 인해 기존 도메인이 적용되지 않는다면 login.salesforce가 아니라
https://mydomainname--sandboxname.sandbox.my.salesforce.com/ 같은 주소를 써야 했다.
(1).백준 26502번 Decoder는 암호해독을 해야 하는 문제였는데
aeiouy 6글자를 다르게 바꿔야 했기 때문에 map을 사용했고
대문자 또한 같이 해야 했기 때문에 총 12개의 값을 변경해야 했다.
const input = `4
Wa most fend ynd dastriu Loka
Skuwylkar, bafira ha bacimas
ynithar Ibe-Wyn.
- Kuli Ran`.split('\n')
let result = []
const map = {y :'a', a : 'e', e : 'i', i : 'o', o : 'u', u : 'y', Y :'A', A : 'E', E : 'I', I : 'O', O : 'U', U : 'Y'}
for(let i = 1 ; i < input.length ; i++){
let str = ''
for(let j = 0 ; j < input[i].length ; j++){
if(map[input[i][j]] != null){
str += map[input[i][j]]
}
else{
str += input[i][j]
}
}
result.push(str)
}
console.log(result.join('\n'))
'회고' 카테고리의 다른 글
[개발일지] - 251 (1) | 2024.03.07 |
---|---|
[개발일지] - 250 (0) | 2024.03.06 |
[개발일지] - 248 (3) | 2024.03.04 |
[개발일지] - 247(주말) (0) | 2024.03.03 |
[개발일지] - 246(주말) (0) | 2024.03.02 |