MixedCode

2.1 웹프로그래밍 기술구성요소
2.2 클라이언트 vs 서버 & 관련기술들
2.3 ASP.NET MVC5 기술소개
2.4 VisualStudio 2015 개발툴 사용법
2.5 ASP.NET MVC5 프로젝트 개발기초
2.6 윈도우 서버 와 IIS 웹서버 소개


ASP.NET MVC5 프로젝트 템플릿을 이용해 프로젝트 구조와 주요폴더/파일들에 대해 먼저 알아보겠습니다.

1.ASP.NET MVC5 Project Structure 


솔루션 탐색기내 웹프로젝트내의 다양한 폴더들에대해 간략히 설명드립니다.

-App_Data : 파일형태의 데이터파일이 존재하는 폴더(Sql Server Express, Access, or SQLite 파일DB)-분산DB가 아닌 로컬 DB파일임.
-App_Start : 웹 어플리케이션이 실행되는 시점에서의 프로그램밍 방식으로 환경 설정하는 공간
-Content: CSS 및 CSS관련 리소스를 저장관리하는공간(유동적임)
-Controllers: MVC의 Controller 클래스들을 존재하는 공간
-fonts: 폰트폴더(유동적임)
-Models:MVC에서 Model 클래스들이 존재하는 공간
-Scripts: JQuery등 각종 자바스크립트 파일 및 스크립트 라이브러리 파일저장공간
-Views: MVC에서의 View들이 존재하는공간,뷰는 컨트롤러에 의해서 자동으로 만들수 있음.
ㄴHome: Home컨트롤러 관련 뷰(화면) 파일들이 존재하는 공간
ㄴShared: 각 화면들에서 공유해서 사용하는 화면들이 존재하는공간(레이아웃(마스터) 화면,파셜(부분)뷰화면등
  ㄴLayout.cshtml : 모든화면의 공통영역인 레이아웃(마스터)화면 뷰파일임.
-Global.asax : 어플리케이션의 실행에서 부터 종료까지 Application의 생애주기를 관리할수 있는 전역정보관리 파일
-packages.config : 팩키지 정보구성정보를 관리합니다.
-Web.config : 웹 어플리케이션 각종 환경설정정보를 XML파일 형태로 관리합니다.

2.Controller 만들고 구조이해하기
-MVC에서의 컨트롤러는  사용자 브라우저에서 입력하는 URL에도 포함되는 요소로 컨트롤러를 호출하여 웹페이지결과값을 전달받습니다.
-MVC패턴으로 개발된 웹 응용프로그램은 직접적으로 웹페이지(View)를 호출하지 않으며 일반적으로 컨트롤러의 메소드(액션 메소드)를 호출하여 액션메소드내의
로직에 의해 데이터를 조회하여 그결과를  웹페이지(뷰)에 전달하고 최종적으로는 데이터와 뷰(html)의 결과물이 브라우저에 전달됩니다.
http://mixedcode.com/Article/Index?aidx=1066
상기 도메인 이하 URI를 분석해보면
ArticleController 의 Index란 메소드(액션메소드) 를 호출할때 전달 매개변수(파라메터)로 aidx란 매개변수명으로 1066란 값을
QueryString(Get)방식으로 액션메소드에 파라메터를 전달합니다.


A.컨트롤러 만들기
1) 솔루션 탐색기내 웹프로젝트의 Controllers폴더에 오른쪽 마우스 클릭>추가>컨트롤러를 클릭합니다.


2)팝업에 좌측 메뉴 일반>컨트롤러 클릭 중간영역에 MVC 5 컨트롤러 -비어있음 선택 후 추가 버튼을 클릭하여 빈 컨트롤러를 추가합니다.

3)신규 컨트롤명을 Default에서 Test등의 신규이름으로 변경하고 반드시 접미사를 Controller로 입력하고 추가버튼을 클릭합니다.
-ASP.NET MVC는 반드시 컨트롤러명으로 "이름명"+"Controller" 로 명명해야하는 규칙이 존재합니다.


