ASP.NET의 스크립트 언어

ASP.NET이 처음 만들어졌을 때에는, 스크립트 언어로 VB.NET을 많이 이용하였다. 그러나 지금 규링도 이용하는 스크립트는 C#이다. 사실 Eiffel, 파스칼, 코볼도 닷넷 프레임워크에 연동하여 이용할 수도 있다. 어떤 스크립트를 연결해서 쓰냐 마냐에 대해서는 그냥 개발자 맘이다. 닷넷과 제대로 연동해서 쓸 수많 있다면 말이다. 어떤 언어를 선택하든지 컴파일러는 작성된 코드를 일련의 중간 언어(Intermediate Language) 명령어들로 변환하기 때문에 어떤 게 좋다고도 말하기 어렵다. 중간 언어가 생성되었을 때의 성능은 각자 다르기 때문이다.

근데 요즘은 C#을 이용하는 것을 중요하게 생각한다. 이 이유는 다음과 같다.

  • 닷넷 프레임워크 프로그래밍 모델을 가장 잘 반영한 언어가 처리하기 좋다.
    VB.NET과 C#은 중간언어 형태고 컴파일되는 닷넷 프레임워크의 프로그래밍 모델을 가장 잘 반영하는 언어이다. (당연히 마소에서 만드니깐) 즉, 버전이 올라가면 올라갈수록 언어적 차원에서 가장 많은 걸 지원한다.
  • 닷넷 언어들도 다른 언어들의 장점들을 지속적으로 이식해서 발전하고 있다.
    이건 요즘 모든 언어들이 다 가지고 가는 상황이다. 지속적으로 다른 언어들의 장점을 흡수해서 진화해 가기 때문에 프로그램 기능이 막강해진다.
  • 사용자가 지속적으로 증가하고 있다.
    이건 되게 중요한 것이다. 현재 마이크로소프트는 닷넷 플랫폼의 사용을 여러 곳에 지원하고 있고, 그를 위해 응용 프로그램 개발을 하기 쉽도록 하려고 C#쪽에 좀 더 힘을 쓰고 있다. 그래서 사용자도 엄청나게 증가하고 있는 추세이다. (글을 작성하는 현 시점같이 멀티 랭귀지가 기본인 곳에서 점유율이 늘어나는 것은 별 의미가 없을수도 있지만, 그렇다고 해서 신경 안쓰고 할 정도의 그런 건 아니다.) 게다가 자바랑도 유사해서 쉽게 배우고 하다보니 은근 경험 공유도 많이 된다.

그 중에서도 요즘 마이크로소프트가 제대로 지원하는 C# 쪽이 더 지원력은 강하다. 마소가 닷넷을 여러 플랫폼에서 확장하기 위해 제대로 밀고 있는 것도 C#이기도 하고…

이런 상황이다보니 갠적으로는 C#을 이용하여 스크립트를 작성하는 쪽을 좀 더 좋게 본다.

IIS의 가상 디렉터리 설정하기

가상 디렉터리란 물리적으로 루트 디렉터리 또는 이에 종속된 하위 디렉터리가 아님에도 불구하고 웹에서는 웹 사이트의 하위 디렉터리로 인식되는 디렉터리를 말한다. 형식은 http://[사이트 주소]/[가상 디렉터리 이름]/[파일]이다.

라고 적으면 이게 뭔 개소린가 싶다. (…)

처음 설치하면 생성되는 C:\inetpub\wwwroot 같은 폴더의 경우에는 실제로는 그냥 쓰면 안된다. 그리고 각각의 서비스들을 별도의 하위 폴더로 만들어서 쓰는 것도 좋지 않다. program1이라는 서비스를 만들었을 때, wwwroot 밑에 program1 폴더를 만들어서 거기에 생성해서 쓰면 안된다. 이런 식으로 보이는 서비스들은 전부 가상 디렉터리를 이용해서 제공되는 서비스들이다. 왜 쓰면 안되는지는 다음과 같은 이유가 있다.

  1. 보안 문제: 웹 주소와 디렉터리가 그대로 노출된다. 기본 디렉터리를 바꿨다 하더라도 디렉터리를 탐색하면 위치가 그대로 노출될 수 있다. 게다가 기본 디렉터리의 루트에서부터 공개되기 때문에 악의적으로 해킹해서 접속하게되면 획득한 권한으로 하부의 모든 서비스를 다 가로챌 수 있게 된다.
  2. 공간 부족 문제: 지속적으로 추가되는 것들을 전부 다 저장하기에는 C:의 용량은 한정되어 있다. 그렇기 때문에 다른 드라이브에 생성하여 용량을 널럴하게 주는 것이 좋다.

