2011년 4월 7일 목요일

ASP.NET MVC 구성도

출처 : Posted in 모바일, 그리고 웹(Web)/ASP.NET MVC // Posted at 2010/07/23 16:25

ASP.NET MVC 구성도






Routing System
ASP.NET MVC 프레임워크에서는 요청 URL 에 대한 라우팅 엔진을 포함하고 있다
사실 URL 라우팅은 MVC 설계 원칙과는 별개의 주제라 할 수 있다
그러나 ASP.NET MVC 프레임워크는 현재 유명하고 유용한 웹 개발 기술을 많이 채용하고 있다
URL 라우팅 역시 그러한 일환 중 하나라고 보면 되겠다

보통 웹 요청 URL은 말그대로 웹 서버의 자원를 직접 가르키도록 되어있다
예를 들면 http://mydomainxxx.com/home/default.html 형태의 URL이며
실제 웹 서버에 있는 home 폴더의 default.html 파일을 가르키는 것이다

그러나 라우팅 엔진을 이용하면 웹 서비의 물리적인 디렉터리,파일 구조와 직접 매칭되지 않아도 된다
더불어 웹 페이지에 전달되는 파라메타 정보 역시 기존의 default.html?name1=value1&name2=value2
형태처럼 지저분(?)하지 않게 되었다.
ASP.NET MVC에서 라우팅 룰(규칙)은 Global.asax 파일에 정의되어 있다
다음에 자세히 알아 보자

Controller
어찌보면 MVC 프레임워크의 중심 역할이 아닌가 한다
모든 요청은 컨트롤러(Controller)에게 전달되고 이 컨트롤러에 의해 적절한 모델과 뷰가 선택되는 것이다. 즉 모델과 뷰의 중간에서 요청을 중계, 처리하는 역할을 한다
ASP.NET MVC의 컨트롤러 클래스는 System.Web.Mvc.Controller 에서 상속받도록 한다
역시 다음에 자세히 알아 본다

Action Method
Controller 클래스에 정의된 메서드이다
컨트롤러에서 실제 요청을 처리하게 되는 메서드라 보면 된다
특정 요청은 라우팅 룰에 의해 특정 컨트롤러의 특정 메서드로 전달된다
이를 액션메서드라고 하며 이 메서드에서 요청 처리 및 뷰 선택, 데이타 전달을 수행한다

View
사용자에게 보여지는 영역이다
즉 최종 HTML 로 랜더링 되는 페이지로써 웹 브라우저에 표시되는 영역이다
HTML과 CSS, JavaScript 와 같은 클라이언트 웹 기술이 적용되는 페이지이며
<%=  %> 형태의 인라인코드로 서버측의 내용을 출력하게 된다

Model
모델을 정의하는 영역이다
모든 웹 응용프로그램은 특정 데이터를 다룬다
회원가입 시 회원데이터, 게시판의 게시물 데이터, 쇼핑몰의 상품데이터 등의 데이터들이
모델영역에 정의하게 되며 이 데이터는 컨트롤러에 의해 뷰로 전달되게 된다

ViewData
컨트롤러의 액션메서드에서 특정 뷰를 랜더할 때 전달할 데이터를 저장하는 공간이다
키/값 형태의 복수값을 저장할 수 있는 Dictory 구조로 이루어져 있다

간혹 강력한 형식의 뷰를 생성할 필요도 있는데,
이는 데이터를 정의하는 모델과 명시적으로 연결시키는 구조로 생성된다
이렇게 생성된 뷰에서는 모델의 결과데이터를 Model 이라는 키워드로 직접 액세스 할 수 있게 된다

ASP.NET MVC 4

ASP.NET MVC 모델에서는 (Views 폴더의) 모든 웹 리소스에 대한 직접 요청을 막아 두었다

사용자 화면(뷰)에 해당하는 Views 폴더에 있는 모든 aspx 파일에 대한 다음과 같은 요청은
모두 404 Not Found 로 처리된다
http://yourdomain.com/Views/Index.aspx

이것은 기존 웹폼 모델과 대조되는 면으로,
ASP.NET MVC에서의 사용자 화면(뷰)은 모두 컨트롤러에 의해 선택되고 랜더 되게 하기 위함이다
따라서 리소스에 대한 직접 요청은 의도적으로 막고 있는 것이다

