이번주 월요일에 Next step에서 진행한 이펙티브 디버깅 강의를 듣고 실습을 진행했다.
그런데 실습 바로 다음날 회사에서 디버깅할 일이 생겼다.
좋은 기회라고 생각하고 강의에서 배운 사고 프레임워크대로 디버깅을 해결해보았다.
given
모바일 프로필 생성 및 수정 화면에서 이미지 수정 버튼을 누르고
when
앨범으로 이동을 클릭 시
then
앨범으로 이동해야 한다.
given
모바일 프로필 생성 및 수정 화면에서 이미지 수정 버튼을 누르고 앨범으로 이동을 클릭해 앨범으로 이동했을 때
when
앨범에 있는 사진을 클릭 시
then
원래 화면으로 돌아오고 선택한 사진이 프로필에 적용되어야 한다.
given
모바일 채팅방 생성 및 수정 화면에서 이미지 수정 버튼을 누르고
when
앨범으로 이동을 클릭 시
then
앨범으로 이동해야 한다.
given
모바일 프로필 생성 및 수정 화면에서 이미지 수정 버튼을 누르고
when
앨범으로 이동을 클릭 시
then
앨범으로 이동해야 한다.
1, 2는 팀원에게 얻은 정보를 이용해서 원인을 파악했고 3 ~ 7번째 가설은 가능한 상황을 추가로 생각했다.
핸드폰 갤러리로 이동하기 위한 메시지 이름을 변경한다면 재현환경의 3번 과정까지 진행시 핸드폰 갤러리로 이동할 것이다.
//before
messageAPI('startAlbumview');
//after
messageAPI('startAlbumView');
핸드폰 갤러리에서 받아온 이미지를 화면에 적용하기 위해 추가로 startAlbumViewResult 이벤트 리스너를 등록하면 성공적으로 이미지를 받아올 것이다.
//before
window.addEventListener('message', ({messageType, ...})=>{
if(messageType === 'setOnCapture'){
...
}
});
//after
window.addEventListener('message', ({messageType, ...})=>{
if(messageType === 'setOnCapture'){
...
return;
}
if(messageType === 'startAlbumViewResult'){
...
return;
}
});
여기까지 가설대로 프로그램이 동작했다.
const eventListenerList = {
setOnCapture:setOnCaptureEventHandler,
startAlbumViewResult:startAlbumViewResultEventHandler,
}
window.addEventListener('message', ({messageType, ...args})=>{
eventListenerList?.[messageType](args);
});
분기 처리되어 있던 이벤트 로직을 함수 및 객체로 분리하고 메시지 타입에 맞게 이벤트 리스너를 실행하도록 했습니다.
가설대로 업로드에 실패했다.
//before
const ACCEPTABLE_IMAGE = [
'image/png',
'image/jpeg',
'image/jpg',
];
//after
const ACCEPTABLE_IMAGE = [
'image/png',
'image/jpeg',
'image/jpg',
'image/PNG',
'image/JGEG',
'image/JPG',
];
가설대로 대문자 확장자도 이미지 업로드에 성공했다! 이슈 마무리 ~