이런 문제를 해결해주는 것이 바로 가상 디렉터리이다. 임의의 드라이브, 임의의 폴더를 지정하여 쓰게 되면 위의 문제를 해결할 수 있다.

그럼 IIS에서 어떻게 가상 디렉터리를 이용할 수 있는지는 다음 설정을 따라가면 된다. 우선 제어판 -> 관리도구 -> IIS 관리자를 실행한다.

그 다음, 자신의 서버에 있는 사이트(Site)의 하위에 있는 Default Web Site를 선택하였을 때 나오는 내용 중에 [가상 디렉터리 보기]라고 나와있는 것을 클릭하면 가상 디렉터리를 관리할 수 있다.

Screenshot - 2016년 05월 16일 - 18시 24분 21초

가상 디렉터리를 추가해준다.

Screenshot - 2016년 05월 16일 - 18시 24분 29초.png

추가하려는 이름과 디렉터리를 지정한다. 여기에 입력하는 이름이 그대로 사이트 주소에 적용되니 잘 작성한다. 실제 경로는 파일을 저장할 경로인데, 원하는 곳에 폴더를 만들어서 지정하면 된다.

Screenshot - 2016년 05월 16일 - 18시 25분 45초

지정한 디렉터리에 아까 만들었던 FirstApp.aspx 파일을 복사한다.

Screenshot - 2016년 05월 16일 - 18시 26분 35초

이제 브라우저에서 확인을 한다 http://localhost/WebEx/FirstApp.aspx 라고 입력하면 아래 화면처럼 그전에 만든 것이 그대로 실행되면 된다.

Screenshot - 2016년 05월 16일 - 18시 26분 56초

별로 어렵진 않다.

ASP.NET 기본 테스트 앱

처음에 프로그래밍을 시작할 때, 대부분은 HelloWorld를 만들어본다. 웹 프로그래밍이라고 해서 뭐 다를 껀 없다. 그런데, 기왕이면 뭔가 좀 달라보이는 걸 해봐야 웹에서 서버를 건드려 보고 있다는 걸 알텐데 그럴만한 게 뭐가 있을까 해서 뒤적거리니…

역시 웹 서버에서 실행할 수 있는 코드를 작성하는 것이 가장 좋겠다 싶다.

그래서 다음과 같은 aspx 코드를 작성하여 파일 이름을 FirstApp.aspx으로 저장한다. 저장하는 위치는 C:\inetpub\wwwroot이다. 윈도우에 IIS를 설치하면 가장 먼저 만들어지는 기본 웹 디렉토리이다. (우분투에 아파치 깔면 /var/www/html 생성되는 거랑 같은 이치다)

Screenshot - 2016년 05월 16일 - 17시 45분 58초

<html>
<head>
<title>반갑습니다!</title>

void Page_Load(object sender, System.EventArgs e)
{
lblMessage.Text = “현재시각: “+DateTime.Now.ToString();
}

</head>
<body>
<center>
<h3>환영합니다!</h3>
<hr width=300 />
<asp:Label id=”lblMessage” runat=”server”></asp:Label>
<hr width=300 />
</center>
</body>
</html>

저기서 일부러 좀 엔터로 띄어둔 부분이 있다. script 태그인데, 스크립트를 페이지에 직접 작성하는 태그 구문이다. Page_Load 함수는 GUI프로그램에서 기본적으로 동작하는 로드 함수랑 같은 역할을 하는 기본적인 함수이다. 여기에 라벨에 시간 텍스트를 작성하도록 하였다. 실행하면 아래 화면처럼 동작한다.

Screenshot - 2016년 05월 16일 - 17시 58분 57초

서버측의 스크립트가 동작한 것을 확인할 수 있다.

Screenshot - 2016년 05월 16일 - 18시 01분 44초

코드보기로 확인해보면 이런 식으로 html 코드만 보일 것이다. 서버 사이드에서 실행하는 것은 클라이언트에서는 보이지 않는다. 이렇게 보면 서버에서 동작하는 코드를 실행했다는 걸 느낄 수 있다. ㅇㅅㅇ!