Etc

외부 api 코드 적용 후 예외처리 부족,,,,

nam-willow 2024. 12. 22. 01:41

설명하기 앞서 _외부 회사의 명칭을 willow(가명)_라고 말하도록 하겠음

  • willow 회사와 협업하여 willow-api를 사용.
  • willow-db를 공유해서 우리 서비스에서 데이터가 바뀌면 willow의 db가 변경되는 api를 작성해야하는 상황.
  • willow를 사용하는지 안하는지에 대한 구분을 통해서 willow db가 수정된다.

상황

    • willow api 사용 기능을 추가 후 유저 추가, 수정, 삭제, 등의 기능에 willow db 데이터도 수정되게 코드 수정을 한다.
    • 유저의 경우 만1세 이상이 아니면 willow 사용이 되지 않아서 만0세인 경우에는 강제로 willow db에 만, 년도를 -1을 만들어주기로 했다.

ex) 2024-01-01년생 → 2023-01-01년생으로 willowdb에만 저장

  •  

 

오류

willow 코드를 적용한 유저 삭제 부분에서 오류가 발생했다.


원인1 : willow 를 사용하지 않았을때 test 부족

수정전

USING_HC_YN 가 없는 상황에서는 오류가 발생한다. 그러니 옵셔널 체이닝을 사용해서 작성해주면 좋다.

if (willowData.USING_YN === "Y") {

수정 후

옵셔널 체이닝을 사용하면 없는경우에도 비교가 가능해서 오류를 방지할 수 있다.

if (willowData?.USING_YN === "Y") {



해결

        /*****************************************************
         *             willow DB 정보 업데이트
         *****************************************************/
        const willowCheckInfo = {
          country_code,
          id,
        };
        // willow사용 확인
        const willowData = await services.willowCheck(
          willowCheckInfo
        );

        // willow db정보 업데이트
        if (willowData?.USING_YN === "Y") {
          try {
            await willow.updateInfo(willowData);
          } catch (error) {
            try {
              // willow 오류 기록
              await models.insertLog(
                id_num,
                req.body,
                error,
                req.originalUrl,
                "UPDATE"
              );
            } catch {
              // 오류 LOG 저장시에 발생하는 오류는 무시
            }
          }
        }



원인2: 생년월일이 없을때의 예외처리 부족

생년월일은 입력하지 않은 경우에 오류가 발생항 예외처리가 없었음

수정 전

생년월일에 대한 내용을 if 밖에서 작성해서 willow를 사용하지 않는 경우 검증을 안해봐서 오류가 발생함

    if (USING_YN === "Y") {
      willowData = await models.readStudentInfo(params, Id);
    }
    // ★ 생년월일 검증 및 수정 코드 if 밖에 있음
    willowData.birthday = util.birthdayCheckForWillow(willowData.birthday);

수정 후

    // willow 저장하기 위한 학생정보 조회
    if (USING_YN === "Y") {
      willowData = await models.readStudentInfo(params, Id);

      // ★willow를 사용하는 if문 안에서 birth를 검증하는 코드 추가
      if (willowData?.birthday) {
        willowData.birthday = util.birthdayCheckForWillow(willowData.birthday);
      }

    }



코드 작성시 가독성 항상 생각하기

내가 작성코드

  willowStudentCheck: async (params, Id) => {
    let willowData = {};

    // willow 사용 YN (USING_YN)
    const { USING_YN } = await models.readWillow(params);

    // willow 저장하기 위한 유저정보 조회
    if (USING_YN === "Y") {
      willowData = await models.readInfo(params, Id);
      if (willowData?.birthday) {
        // 만0세 라면 만1세로 변경
        willowData.birthday = util.birthdayCheck(willowData.birthday);
      }
    }
    willowData.USING_YN = USING_YN;
    return willowData;
  },

팀장님 가독성 개선 코드

  willowStudentCheck: async (params, Id) => {
    // 도장 willow 기기 사용 YN (USING_HC_YN)
    const { USING_YN } = await dojangModels.readDojangWillow(params);

    // willow o
    if (USING_YN === "Y") {
      const willowData = await models.readInfo(params, Id);
      if (willowData?.birthday) {
        // 만0세 라면 만1세로 변경
        willowData.birthday = util.birthdayCheck(willowData.birthday);
      }
      return { USING_YN, ...willow };
    }

    // willow x
    else {
      return { USING_YN };
    }
  },

'Etc' 카테고리의 다른 글

NAS 연결 하기  (0) 2025.04.04
구글 OAuth 사용방법2 - 클라이언트 ID와 Password 만들기  (0) 2024.12.23
구글 OAuth 사용방법1 - 준비단계  (0) 2024.12.23
라이브러리 충돌....  (0) 2024.12.21