Views 폴더의 Web.config 에 정의된 HttpNotFoundHandler
Visual Studio 에서 ASP.NET MVC 프로젝트를 생성하면 총 두개의 Web.config 가 생성된다
루트에 있는 Web.config 는 기존과 같이 응용프로그램 전역적인 설정 파일이며
Views 폴더의 Web.config 는 Views 폴더에만 적용되는 설정 파일인데, 이 파일에 정의된
HttpNotFoundHandler 가 리소스 직접 요청에 대한 Not Found 처리를 하는 HttpHandler 이다

<httpHandlers>
     <add path="*" verb="*"  type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>

위와같이 정의된 핸들러에 의해 Views 폴더의 aspx 파일을 포함한 모든 직접 요청은 404로 처리된다

참고로 ASP.NET 웹폼 모델에서는 *.aspx 에 대한 처리는 System.Web.UI.PageHandlerFactory 라는
핸들러에 의해 처리되었다

HTTP 핸들러에 대한 개념과 기본 등록된 핸들러 정보는 다음 링크에서 확인할 수 있다
[ASP.NET] HTTP Handler
[ASP.NET] HttpHandler- Demo
[ASP.NET] Machine.config 미리 정의된 HttpHandler


ASPX 파일만 막기
기본 구성으로는 Views 폴더의 모든 리소스에 대한 직접 접근을 막고 있다
경우에 따라서는 Views 폴더에 ASPX 외에 다양한 웹 리소스가 위치할 수 있다

예를 들어 이미지파일이나 css, js 파일, pdf 파일 등을 들 수 있다
이러한 웹 리소스에 대한 직접 요청은 정상적으로 되길 원할 수도 있다
그렇다면 핸들러 정보를 다음과 같이 수정하여 ASPX 파일만 막도록 하면 된다

<httpHandlers>
     <add path="*.aspx" verb="*"  type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>

그러나 ASP.NET MVC 모델에서는 뷰를 제외한 기타 웹 리소스를 Views 폴더에 두지 않기를 권장한다.이미지나 CSS, JS 와 같은 정적이고 공개적인 웹 리소스들은 자동으로 생성된 Content 폴더에 두는 것이다

참고: http://haacked.com/archive/2008/06/25/aspnetmvc-block-view-access.aspx

ASP.NET MVC 3

앞서 ASP.NET MVC 에서 요청 매개변수 넘기기 에서는 URL 질의 방식에 ASP.NET MVC이
어떻게 반응하는지 알아 보았다. URL에 매개변수를 전달하는 방식은 GET 요청에 해당한다

이번에는 ASP.NET MVC이  POST 요청을 어떻게 처리하는지 알아 보도록 하자

POST 요청의 보편적인 모습은, HTML 입력 양식을 이용한 폼 데이타 제출이다
이 글에서는 간단한 회원가입 폼을 POST 로 전송하고 이를 처리하는 방법을 다룬다

ASP.NET MVC 프로젝트를 하나 생성하고 컨트롤러에 엑션 메서드를 하나 추가한다

- HomeController.cs 에 액션 메서드 추가하기
public ActionResult RegisterForm()
{          
    return View();
}

- 회원 가입 페이지 (뷰)  생성하기
그리고 이 액션 메서드에 해당하는 뷰를 생성한다
생성된 RegisterForm.aspx 뷰 페이지는 회원가입 입력 양식을 아래와 같이 정의한다
<body>
    <h1>회원가입</h1>  
    <form action="/Home/RegisterForm" method="post">      
        <p>아이디: <input type="text" name="MemberID" /></p>
        <p>비밀번호: <input type="password" name="Password" /></p>
        <p>닉네임: <input type="text" name="NickName" /></p>
        <p>이메일: <input type="text" name="Email" /></p>
        <input type="submit" value="가입하기" />         
    </form>
</body>
전형적인 폼 양식이다. 이제 프로젝트를 빌드하고 페이지를 호출해 보자
http://localhost:11102/Home/RegisterForm




- 모델 정의 하기
아직 폼 데이터를 처리 할 수 있는 것은 아니다. 회원정보에 해당하는 자료형을 모델로 정의해 보자.
이 모델을 기반으로 폼 데이터가 처리될 것이며 결과 뷰역시 이 모델을 기반으로 작성될 것이다

