-
개발자가 어려운 문제를 맞딱드렸을 때개발일지 2024. 1. 18. 22:26728x90
- 개발을 하다 보면 크고 작은 문제들을 만나게 된다. 이러한 문제들을 만났을 때 어떻게 대처하면 좋을까?
- 문제가 발생하게 된 배경, 원인이 있다. 원인과 배경을 빠르게 발견할 수 있다면 우리는 어떤 문제든 해결할 수 있게 된다.
- 어려운 문제들은 배경, 원인을 발견하기가 어렵기에 더욱이 해결책이 나오지 않는다.
- 이번 포스팅에서는 어려운 문제의 배경, 원인을 발견하고 나아가 해결하는 방법을 경험해 본 내용을 토대로 적어보았다.
문제) 특정 상황에 콘솔 창에는 어떠한 에러도 없이 채팅이 멈추고 동작하지 않는 문제가 발생했다.
- Error가 없이 원하는 동작을 하지 않을 때 이 문제가 보통이 아님을 감지한다. 어디서 멈췄는지 조차 알 수 없다.
Q. 재현경로와 보면서 어떤 문제가 발생하는가?
A. 로그아웃 후 로그인 시에 채팅이 동작하지 않는 문제 발생
- 로그인 시에 채팅에 다시 붙을 때 발생.
- 로그아웃 후 로그인 시 호출하는 함수를 확인
- 호출하는 함수의 비즈니스로직을 따라가며 순서대로 로깅하기
문제가 무엇인지부터 정의해야 한다. 코드를 진단해야 한다. 동작하는 코드를 하나씩 따라가면서 순서대로 로그를 찍어보자(함수 앞뒤로 찍어본다).
console.log('@@ check 1 로그인 시 채팅 연결') console.log('@@ check 2 채팅 로그인') console.log('@@ check 3 채팅 채널 입장')
- 로그가 순서대로 동작하고 있는가? 로그가 마지막까지 다 찍혔는가? 어디까지 로그가 찍혔는지 확인해 보자.
- 어디서 문제가 발생하는지 확인 해보자. ( 바로 채팅 재연결시에 promise가 pending 되고 처리를 기다리고 있다는 것을 확인. promise가 resolve가 되고 있지 않음. 어디서 resolve가 되지 않는지 reconnect 함수 내부에 로깅을 해보자. 채팅 reconnect는 join channel 패킷을 받아야만 resolve 된다. 확인해 보니 사내 채팅 정책임을 알 수 있었다. )
Q2 왜 reconnect 이후에 join channel 패킷이 안내려 오고 있는가?
A2 채팅서버에서 패킷을 내려주지 않은 채팅 연결시 유효한 데이터를 전달하지 않았기 때문이다.
- 채팅서버에서 패킷을 내려주지 않은 이유는 채팅서버만 알기 때문에 채팅 서버 담당자에게 먼저 물어보자.
- 유효하지 않은 데이터가 무엇인지 확인해서 전달 하여 유효하지 않은 데이터를 분석한다.
- 채팅 담당자는 티켓이라는 파라미터가 잘못 들어오고 있다고 답변을 받았다.
Q3 왜 티켓이라는 데이터는 어떻게 만들어지고, 왜 잘못 들어갔는가?
A3 로그인 시에 티켓(로그인 정보)가 이전 데이터로 전달이 되어서 잘못 들어감.(타이밍 이슈)
- 채팅 reconnect 하기 바로 직전에 티켓값을 갱신하여 문제를 해결했다.
문제를 보고 끊임없이 질문을 던지고 스스로 답을 찾아가는 과정에서 우리는 문제해결능력을 배울 수 있었다.
문제해결능력의 핵심은 문제의 발생 원인을 발견하는 것이고.
발생 원인을 발견하기 위해서 흐름과 동작을 이해해해야 한다.
흐름과 동작을 이해하고 확인 하기 위해서 로깅을 하여 발생 원인을 좁혀나간다.
흐름 속에서 문제의 근원지를 찾았다면. 인풋(파라미터)과 아웃풋(결과)이 정상적으로 들어갔는지를 확인해 보자. 일반적으로 정상적인 인풋값이 들어가지 않았기 때문에 원하지 않는 아웃풋이 나온 것이므로. 인풋 값을 추적해서 정상적인 값이 들어갔는지. 확인할 수 있다.
정리하면 우리는 매 순간 문제를 만난다. 어떻게 문제를 쉽게 해결할 수 있을지에 대해 고민을 하지만. 왕도는 없다. 그저 하나씩 따라가 보며 문제의 원인을 발견하고 수정하는 방법 말고는 없다. 그대가 생각한 그 방식이다. 그저 버티고 하는 수밖에는 없다.
이렇게 보니 문제를 해결하는 해결사들은 문제를 집요하게 물고 늘어지는 사람이지 않을까? 어떤 문제가 와도 집요하게 뚫어져라 보고 해결하는 습관을 들이자.
728x90'개발일지' 카테고리의 다른 글
개발자가 회의에서 살아남는 3가지 방법 (2) 2024.01.11 [nwitter] #2 개발일지 (0) 2021.10.08 [nwitter] #1 개발일지 (0) 2021.10.06 [191226] 개발일지 (0) 2019.12.26 [191224] 개발일지 (0) 2019.12.24