4)Controllers 폴더에 신규로 추가한 컨트롤러가 생성된것을 확인할수 있습니다.


5) 컨트롤러를 신규로 추가하면 자동으로 Views폴더내에 컨트롤러명으로 뷰폴더가 생성되며 해당 컨트롤러내에 있는 액션메소드와 관련된 모든뷰는 기본적으로 해당 컨트롤러 뷰폴더내에 생성되고 존재하게 됩니다.



B.컨트롤러의 기본구조 이해하기

다음 그림은 컨트롤러의 기본구조입니다. 컨트롤러는 클래스라는 프로그램밍 기본 단위를 통해 코딩을 합니다.
하나의 클래스는 그 안에 여러개의 기능과 특성(속성)을 가질수 있으며 특히 컨트롤러 클래스는 브라우저로 부터 호출되는 구체적인 대상인
메소드(액션메소드)를 통해  브라우저의 요청에 대한 데이터 호출 및 뷰(UI)를 제어하는 기능을 제공합니다.



ㅁ참조영역
-컨트롤러 클래스 코딩화면의 최상단에는 using.... 이런형식의 참조영역이 존재합니다.
-기존에 어떤한 응용프로그램을 개발하기 위해서는 응용 프로그램머들이 쉽게 개발할수 있게 제공되는 라이브러리/프레임워크/플랫폼등이
서버컴퓨터든 개발자용 컴퓨터에든 설치가 되어 있으야하고 이렇게 설치된 라이브러리들을 개발툴에서 사용하기 위해서는 참조란 과정을 통해야 코딩이
가능해집니다.

ㄴ물리적 참조: 물리적 참조란 실제 프레임워크의 물리적 기본 단위인 라이브러리(~.dll etc) 파일의 물리적 경로를 해당 프로젝트에서 물리적 위치를 참조하여
사용하려는 라이브러리를  해당 프로젝트에 연결시키는 행위를 말합니다.
-물리적 참조하는 방법은 솔루션 탐색기에서 해당 프로젝트에 참조폴더에  오른쪾 마우스클릭> 참조추가를 통해 실제 물리적 경로상의 라이브러리 파일을 선택하여 프로젝트에 추가합니다.

ㄴ논리적 참조: 물리적 참조 이후 실제 코딩을 하는 클래스에서 물리적 라이브러리안에 존재하는 클래스들의 논리적구조(네임스페이스) 경로를 참조하는 행위를
말합니다.
-논리적 참조 방법은 클래스 파일 상단에서 using 구문을 통해  물리적 라이브러리 파일내에 존재하는 각종 클래스의 논리적 구조(네임스페이스)를 클래스내에서
사용할수 있도록 클래스 상단에 선언하는 방식으로 참조합니다.

-프로젝트에서 특정기능을 구현하기 위해 외부 또는 이미 설치된 프레임워크 라이브러리를 사용하기 위해서는
첫쨰, 오른쪽 화면에서처럼 프로젝트에 물리적으로 해당 라이브러리들을 참조해야합니다.
둘쨰, 물리적을 참조된 라이브러리를 클래스에서 사용하려면 클래스 상단에서 using 구문을 통해 물리적 파일내의
논리적 클래스 구조를  코드로 참조해줘야합니다.
 
Tip
응용 프로그램(Application Program)

ㄴ응용 프로그램이란 프로그램을 개발시 특정 언어와 환경에 최적화된 각종 라이브러리/프레임워크/플랫폼을 이용해 해당 비지니스를 좀더 빨리/효율적으로 개발하는 프로그램방식을 말합니다. 
즉, 특정언어와 특수 목적(Web,Mobile,Desktop...)을 위해 개발된 프로그램밍 덩어리인 플랫폼 또는프레임워크들을 응용(Application)해 개발되는
대부분의 현대적 프로그램밍은 모두 응용프로그램입니다.(웹 응용프로그램,데스크톱 응용프로그램,모바일 응용프로그램....)