프로젝트의 Model 폴더에 Member.cs 라는 클래스를 만들고 다음과 같이 작성한다
이때 RegisterForm 뷰에서 정의한 폼 요소들의 Name 속성과 일대일 대응하도록 속성명을 정의하자
public class Member
{
    public string MemberID { get; set; }
    public string Password { get; set; }
    public string NickName { get; set; }
    public string Email { get; set; }

   
public void Submit()
{
        //멤버정보를 DB에 입력하는 등의 실제 작업을 처리한다
    }
}

- 컨트롤러 수정하기
그리고 폼 데이타 수신을 위해 컨트롤러를 다음과 같이 수정한다
AcceptVerbs 어트리뷰트를 통해 GET 과 POST 요청을 직접 명시한다
이렇게 하면 get, post 요청에 적절한 액션메서드가 선택될 것이다
즉 동일한 {controller}/{action} 요청이지만 get, post 요청에 따라 (이름은 같지만) 다른 메서드가
호출되는 것이다

또한 각 액션 메서드의 반환 값을 보면,
get 요청에는 기본 뷰인 RegisterForm.aspx 가 랜더되도록 했으며(return View();),
post 요청에는 명시적으로 이름을 지정하여 RegisterComplete.aspx 뷰가 랜더되도록 하였으며
mebmer 객체를 뷰로 전달하고 있다
(return View("RegisterComplete", member))


그리고 post 요청에 해당하는 액션 메서드의 매개변수를 주의깊게 보자
모델에서 정의한 Member 객체를 post 메서드의 매개변수로 취하고 있다

ASP.NET MVC '모델 바인딩 매커니즘'은 폼 전송으로 전달된 데이터의 키(Key) 정보를 바탕으로
Member 객체의 속성명에 일대일 매칭시켜 값을 자동으로 바인딩 시켜 준다

<input type=text name=MemberID>의 값이 Member.MemberID 로 자동 바인딩이 된다는 말이다

public class HomeController : Controller
{
    [AcceptVerbs(HttpVerbs.Get)]
    public ActionResult RegisterForm()
    {          
        return View();
    }
    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult RegisterForm(Member member)
    {
        member.Submit();
        return View("RegisterComplete", member);
    }
}

- 강력한 형식의 뷰 만들기 (회원가입 완료 페이지(뷰) 생성하기)
이제 회원가입 완료 페이지에 해당하는 RegisterComplete 뷰를 생성해 보자
Controller 아무 영역에다 대고 마우스 우클릭 -> Add View 해서 뷰를 생성하는데
아래 그림과 같이 'Create a strongly-typed view' 를 선택해서 모델로 정의했던
Member 클래스를 View data class 로 선택하도록 한다

이렇게 특정 클래스를 기반으로 강력한 형식의 뷰를 만들게 되면
View data class에 정의된 객체를 뷰에 직접 랜더링 할 수 있게 된다


그리고 생성된 RegisterComplete.aspx 는 다음과 같이 작성한다
이 뷰는 강력한 형식으로 생성된 뷰이기 때문에 Model 이라는 키워드를 통해 직접 모델 데이터에
접근할 수 있게 된다
. 아래 코드는 폼 데이터로 전송되어 모델 객체에 바인딩 된 값을 다시 결과 화면에
뿌리고 있는 것이다
<body>  
    <h1>회원가입을 축하드립니다</h1>
    <p>아이디: <%= Model.MemberID %></p>
    <p>닉네임: <%= Model.NickName %></p>
    <p>이메일: <%= Model.Email %></p> 
</body>

ASP.NET MVC 2

*이문서는 박종명님블로그를 기반으로 만들어진 문서입니다.
   Posted in
모바일, 그리고 웹(Web)/ASP.NET MVC // Posted at 2010/08/05 13:39

ASP.NET MVC 에서 요청 매개변수 넘기기


이전 ASP나 ASP.NET 웹폼 모델에서는 URL의 꼬리표에 붙여 있는 매개변수를
Request 객체를 통해전달 받을 수 있었다

즉 다음과 같이 두 개의 매개변수를 URL 에 붙여서 매개변수를 전달하게 되면,
요청 URL: http://yourdomain/main.aspx?param1=value1&param2=value2

아래처럼 매개변수 정보를 취할 수 있다(ASP.NET 기준)
string value1 = Request.QueryString["param1"].ToString();
string value2 = Request.QueryString["param2"].ToString();

그렇다면 ASP.NET MVC 모델에서는 매개변수를 어떻게 전달하고 받는지 알아보도록 하자

기본은 동일하다
ASP.NET MVC 역시 이전 웹폼 모델과 동일한 형태로 매개변수를 넘기고 받을 수 있다

