최근 수정 시각 : 2025-12-21 11:58:15

500 Internal Server Error



1. 개요2. 원인3. 예시4. 여담5. 관련 문서

1. 개요

HTTP의 응답 코드[1] 중 하나로 내부 서버에 오류가 발생했을 때 발생하는 코드이다.

2. 원인

먼저 원인을 설명하기 전에 기본적으로 웹사이트는 WEB 서버와 웹 어플리케이션 서버(WAS), DB 서버 세부분으로 나뉘어져 처리가 된다. 사용자에게 페이지를 요청받은 WEB 서버는 필요한 데이터를 WAS에게 요청한다. WAS는 해당 요청을 로직에 맞춰 처리, 필요한 데이터를 DB서버에 저장하거나 불러오고, 이 결과물을 WEB 서버로 다시 전달하게 된다. 이 WAS에서 버그가 발생하면 500 에러를 표시하게 되는 것이다.
  1. (빈번함)로직을 처리하다 예외가 발생한 경우. 예외 처리를 제대로 하지 않았거나 잘못 처리해서 발생하는 경우가 많다.
  2. (빈번함)잘못된 로직으로 인해 행(Hang)이 발생한 경우. 그러니까 java(Tomcat 등), Python(Uvicorn 등), Node.js가 응답없음이 된 상태.
  3. (드문 경우)WAS 처리 한도 초과로 인해 WEB 서버와 WAS 사이의 연결이 끊어진 경우.[2]
  4. (드문 경우)원인을 알 수 없는 경우로 인해 WAS와 DB 서버 사이의 커넥션 풀이 꽉 찬 경우.

사용자 쪽 문제가 아닌, 서버 내부의 어플리케이션에 오류가 발생해서 내보내는 코드이기 때문에 조치가 해결될 때 까지 기다리는 방법 밖에 없다. 이상적인 경우는 가용량을 넘어 폭주하는 경우 DB가 접속 가능한지 미리 확인하는 코드를 추가하거나 접속초과 오류만 특별히 컨트롤 해서 오류페이지 대신 '접속량 초과' 같은 메시지를 보내주는 게 옳다.

결국 위의 오류메시지는 사용자에게 보여주지 않는 것이 가장 이상적인 상황이다. 하지만 현실적으로는 어렵다. 결국 개발자가 신이 아닌 이상 실수는 할 수 있지만 저런 오류가 사용자에게 노출되지 않도록 최대한 노력해야 하는 것은 맞다. 별로 중요한 정보는 아닐지라도 서버의 정보가 사용자에게 노출되는 것은 절대 좋은 일은 아니기 때문이다. 예를 들어 두번째 그림에 있는 오류를 보면 오류가 발생한 코드의 클래스 이름, 함수 이름 등이 다 노출되고 있다. 이를 미루어 어떤 라이브러리가 사용되었는지부터 언어가 java라는 것, 서버가 tomcat이라는 것까지 전부 노출되고 있는데 그 말은 이미 알려진 해당 라이브러리, 언어, 웹서버의 보안 취약점을 공격받을 수 있다는 것이다. 다만 저렇게 세세한 건 루프백이나 로컬 네트워크에서 접속했을 때만 뜨는 것이 일반적이다.

서버 데몬 에드온 중에 이런 게 있는데, 사용자 컴퓨터는 500에러 발생시 Retry-After를 받으면 또 시도하기 때문에 아예 이 코드를 빼고 '너는 보내라 나는 씹는다'라고 해주는 데몬이 있다.

3. 예시

파일:HMg2oxU.jpg
파일:272lLD1l.jpg

# 파일:500error.png
유튜브에도 있다.
파일:what.png 파일:애니메이션업로드 에러.png
Output 오류 업로드 화면에서의 오류
Roblox Studio에서는 질리듯 평생 볼 수 있다(...).

파일:attachment/Http_500.png

다음 결제창에서까지 뜬다.

4. 여담

  • 예전에는 나무위키에서 외부 그림을 프록시로 불러올 때 원격지 서버가 응답 시간을 초과한 경우 "원격지 서버가 응답 시간을 초과했습니다."라는 메시지가 나눔고딕 폰트로 쓰인 300×200의 image/png로 나타났다.[3]

5. 관련 문서


[1] HTTP 코드 앞자리 2는 정상 접속, 3은 페이지가 이동했음, 4는 브라우저의 문제, 5는 서버 오류를 뜻한다. 다만 500 외에 사용자가 많이 보게 되는 404는 '페이지가 없다'라는 의미이므로 사용자가 없는 걸 요청했을 수도 있고, 서버에 있던 게 없어진 경우에도 없는 컨텐츠를 요구한 것이라 4로 시작한다.[2] 접속자가 폭주하면 보통 발생하지만, 대부분 오류코드가 502로 처리되는 경우가 많다.[3] 지금은 외부 이미지를 위키에 사용할 수 없어서 볼 수 없다.