응용 프로그래머(Application Programmer)
ㄴ라이브러리/프레임워크/플랫폼을 응용해 2차 프로그램밍을 하는 프로그래머를 응용 프로그래머라 합니다.
- 라이브러리/프레임워크/플랫폼을 만드는 개발자는 사실 응용프로그래머들을 위한 프로그래머로  일반적으로는 코딩실력은 응용프로그래머 보다
좋으나 코딩실력 또는 비지니스에 대한 이해를 가지고 어느게  중요하다고  판단하기 어렵기 떄문에 이런 논쟁은 그리 중요치 않습니다.

ㅁ네임스페이스 정의 영역
-네임스페이스는 물리적 라이브러리(DLL,어셈블리,컴포넌트...)내의 각종 클래스들의 논리적 접근경로주소를 말하며 사용방법은
클래스 상위부분에서 namespace RootNameSpace명.하위네임구분명.네임구분명.....{ ..... } 이런형식으로 구분합니다
-네임스페이스는 물리적구조와 동일하게 해도 되고 다르게 묘사해도 되지만 중요한것은 프로그램 코딩시에는 라이브러리내에서의
물리적 클래스 파일구조는 코딩에서 사용되지 않으며 반드시 논리적 구조를 표현하는 네임스페이스 구조를 이용 참조한다는 것입니다.

ㅁ컨트롤 클래스 영역
-컨트롤은 클래스로 구현하며  public class 컨트롤명 : 베이스클래스 { ....} 형태로 코딩합니다.
-public 은 접근 제어자 다른 라이브러리/다른 클래스에서도 공용으로 접근해 사용할수 있다는 의미입니다.
-c#에서의 클래스내 " : " 의미는 상속을 받는다는 의미이며 상속은 클래스간 부모/자식관계를 만들어 부모클래스의 모든
기능과 속성을 물려받아 쉽게 프로그래밍을 구현하기 위한 객체지향 개념의 클래스 사용법입니다.
-ASP.NET MVC 의 모든 컨트롤러는 반드시 Controller라는 부모 클래스를 모두 상속받아 기능이 구현되어야합니다.

ㅁAction Method영역
-컨트롤러 클래스내에는 다양한 액션메소드가 존재할수 있으며 말 그대로 무언가 행위를 하는 메소드로 주로 다음과 같은 행위를 합니다.
ㄴ화면을 표현하는 뷰(화면-UI-웹페이지)요소를 직접 만든다..
ㄴ만들어진 뷰(화면)을 웹서버에 전달(출력)한다.
ㄴ데이터를  등록/수정/삭제/조회한다.
ㄴ데이터 처리 결과를 뷰(화면)에 삽입(전달)하거나 표준 데이터 포맷(JSON,XML)으로 Open API방식으로 데이터를 노출한다.
ㄴ비지니스 로직을 처리하거나 비지니스 로직 처리 전용 프로세스를 호출한다.
ㄴ각종 상태관리를 처리한다.

public ActionResult Index()
{
   //데이터/비지니스 로직 처리영역
   return View();
}

public은 접근 제한자로 해당 Index 액션메소드를 해당 컨트롤러 밖 영역에서도 접근 호출할수 있게 해주는 역할을 하며 ActionResult 는 메소드 실행 후 반환할 결과의 유형을 말하며 ActionResult클래스는 액션메소드에 의해 실행된  다양한 종류의 결과물을 담을수 있는 클래스입니다.

액션 메소드내에서 데이터 처리나 비지니스 로직을 처리하는 코딩을 합니다.
return View(); 액션메소드가 실행된 후 최종 결과값을 반환하는 코드로 현재는 TestController의 부모 클래스인 Controller의 View()라는 메소드를 호출하여 해당 액션메소드와 매칭되는 기본뷰(화면)을 조회하여 뷰를 실행시킵니다.

Controller의 View()메소드는 다양한 파라메터를 전달받을수 있는 오버로딩 메소드로 데이터 조회결과등을 뷰로 전달하여 뷰에서 컨트롤러로부터 전달받은
데이터를 동적으로 HTML코드를 만들어 내는 기능을 제공하기도 합니다.