즉 아래와 같이 요청 URL 에 ? 꼬리표로 매개변수를 전달하면
HomeController 의 Index 액션 메서드에서 다음과 같이 매개변수에 접근할 수 있게 된다

요청 URL: http://localhost:11102/Home/Index/?name=Park&age=10

public
ActionResult Index()
{
    string name = Request.QueryString["name"].ToString();
   string age = Request.QueryString["age"].ToString(); 
    ViewData["param"] = String.Format("Hello, {0}, Your age {1}", name, age);
    return View();
}


액센메서드의 매개변수로 전달 받기
URL 에 포함되어 있는 매개변수를 액션 메서드의 매개변수로 전달 받을 수도 있다
아래 코드는 Index 매개변수를 통해 URL로 전달되는 매개변수를 전달 받고 있다

요청 URL: http://localhost:11102/Home/Index/?name=Park&age=10

public
ActionResult Index(string name, string age)
{
    ViewData["param"] = String.Format("Hello, {0}, Your age {1}", name, age);
    return View();
}

액션 메서드를 통해 매개변수를 전달 받는 것은 ASP.NET MVC 프레임워크에서 제공해 주는 기능이며
이전 형태 보다는 조금 더 ASP.MVC 스럽다고 할 수 있겠다

액션 메서드로 매개변수를 전달 받을 경우 URL 에 정의된 매개변수 명과 액션메서드에 정의된
매개변수 명이 동일해야 한다는 규칙이 있다(순서는 상관 없다. 변수 이름이 중요하다)



참고로 URL 에 매개변수가 있다고 해서 반드시 액션 메서드에 매개변수를 정의 해야 하는 것은 아니다
그리고 그 반대의 경우, 즉 액션메서드에 매개변수가 정의 되었다고 해서 반드시 URL에 매개변수를 넘겨야 하는 것은 아니다 (물론 이 두 경우는 매개변수를 사용하지 않을 경우이다)

예를 들어 URL 에 매개변수가 생략되었을 경우 액션메서드로는 null 을 전달하게 될 것이다


URL 스키마 사용자 정의
앞서 Request.QueryString 으로 매개변수를 가져오는 방식에 비해 액션 메서드의 매개변수로 가져오는 것이 보다 깔끔하고 직관적이라는하다는 것을 느낄 수 있다.
이것은 매개변수를 가져오는 측면에서 ASP.NET MVC 가 지원해 주는 부분이 되겠다

이번에는 매개변수를 전달하는 측면에서의 ASP.MVC 의 장점을 살펴 보자

앞서 요청 URL은 다음과 같은 스키마로 이루어 졌었다
http://localhost:11102/Home/Index/?name=Park&age=10

전통적인 방식으로 URL에 ? 꼬리표를 통해 매개변수를 전달하고 있다
우리는 이러한 요청 URL을 보다 깔끔하게 변경하고 싶다

ASP.NET MVC 에서는 URL 스키마를 개발자의 입맛대로(?) 재 구성할 수 있는 방법을 제공해 준다.

이는 ASP.NET MVC의 라우팅 엔진이 제공해 주는 기능인데,
Global.asax 의 RegisterRoutes 메서드의 커스트마이징을 통해 구현할 수 있다

우선 매개변수를 어떤 형태의 URL 스키마로  정의할 지 결정해야 하는데,
다음과 같이 '/(슬래쉬)'를 계속 이어가고 싶다고 가정해 보자

http://localhost:11102/Home/Index/매개변수1/매개변수2

이와 같은 URL 스키마를 실현하기 위해 Global.asax 파일에 정의된
RegisterRoutes 메서드를 약간 수정해 보자
public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        "Default",

        "{controller}/{action}/{name}/{age}", // URL with parameters

              new { controller = "Home", action = "Index",
name = UrlParameter.Optional,
                         age = UrlParameter.Optional }
  );
}


MapRoute 메서드의 두 번째 정보에 URL 스키마를 정의한다
우리가 결정한 URL 스키마를 실현하기 위해 /(슬래시)로 매개변수를 취할 수있도록 하였다
컨트롤러/액션메서드/name매개변수/age매개변수 형태로 정의함
=> "{controller}/{action}/{name}/{age}"


그리고 다음과 같이 각 매개변수의 옵션 여부를 지정하였다
이는 name, age 정보가 URL에서 생략될 수 있다는 의미이다
name = UrlParameter.Optional,
age = UrlParameter.Optional

