💪 반성 또 반성

무언가 확실하게 행동하고 싶은데, 잘 못하는 것 같다.

해야 할 일들이 분명히 존재하는데 스스로 그 일들을 미루기도 하고, 친구들과 약속을 잡았는데 그 약속을 번복하기도 하고…

과거의 안 좋은 습관들을 아직도 가지고 있다. 벗어 버리고 싶지만, 무슨 애벌레가 나비 되는 것처럼 사람은 바로 변화할 수 없는 건 알고 있다.

그래서 매 순간순간 의식적으로 내가 하는 말, 행동을 인지하는 게 너무나도 중요함을 다시 한번 되새기게 되었다.

그리고 또 한 번 다짐을 하게 되었다. 2022년에는 해야 할 일들을 미루지 말고 그냥 하자고, 스스로 타협하지 말고 아주 작더라도 행동하자고 어차피 한 번 사는 인생, 누구도 책임져 주지 않고 내가 내 발로 걸어가야 하는 거니깐… 힘들어도 정신만큼은 제대로 차리자 이번 한 주도 고생했다.



😱 예외 처리

이번 한 주는 개인적으로 너무나도 빡센 한 주였다. 그랬던 가장 큰 이유는, 사용자들이 가장 많이 접하는 로그인, 회원가입 관련된 로직 내부에 에러 핸들러를 하지 않고 배포했기 때문이다.

사실 이건 정말 나의 큰 실수였다. 관련 로직을 수정하는 작업을 저번 주말과 이번 주 중에 야근을 통해 어떻게든 예외 처리를 추가해 다시 재 배포하게 되었다. 이 과정에서 정말 많이 배웠던 것 같다. 특히 try...catch 함수 안에 await로 한 단계식 함수를 호출하는 과정에서 만약에 await한 함수에서 예러가 발생하면 catch문 안의 코드가 실행되는데 이때, await로 호출한 함수의 에러 핸들러를 어떻게 해야할 지 많은 고민이 있었지만, 아직 해결을 하지 못해 결국 밑에 코드처럼 특정 함수 실행시키고 then...cath로 일일히 분기 마다 에러 핸들러를 했다.

팀장님께서 콜백 지옥이 있을 수 있으나 특정 상황에서는 밑에처럼 불가피한 경우가 존재한다고 말씀을 해주셨지만, 그래도 다른 사람이 밑에 코드를 이해하고 수정하는 데 있어서는 많이 비효율적일 것 같다.

A()
  .then((Aing)) => {
    B().then((Bing) => {

    }).catch((Berror) => {
      // B함수 에러 핸들러
    })
  })
  .catch((Aerror) => {
    // A함수 에러 핸들러
  });

지금 위의 코드를 어떻게 하면 가독성 있고 예외처리를 깔끔하게 할 수 있을지 밑에 코드처럼 테스트 진행은 하고 있다. 물론 밑에 코드가 정답일지 아닐지는 모르겠지만 계속 구글링하면서 이번 기회에 Promise, try-catch, Error 핸들러에 대해 알게되는 시간이였다.

async function clickLoginBtn() {
  try {
    await A();
    await B();
  } catch {
    console.error('로그인 진행시 에러가 발생했어요');
  }
}

function A() {
  try {
    // A 코드 실행
  } catch {
    // A 에러 핸들러
  }
}

function B() {
  try {
    // B 코드 실행
  } catch {
    // B 에러 핸들러
  }
}

이 글을 작성 후에 위 코드를 테스트 해보면서 수정 하였다. 위 코드를 진행하게 되면 예를 들어 A() 함수에서 에러가 발생해도 밑에 B()함수가 실행되는 문제가 발견되었다. 그러나 밑에 코드 처럼 resolve, rejcect로 결과 값과, 에러를 핸들링 한 뒤에 반환하면 에러가 발생한 함수 밑에 코드들은 실행이 되지 않는 걸 알게 되었다.

async function clickLoginBtn() {
  try {
    const resultA = await A();
    console.log(resultA);
    await B();
    console.log('여기 실행됨?');
  } catch (error) {
    console.log('클릭에러', error);
  }
}

function A() {
  return new Promise((resolve, reject) => {
    try {
      resolve('A완료');
    } catch {
      reject('A에러 핸들러');
    }
  });
}

function B() {
  return new Promise((resolve, reject) => {
    try {
      throw new Error('B에러 발생');
      resolve('B완료');
    } catch {
      reject('B에러 핸들러');
    }
  });
}


🌈그래도 지나간다.

이번 주를 되돌아보며 힘든 일도, 기쁜 일도 있었다. 그 과정 속에서 솔직히 나는 일희일비 했던 것 같다. 그래서 더 몸과 마음이 지쳤던 건 아닐까 싶다. 다음부터는 조금 더 차분히 삶을 살아가는 자세가 필요한 것 같다.



어느날 이스라엘의 다윗 왕이 반지 세공사를 불러 “날 위한 반지를 만들되, 거기에 내가 큰 전쟁에서 이겨 환호할 때도 교만하지 않게 하며, 내가 큰 절망에 빠져 낙심할때 좌절하지 않고 스스로 새로운 용기와 희망을 얻을 수 있는 글귀를 새겨넣어라!”라고 지시하였다. 이에 반지 세공사는 아름다운 반지를 만들었으나, 빈 공간에 새겨 넣을 글귀로 몇 날 며칠을 고민하다가 현명하기로 소문난 왕자 솔로몬에게 간곡히 도움을 청한다.

그때 솔로몬 왕자가 알려준 글귀가 바로… 이것 또한 지나가리라



도움 되었던 자료

1. 포프TV - 버그가 생기는 이유와 기초 예방법
-> (https://www.youtube.com/watch?v=4_PR9F9aLcw)

2. 캡틴 판교 - 자바스크립트 asyncawait
-> (https://joshua1988.github.io/web-development/javascript/js-async-await/)