3.View 만들고 구조 이해하기

 -자 이제는 실제 웹페이지 소스가 들어가 있는 뷰를 만들어 보도록 하겠습니다.
MVC에서 View(뷰)는 화면,UI(User Interface)를 뜻하며 실제 HTML,CSS,Javascript,웹프로그래밍 코드(C#,Razor문법)등이 혼합되어 있는 웹페이지 문서이며 개발언어에 따라 뷰 파일의 확장자명은 달라집니다.

MVC에서 뷰페이지는 C#언어를 이용하는 경우는 ~.cshtml VB.NET언어를 이용하는 경우는 ~.vbhtml 문서로 표현합니다.
일반적으로 뷰페이지는 컨트롤러의 액션메소드를 통해 뷰 페이지를 생성하고 보통 1:1 매칭됩니다.

뷰페이지의 종류는 웹사이트 전체 화면의 레이아웃을 잡아주는 마스터 페이지 개념의 레이아웃 페이지뷰가 있으며 레이아웃 페이지의 컨텐츠영역을
구성하는 컨텐츠뷰 와 모든 화면에서의 재사용이 가능한 특정영역을 표기할 목적으로 만드는 부분뷰(파셜뷰)등으로 나뉩니다.
 

A.레이아웃 페이지 뷰 만들고 구조 이해하기

-모든 웹페이지의 공통 레이아웃 페이지를 만드는 기능을 제공합니다.
-컨텐츠 페이지의 마스터 페이지가 될수도 있으며 팝업 페이지의 마스터 페이지가 될수도 있고 웹사이트내 성격이 다른 다양한 종류의 대메뉴가 존재한다면 전체 웹페이지의 마스터 페이지를 만들고 대분류별 서브마스터 페이지를 만들수도 있겠죠.

-레이아웃 뷰는상기 그림에서 녹색영역을 말하며 컨텐츠 영역은 흰색영역입니다.
1)MVC 레이아웃 뷰 페이지는 Views폴더내에 Shared폴더내에 생성하며 Shared폴더에 오른쪽 마우스 클릭 추가>MVC 5 레이아웃 페이지(Razor) 를 클릭합니다.


2)레이아웃 페이지명을 입력합니다.

접두사는 '_' 로 접미사는 'LayOut'으로 끝나게하여 해당페이가 한눈에 레이아웃 페이지임을 알수있게 페이지명을 명명합니다.
"_" + 레이아웃페이지명 +"LayOut".cshtml


3)Shared폴더에 TestLayout.cshtml 레이아웃 페이지가 생성된것을 확인합니다.
-여러개의 레이아웃 페이지가 존재시 디폴트 기본 레이아웃 페이지를 변경하려면 Views폴더 아래에 있는 _ViewStart.cshtml 페이지를
열어 Layout = "~/Views/Shared/_Layout.cshtml"; 다른 레이아웃 페이지로 변경하면됩니다.


-기본적인 레이아웃 페이지는 마스터 페이지 성격을 가지고 있으므로  하나의 웹페이지 구조 템플릿을 모두 제공합니다.
-신규로 생성된 레이아웃(Razor) 페이지는 Razor 뷰엔진을 사용하고 Razor 코딩방식을 따릅니다.

-Razor 코딩방식은 순수(정적) HTML 코드기반에 원하는 위치에서 웹프로그래밍 코드삽입하여 프로그래밍하는 전통적인 웹프로그래밍 방식을 따릅니다.
-Razor 뷰엔진은 @ 구분자 표기를 통해 HTML코드내에서 현재위치에서 C#코딩을 시작하겠다고 선언하고 바로 C# 코딩을 인라인으로 삽입하고 삽입된
C# 인라인코드는 컴파일러에 의해 바로 실행되어 HTML코드나 텍스트를 해당 위치에 반환하게 됩니다.

@ViewBag.Title 코드에서 ViewBag 은 컨트롤러와 관련 뷰간 데이터를 공유/관리 할수있는 뷰페이지상에서 데이터를 보관하는 장소로 컨트롤러 와 뷰페이지가 동시에 접근제어가 가능하기에 간단한 데이터의 뷰에대한 전달 또는 뷰상에서의 데이터 변경을 컨트롤러에 전달할수 있는 좋은 수단으로 사용됩니다.