이제 구성이 완료 되었으니 다음과 같은 요청에 정상적으로 반응하게 될 것이다
http://localhost:11102/Home/Index/Park/10


만일 다음과 같은 URL을 원한다면,
http://localhost:11102/Home/Index/Park-10

다음과 같이 정의하면 된다
"{controller}/{action}/{name}-{age}"

참고로 이런 식으로 URL 스키마 재정의로 매개변수 정보를 구성하였다면,
더 이상 Request.QueryString 로 받을 수 없다는 것에 주의하자
-----------------------------------------------------------------------------------

마지막으로 URL 재구성된 상태에서 전통적인 ? 매개변수 전달을 같이 혼용하면 어떻게 될까?
다시 말해 다음과 같은 URL 요청은 어떻게 되는지 살펴 보자

요청 URL: http://localhost:11102/Home/Index/Park/10?name=Kim&age=20

액션메서드:
public
ActionResult Index(string name, string age)
{
    ViewData["param"] = String.Format("Hello, {0}, Your age {1}", name, age);
    return View();
}

이를 경우 URL 로 재구성된 매개변수 정보가 먼저 참조 된다
즉 URL 요청으로 부터 전달되는 name, age 라는 매개변수가 각각 두 개씩 이지만
URL 재구성에 의한 name=Park, age = 10 이 전달되는 것이다

그러나 만일 URL 스키마에서 매개변수 정보를 생략하고 다음과 같이 요청 된다면,
http://localhost:11102/Home/Index/?name=Kim&age=20

결과는 ?  매개변수가 전달되게 된다

ASP.NET MVC 는 라우팅 구성 정보에 의거한 적절한 매개변수를 가져올 수 없는 경우
전통적인 ? 질의 문자열에서 매개변수를 가져오게 되는 것이다

ASP.NET MVC 1

*이문서는 박종명님블로그를 기반으로 만들어진 문서입니다.
   Posted in
모바일, 그리고 웹(Web)/ASP.NET MVC // Posted at 2010/08/05 13:39



가장 심플한 형태의 ASP.NET MVC 를 만들어 보자
모든 개발 공부는 가장 기본적인 구조에서 부터 출발하여 기술확장, 응용력확장을 해 나가는 것이 원칙이다.
처음부터 복잡한 형태를 이해하려고 하면 진입이 어려워서 쉽게 흥미를 잃어버리기 마련이다.
따라서 ASP.NET MVC 기반의 Hello World 샘플을 제작해 보도록 한다


1. ASP.NET MVC 프로젝트 생성
Visual Studio 2008 에서 새프로젝트를 만든다
아래그림과 같이 ASP.NET MVC2 Web Application 템플릿을 선택하고 프로젝트와 솔루션 이름은
HelloWorld 로 한다



확인을 클릭하면 아래 그림과 같이 유닛테스트 프로젝트 생성 여부를 묻는데,
우리는 간단한 데모를 빨리 만들어 볼 목적이므로 생성하지 않도록 한다


이렇게 프로젝트를 생성하면 VS는 자동으로 응용프로그램을 코드와 파일들을 마련해 주는데
이 자체가 하나의 ASP.NET MVC 프로그램이 된다

바로 F5를 눌러 실행시켜 보도록 하자
그러면 아래 그림과 같이 적당히 이쁜 웹 페이지를 브라우저에서 확인할 수 있다


간단한 멤버십 기능과 Home, About 링크가 제공된다
이 차제만으로도 훌륭한 샘플 데모이지만 처음 보기에는 조금 복잡해 보일 수도 있다

우리는 자체적으로 Hello World 만 출력해 볼 목적이므로 관련 파일들을 정리하도록 한다


2. 프로젝트 자동 생성 파일 정리하기
처음 생성된 프로젝트 구조를 보면 아래 왼쪽 그림과 같이 꽤 많은 파일들이 포함되어 있다
이를 오른쪽 그림과 같이 설정파일과 폴더구조만 남겨두고 모든 파일을 삭제하자
=>

이렇게 파일들을 제거하고 다시 실행을 해 보면 아래와 같은 오류를 보게 될 것이다
뷰와 컨트롤러를 모두 삭제했으니 페이지를 찾을 수 없다는 오류가 난 것이다





3. 뷰와 컨트롤러 생성하기
이제 Hello World 를 화면에 출력하기 위해 뷰와 컨트롤러를 생성해 보도록 하자

