성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] Java - How to use the Foreign Funct...
[정성태] 제가 큰 실수를 했군요. ^^; Delegate를 통한 Bein...
[정성태] Working with Rust Libraries from C#...
[정성태] Detecting blocking calls using asyn...
[정성태] 아쉽게도, 커뮤니티는 아니고 개인 블로그입니다. ^^
[정성태] 질문이 잘 이해가 안 됩니다. 우선, 해당 소스코드에서 ILis...
[양승조
] var대신 dinamic으로 선언해서 해결은 했습니다. 맞는 해...
[양승조
] 또 막혔습니다. ㅠㅠ var list = props[i].Ge...
[양승조
] 아. 감사합니다. 어제는 안됐던것 같은데....정신을 차려야겠네...
[정성태] "props[i].GetValue(props[i])" 코드에서 ...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <h1 style='font-family: Malgun Gothic, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>아파치 서버에서 ASP.NET을 실행하는 mod_aspdotnet 모듈</h1> <p> 지난 글에서 XAMPP의 아파치 구성을 알아봤는데요.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > 윈도우용 XAMPP의 아파치 서버 구성 방법 ; <a target='tab' href='http://www.sysnet.pe.kr/2/0/11288'>http://www.sysnet.pe.kr/2/0/11288</a> </pre> <br /> 물론, 저걸로 하지 않고 그냥 아파치 서버만 다운로드해 mod_aspdotnet를 얹으셔도 됩니다. 그런데, 제가 저것을 설명한 이유는 mod_aspdotnet을 구성하기 위해 참고했던 자료가 아래의 글이었기 때문입니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > How To Run ASP.NET on XAMPP ; <a target='tab' href='http://xehroz.tumblr.com/post/43884721903/how-to-run-aspnet-on-xampp'>http://xehroz.tumblr.com/post/43884721903/how-to-run-aspnet-on-xampp</a> </pre> <br /> 그런데, 막상 구성해 보니 XAMPP이어야 할 필요는 없고 단순히 아파치 서버만 있어도 가능한 것이었습니다.<br /> <br /> <hr style='width: 50%' /><br /> <br /> 다음의 사이트에서 mod_aspdotnet을 다운로드할 수 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > mod_aspdotnet ; <a target='tab' href='http://sourceforge.net/project/platformdownload.php?group_id=175077'>http://sourceforge.net/project/platformdownload.php?group_id=175077</a> </pre> <br /> 다운로드 가능한 파일은 .msi 설치 파일인데요, 제가 참... 설치 파일을 싫어합니다. ^^; 그래서 해당 .msi 파일을 다음의 방법을 이용해 압축을 해제했습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > msiexec /a mod_aspdotnet-2.2.0.2006-setup-r2.msi TARGETDIR=c:\temp\mod /qb </pre> <br /> 이 글에서는 해제한 파일들을 대상으로 수작업으로 설치를 해보겠습니다. 딱 2가지의 작업만 하면 되므로 복잡하지 않습니다.<br /> <br /> 우선, 첫 번째 작업이 Apache.Web.dll 파일을 GAC에 등록하는 것입니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > .\mod\GlobalAssemblyCache\Apache.Web.dll </pre> <br /> 근데, 이게 좀 어려운데요. .msi 파일로 설치했으면 저 작업이 자동으로 되었을 텐데 직접 설치하려면 <a target='tab' href='http://www.sysnet.pe.kr/2/0/11289'>gacutil.exe</a>가 필요합니다. 문제는 gacutil.exe는 닷넷 런타임에 포함되어 있지 않다는 것입니다. 그래도 대개의 경우 위의 작업을 하는 대상이 .NET 개발자들이기 때문에 개발자 PC에 있는 gacutil.exe를 복사해와서 등록하시면 됩니다. (그렇지 않은 경우에는 <a target='tab' href='https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk'>Windows SDK를 다운로드</a>해 gacutil.exe를 구하거나 속편하게 .msi 설치 파일을 실행하시면 됩니다.)<br /> <br /> 참고로 Visual Studio 2017을 설치한 닷넷 개발자의 경우 다음의 경로에서 gacutil.exe를 구할 수 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\gacutil.exe </pre> <br /> 관리자 권한의 명령행 창을 띄우고 다음과 같이 등록해 줍니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > C:\temp\mod\GlobalAssemblyCache> <span style='color: blue; font-weight: bold'>gacutil.exe Apache.Web.dll</span> </pre> <br /> 그다음 역시 압축을 해제한 폴더 내에 있는 mod_aspdotnet.so 파일을,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > .\mod\Program Files\Apache Software Foundation\apache2\modules\mod_aspdotnet.so </pre> <br /> 아파치 서버의 /modules 폴더에 복사해 주면 됩니다. XAMPP의 경우에는 ".\xampp\apache\modules" 폴더 안에 복사해 주면 됩니다. mod_aspdotnet.so 파일은 <a target='tab' href='http://www.sysnet.pe.kr/2/0/713'>depends.exe</a>로 확인하면 다음의 DLL들에 대해 의존성을 가지고 있습니다.<br /> <br /> <ul> <li>libapr-1.dll</li> <li>libhttpd.dll</li> </ul> <br /> 위의 파일들은 모두 .\apache\bin 폴더에 있는 것들이기 때문에 아파치만 제대로 구성되어 있다면 별문제 없이 사용할 수 있습니다.<br /> <br /> <hr style='width: 50%' /><br /> <br /> 모듈 설치는 이것으로 끝이 났고, 이제 ASP.NET을 실행할 수 있도록 구성 파일을 변경해야 합니다.<br /> <br /> xampp의 경우 ".\xampp\htdocs\apache\conf\extra\httpd-xampp.conf" 파일에 구성할 수도 있습니다. 하지만 어차피 아파치 서버이기 때문에 동일하게 httpd.conf 파일에 설정해도 무방합니다. <br /> <br /> 원하는 .conf 파일을 열고 다음의 내용을 파일의 마지막에 추가해 줍니다. (꼭 마지막일 필요는 없지만 그냥 간편하게 그렇게 하시면 됩니다.)<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > # ASP.NET on XAMPP LoadModule aspdotnet_module modules/mod_aspdotnet.so AddHandler asp.net asax ascx ashx asmx aspx axd config cs csproj licx rem resources resx soap vb vbproj vsdisco webinfo <IfModule mod_aspdotnet.cpp> <span style='color: blue; font-weight: bold'>AspNetMount /aspdocs "c:/temp/xampp/aspdocs"</span> <span style='color: blue; font-weight: bold'>Alias /aspdocs "c:/temp/xampp/aspdocs"</span> <span style='color: blue; font-weight: bold'><Directory "c:/temp/xampp/aspdocs"></span> Options FollowSymlinks ExecCGI Order allow,deny Allow from all DirectoryIndex index.htm index.aspx index.asp </Directory> AliasMatch /aspnet_client/system_web/(\d+)_(\d+)_(\d+)_(\d+)/(.*) "C:/Windows/Microsoft.NET/Framework/v$1.$2.$3/ASP.NETClientFiles/$4" <Directory "C:/Windows/Microsoft.NET/Framework/v*/ASP.NETClientFiles"> Options FollowSymlinks Order allow,deny Allow from all </Directory> </IfModule> # /ASP.NET on XAMPP </pre> <br /> 위의 설정에서 가장 중요한 것은 "c:/temp/xampp/aspdocs" 경로입니다. 저 경로에 ASP.NET 웹 사이트 리소스를 넣어주면 되는데 물론 여러분이 원한다면 임의의 값으로 변경해도 됩니다.<br /> <br /> 이후, 테스트를 위해 "c:/temp/xampp/aspdocs" 폴더에 test.aspx 파일 하나를 만들고 다음의 내용으로 채워 넣습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > <%@ Page Language="C#"%> <html> <head> <title>ASP.NET Test Page</title> </head> <body> <% for(int fontSize = 1; fontSize < 7; fontSize++) { Response.Write("<p style=\"font-size: " + (fontSize * 10) + "pt; text-align: center;\">It Works!</p>"); } %> </body> </html> </pre> <br /> 아파치 서버를 재시작하고 웹 브라우저에 http://localhost:8080/aspdocs/test.aspx URL을 입력해 실행하면 다음과 같은 결과를 볼 수 있습니다. ^^<br /> <br /> <img alt='mod_aspdotnet_run_1.png' src='/SysWebRes/bbs/mod_aspdotnet_run_1.png' /><br /> <br /> <hr style='width: 50%' /><br /> <br /> 그런데, 문제가 있습니다. 현재 2.4 버전의 아파치 서버를 사용하게 되면 .conf 파일 변경 후 다음과 같은 예외가 발생할 것입니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Diese Eingabeforderung nicht waehrend des Running beenden Bitte erst bei einem gewollten Shutdown schliessen Please close this command only for Shutdown Apache 2 is starting ... httpd.exe: Syntax error on line 532 of C:/temp/xampp/apache/conf/httpd.conf: Syntax error on line 21 of C:/temp/xampp/apache/conf/extra/httpd-xampp.conf: Cannot load modules/mod_aspdotnet.so into server: The specified procedure could not be found. Apache konnte nicht gestartet werden Apache could not be started </pre> <br /> 또는 이런 오류가 발생합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > --------------------------- Microsoft Visual C++ Runtime Library --------------------------- Runtime Error! Program: C:\temp\Apache2\bin\Apache.exe This application has requested the Runtime to terminate it in an unusual way. Please contact the application's support team for more information. </pre> <br /> 위와 같은 오류가 나는 것은 mod_aspdotnet과 아파치의 버전이 맞지 않기 때문입니다. 우선, 다음의 명령어로 아파치 서버 버전을 확인합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > // 2.4 C:\temp\xampp\apache\bin><span style='color: blue; font-weight: bold'>httpd -v</span> Server version: <span style='color: blue; font-weight: bold'>Apache/2.4.27</span> (Win32) Apache Lounge VC14 Server built: Jul 9 2017 11:48:22 </pre> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > // 2.0 C:\temp\Apache2\bin><span style='color: blue; font-weight: bold'>Apache.exe -v</span> Server version: <span style='color: blue; font-weight: bold'>Apache/2.0.63</span> Server built: Jan 17 2008 22:58:29 </pre> <br /> 아쉽게도 현재 2.4 버전의 아파치에 대해서는 mod_aspdotnet이 지원하지 않습니다. 대신 아파치 2.0과 2.2에 대해서는 각각 다음의 경로에서 다운로드한 mod_aspdotnet으로 설치하시면 됩니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > // 아파치 2.0용 mod_aspdotnet 다운로드 mod_aspdotnet-2.0.0.msi ; <a target='tab' href='https://archive.apache.org/dist/httpd/mod_aspdotnet/mod_aspdotnet-2.0.0.msi'>https://archive.apache.org/dist/httpd/mod_aspdotnet/mod_aspdotnet-2.0.0.msi</a> </pre> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > // 아파치 2.2용 mod_aspdotnet 다운로드 ; <a target='tab' href='http://sourceforge.net/project/platformdownload.php?group_id=175077'>http://sourceforge.net/project/platformdownload.php?group_id=175077</a> </pre> <br /> <hr style='width: 50%' /><br /> <br /> 또 한가지 알아둬야 할 것은, GAC에 설치되는 Apache.Web.dll 파일은 CLR 2 대상의 c:\windows\assembly에 등록됩니다. 즉 CLR 4를 대상으로 만들어지지 않은 것인데요. 따라서 .NET 4.0만 설치된 윈도우에서는 정상적으로 동작하지 않습니다. 물론, .NET 2.0/4.0 모두 설치되어 있다면 .NET 4.0 ASP.NET이 올라와도 2.0용의 GAC에서 Apache.Web.dll 파일을 로드하기 때문에 정상적으로 동작합니다.<br /> </p><br /> <br /><hr /><span style='color: Maroon'>[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
1650
(왼쪽의 숫자를 입력해야 합니다.)