@ViewBag.Title은 ViewBag 안에 Title이란 속성을 만들고 해당 속성에 데이터를 넣거나 수정하거나 할수 있으며  html title 태그의 값을 컨트롤로에서
지정한 타이틀 값으로 출력하기 위해 <title></title>태그사이에 두어 ViewBag.Title 값이 존재하면 출력하고 없으면 출력하지 않습니다.

@RenderBody()는 하나의 전체 페이지에서 레이아웃 페이지를 제외한 컨텐츠 페이지를 렌더링하는 위치를 지정하고 컨텐츠 페이지를 표기합니다.
 

상기 기본 레이아웃 템플릿 페이지의 구조를 조금 더 분석해보겠습니다.
우리가 신규로 만든 레이아웃 페이지가 아닌 MVC5 프로젝트의 기본 템플릿으로 제공되는 _Layout.cshtml 페이지를 들여다 보면
   
@Styles.Render("~/Content/css")
- 모든 페이지에서 공통적으로 사용되는 스타일시트 파일중 해당 키명("~/Content/css")으로 정의된 모든 스타일시트 파일을 해당 위치에 일괄 렌더링합니다.
- 렌더링해야하는 대상정의는 웹프로젝트 루트의 App_Start폴더내에 BundleConfig.cs 페이지에 C#으로 키명/키값 형태로 정의되어있으며
키를 추가하거나 키의 키값등의 정보를 추가/수정할수 있습니다.
- 모든 페이지에서 공통적으로 사용되는 자바스크립트 파일중 해당 키명("~/bundles/modernizr")으로 정의된 모든 자바스크립 파일을 해당위치에 일괄 렌더링합니다.
- 렌더링해야하는 대상정의는 웹프로젝트 루트의 App_Start폴더내에 BundleConfig.cs 페이지에 C#으로 키명/키값 형태로 정의되어있으며
키를 추가하거나 키의 키값등의 정보를 추가/수정할수 있습니다.

@Html.ActionLink("홈", "Index", "Home")
-HTML 객체는 Razor 엔진을 이용해 동적으로 각종 HTML코드를 만들어주는 객체로 Html.ActionLink("홈", "Index", "Home") 코드는 링크태그(A태그)를
만들고 연결 텍스트는 홈으로 링크주소는 HomeController 에 Index 액션메소드로 연결한다는 의미입니다,
즉 결과물은 <a href="/Home/Index">홈</a> html태그를 반환하게 됩니다.

@RenderBody()
- 컨텐츠 페이지 뷰가 로딩되는 영역입니다.

@DateTime.Now.Year
-현재의 해당년도를 텍스트로 해당 풋터에 출력합니다.

@Scripts.Render("~/bundles/jquery")
- 모든 페이지에서 공통적으로 사용되는 자바스크립트 파일중 해당 키명("~/bundles/jquery")으로 정의된 모든 자바스크립 파일을 해당위치에 일괄 렌더링합니다.
- 렌더링해야하는 대상정의는 웹프로젝트 루트의 App_Start폴더내에 BundleConfig.cs 페이지에 C#으로 키명/키값 형태로 정의되어있으며
키를 추가하거나 키의 키값등의 정보를 추가/수정할수 있습니다. Jquery 관련 각종 플러그인을 일괄 렌덩링합니다.

@RenderSection("scripts", required: false)
-레이아웃 페이지에 삽입되는 컨텐츠뷰 페이지나 부분뷰 페이지내에  "scripts"라고 선언된 섹션영역이 존재하면 해당 섹션내의 스크립트 블록이 레이아웃 페이지의 해당위치에 일괄 출력됩니다.

B.컨텐츠 뷰 만들고 구조 이해하기
-컨텐츠 뷰는 레이아웃 뷰안에 존재하는 컨텐츠 영역을 개별 뷰 페이지로 구성한것입니다.
-컨텐츠 뷰는 컨트롤러의 액션메소드를 이용해서 일반적으로 만듭니다.

