Jay's Cookbook
Menu
  • Tags
  • Categories
  • Projects
Computer Science
OS
Network
Data Structure
Algorithm
Language
Code Architecture
Python
Javascript
Typescript
Java
Backend
Backend Theory
TypeORM
Node.js
NestJS
FastAPI
Frontend
HTML/CSS
React
Next.js
Data Engineering
DE Theory
MySQL
MongoDB
Elastic
Redis
Kafka
Spark
Airflow
AI
Basic
Pytorch
NLP
Computer Vision
Data Analytics
Statistics
Pandas
Matplotlib
DevOps
Git
Docker
Kubernetes
AWS
[Backend Thoery] 에러 핸들링
backend
backend_theory

[Backend Thoery] 에러 핸들링

Jay Kim
Jay Kim 12 Dec 2023
[Backend Thoery] 웹서비스 보안 (준비중) [Backend Thoery] 비동기 프로그래밍

Table of Contents

  • 예외 처리
  • 예외 발생 원인
    • 클라이언트 문제
    • 서버 문제
  • 예외 처리 코드
    • 메세지 규격화
    • 코드 작성 위치
  • 참고

예외 처리

  • 서버는 클라이언트가 요청을 보내면 반드시 클라이언트에게 요청에 대한 응답을 해야 한다
  • 서버가 응답을 반환하지 않으면, 클라이언트는 우리의 서비스를 떠나기 전까지 다른 요청을 보내지 못하고 계속 대기 해야 한다
  • 이는 유저의 사용자 경험을 떨어트리고, 서비스 이탈을 초래한다


  • 하지만 서버에서는 예상치 못한 일로 기대한 응답을 반환하지 못하는 경우가 생긴다
  • 이런 상황에서도 서버는 어쨋든 응답을 반환해야 하는데 이를 예외 처리(Exception Handling)라고 한다

예외 발생 원인

  • 예외가 발생하는 경우는 다양하지만 우리가 사전에 대비할 수 있는 예외는 다음과 같다
    • 클라이언트의 잘못된 요청 (상태코드 400번대)
    • 서버에서의 프로그래밍 오류 (상태코드 500번대)

클라이언트 문제

  • 400 (Bad Request): 요청이 유효하지 않아 서버가 요청을 이해할 수 없음을 의미
    • 잘못된 바디, 잘못된 타입, 불필요한 값, 필수값 누락 등 -> 요청을 다시 작성하도록 유도
  • 401 (UnAuthorized): UnAuthorized 라고 하지만, 의미상 UnAuthenticated임 (로그인 필요한 경우)
    • jwt 토큰 누락, 유효하지 않은 jwt 토큰 등 -> 로그인 하도록 유도
  • 403 (Forbidden): 이게 UnAuthorized에 맞는 응답. 리소스에 필요한 권한을 가지고 있지 않음을 의미
    • 권한이 없는 경우 -> 이 전 페이지로 돌아가도록 유도
  • 404 (Not Found): 서버에 존재하지 않는 API 또는 resource를 요청한 경우
    • 존재하지 않는 API 또는 리소스를 요청한 경우 -> 이 전 페이지로 돌아가도록 유도
  • 422 (Unprocessable Entity): 요청이 올바로 만들어 졌지만, validation이 실패한 경우
    • 데이터 검증에 실패한 경우 -> 요청을 다시 작성하도록 유도
  • 429 (Too Many Requests): 사용자가 지정된 시간에 너무 많은 요청을 보낸 경우(“rate limiting”)

서버 문제

  • 500 (Internal Server Error): 서버에 문제가 있음을 의미 (보통 백엔드 코드나 데이터베이스에서 에러가 발생한 경우)
    • 일반적으로 500대 에러는 서버 내부의 문제이기 때문에 클라이언트에 보여주면 안된다
    • 500대 에러는 내부적으로 로깅, 개발자에게 알림, 클라이언트에게는 400대 에러로 처리하는게 좋다

예외 처리 코드

메세지 규격화

  • 예외가 발생했을 때 클라이언트에게 반환할 메세지, 그리고 로깅 메세지의 형태를 미리 정의하고 지키는게 좋다
{
  "timestamp": 에러가 발생한 시간,
  "statusCode": HTTP 상태코드,
  "error": 에러 제목,
  "message": 추가 설명

}

코드 작성 위치

  • 예외를 발생시키는 코드는 컨트롤러단에 작성해서 비즈니스 로직과 분리한다
  • 예외를 처리하는 코드는
    • 지역적인 경우에는 컨트롤러단에 만든다
    • 전역적인 경우는 따로 예외 처리 계층을 만든다

참고

  • Error Handling(에러 핸들링) - (1) 고민 풀어보기, walkinpcm
  • [번역] 자바스크립트 에러 핸들링 방법, jeongkoo
[Backend Thoery] 웹서비스 보안 (준비중) [Backend Thoery] 비동기 프로그래밍

You may also like

See all backend_theory
12 Apr 2024 [Backend Thoery] Datetime, Timestamp, Timezone
backend
backend_theory

[Backend Thoery] Datetime, Timestamp, Timezone

10 Apr 2024 [Backend Thoery] 의존성 주입(Dependency Injection)
backend
backend_theory

[Backend Thoery] 의존성 주입(Dependency Injection)

05 Apr 2024 [Backend Thoery] 대용량 트래픽
backend
backend_theory

[Backend Thoery] 대용량 트래픽

Jay Kim

Jay Kim

Web development, data engineering for human for the Earth. I share posts, free resources and inspiration.

Rest
Lifestyle
Hobby
Hobby
Hobby
Hobby
2025 © Jay's Cookbook. Crafted & Designed by Artem Sheludko.