apex 클래스를 만들고 lwc 임시 페이지를 만들어 데이터를 불러오는데
admin 상태에서는 데이터가 잘 불러와지지만
partner user 상태에서는 게시판에 모든 내용이 불러와지지 않았다.
이상하게도 호출부터가 문제였는데
어드민으로 접속할 때는 호출이 정상 작동하지만
어드민이 아닌 파트너 유저로 페이지에 접속할 경우
DML 관련 메서드 실행 자체 로그가 출력되지 않았다.
일단 빌더 페이지에 출력하기 위해서
하단의 코드를 메타 부분에 넣어서 어드민으로는 볼 수 있는데
롤 부분을 쿼리를 날릴 때 인지하지 못하는 것 같았다.
<masterLabel>BoardPostPage</masterLabel>
<targets>
<target>lightningCommunity__Page</target>
<target>lightningCommunity__Default</target>
</targets>
</LightningComponentBundle>
자러 가기 전 질문을 남기고 회고, 일기를 쓰려고 하는데
외국인들에게 질문을 남기는 사이에 한국 세일즈포스방에서 답변을 받을 수 있었다.
문제의 해결과는 관련없지만
디버그를 할 수 없는 문제는 계정 등록의 문제였는데
생각해보면 다른 계정에서 요청한 내용을 관리자에게 찍어줄 리가 없었다.
만약 그렇게 되면 수천명이 사용하는 사이트의 경우
관리자는 디버깅을 제대로 진행하기도 어려울 것이다.
문제를 해결하기 위해 setup의 Debug Logs에 들어가
해당 계정을 User Trace Flags에 등록했고 디버깅을 시작할 수 있었다.
하지만 디버깅을 시작했다고 해도 제대로 된 답변을 볼 수는 없었는데
아래의 내용이 내가 볼 수 있는 데이터의 전부였다.
57.0 APEX_CODE,DEBUG;APEX_PROFILING,INFO;CALLOUT,INFO;DB,INFO;NBA,INFO;SYSTEM,DEBUG;VALIDATION,INFO;VISUALFORCE,INFO;WAVE,INFO;WORKFLOW,INFO
21:18:48.0 (263554)|USER_INFO|[EXTERNAL]|0055i00000A4fXv|rgc0582@gmail.com|(GMT+09:00) Korean Standard Time (Asia/Seoul)|GMT+09:00
21:18:48.0 (316900)|EXECUTION_STARTED
21:18:48.0 (324011)|CODE_UNIT_STARTED|[EXTERNAL]|apex://BoardPostController/ACTION$getBoardPosts
21:18:48.0 (734119)|CODE_UNIT_FINISHED|apex://BoardPostController/ACTION$getBoardPosts
21:18:48.0 (745423)|EXECUTION_FINISHED
답답한 마음에 모든 로그 세팅을 최대치까지 출력하게 만들고 확인하니
아래와 같이 조금 더 힌트를 얻을 수 있었는데
57.0 APEX_CODE,FINEST;APEX_PROFILING,FINEST;CALLOUT,FINEST;DB,FINEST;NBA,FINE;SYSTEM,FINE;VALIDATION,INFO;VISUALFORCE,FINER;WAVE,FINEST;WORKFLOW,FINER
21:24:31.0 (691841)|USER_INFO|[EXTERNAL]|0055i00000A4fXv|rgc0582@gmail.com|(GMT+09:00) Korean Standard Time (Asia/Seoul)|GMT+09:00
21:24:31.0 (766566)|EXECUTION_STARTED
21:24:31.0 (777448)|CODE_UNIT_STARTED|[EXTERNAL]|apex://BoardPostController/ACTION$getBoardPosts
21:24:31.0 (1285994)|CODE_UNIT_FINISHED|apex://BoardPostController/ACTION$getBoardPosts
21:24:31.0 (1298877)|EXECUTION_FINISHED
21:24:31.1 (1910907)|CUMULATIVE_PROFILING_BEGIN
21:24:31.1 (1910907)|CUMULATIVE_PROFILING|No profiling information for SOQL operations
21:24:31.1 (1910907)|CUMULATIVE_PROFILING|No profiling information for SOSL operations
21:24:31.1 (1910907)|CUMULATIVE_PROFILING|No profiling information for DML operations
21:24:31.1 (1910907)|CUMULATIVE_PROFILING|No profiling information for method invocations
21:24:31.1 (1910907)|CUMULATIVE_PROFILING_END
No profiling information for SOQL operations 부분을 보고 뭔가 이거라는 생각이 들었고
해당 문제를 다시 검색해봤다.
대부분 쓸대 없는 내용이 많았지만
운 좋게 한명이 비슷한 경험을 했는데 동료 중 하나가 해당 액세스를 실수로 전체 제거했다는 내용이었고
해당 글을 보고 쿼리가 문제가 아니고 클래스가 문제였고
해당 클래스에 대한 액세스 권한을 주지 않았다는 사실을 알았다.
(여태 클래스 엑세스를 줄 일이 한번도 없어서 줘야 하는지도 몰랐다)
어쩐지 메서드 실행 자체가 되지 않는 문제가 발생하더니
결론적으로는 메서드는 커녕 해당 클래스 접근 권한이 없었던 것이었고
해당 권한을 프로필에 들어가 Enabled Apex Class Access 부분에서
생성한 클래스의 권한을 부여하니 정상적으로 작동하는 것을 볼 수 있었다.
기분이 좋아서 까먹고 넘어갈 뻔 했지만
해당 내용을 정리하면서 VIP가 아닌 Partner에게도 권한을 부여해서
시연 때 에러가 생길 수 있는 문제를 차단할 수 있었다.
디버그 사소한 문제라고 생각했지만
문제를 해결할 수 있는 결정적인 키를 제공할 수 있는 부분이기 때문에
디버깅을 할 수 없는 경우 왜 안되는지에 대해 고민해보는 것이 중요하다는 교훈을 얻었다.
(1).백준 8371번 Dyslexia는 각 문자를 비교해 다른 점이 몇번이나 발견되는지를 출력하는 문제였다.
각 문자의 길이가 같음이 보장되기 때문에
간단하게 첫 번째 문장의 길이까지의 인덱스를 모두 비교하며
서로 다를 경우 count를 1씩 증가시킨 다음 최종적으로 count를 출력하는 방식으로 해결했다.
const input = `21
JASIOJESTDYSLEKTYKIEM
JAsIOJSSTDXSIEKTYKLEM`.split('\n')
let count = 0
for(let i = 0 ; i < input[1].length ; i++){
if(input[1][i] !== input[2][i]){
count++
}
}
console.log(count)'회고' 카테고리의 다른 글
| [수습일지] - 66 (0) | 2023.05.31 |
|---|---|
| [수습일지] - 65 (0) | 2023.05.30 |
| [수습일지] - 63(주말) (0) | 2023.05.28 |
| [수습일지] - 62(주말) (0) | 2023.05.27 |
| [수습일지] - 61 (0) | 2023.05.26 |