1)  Test컨트롤러에 Sample1,Sample2  액션메소드를 만들고 Sample1메소드에  오른쪽 마우스 클릭 뷰추가를 클릭합니다.



2)뷰추가 팝업에서 뷰이름을 변경하거나 레이아웃 페이지를 선택 추가합니다.

-템플릿: 모델 기반으로 자동 CRUD 뷰를 생성하는 기능입니다.
-부분 뷰로 만들기 : 컨텐츠 뷰가 아닌 재사용 가능한 부분뷰(파셜뷰) 페이지를 만들고자 하면 체크한다.

3)해당 컨텐츠 페이지가 들어갈 레이아웃 페이지를 선택한후  추가버튼을 눌러 컨텐츠 페이지를 추가한다.

4)컨트롤러 액션메소드를 이용 컨텐츠 페이지가 추가완료되면 Views폴더내 컨트롤러명의 폴더에 신규 추가한 컨텐츠뷰가 추가된것을 확인할수 있습니다.


-컨트롤러의 액션메소드를 통해서도 컨텐츠 뷰와 부분(파셜)뷰를 추가할수도 있지만 솔루션 탐색기에서 Views폴더내 컨트롤러 폴더에 오른쪽 마우스 클릭
추가>뷰를 클릭해 해당 뷰폴더에 컨텐츠뷰 나 부분뷰 페이지를 추가할수도 있습니다.

