모든 웹 개발자라면 알 수 있는 대표적인 2가지 응답 코드가 있습니다.
- 400 : Page Not Found
- 500 : Internal Server Error
400은 사용자 혹은 개발자에 의해서
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 (로컬에서 테스트할 경우에만 정확한 에러 노출) 로 선택하시면 끝나게 됩니다.
'개발 > ASP.NET' 카테고리의 다른 글
[ASP.NET] js/css을 min 파일로 만들어보자. (8) | 2019.11.27 |
---|---|
[ASP.NET] Debug/Release에 따라 ConnectionString 변경해보자. (6) | 2019.11.21 |
[ASP.NET] Global.asax 에 대해서 알아보자. (0) | 2019.08.13 |
Server.Transfer vs Response.redirect 무엇이 다를까? (2) | 2019.08.12 |
NameValueCollection foreach문 사용 (0) | 2018.08.03 |