강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

eju님의 프로필 이미지
eju

작성한 질문수

제대로 배우는 Express.js: Part1 기초부터 심화까지 [기초편]

Users Route 만들기 Part 3 - 로그인과 로그아웃 처리

404, 500 에러 처리 외에 특정 개발 구문에서 에러 발생했을때 찾는 방법이 있을까요?

해결된 질문

작성

·

10

·

수정됨

0

404, 500 에러 처리 외에 특정 개발 구문에서 에러 발생했을때 찾는 방법이 있을까요?

답변 1

0

nhcodingstudio님의 프로필 이미지
nhcodingstudio
지식공유자

안녕하세요 eju님 🙂,

404나 500 같은 에러는 “페이지를 찾을 수 없음”, “서버 내부 문제”처럼 이미 Express가 기본적으로 처리해 주는 에러입니다. 하지만 실제 개발 중에는 “특정 코드 줄에서 갑자기 터지는 에러”를 찾아야 하는 경우가 훨씬 많습니다. 이런 상황을 쉽게 찾는 실무용 방법을 아주 기초부터 설명드릴게요.

가장 먼저 알아두실 건 “로그(log)”입니다. 로그는 프로그램이 실행되면서 남기는 일기라고 생각하시면 됩니다. Node.js와 Express에서는 보통 Winston이나 Pino 같은 도구를 써서 로그를 남깁니다.
이걸 켜 두면, 에러가 났을 때 “어느 파일의 몇 번째 줄에서 어떤 요청이 들어왔을 때 터졌는지”를 바로 볼 수 있습니다. 예를 들어 “/login 페이지로 요청이 들어왔는데, username이 비어 있어서 오류 발생” 같은 식으로 남죠.
이 로그는 나중에 콘솔이나 파일에서 그대로 읽어볼 수 있습니다.

다음은 “디버깅(debugging)”이에요.
디버깅은 코드의 실행을 잠깐 멈춰서, 변수 안에 무슨 값이 들어 있는지 직접 확인하는 작업이에요.
Node.js는 --inspect 모드라는 기능을 제공합니다.
이걸 켜면 크롬 브라우저나 VS Code에서 프로그램을 “일시정지”하고, 특정 코드 줄을 확인하거나 변수값을 바로 볼 수 있습니다. 예를 들어 “이 if문 안이 실행되는지?” 혹은 “여기서 받은 데이터가 비어 있는지?” 같은 걸 눈으로 확인할 수 있어요. 초보 단계에서는 console.log( )로 중간중간 출력해 보는 것도 디버깅의 한 형태이지만, 나중에는 이렇게 프로그램을 멈춰서 보는 방식이 훨씬 효율적입니다.

세 번째는 “에러 추적 서비스”입니다.
이건 조금 더 자동화된 방법인데, Sentry, Bugsnag, Rollbar 같은 서비스가 대표적이에요.
이 도구들을 Express에 한 줄만 연결해 두면, 에러가 발생할 때마다 자동으로 서버에서 정보를 모아서 웹사이트로 보내줍니다. 그럼 나중에 브라우저에서 “언제, 어떤 요청에서, 무슨 이유로 에러가 났는지”를 한눈에 볼 수 있고, 에러가 반복되면 그 빈도나 경향까지 분석해 줍니다. 즉, 직접 콘솔을 보지 않아도 자동으로 알려주는 “에러 알림 시스템”이라고 생각하시면 됩니다.

그리고 네 번째로는 “입력값 검증(validation)”입니다.
사실 많은 에러는 서버 로직 자체보다, 사용자가 잘못된 값을 보내서 생깁니다.
이걸 미리 잡아주는 방법이 “요청 검증 라이브러리”입니다.
대표적으로 Joi, Celebrate, Zod 같은 도구가 있어요.
예를 들어 “숫자여야 하는데 문자열이 들어오면 아예 실행하지 않고 400 오류로 깔끔하게 돌려주는” 식이죠. `이렇게 하면 “내 코드 내부 버그”와 “입력 잘못으로 인한 오류”를 구분하기 쉬워집니다.

마지막으로 “에러 핸들러”라는 걸 꼭 하나 만들어 두시면 좋습니다.
Express는 코드 어디에서든 에러가 생기면 마지막에 있는 에러 처리 구문으로 모아줍니다.
그곳에서 에러 메시지와 스택(어느 파일 몇 줄에서 났는지)을 출력하거나, 사용자에게 보기 좋은 메시지를 보낼 수 있습니다. 이걸 써두면 갑작스러운 오류가 발생해도 프로그램 전체가 멈추지 않고, 원인을 안전하게 기록할 수 있습니다.

정리하자면,

  1. 로그 도구로 일기처럼 실행 상황을 남기고,

  2. 디버깅 모드로 코드 중간을 직접 들여다보며,

  3. Sentry 같은 에러 추적 서비스로 자동 기록을 받고,

  4. 입력 검증 라이브러리로 잘못된 요청을 미리 막고,

  5. 에러 핸들러로 예외를 한곳에서 관리하면,
    “특정 코드에서 어떤 이유로 에러가 발생했는지”를 쉽게 찾아낼 수 있습니다.

지금은 복잡해 보여도, 사실 각각의 도구는 “로그를 잘 남기고, 에러를 보기 쉽게 만들자”라는 같은 원리를 공유합니다. 처음에는 console.log로 시작하시고, 익숙해지면 Sentry나 Winston처럼 조금씩 자동화된 도구로 확장하시면 됩니다.

감사합니다.

eju님의 프로필 이미지
eju

작성한 질문수

질문하기