모든 웹 개발자라면 알 수 있는 대표적인 2가지 응답 코드가 있습니다.

  • 400 : Page Not Found
  • 500 : Internal Server Error

400은 사용자 혹은 개발자에 의해서

500은 개발자에 의해서 발생할 수 있는 오류 응답코드 입니다.

 

404 / 500 에러 일때, 사용자에게 보이는 브라우저 화면

 

위에 그림처럼, 오류가 난 게 자랑도 아니고 굳이 사용자들에게 보여줄 필요는 없습니다.

그래서 Web.config를 이용해서, 오류가 발생할 경우에 페이지를 이동시켜서 사용자들에게 안심? 시킬 수 있는 방법을 공유드립니다. (물론 IIS에서도 설정이 가능합니다.)

 

 

1
2
3
4
5
6
<system.web>
    <customErrors mode="RemoteOnly" redirectMode="ResponseRedirect" defaultRedirect="/error/default.html" >
        <error statusCode="404" redirect="/error/404.html"/>
        <error statusCode="500" redirect="/error/500.html"/>
    </customErrors>
</system.web>
cs

 

간단합니다. Web.config 파일 안에, <system.web> 하위에 <customErrors>를 위에 코드와 같이 구성하면 됩니다. 가장 중요한 <customErrors>의 속성들을 확인해보겠습니다.

 

mode (필수)

사용자 지정 오류를 결정하는 속성입니다. 개발자들이 테스트할 때에는 확인이 가능하고, 라이브 서버에서는 사용자들이 굳이 오류 메시지를 볼 필요는 없으니, RemoteOnly로 설정해줍니다.

  • On : 사용자 지정 오류를 설정, defaultRedirect 속성이 지정되어 있지 않으면 일반 오류가 발생합니다.
  • Off : 사용자 지정 오류를 해제, 자세한 ASP.NET 오류가 표시됩니다.
  • RemoteOnly : 사용자 지정 오류는 라이브/스테이징/테스트 서버 등 원격 클라이언트에만 표시가 되고, 로컬에서는 Off처럼 자세한 ASP.NET 오류가 표시됩니다. (기본값)

 

 

redirectMode (선택)

사용자가 사용자 지정 오류 페이지로 리디렉션 될 경우 URL이 변경 여부를 나타냅니다.

  • ResponseRedirect : URL 변경이 됩니다. (기본값)
  • ResponseRewrite : URL 변경되지 않습니다.

URL이 변경되느냐 변경되지 않느냐입니다.

 

 

defaultRedirect (선택)

오류가 발생할 경우, 브라우저에 표시할 기본 URL을 지정해줍니다.

 

 

결론

404/500 등 더 다양한 에러가 있지만, 굳이 사용자들이 에러 메시지를 확인할 필요는 없습니다. 그렇기에 웹사이트를 운영하고 있다면, 에러 페이지를 만들고 그 에러 페이지로 이동할 수 있게끔 리다이렉트 해주어야 합니다.

그래야 개발자로서의 마지막 자존심을 지키는 게 아닐까 싶습니다.

 

 

 


내용 추가!!!!!!(여기가 진짜)

위에 방법은 확장자가 .aspx 에 대한 404 (Not Found)는 발견하고 우리가 정의한 에러페이지로 가게됩니다. 하지만 .aspx 확장자가 아닐 경우에는 정의한 에러페이지가 아닌, 404 (Not Found)가 뜨게 됩니다. 그래서 위에 방법도 좋지만, 지금 소개드리는 방법으로 해결하시는게 더 좋습니다.

방법이 여러가지이고, 새롭게 찾은 방법이기에 재 공유해드립니다. (위에껏도 한가지 방법이다보니 삭제는 하지 않겠습니다.)

 

1
2
3
4
5
6
7
8
<system.webServer>
    <httpErrors errorMode="DetailedLocalOnly">
      <remove statusCode="500" subStatusCode="-1" />
      <remove statusCode="404" subStatusCode="-1" />
      <error statusCode="404" prefixLanguageFilePath="" path="/error/404.aspx" responseMode="ExecuteURL" />
      <error statusCode="500" prefixLanguageFilePath="" path="/error/500.aspx" responseMode="ExecuteURL" />
    </httpErrors>
</system.webServer>
cs

 

이번에는 system.web이 아닌, system.webServer 아래에 추가하시면 됩니다. 그리고 errorMode의 속성은 DetailedLocalOnly (로컬에서 테스트할 경우에만 정확한 에러 노출) 로 선택하시면 끝나게 됩니다.

 

+ Recent posts