TIL | 입력값 예외 처리?

레이나·2025년 1월 24일

Today I Learned

목록 보기
35/47

[250124 금요일]

과제를 진행하면서 예외처리를 해야하는데 어떤 것들을 해야 하는것 인가...
떠오르는 예외처리는 많지 않아서 과제를 하면서 찾아봤다.

예외 처리시 유의 사항

  • 친절한 피드백 제공: 사용자에게 문제를 명확히 알라고 해결 방법 제시.
  • 다양한 테스트 케이스 : 다양한 입력값에 대해서 검증하여 안정성 확보.
  • 보안 고려: 사용자 입력값을 신뢰하지 말고 항상 검증.

작성한 코드와 목적에 따라서 예시코드와는 다르게 사용 되겠지만, 알아두면 다음 프로젝트때 참고 할 수 있도록 정리해본다.

입력 형식 오류

  • 사용자가 요구된 형식에 맞지 않는 잆력값을 제공하는 경우.
// 숫자 입력 형식 오류
function validateNumber(input) {
  if (isNaN(input)) {
    throw new Error("숫자를 입력해야 합니다.");
  }
  return true;
}

// 날짜 형식 오류 (yyyy-mm-dd)
function validateDate(input) {
  const datePattern = /^\d{4}-\d{2}-\d{2}$/;
  if (!datePattern.test(input)) {
    throw new Error("날짜는 yyyy-mm-dd 형식이어야 합니다.");
  }
  return true;
}

try {
  validateNumber("abc"); // Error: 숫자를 입력해야 합니다.
  validateDate("2023/01/01"); // Error: 날짜는 yyyy-mm-dd 형식이어야 합니다.
} catch (e) {
  console.error(e.message);
}

값의 범위

  • 입력값이 특정 범위 내에 있어야 하는 경우.
function validateMedal(medal) {
  if (medal < 0 || medal > 99) {
    throw new Error("메달의 갯수는 0에서 99 사이여야 합니다.");
  }
  return true;
}

try {
  validateMedal(110); // Error: 메달의 갯수는 0에서 99 사이여야 합니다.
} catch (e) {
  console.error(e.message);
}

빈 입력

  • 사용자가 입력을 비워놓았을 때.
function validateNotEmpty(input) {
  if (!input.trim()) {
    throw new Error("입력값이 비어있습니다.");
  }
  return true;
}

try {
  validateNotEmpty(""); // Error: 입력값이 비어있습니다.
} catch (e) {
  console.error(e.message);
}

필수 필드 누락

function validateRequiredFields(data, requiredFields) {
  requiredFields.forEach(field => {
    if (!data[field]) {
      throw new Error(`${field} 필드는 필수입니다.`);
    }
  });
  return true;
}

const formData = {
  name: "John",
  email: "",
};

try {
  validateRequiredFields(formData, ["name", "email", "age"]); // Error: email 필드는 필수입니다.
} catch (e) {
  console.error(e.message);
}

데이터 타입 불일치

  • 입력값의 데이터 타임이 에상과 다를 때.
function validateDataType(input, expectedType) {
  if (typeof input !== expectedType) {
    throw new Error(`입력값은 ${expectedType}이어야 합니다.`);
  }
  return true;
}

try {
  validateDataType(123, "string"); // Error: 입력값은 string이어야 합니다.
} catch (e) {
  console.error(e.message);
}

중복 입력

  • 사용자가 이미 존재하는 값을 다시 입력하려고 할 때.
const existingEmails = ["test@example.com", "hello@example.com"];

function validateUniqueEmail(email) {
  if (existingEmails.includes(email)) {
    throw new Error("이미 사용 중인 이메일입니다.");
  }
  return true;
}

try {
  validateUniqueEmail("test@example.com"); // Error: 이미 사용 중인 이메일입니다.
} catch (e) {
  console.error(e.message);
}

문자열 길이 제한

  • 입력값의 길이가 제한을 초과 할 때.
function validateStringLength(input, maxLength) {
  if (input.length > maxLength) {
    throw new Error(`입력값은 ${maxLength}자 이하이어야 합니다.`);
  }
  return true;
}

try {
  validateStringLength("This is a very long text", 10); // Error: 입력값은 10자 이하이어야 합니다.
} catch (e) {
  console.error(e.message);
}

위 사항들 외에도 여러 예외처리들이 있겠지만, 작업해본 프로젝트들에서는 사용해 봤던 예외처리 했었던 케이스를 기록해뒀다.
이런 예외 처리 케이스들은 필요해서 사용했을 때, 그리고 웹페이지를 이용하면서 등장할 때 자료들을 잘 모아뒀다가 나중에 필요할 때 꺼내 써야지!

profile
one setp

0개의 댓글