JAVASCRIPT · 심층 가이드
JavaScript 에러 처리 완전 정리
try/catch 한 겹으로 버티는 대신 사용자 정의 오류, 입력 가드, Result 반환, 다단계 검증으로 실패를 설계하는 JavaScript 코드 15편입니다.
JavaScript는 무엇이든 던질 수 있습니다. 문자열도, 숫자도, undefined도 throw의 대상이 됩니다. 그래서 catch (e) 안에서 e.message를 읽는 순간 또 다른 예외가 나는 코드가 심심찮게 나옵니다. 함수 시그니처에 어떤 오류가 나오는지 적을 자리도 없으니, 호출자는 문서나 코드를 직접 읽기 전에는 알 방법이 없습니다. 실패의 형태를 스스로 규정해야 하는 언어라는 뜻입니다.
try catch 기본에서 출발하되 사용자 정의 오류로 곧장 넘어가는 편이 좋습니다. Error를 상속한 클래스를 만들어 두면 도메인 오류 표현과 오류 다시 던지기가 자연스럽게 이어지고, 어떤 실패를 삼키고 어떤 실패를 올려보낼지 기준이 생깁니다. 검증 쪽은 입력 가드로 좁게 막고 다단계 검증으로 여러 규칙을 모으며, Result 반환은 예외 대신 값으로 실패를 표현하는 대안입니다.
놓치기 쉬운 부분이 finally 정리의 우선순위입니다. finally 블록 안에서 return이나 throw를 하면 try에서 결정된 반환값과 예외를 덮어써 버립니다. 리소스 해제 도중 실패한 오류가 원래 오류를 통째로 지우는 셈입니다. 원인을 남기려면 new Error(msg, { cause: err })로 연결하는 편이 낫습니다. parseInt("12abc")가 조용히 12를 돌려준다는 점도 안전한 숫자 파싱이 별도 항목인 이유입니다.
01try catch 기본
JavaScript에서 try catch 기본 개념을 코드로 빠르게 확인하는 에러 처리 예제입니다.
JavaScript code
// try catch 기본
try {
JSON.parse("{");
} catch (error) {
console.log(error instanceof Error ? error.message : String(error));
}실패를 잡는 것에서 끝내지 말고, 기록하고 복구하는 흐름까지 같이 읽는 것이 중요합니다.
에러를 잡기만 하고 아무 처리도 하지 않으면 문제는 숨어 있고 복구는 더 어려워집니다.
02사용자 정의 오류
JavaScript에서 사용자 정의 오류 개념을 코드로 빠르게 확인하는 에러 처리 예제입니다.
JavaScript code
// 사용자 정의 오류
function requireName(name) {
if (!name.trim()) throw new Error("name required");
return name;
}
console.log(requireName("Ada"));실패를 잡는 것에서 끝내지 말고, 기록하고 복구하는 흐름까지 같이 읽는 것이 중요합니다.
에러를 잡기만 하고 아무 처리도 하지 않으면 문제는 숨어 있고 복구는 더 어려워집니다.
03입력 검증
JavaScript에서 입력 검증 개념을 코드로 빠르게 확인하는 에러 처리 예제입니다.
JavaScript code
// 입력 검증
const parseNumber = (value) => {
const parsed = Number(value);
return Number.isNaN(parsed) ? null : parsed;
};
console.log(parseNumber("3"));실패를 잡는 것에서 끝내지 말고, 기록하고 복구하는 흐름까지 같이 읽는 것이 중요합니다.
에러를 잡기만 하고 아무 처리도 하지 않으면 문제는 숨어 있고 복구는 더 어려워집니다.
04안전한 숫자 파싱
JavaScript에서 안전한 숫자 파싱 개념을 코드로 빠르게 확인하는 에러 처리 예제입니다.
JavaScript code
// 안전한 숫자 파싱
function assert(condition, message) {
if (!condition) throw new Error(message);
}
assert(true, "must be true");실패를 잡는 것에서 끝내지 말고, 기록하고 복구하는 흐름까지 같이 읽는 것이 중요합니다.
에러를 잡기만 하고 아무 처리도 하지 않으면 문제는 숨어 있고 복구는 더 어려워집니다.
05안전한 나눗셈
JavaScript에서 안전한 나눗셈 개념을 코드로 빠르게 확인하는 에러 처리 예제입니다.
JavaScript code
// 안전한 나눗셈
try {
JSON.parse("{");
} catch (error) {
console.log(error instanceof Error ? error.message : String(error));
}실패를 잡는 것에서 끝내지 말고, 기록하고 복구하는 흐름까지 같이 읽는 것이 중요합니다.
에러를 잡기만 하고 아무 처리도 하지 않으면 문제는 숨어 있고 복구는 더 어려워집니다.
06finally 정리
JavaScript에서 finally 정리 개념을 코드로 빠르게 확인하는 에러 처리 예제입니다.
JavaScript code
// finally 정리
function requireName(name) {
if (!name.trim()) throw new Error("name required");
return name;
}
console.log(requireName("Ada"));실패를 잡는 것에서 끝내지 말고, 기록하고 복구하는 흐름까지 같이 읽는 것이 중요합니다.
에러를 잡기만 하고 아무 처리도 하지 않으면 문제는 숨어 있고 복구는 더 어려워집니다.
07오류 다시 던지기
JavaScript에서 오류 다시 던지기 개념을 코드로 빠르게 확인하는 에러 처리 예제입니다.
JavaScript code
// 오류 다시 던지기
const parseNumber = (value) => {
const parsed = Number(value);
return Number.isNaN(parsed) ? null : parsed;
};
console.log(parseNumber("7"));실패를 잡는 것에서 끝내지 말고, 기록하고 복구하는 흐름까지 같이 읽는 것이 중요합니다.
에러를 잡기만 하고 아무 처리도 하지 않으면 문제는 숨어 있고 복구는 더 어려워집니다.
08도메인 오류 표현
JavaScript에서 도메인 오류 표현 개념을 코드로 빠르게 확인하는 에러 처리 예제입니다.
JavaScript code
// 도메인 오류 표현
function assert(condition, message) {
if (!condition) throw new Error(message);
}
assert(true, "must be true");실패를 잡는 것에서 끝내지 말고, 기록하고 복구하는 흐름까지 같이 읽는 것이 중요합니다.
에러를 잡기만 하고 아무 처리도 하지 않으면 문제는 숨어 있고 복구는 더 어려워집니다.
09fallback 값 사용
JavaScript에서 fallback 값 사용 개념을 코드로 빠르게 확인하는 에러 처리 예제입니다.
JavaScript code
// fallback 값 사용
try {
JSON.parse("{");
} catch (error) {
console.log(error instanceof Error ? error.message : String(error));
}실패를 잡는 것에서 끝내지 말고, 기록하고 복구하는 흐름까지 같이 읽는 것이 중요합니다.
에러를 잡기만 하고 아무 처리도 하지 않으면 문제는 숨어 있고 복구는 더 어려워집니다.
10assertion
JavaScript에서 assertion 개념을 코드로 빠르게 확인하는 에러 처리 예제입니다.
JavaScript code
// assertion
function requireName(name) {
if (!name.trim()) throw new Error("name required");
return name;
}
console.log(requireName("Ada"));실패를 잡는 것에서 끝내지 말고, 기록하고 복구하는 흐름까지 같이 읽는 것이 중요합니다.
에러를 잡기만 하고 아무 처리도 하지 않으면 문제는 숨어 있고 복구는 더 어려워집니다.
11Result 반환
JavaScript에서 Result 반환 개념을 코드로 빠르게 확인하는 에러 처리 예제입니다.
JavaScript code
// Result 반환
const parseNumber = (value) => {
const parsed = Number(value);
return Number.isNaN(parsed) ? null : parsed;
};
console.log(parseNumber("11"));실패를 잡는 것에서 끝내지 말고, 기록하고 복구하는 흐름까지 같이 읽는 것이 중요합니다.
에러를 잡기만 하고 아무 처리도 하지 않으면 문제는 숨어 있고 복구는 더 어려워집니다.
12다단계 검증
JavaScript에서 다단계 검증 개념을 코드로 빠르게 확인하는 에러 처리 예제입니다.
JavaScript code
// 다단계 검증
function assert(condition, message) {
if (!condition) throw new Error(message);
}
assert(true, "must be true");실패를 잡는 것에서 끝내지 말고, 기록하고 복구하는 흐름까지 같이 읽는 것이 중요합니다.
에러를 잡기만 하고 아무 처리도 하지 않으면 문제는 숨어 있고 복구는 더 어려워집니다.
13로깅 래퍼
JavaScript에서 로깅 래퍼 개념을 코드로 빠르게 확인하는 에러 처리 예제입니다.
JavaScript code
// 로깅 래퍼
try {
JSON.parse("{");
} catch (error) {
console.log(error instanceof Error ? error.message : String(error));
}실패를 잡는 것에서 끝내지 말고, 기록하고 복구하는 흐름까지 같이 읽는 것이 중요합니다.
에러를 잡기만 하고 아무 처리도 하지 않으면 문제는 숨어 있고 복구는 더 어려워집니다.
14recover 흐름
JavaScript에서 recover 흐름 개념을 코드로 빠르게 확인하는 에러 처리 예제입니다.
JavaScript code
// recover 흐름
function requireName(name) {
if (!name.trim()) throw new Error("name required");
return name;
}
console.log(requireName("Ada"));실패를 잡는 것에서 끝내지 말고, 기록하고 복구하는 흐름까지 같이 읽는 것이 중요합니다.
에러를 잡기만 하고 아무 처리도 하지 않으면 문제는 숨어 있고 복구는 더 어려워집니다.
15입력 가드
JavaScript에서 입력 가드 개념을 코드로 빠르게 확인하는 에러 처리 예제입니다.
JavaScript code
// 입력 가드
const parseNumber = (value) => {
const parsed = Number(value);
return Number.isNaN(parsed) ? null : parsed;
};
console.log(parseNumber("15"));실패를 잡는 것에서 끝내지 말고, 기록하고 복구하는 흐름까지 같이 읽는 것이 중요합니다.
에러를 잡기만 하고 아무 처리도 하지 않으면 문제는 숨어 있고 복구는 더 어려워집니다.
정리하며
- Error를 상속한 도메인 오류 클래스로 실패 종류를 구분 가능하게 만듭니다
- finally에서 return이나 throw를 쓰면 원래 결과가 사라집니다
- 원인 추적이 필요하면 cause 옵션으로 하위 오류를 연결합니다
- parseInt는 부분 파싱을 허용하므로 Number나 정규식으로 검증합니다
더 깊이 들어가고 싶다면 JavaScript 학습 라이브러리에서 다른 주제 가이드를 이어서 보거나, 언어 비교에서 같은 개념이 다른 언어에서 어떻게 표현되는지 확인해 보세요.