iis 에서 기본 문서가 실행이 안되는 문제..

안녕하세요… iis 셋팅을 해보고 있는 웹 초보입니다…

질문 내용은 아래와 같습니다

iis 에 디폴트 웹 사이트에 index.html 파일만 두고, 기본 문서로 설정하면 웹브라우저에서 주소창에 localhost 를 치면 index.html 파일이 열립니다. <아래 그림 2개>

질문2
질문3

그런데 asp.net core web api 로 만든 파일들을 디폴트 웹 사이트 폴더 경로에 넣고나서
웹브라우저에서 주소창에 localhost 를 치면 HTTP ERROR 404 에러가 나옵니다…<아래 그림>

질문1

이건 어떤 이유에서 그런걸까요?

2개의 좋아요

asp.net core라면 아래링크를 참조하시기 바랍니다.

1개의 좋아요

asp.net (core) 를 디폴트로 실행하면, iis 와 더불어 kestrel 이라는 오픈소스 서버가 실행됩니다.
iis 는 (리버스) 프록시 역할을 하게 되고, 요청을 실질적으로 처리하는 것은 kestrel 입니다.

리버스 프록시 서버의 역할은 그 뒷단의 서버를 대신해서, 인터넷과 접하면서, 인터넷으로부터 들어오는 요청을 받아서, 서버에 넘겨주고, 요청을 받은 서버는 요청에 대한 응답을 만들어 프록시에게 넘겨줍니다.
응답을 받은 프록시는 다시 인터넷으로 - 정확히는 인터넷으로 연결된 클라이언트에게 보내는 것입니다.

서버 앞에 프록시를 두는 이유는 서버를 요청의 처리에만 집중하도록 만들기 위한게 가장 크다고 합니다.

보안이나, 로드 밸런싱 같이 요청의 처리에 부차적인 문제는 상업용 서버가 더 좋기에 상업용 서버를 리버스 프록시로 설정하는 것인데, iis 가 그중 하나 입니다.
iis 대신에 다른 서버로 대체할 수 있습니다.

프록시로 설정된 iis 는 인터넷과 서버 사이에서 요청/응답의 중계 역할만하지 자신의 자원을 서비스하지 않습니다.

즉, 404 에러는 서버가 생성한 것이고, iis 는 이를 그대로 클라이언트에게 전달할 뿐입니다.

정적인 서버가 보내는 404 에러는 url에 해당하는 파일이 없다는 의미이지만,
웹API와 같은 웹어플리케이션 서버에서는 그 주소를 기준으로 라우팅할 요청핸들러가 없다는 의미입니다.

html 을 응답하는 웹어플리케이션(MVC, Razor 등)은 정적인 서버와 마찬가지로, 기본 url에 index.html 을 응답하는 것이 기본 설정이지만, 웹 API는 html 문서가 아니라, 데이터를 서비스하는 것이 목적입니다. 그래서, 라우팅으로 정의되지 않은 url에 대해서는 404를 응답합니다.

웹 API가 index.html 을 응답하게 만들려면,
기본 url 에 해당하는 라우팅을 설정하고, 라우팅에 지정된 액션 메서드가 그 파일을 읽어서, 텍스트로 만들고, 응답의 바디에 넣으면(기타 해더 처리도 해야 함) 됩니다.

이러한 일련의 과정을 자동화한 것이 MVC 프록젝트입니다.
웹 API 프로젝트에서 요청을 처리하는 객체는 ControllerBase 객체이지만, MVC 에서는 Controller 객체입니다. Controller 객체는 ControllerBase 객체의 자손으로 부모 객체에 없는 html 렌더링 기능이 부가된 것입니다.

데이터도 서비스하고 싶고, html 문서도 서비스하고 싶다면, MVC프로젝트를 사용하는 것이 간편합니다.

3개의 좋아요