ASP.NET MVC 환경에서는 모든 요청의 출발은 컨트롤러(Controller)이다
컨트롤러가 요청에 대한 적절한 처리를 수행한 뒤 특정 뷰를 선택해 랜더링 되도록 한다
따라서 먼저 컨트롤러를 생성해 보도록 하자

솔루션탐색기에 Contollers 폴더에서 추가 -> Controller 해서
다음과 같이 HomeController 를 생성한다


그러면, Controller 클래스로 부터 상속받은 HomeColtroller 클래스와 Index 라는
액션메서드가 자동 생성된다. 코드를 아래와 같이 조금 수정하도록 하자

public class HomeController : Controller
{
public ActionResult Index()
{
ViewData["param"] = "HelloWorld";
return View();
}
}

ViewData 는 컨트롤러에서 뷰로 데이터를 전달하기 위한 키/값 구조로 이루어진
Dictory 형태의 자료형이며 여기에 "Hello World" 라는 문자열을 전달하기로 한다

그리고 메서드의 반환 값으로 ActionResult 인데 Index 액션 메서드가 특정 뷰를 페이지를
랜더링 하도록 하는 것이다. 여기서는 return View()로 뷰이름을 생략하였는데 기본값으로
메서드 이름인 Index 뷰(Index.aspx)를 선택하게 되는 것이다

다음으로 Index 메서드 아무 위치에서 마우스 우클릭해서 Add View 를 선택한다
이는 HomeController 의 Index 액션메서드의 뷰를 생성하는 것이다



뷰 이름은 Index로 하고 Add를 클릭하면,
프로젝트의 Views 폴더에 Home 폴더아래 Index.aspx가 생성된다


Index.aspx 의 안에 다음의 태그를 추가하자
컨트롤러에서 전달한 데이터를 뿌려주는 것이다


<%=ViewData["param"] %>

이제 다 됐다. F5 키로 프로젝트를 실행 해 보자.
아래 그림과 같이 Hello World 가 출력되는 것을 확인할 수 있다



사실 이렇게 간단한 출력을 위해서는 굳이 View 페이지나 ViewData 자료전달이
불필요 할 수 있지만, 테스트를 위해 갖추어 봤다


* URL 라우팅 잠시 살펴보기
매우 간단한 Hello World 를 다 만들어 봤다
그런데 프로젝트를 실행해서 요청 URL을 확인해 보면 다음과 같다

http://localhost:11102/

솔루션 탐색기의 Index.aspx 파일은 /Views/Index.aspx 에 있는데 말이다

게다가 정직한(?) 형태로 다음과 같이 웹 리소스 경로 그대로를 요청하면 404 Not Found 오류가 난다
http://localhost:11102/Views/Index.aspx

이유인 즉,
ASP.NET MVC는 URL 라우팅 엔진을 포함하고 있는데 이 라우팅 엔진에 의해
URL 이 해석되고 요청에 대한 컨트롤러와 액션 메서드를 선택하여 호출하게 된다
그리고 이 액션메서드에서 뷰를 선택하도록 되어 있기 때문에 URL 구조가 이전과는
다른 형태가 되는 것이다

URL 라우팅이 URL을 어떻게 해석하고 어떤 컨트롤러에게 보내야 할지 결정하게 되는
규칙을 마련해야 하는데 이 규칙은 Global.asax 파일에 다음과 같이 정의되어 있다

public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}

URL 규칙은 controller/action/id 형태로 이우러지며
기본값으로는 controller = "Home" , action = "Index" 로 정의되어 있다


즉 앞서 요청과 같이 (http://localhost:11102/) 컨트롤러와 액션메서드 없이 호출하게 되면
자동으로 Home 컨트롤러, Index 액션메서드가 선택되어 실행되는 것이다

따라서 위 규칙에 맞는 다음과 같은 요청은 모두 같은 것이 된다
- http://localhost:11102/ : 컨트롤러, 액션메서드 지정 없음. 기본 값 사용
- http://localhost:11102/Home : 컨트롤러 지정, 액션메서드는 기본 값 사용
- http://localhost:11102/Home/Index : 컨트롤러, 액션메더스 모두 명시함

2011년 4월 4일 월요일

안드로이드 개발 환경 구축하기

*이문서는 아웃사이더님블로그를 기반으로 만들어진 문서입니다.

1 . 버전정보

1. Android SDK : android_sdk_r10
2. Eclipse : Helios Service Release 2

2. 구축순서
1. 안드로이드 SDK 설치
2. 이클립스에 ADT 플러그인 설치
3. 안드로이드 플랫폼 및 컴포넌트 추가



3. 안드로이드 SDK 설치

개발환경은 Windows, Mac OS X, Linux 모두 가능합니다.
이클립스가 필요하고 자바기반이므로 당연히 JDK 5이상이 필요합니다.

[SDK 다운로드 페이지]
http://developer.android.com/sdk/index.html

OS맞는 안드로이드 SDK를 다운로드 받은 뒤에 별도의 설치 없이 원하는 위치에
압축을 풀어주면 됩니다.
예) C:\Program Files\android-sdk-windows