4)컨텐츠 뷰 구조 이해하기
ㅁ블록코딩
@{
    ViewBag.Title = "Sample1";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

상기코드는 인라인코딩이 아닌 @{  ....  } 형태로 괄호안에서 C# 코딩을 연속으로 할수 있는 블록코딩 형태의 Razor 코딩방식입니다.
여기서 해당 컨텐츠뷰의 기본 레이이웃 페이지를 Layout =""; 로  변경할수 있으며 해당 컨텐츠 페이지의 <title></title>정보를 ViewBag.Title값을 변경해
해당 컨텐츠의 제목으로  전체 페이지 <title>제목을 변경할수 있습니다.


C.부분(파셜)뷰 만들고 구조이해하기
-부분뷰 페이지는 레이아웃뷰나 컨텐츠뷰 페이지에서 1회이상 재사용이 자주되는 영역에 대해 부분뷰로 만들어 재활용을 극대화하기 위한 수단으로
만드는 방법은 컨텐트뷰 만드는 방법과 동일합니다.
-대표적인 부분뷰로는 로그인뷰,주소조회뷰등 여러 화면에서 공통적으로 자주 사용되는 화면들이 부분뷰의 대상이됩니다.


4.모델만들고 이해하기 


A.Model 의 유형들
-역할로 구분하는 Model 의 유형들
ㄴ데이터 구조를 표현하기 위한 모델 : Model
ㄴ데이터를 담아 이동시키기 위한 모델 : DTO Model
ㄴ뷰전용 모델: View Model
ㄴ 비지니스 도메인 모델: Entity Model



ETC1.솔루션 탐색기 오른쪽 마우스 주요메뉴 설명
-솔루션 탐색기내 웹프로젝트의 오른쪽 마우스를 클릭하면 나타나는 주요 메뉴들에 대해 설명드립니다.
-빌드: 개발소스중 변경된 부분에 한해 프로그램 실행 결과물을 만들어냅니다.
빌드후 프로그램의 결과물의 생성위치는 일반적으로 디버깅 모드인경우 해당 프로젝트의 물리폴더아래
\bin\EddyHomePage.dll 형태의 파일로 만들어진다.
ㄴ위키: 컴퓨터 소프트웨어 분야에서 소프트웨어 빌드(software build)는 소스 코드 파일을 컴퓨터에서 실행할 수 있는 독립 소프트웨어 가공물로 변환하는 과정을 말하거나 그에 대한 결과물을 일컫는다. 소프트웨어 빌드에 있어 가장 중요한 단계들 가운데 하나는 소스 코드 파일이 실행 코드로 변환되는 컴파일 과정이다.
-다시빌드: 개발소스의 변경여부를 떠나 모두를 재빌드하여 결과물을 새로 만듭니다.
-정리:기존 빌드/재빌드 과정에서 생성된 실행가능한 산출물을 모두 삭제합니다.
-추가: ASP.NET MVC개발에 필요한 각종 프로그램 리소스 및 파일들을 추가합니다.
-Nuget 패키지관리: Nuget패키지를 통해 솔루션 및 프로젝트에 신규 배포.설치해 사용하는 각종 라이브러리 팩키지들를 관리할수 있는 관리자를 오픈합니다.
ㄴNuget 패키지? 각종 개발환경 및 개발 플랫폼이 오픈소스화 함에 따라 플랫폼 제공업체들은 기존에 주기적인 플랫폼 업그레이드와 버전업을 통해 정기배포하던 방식에서 벗어나 수시로 기본 플랫폼상에서 작동될수 있는 각종 라이브러리들을 수시로 배포하고 개발자나 개발도구의 요청에 의해 신규 라이브러리들을  사용할수 있는 체계를 수립하였습니다.
MS의 경우 Nuget 배포시스템을 도입하여 운영체제 및 개발툴 설치와 함께 설치된 기본 .NET Framework4.6 이후 추가로 배포되는 기능들은 Nuget이란 배포방식을 통해 기 설치된 기본 플랫폼(프레임워크)상에서도 쉬운 배포 및 설치 ,손쉽게 작동되고 연동될수 있는 개발 라이브러리 배포 자동화 시스템을 구축하였습니다.

-시작프로젝트설정: 하나의 솔루션에 여러개의 UI프로젝트가 존재시 시작 UI프로젝트를 지정하는 기능입니다.
-디버그: 디버깅모드를 실행합니다.
-소스제어: 솔루션내 존재하는 각종 개발소스의 버전 및 형상관리를 위한 소스제어서버와의 통신 및 소스관리기능을제공합니다.
-프로젝트 언로드: 솔루션내 등록된 프로젝트를 솔루션에서 제외시킵니다. 제외된 프로젝트는 빌드 및 실행 대상에서도 제외됩니다.
-파일탐색기에서 폴더열기: 해당 프로젝트 및 파일의 물리적 탐색기 위치를 보여줍니다.
-속성: 프로젝트 속성 정보를 관리합니다/중요.


ETC2.프로젝트 속성설명
-솔루션 탐색기의 웹프로젝트 오른쪽 마우스 클릭 속성을 클릭하면 아래와 같이 프로젝트의 속성을 확인하고 설정할수 있는 기능이 제공됩니다.
-아래 주요탭 3개에 대해서 설명드립니다.

ㅁ응용프로그램 탭
-어셈블리명: 빌드를 실행하면 ASP.NET MVC 응용프로그램 프로젝트는 물리적으로는 특정파일(라이브러리/어셈블리/컴포넌트) 형태로 만들어지며
일반으로 어셈블리명.DLL(EddyHomePage.dll) 파일 형태로 만들어집니다. 이때 물리적으로 생성되는 파일의 명칭이 어셈블리명입니다. 확장자는 .dll입니다.
-기본네임스페이스: 상기 물리적 파일인 어셈블리파일의 내부에는 각종 폴더와 클래스들이 존재하는 해당 물리적 어셈블리 파일내에 실제 존재하는
클래스파일들은 고유한 논리적 경로 및 표시구분 체계를 가지고 있습니다. 이를 네임스페이스라고 합니다. 말 그대로 클래스 풀네임의 구조를 말합니다.
ex) EddyHomePage.Controllers.HomeController
ㄴ네임스페이스는 실제 코딩시 특정 클래스가 특정 클래스를 호출할때 클래스의 참조위치 및 이름을 찾기위한 유니크한 방법으로 사용됩니다.
-대상프레임워크: 솔루션/프로젝트 생성시 지정한 .NET Framework의 버전정보를 나타냅니다.
-출력형식: 빌드시 어떠한 포맷으로 출력할지를 결정합니다.
ㄴWindows 응용프로그램 : 흔히 아는 ~.exe 형태의 파일로 출력하고 실행하면 바로 화면이 데스크탑 화면이 나옵니다.
ㄴ콘솔 응용프로그램 : DOS창처럼 검정색 바탕의 콘솔프로그램 형태로 출력되며 별도 UI가 존재하지 않습니다.
ㄴ클래스 라이브러리 : 일명 컴포넌트 또는 DLL 형태로 파일을 출력하는 형식을 말하며 파일자체로는 직접 실행이 불가하며 웹서버 와 ASP.NET
프레임워크,또는 해당 DLL이 사용하는 UX 환경을 통해 실행해야 화면 및 관련 프로세스를 실행이 가능합니다.

