중복된 예외처리, 미들웨어로 처리

배병일 ㅣ 2023. 9. 25. 19:37

CRUD를 구현하면서 예외처리를 하는데 이때 중복되는 예외처리가 발생된다.

이를 객체 지향 프로그래밍의 상속성을 향상 시키고 Clean Code 작성을 위해 미들웨어로 처리해주었다.

기존 예시 코드


Test1 = async (t1, t2, t3, t4) => {
    try {
      if (!t1) {
        return {
          status: 400,
          message: 't1 미입력',
        };
      }
      if (!t2) {
        return {
          status: 400,
          message: 't2 미입력',
        };
      }
      if (!t3) {
        return {
          status: 400,
          message: 't3 미입력',
        };
      }
      if (!t4) {
        return {
          status: 400,
          message: 't4 미입력',
        };
      }
      const result = await this.testRepository.Test1(t1, t2, t3, t4);
      }
      return {
        status: 200,
        message: result,
      };
    } catch (err) {
      return { status: 500, message: 'Server Error' };
    }
  };
  
  Test2 = async (t1, t2, t3, t4) => {
    try {
      if (!t1) {
        return {
          status: 400,
          message: 't1 미입력',
        };
      }
      if (!t2) {
        return {
          status: 400,
          message: 't2 미입력',
        };
      }
      if (!t3) {
        return {
          status: 400,
          message: 't3 미입력',
        };
      }
      if (!t4) {
        return {
          status: 400,
          message: 't4 미입력',
        };
      }
      const result = await this.testRepository.Test2(t1, t2, t3, t4);
      }
      return {
        status: 200,
        message: result,
      };
    } catch (err) {
      return { status: 500, message: 'Server Error' };
    }
  };

Test1 이라는 함수와 Test2라는 함수가 존재하고
두 함수 모두 t1 , t2 , t3 , t4를 인자로 받는다.

 

이때 각 인자를 받지 못했을 때 예외처리를 하는게

 

현재는 함수가 2개 뿐이라 길지 않지만 많은 함수가 같은 인자를 받고 이를 각자의 함수에서 예외처리 할 경우

 

코드가 엄청 길어지고 중복된 코드라 가독성이 떨어진다.

 

Clean code 작성과 객체 지향 프로그래밍을 위해선 코드의 재사용성 향상 시켜야 하기 때문에

 

하나의 미들웨어로 처리해야한다.

개선 예시 코드


Test1 = async (t1, t2, t3, t4) => {
    try {
      await this.Test3(t1, t2, t3, t4);
      const result = await this.testRepository.Test1(t1, t2, t3, t4);
      return {
        status: 200,
        message: result,
      };
    } catch (err) {
      return { status: 500, message: 'Server Error' };
    }
  };
  
Test2 = async (t1, t2, t3, t4) => {
    try {
      await this.Test3(t1, t2, t3, t4);
      const result = await this.testRepository.Test2(t1, t2, t3, t4);
      return {
        status: 200,
        message: result,
      };
    } catch (err) {
      return { status: 500, message: 'Server Error' };
    }
  };
  
Test3 = async (t1, t2, t3, t4) => {
    try {
    if (!t1) {
          return {
            status: 400,
            message: 't1 미입력',
          };
        }
        if (!t2) {
          return {
            status: 400,
            message: 't2 미입력',
          };
        }
        if (!t3) {
          return {
            status: 400,
            message: 't3 미입력',
          };
        }
        if (!t4) {
          return {
            status: 400,
            message: 't4 미입력',
          };
        }
    } catch (err) {
      console.log(err)
      return { status: 500, message: 'Server Error' };
    }
}

Test3이라는 함수를 만들어 중복된 예처리를 하도록 만들었고

 

Test1 , Test2 함수에서는 Test3함수를 미들웨어로 사용하여 예외처리하도록 만들어줬다.

 

이는 CRUD 뿐만 아니라 코드를 작성하다보면 중복되는 로직이 발생할 때 꼭 이런 식으로 만들어주는게 좋다.

'긁적..' 카테고리의 다른 글

쿠키와 세션  (0) 2024.02.16
rest api  (0) 2024.02.15
MVC 패턴  (0) 2023.08.17
8딱8딱 KPT회고  (0) 2023.08.14
SpartaTeam_8딱8딱 SA  (0) 2023.08.07