[내 컴퓨터] - [속성] - [고급]탭 - [환경변수] - 시스템변수에서 Path에 SDK의 tools폴더의 전체 경로를 추가해줍니다.
(예) C:\Program Files\android-sdk-windows\tools 입니다.)


~./bash_profile나 ~/bashrc파일을 수정하거나
sudo gedit /etc/environment 로 path부분에 tools폴더의 절대경로를 추가해주면 됩니다.
추가된 패스는 재로그인후에 적용이 되며
envecho $PATH 명령어를 통해서 적용여부를 확인할 수 있습니다


OSX의 경우 sudo vi /etc/paths 를 실행한 뒤에 안드로이드 SDK 의 tools의 경로를
입력해 준 뒤에 재 로그인한다.
path의 확인은 우분투와 동일하게 envecho $PATH를 통해서 확인해 볼 수 있습니다.


4. ADT 이클립스 플러그인 설치
ADT(Android Development Tools) 플러그인은 이클립스에서 안드로이드를 개발할 수 있도록 해주는 플러그인입니다.
이클립스에서는 [Help] - [Install New Software]에서 상단의 Add를 눌러서 적당한 Name을 적어주고 Location에 https://dl-ssl.google.com/android/eclipse/ 를 추가해주면 됩니다.

ADT 플러그인 설치 화면

Android DDMS와 Android Development Tools를 선택하고 설치를 진행합니다.

사용자 삽입 이미지

이클립스의 메뉴에서 [Window] - [Preferences]에서 좌측트리메뉴에서 Android를 선택한 후에 SDK폴더의 위치를 지정해 줍니다.



5. Android 플랫폼 및 컴포넌트들 추가
이 과정은 SDK 스타터 팩키지(Android SDK, AVD Manger)를 설정하는 과정입니다.
SDK 레파지토리는 아래와 같은 컴포넌트 타입들을 제공하고 있습니다.
  • SDK Tools : 애플리케이션 코드와 UI에 대한 개발, 디버깅, 테스팅에 대한 SDK 셋입니다.
  • Android platforms : 안드로이드 기반의 기기를 위한 SDK 플랫폼입니다. 각 플랫폼은 전체 안드로이드 라이브러리와 시스템 이미지, 샘플코드, 에뮬레이터, 스킨과 각 버전에 특화된 툴들이 포함되어 있습니다.
  • SDK Add-Ons : SDK 애드온은 특정한 외부 안드로이드 라이브러리를 위한 개발환경을 제공합니다.
  • USB Driver for Windows : 실 제 디비이스에서 앱을 돌려보고 디버길할 수 있도록 윈도우즈 컴퓨터에서 드라이버 파일들을 추가할 수 있습니다. 실제기기에서 디버깅할 계획이 없다면 USB 드라이버가 필요없으며 OS X나 Linux에서는 디버깅하기 위해서 드라이버가 필요없습니다.
  • Samples : 각 안드로이드 개발 플랫폼의 샘플코드가 제공됩니다.
  • Documentaion : 안드로이드 프레임워크 API의 최신 문서가 포함됩니다.

사용자 삽입 이미지


[Window] - [Android SDK and AVD Manager]에서 Available Packages를 선택해서
원하는 안드로이트 플랫폼 및 컴포넌트들을 추가합니다.
AVD(Android Virtual Device)상에서 앱을 구동하기 위해서는 1개이상의 플랫폼을
설치하여야 합니다.

Fetch links Quick & Easy. Stream and Direct Download. Give it a try at http://seedr.cc now!

  Fetch links Quick & Easy. Stream and Direct Download. Give it a try at http:// seedr.cc now!   Fetch links Quick & Easy. Stream a...