ㅁ빌드 탭
-출력경로 : 빌드 실행후 그결과물이 저장되는 위치를 지정/변경할수 있습니다.
-XML 문서파일 체크여부 : 체크시 각종 클래스파일내의 주석정보가 해당 XML파일로 저장되며 XML을 이용해 개발자에게 해당 클래스내의
기능과 속성을 인텔리센스 기능으로 제공할수 있게합니다.


ㅁ웹 탭
-시작작업 : 디버깅시 시작페이지를 지정할수 있습니다.
-서버: 웹서버를 개발용 웹서버로 사용할지 로컬 웹서버를 사용할지 변경할수 있습니다.
-디버거: 기본 디버거 설정을 변경할수 있습니다.


지금까지 ASP.NET MVC5 의 Controller 및  View 사용법을 알아 보았습니다.
다소 내용이  길더라도 한번 쭈욱 따라해보시면 쉽게 이해되시지 않을지 싶네요.
궁금하신점은  댓글이나 메일/밴드를 통해 남겨주시면 감사하겠습니다.





Comments

  1. 믹스드코드

    안녕하세요. 니니님
    오프라인 강의에서도 말씀드린데로
    컨트롤러는 업무별로 여러개를 구분하여 만들어 사용할수 있습니다.

    컨트롤러를 만드는 기준은 아무래도 업무분류 또는 유사업무당 1개씩 컨트롤러를 일반적으로 만들고
    해당 업무에 대한 뷰들(화면들)/조회/등록/수정/삭제등의 기능을 해당 컨트롤러에서 구현하는것이 일반적입니다.

    예를 든다면 회원정보를 관리하는 컨트롤러(MemberController)를 하나 만든다면
    약관동의화면(뷰),회원가입화면(뷰),우편번호조회(뷰),아이디찾기(뷰),암호찾기(뷰)등의 화면을 제어하는 액션메소드와
    해당 데이터를 관리하는 기능을 모델이나 서비스(비지니스)를 이용, 해당 정보들을 관리하겠죠.

    이외에도 게시판을 관리하는 업무가 있다면 BoardController, 상품정보를 관리한다면(GoodsController)등 관련업무별로 컨트롤러를 구분하여
    생성하시면 좋을듯합니다.

    댓글 문의주셔서 감사하구요.
    시간되시면 사이트 하단의 믹스드코드 밴드가입도 권장드립니다.
    감사합니다.

  2. 니니

    선생님! 안녕하세요 실습내용에 대해 하나하나 다 캡쳐와 설명해 주셔서 너무 감사합니다ㅠㅠ!!
    이번 포스팅에서 컨트롤러 역할에 대해 궁금한 점이 있는데요!
    컨트롤러는 클래스 단위로 구성되고 그 안에 여러개의 기능과 특성(속성)을 가질수 있다고 하셨는데,
    하나의 프로젝트에는 하나의 컨트롤러와 클래스가 있어야 하는건지
    추가적인 기능을 넣으면 controller 아래에 여러 컨트롤러클래스들이 생성되는지 궁금합니다!(자바에서 여러 클래스들 만들고 호출하는 것 같은 기능이 있는지 궁금합니다)

Leave a Reply

*