1장. Dot.net 을 공부하는 이유
## 개요
요즘은 typescript를 필두로, 프론트엔드부터 백엔드까지 손쉽고 유지보수성 좋게 개발할 수 있는 프레임워크들이 대세이다.
기본적으로, 컴포넌트 단위 기반 프레임워크이며, Component, Module, Pipe, Interceptor, Router와 같이 명확하고, 편리한 요소들이 오픈소스 라이브러리와 함께 강력하게 사용되고 있다.
## 모던 JS 프레임워크의 핵심 기능
- MVVM : 양방향 바인딩, 변수의 변경 사항을 VIEW에 즉각적으로 반영한다.
- 변수 바인딩 (Input : 부모컴포넌트에서 자식컴포넌트로 데이터 전달)
- 이벤트 바인딩 (Output : 자식컴포넌트에서 부모컨포넌트로 데이터 전달)
- 화살표 함수 : () => {}
- 리터럴 문법 : {...arr, ...arr}, Object.assign([], arr), `raw ${var}`
- subject -> asObservable() -> subscribe -> rxjs 파이프 함수들
- subject -> .next(items)
- rxjs : map, filter, tap, reduce와 같이 편리하고, 직관적인 함수들
- async/await를 통한 callback 지옥 해결
- 편리하고, 직관적인 의존성 주입 방식
- 기타 등등..
요즘은 너무 편리하게 되어 있어서, 적합한 라이브러리와 프레임워크를 찾아서 좀 공부하면서, 해당 프레임워크의 최적 폴더 구조와 전체 구조를 잡고 의도된 요소들을 활용해서 구현하면.. 생산성, 유지보수성이 올라갈 뿐만 아니라, 완성도까지 챙길 수 있는 시대이다.
그.러.나 아직 금융/공공 쪽에서는 예전 갬성(webform을 공부하는 이유) 그대로이고, 기간에 맞추어하려고 하다보니, 구조가 엉망인 상태로 만들어진 사이트도 많다.
전문가라면, 아무리 이상한 구조의 소스도 어느정도 정상 궤도까지는 올려놓을 수 있어야 하지 않겠는가?
서론이 길었지만, 이번 게시글부터는 MVC 구조도 없는.. 오래 전 딱히 프레임워크가 존재하지 않던 시절의 Webform(.aspx)기반의 프로젝트를 살려보는 시험을 해보도록 하겠다. 즉, asp.net 기초 학습이다.
미래에 딱히 도움이 된다고 생각은 들지 않지만, 예전에는 어떻게 불편했는지를 알아야, 요즘 편의 기술들이 왜 나오게 되었는지를 이해할 수 있게 될 것이다.
본격적으로 빠르게 asp.net webform을 빠르게 훓어보자.
2장. Asp.net 기초
## 자료형
자료형 | 문법 |
정수 | int |
문자열 | string |
실수 | float |
부울값 | bool |
## 반복문/조건문
구분 | 문법 |
반복문 | for, while, foreach |
조건문 | if, switch |
foreach (컬렉션 값의 자료형 변수명 in 컬렉션명);
{
..
}
## 네임스페이스
간단하게 "System." 으로 시작하는 것들
using System...와 같이 사용 된다.
네임스페이스는 클래스의 묶음
System.Data, System.IO, System.Xml, System.Net ....
네임스페이스를 지정하면, 앞에 System..을 생략 가능하다. (의존성 주입과 비슷하다고 보면 되겠다.)
사실상 닷넷이 자랑하는게, 방대한 라이브러리이니까, Namespace없이도 전체 경로를 입력해주면 기본 라이브러리들에 접근할 수 있는 것 같다.
## 클래스
System.Data.DataSet , System.IO.File, System.Xml.XmlReader, System.Net.Sockets ....
클래스는 가져다 쓰는 녀석의 기본
## 메소드와 속성
가져다 쓴 클래스에서 실질적인 기능을 하는 것들의 묶음
System.Data.DataSet.Load() : 메소드
System.Data.DataSet.Merge() : 메소드
System.Data.dataSet.Reset : 속성
'네임스페이스 -> 클래스 -> 메소드와 속성' 형태로 흘러간다.
namespace WebBoard
{
public class ProgramLogic
{
string method1(string str1)
{
int a = 5;
TheBoard.ListCount = 5;
..
..
}
}
}
## 메소드
[접근권한] (static) [자료형] 메서드명(받을인수1, 받을인수2 ... )
{
.. 메서드내용
}
3장. 개발환경구축
## Setting 단계
1. 자신의 운영체제에 "웹 서버"를 설치해야 한다. Microsoft Windows 기반인 것은 다들 아실터이니, 웹서버인 IIS(인터넷 정보 서비스)를 설치
2. 설치가 끝났다면 c:\home 으로 폴더를 하나 만들어 여기를 홈페이지 루트(root, 최상위)로 정하자. 폴더를 생성
3. [제어판]-[관리도구]-[IIS(인터넷 정보 서비스) 관리자]를 실행하여, "기본 웹 사이트"의 [속성]에서 경로를 '홈 디렉터리' 경로를 "c:\home"으로 설정
4. "기본 웹 문서"의 모든 목록을 삭제하고 "default.aspx" 하나를 추가
5. http://127.0.0.1로 접속 테스트를 수행한다.
4장. 기본 aspx 파일 및 기본 객체
## 기초 default.aspx 형식
<%@ Page Language="C#" runat="server" %>
// Webform Page이다.
// Code File의 경우, C# 언어로 작성하겠다.
<%@ Import Namespace = "System.IO" %>
// 화면 디자인 상에서, 해당 네임스페이스를 추가(Import) 하곘다.
<script language="C#" runat="server">
// 추후에 .cs 파일로 분리될 것이므로, 하나의 class로 볼 것
void Page_Load()
// Page 클래스 라이프사이클 콜백함수
{
// File.CreateText(@"c:/temp.txt");
Response.Write("Hello dot.net");
}
</script>
<%--여기서부터 화면에 보여지는 디자인(태그)부분--%>
KEY POINT. <%@ Page 태그 %>
## Request 객체
- 각종 정보들을 읽어오는 기능을 한다.
- 예를 들어, 웹서버에 접속한 사람의 고유 IP주소, GET/POST로 넘어온 값, 한번쯤은 들어보셨을 쿠키(Cookie) 등 웹서버에 관련한 대부분을 포함한다.
- aspx 파일에서는 간단하게 Request.메서드(), Request.프로퍼티 형태로 사용가능하다.
Request.Form["name명"]; // 1. POST받기
Request.QueryString["name명"]; // 2. GET받기
Request["name명"]; // 3. GET/POST 구분없이 받기
string name = Request.Form["name"];
int age = Int32.Parse(Request.Form["age"]);
string tmp = Request.ServerVariables["읽어올키"];
## Response 객체
- Response는 출력(응답)관련 클래스라고 했다.
- Response.Write() 메서드
- Request는 쿠키를 읽어오는 반면에, Response는 쿠키를 쓰는 기능을 하며, Response.Write() 처럼 화면에 그대로 뿌려주는 기능도 한다.
## 파일 다운로드 / 업로드
http://msdn.microsoft.com/ko-kr/library/system.web.httprequest.files(VS.80).aspx
http://msdn.microsoft.com/ko-kr/library/system.web.httppostedfile(v=VS.80).aspx
// SENDER
// enctype의 기본값은 application/x-www-form-urlencoded 이지만,
// 파일을 전송하고 싶은 경우 multipart/form-data 로 변경 필요
<form method="post" action="board_write_done.aspx" enctype="multipart/form-data">
<b>첨부파일</b>
<input type="file" size="15" name="uploadfile">
<hr>
</form>
// RECEIVER
// <input type="file"/> 파일의 경우, Files 컬렉션으로 전달받는다.
HttpPostedFile files = Request.Files["uploadfile"];
string target_path = Server.MapPath("\\"); // "c:\\home"
string file_name = files.FileName;
files.SaveAs(target_path + @"\" + file_name); // c:\home\파일명.
Response.Write("업로드파일 : " + file_name + "(사이즈 : " + files.ContentLength + " bytes) <hr>");
5장. asp.net 서버 컨트롤 만들기 (핵심)
- 의미 : 서버컨트롤은 서버에서 직접 만들어주는 컨트롤
## Asp.net 서버컨트롤을 사용하지 않을 경우
<script language="C#" runat="server">
void Page_Load()
{
if (Request["userid"] != null && Request["pwd"] != null)
{
// Response.Write("HTML태그 및 텍스트") 함수로 직접 디자인 화면을 그릴 수 있습니다.
// asp.net에서 하나의 웹페이지는 하나의 .aspx 파일로 생성되어 있습니다.
// .css 스타일 파일(Style)
// .aspx 파일은 전반적인 디자인을 표시하는 aspx 파일 (Template View)
// "server" 라고 지칭되는 aspx.cs 파일 (Controller)로 구성되어 있습니다.
// 그러나, 컴파일되면서, 결과물은 결국 Html, Js로 변환됩니다.
Response.Write("아이디: " + Request["userid"] + "<br>");
Response.Write("비밀번호: " + Request["pwd"] + "<hr>");
}
}
</script>
<form method="post" action="control1.aspx">
<input type="text" name="userid">
<input type="password" name="pwd">
<input type="submit" value="로그인!">
</form>
## Asp.net 서버컨트롤을 사용할 경우
<script language="C#" runat="server">
void Page_Load(){}
void Login_Proc(object o, EventArgs e)
// Html object와 Event 객체 인자
// (1)어떤 객체로부터 발생했고, 이벤트 발생시에 (2)어떤 정보와 함께 실려서 오는지
{
Response.Write("아이디: " + userid.Value + "<br>");
Response.Write("비밀번호: " + pwd.Value + "<hr>");
}
</script>
<form runat="server"> //서버컨트롤에 값을 넘기기 위해 runat="server"명시
// method 와 action은 생략
// 서버컨트롤로 제어되는 <form runat="server">은 모두 해당 폼에 들어있는 서버컨트롤에 따라 변화하는데,
// 모두 POST 방식이다.
<input type="text" id="userid" runat="server">
//기존 Form에서 값을 넘기려면, name값이 필요했음
//서버컨트롤에서 값을 넘기려는 것들은 모두 "name" 대신 "id"값을 주어야 함
<input type="password" id="pwd" runat="server">
<input type="submit" value="로그인!" runat="server" onserverclick="Login_Proc">
</form>
- 서버컨트롤로 만들기 원할 경우, runat="server" 예약어를 명시해주어야 한다.
- 서버컨트롤은 개발자의 편의성을 위해 만들어진 것이 분명하다. 그렇다고 해서 HTML 표준을 어길 수는 없다. 계속해서 생각하자. 웹의 결과물은 HTML.
- 서버컨트롤은 배치되자 마자 모두 닷넷 컴파일러에서 페이지 처리 순서에 따라 해석될 때, "인스턴스화 된 객체"가 된다. 그래서 이 객체들은 aspx파일 등의 소스 코드에서 id.프로퍼티 형식으로 쉽게 접근이 가능
(ex) pwd.Value, userid.Value
- userid, pwd 는 System.Web.UI.HtmlControls 네임스페이스에 속한 HtmlInputText 라는 클래스
http://msdn.microsoft.com/ko-kr/library/system.web.ui.htmlcontrols.htmlinputtext(v=VS.80).aspx
- 컴파일시 생성되는 HTML 상의 이상한 Input 태그들의 용도는 서버컨트롤의 "상태유지"를 위해서 필요한 값들을 생성해낸 것들
## aspx 웹폼 파일 상에서 Template Code와 Code File 간 통신
- (Template 상에서) HTML Tag에 runat="server" 와 ID="아이디명"를 명시해준다.
###. CodeFile -> Template
- (CodeFile 상에서) 아이디명.속성 = 값 형식으로, 동적으로 값을 할당할 수 있다.
###. Template -> CodeFile
- (CodeFile상에서) string 변수 = 아이디명.속성으로, 동적으로 값을 가져올 수 있다.
## .Net의 서버컨트롤 2종류
- WebForm (흔히, 웹폼 컨트롤) : 네임스페이스 System.Web.UI.WebControls
http://msdn.microsoft.com/ko-kr/library/system.web.ui.webcontrols.aspx?appId=Dev10IDEF1&l=KO-KR&k=k(VS.HTMLDESIGNER.NUGGETRENDERBLOCK);k(VS.HTMLDESIGNER);k(VS.HTMLDESIGNER.HTML);k(TargetFrameworkMoniker-
- HtmlForm (흔히, HTML 서버컨트롤) : 네임스페이스 System.Web.UI.HtmlControls
http://msdn.microsoft.com/ko-kr/library/tct4wcsd(v=VS.80).aspx
-> aspx 파일에서는 System.Web, System.Web.UI 등 필요한 네임스페이스를 자동으로 참조하게 된다고 했다. 그러므로 서버컨트롤 들은 별도로 참조할 필요 없이, 바로 사용가능하다.
-> 태그(<tag>)에 runat="server"만 붙여주면 해당 태그에 맞는 HtmlControl(서버컨트롤)로 변신하게 됨.
-> 일반적으로 사용하는 대부분의 태그뿐만 아니라, 모든 <form>태그를 서버컨트롤로 이용할 수 있기 때문에, 프로그래밍 방식으로 태그를 제어하거나 값을 읽을 수 있음.
## 서버컨트롤 동작 방식
- 렌더링 결과는 그래봐야 HTML태그이다.
(서버컨트롤이 결과로 변환되는 것을 렌더링-Rendering-이라고 부른다)
- HTML 서버컨트롤은 직접 봤듯이 단순히 태그에 id와 runat="server"만 붙여주면 이들은 서버컨트롤로 변신이 가능하다. 하지만 1. 웹폼은 약간 다른 방식으로 선언하여 사용
- 일반적으로 HtmlForm은 잘 쓰지 않는다. 이유는 (우리가 중점으로 다룰) WebForm 이라는 부류의 "더 닷넷스러운" 서버컨트롤들이 따로 존재하기 때문
- 서버컨트롤을 사용하는 목적은 태그를 프로그래밍 방식으로 접근하기 위해서이다.
프로그래밍 방식이라는 것은, 우리가 이 때까지 했던 클래스를 찾아서 해당 클래스의 메서드를 호출하거나 프로퍼티 값을 지정하거나 읽어오는 등의 방식
- 태그에 "runat=sever"를 붙여주는 것들을 HtmlForm 서버컨트롤이라고 했다. 서버컨트롤은 클래스라고 했다.
- <html>, <body>는 특정 서버컨트롤(클래스)로 딱히 제공되지 않기 때문에 HtmlGenericControl 이라는 일반 컨트롤로 변경된다.
## 서버컨트롤 조작하기
http://msdn.microsoft.com/ko-kr/library/system.web.ui.control(v=VS.80).aspx
// 태그에 속성 = 속성값 추가하기
[메소드]
TAG_ID.attributes.Add("bgcolor", "yellow");
TAG_ID.attributes.Remove(string key) : 해당 key이름의 컬렉션 삭제
[속성]
TAG_ID.attributes.Count : 해당 컬렉션의 갯수
TAG_ID.attributes.Item : 컬렉션의 특성 값
## 서버컨트롤 동적 생성
클래스명 사용할_이름 = new 클래스명();
<form> -> HtmlForm
<input type="text"> -> HtmlInputText
<input type="submit"> -> HtmlInputSubmit
<table> (HtmlTable)
<tr> (HtmlTableRow)
<td> (HtmlTableCell)
// 컨트롤 삽입하기
BODY_TAG.Controls.Add(컨트롤 인스턴스명);
HtmlInputText textbox = new HtmlInputText(); // 인스턴스 화
textbox.ID = "user_name"; // 구분할 수 있게 ID 부여
textbox.Size = 20; // Size 속성을 20으로 줌.
BODY_TAG.Controls.Add(textbox);
HtmlInputSubmit button = new HtmlInputSubmit();
button.Value = "인사하기";
button.ServerClick += new EventHandler(button_click);
// 이벤트를 지정시 +=
// 이벤트 해제시 -= 를 사용
void button_click(object o, EventArgs e){}
6장. asp.net 서버 컨트롤 만들기 - Webform
- Webform 기본 선언 형식
<ASP:웹폼명 runat="server"></ASP:웹폼명>
- Asp:DropDownList 선언 형식
<ASP:DropDownList id="넘어갈 key" runat="server">
<ASP:ListItem value="넘어갈 value">보여지는 내용</ASP:ListItem>
<ASP:ListItem value="넘어갈 value">보여지는 내용</ASP:ListItem>
</ASP:DropDownList>
- Asp:TreeView 선언 형식
<form runat="server" id="frm">
<ASP:TreeView id="tree1" ExpandDepth="0" runat="server">
<Nodes>
<asp:TreeNode Text="하위메뉴열기" SelectAction="Expand">
<asp:TreeNode Text="메뉴1" />
<asp:TreeNode Text="메뉴2" />
<asp:TreeNode Text="메뉴3" SelectAction="Expand">
<asp:TreeNode Text="메뉴 3-1" />
<asp:TreeNode Text="메뉴 3-2" />
</asp:TreeNode>
</asp:TreeNode>
</Nodes>
</ASP:TreeView>
</form>
- Webform 태그의 경우 runat="server"가 붙은 Form 태그로 감싸져야 한다.
- HtmlContol 서버컨트롤은 말 그대로 태그에 대응되는 것만 존재하는 반면에, 웹폼은 전혀 새로운 서버컨트롤이 존재한다. 이것이 서버컨트롤의 두 가지 종류인 HtmlControl 과 WebControl인 웹폼과의 큰 차이점 중 하나이다.
- 서버 컨트롤을 사용하여, 태그에 없는 사용자 정의 속성을 지정할 수 있다. (directive와 비슷한 개념인 듯)
- Webform 컨트롤은 컴포넌트와 유사하다.
## Webform 예제 및 설명
<html>
<head>
<title>웹폼</title>
</head>
<body>
이름: <ASP:TextBox id="txt1" runat="server"></ASP:TextBox>
성별:
<ASP:DropDownList id="list1" runat="server">
<ASP:ListItem value="남">남자</ASP:ListItem>
<ASP:ListItem value="여">여자</ASP:ListItem>
</ASP:DropDownList>
<ASP:Button id="btn1" runat="server" text="인사하기!"></ASP:Button>
</body>
</html>
## Webform 태그 접근 방법
void btn1_Click(object source, EventArgs e)
{
string textBoxText = txt1.Text
// TextBox의 id명으로 접근할 수 있습니다.
// Text라는 변수로 선택 값을 얻을 수 있습니다.
string selectedValue = list1.SelectedValue;
// DropDownList의 id명으로 접근할 수 있습니다.
// SelectedValue라는 변수로 선택 값을 얻을 수 있습니다.
string labelText = lbl1.Text;
// Label의 id명으로 접근할 수 있습니다.
// Text라는 변수로 값을 얻을 수 있습니다.
frm.Visible = false;
txt1.Text = labelText;
// 값을 바꿀 수도 있습니다.
}
## Webform 종류
<input type="..."> 의 형식의 입력폼
text : 자유롭게 입력하는 한 줄 입력 << 많이 사용 >>
▶ <ASP:TextBox>
password : 비밀번호 입력 용도의(입력이 가려지는) 한줄 입력
▶ <ASP:TextBox TextMode="Password" >
hidden : 화면에 보여지지 않고 값을 저장하는 값 << 많이 사용 >>
▶ <ASP:HiddenField>
file : [찾아보기]와 같은 버튼을 눌러 컴퓨터에 있는 파일을 선택하여 전송할 수 있는 용도
▶ <ASP:FileUpload>
radio : 여러개 중 하나만 고를 수 있는 동그란 체크 입력
▶ <ASP:RadioButtonList> .. </ASP:RadioButtonList>
checkbox : 여러개 중 하나 이상 여러개 고를 수 있는 네모 체크 입력
▶ <ASP:CheckBoxList> .. </ASP:checkBoxList>
submit : <form>의 내용을 페이지로 전송하는 버튼
▶ <ASP:CheckBoxList> .. </ASP:checkBoxList>
image : <form>의 내용을 페이지로 전송하는 이미지 버튼
▶ <ASP:ImageButton>
reset : <form>의 변경된 내용을 모두 초기화 하는 버튼
▶ 없음. <ASP:Button>을 이용하여 구현가능
<input> 태그가 아닌 다른 폼
textarea : 엔터로 여러 줄의 내용을 넣을 수 있는 여러줄 입력.
▶ <ASP:TextBox TextMode="Multiline" >
select : 여러개 중 하나를 선택할 수 있는 형식의 입력 << 많이 사용 >>
▶ <ASP:DropDownList> .. </ASP:DropDownList>
button : 누를 수 있는 버튼 (중요)
▶ <ASP:Button>
## WebForm 정리
1. 나홀로 콘트롤
<ASP:TextBox id="txtName" runat="server" />
2. 포함된 컨트롤이 있는 컨트롤
<ASP:DropDownList id="ddlList" runat="server">
<ASP:ListItem value="real value">showing value</ASP:ListItem>
</ASP:DropDownList>
// ddl이란? Drop Down List의 줄임말
3. 스타일(템플릿) 형식이 포함된 컨트롤
<ASP:Calendar id="cal1" runat="server">
<DayHeaderStyle BackColor="Red"></DayHeaderStyle>
</ASP:Calendar>
<ASP:Repeater id="rpt1" runat="server">
<HeaderTemplate>사용자 목록</HeaderTemplate>
<ItemTemplate>
- [ <%# Eval("user_name") %> ]-<br>
</ItemTemplate>
<FooterTemplate>------이상------</FooterTemplate>
</ASP:Repeater>
// rp란? Repeater의 줄임말
## ASP.NET 국한된 기초 핵심
* 우리가 지금 다루는 것은, 닷넷 중 웹(Web)기반인 ASP.NET이다. 문법은 C#이라는 것을 사용하며, 닷넷의 대부분 모든 플랫폼(윈도우 응용 프로그램, 스마트폰 프로그램 등)에 똑같이 적용된다. 웹은 가장 많이 접하는 플랫폼으로, 친근하게 다가갈 수 있다. 그러므로 닷넷 공부의 시작은 ASP.NET으로 하는 것을 추천
* asp.net 의 소스코드는 어떤 무엇보다 먼저 실행되며, 태그는 그 결과물일 뿐이라고 했다.
* https://docs.microsoft.com/ko-kr/dotnet/api/system.io.file?redirectedfrom=MSDN&view=net-5.0
* asp.net 에서 컨트롤(Control)이라 하면, 그 결과물이 <태그>일 뿐이다.
* 검색을 하기 위해 쳐 넣는 컨트롤을 asp.net 에서는 텍스트박스 컨트롤(TextBox)이라고 부르며, 단순히 텍스트를 표시하기 위한 컨트롤은 레이블 컨트롤(Label)
* System 네임스페이스를 모든 닷넷 기반에서 기본으로 참조한다.
* asp.net 에서도 기본으로 참조하는 System.Web 네임스페이스가 있다.
- aspx파일에서는 기본적으로 System.Web과 System.Web.UI 의 네임스페이스를 모두 참조
## 기본함수
- 기본 입출력
Response.Write(); // 화면에 그대로 뿌려주는 함수
- True/False 판단
if (File.Exists(count_path) == false)
if (!File.Exists(count_path))
- String 기본
String.Format("ㅋㅋㅋㅋ {0}, {1}", var1, var2);
@"c:\home\count.txt"; =="c:\\home\\count.txt";
- 형변환
999.ToString(); // 정수 -> 문자열
int ABC = Int32.Parse("12"); // 문자열 -> 정수
## 자주 사용되는 함수
### 상대 경로 사용하기
string Server.MapPath("상대경로");
- ASP.NET 에서의 현재 경로는 c:\[윈도우폴더]\system32 이다. 참고하도록 하자. IIS에서 홈으로 지정된 폴더가 아니다. 그러므로 대개 절대경로를 사용한다.
- Server.MapPath("상대 경로") 라는 유용한 메서드가 있다. (이 메서드는 현재 홈디렉터리를 기준으로 상대경로를 지정하여 직관적으로 경로를 줄 수 있다.)
### 파일 생성하기
string count_path = "c:\\home\\count.txt"; // 파일경로
StreamWriter sw = File.CreateText(count_path); // 파일 생성
sw.WriteLine("입력할 텍스트입니다."); // 파일 입력
sw.Close(); // 파일 닫기
bool bExist = File.Exists("찾을파일"); // 파일존재여부체크
(번외). Web 프로그래밍의 기초 핵심
* www 서비스(웹페이지 서비스의 기본)
google, naver.com 등과 같은 이 세상 모든 웹사이트는 웹서버를 윈도우기반 IIS이든, 아파치이든,
기본 폴더(디렉터리)를 설정하고, 그 폴더에서 단 1개의 HTML형식의 파일을 지금처럼 웹서버 설정에서 지정된 파일을 전송하게 됩니다.
* 실행 결과물은 오직 "태그"임에 명심하자. 다시 말하겠다. "실행 결과물은 죽었다 깨어나도 웹브라우저가 해석하는 HTML 문법일 뿐!"
* 일반적으로, "클래스는 인스턴스 화" 되어야 한다. (인스턴스(Instance)는 많이 쓰이는 용어이므로 알아놓도록 하자)
System.IO.ABC abc = new System.IO.ABC();
* System.IO.File 과 같이 static 클래스(정적클래스)는 인스턴스화를 하지 못하며, 할 필요가 없고, 다이렉트로 사용한다고 생각하자.
* 메서드는 특정 기능을, 종속되지 않고 단독으로 사용될 수 있게 만들어야 한다.
* HTTP라는 것은 바로 Web이라는 서비스에서 사용하는 프로토콜(Protocol, 규약)
* HTTP(HypertextTransfer Protocol)를 통해 Web을 이용하게 된다. 그것을 쉽고 편리하게 도와주는 것이 웹브라우저
* 요청한 것들은 웹브라우저에서 지정된 임시폴더에 저장해 놓는다. 그러므로, 전송되는 모든 HTML소스, 자바스크립트(js)소스, 이미지파일 등이 개방형이다. (C#코드는제외)
* 프로그래밍(학습) 과정에서 관심을 가지며 목적을 달성하기 위해 그 해결을 찾는 법을 익히는 것이다. 물론 외우기를 추천한다. 찾는 시간이 줄어들기 때문이다.
* HTML의 구성요소
- 태그 : 엘리먼트(Element, 요소)
- 속성 : 어트리뷰트(Attribute, 속성)
- (속성)값 : 어트리뷰트 밸류(Attribute Value, 값)
* 태그문에서 오류메시지란 절대 존재하지 않는 다. 단지 잘못 해석되어 디자인나, 폼 값들이 뭉게질 뿐이다.
* HTML에서 기본적으로 들어가야 된다고 말할 수 있는 태그이다.
html, head, title, body 이렇게 4개이다. (여기서 title 태그는 head 에 속해있다)
* 기초 input tag
<b>이름</b>
<input type="text" size="15" name="name">
<hr>
<b>제목</b>
<input type="text" size="80" name="title">
<hr>
<b>글내용</b>
<br>
<textarea cols="80" rows="10" name="content"></textarea>
<hr>
<b>비밀번호</b>
<input type="password" size="15" name="password">
<hr>
<input type="submit" value="작성완료">
<input type="button" value="취소">
//정리
<input type="..."> 의 형식의 입력폼
- text : 자유롭게 입력하는 한 줄 입력
- password : 비밀번호 입력 용도의(입력이 가려지는) 한줄 입력
- hidden : 화면에 보여지지 않고 값을 저장하는 값
- file : [찾아보기]와 같은 버튼을 눌러 컴퓨터에 있는 파일을 선택하여 전송할 수 있는 용도
- radio : 여러개 중 하나만 고를 수 있는 동그란 체크 입력
- checkbox : 여러개 중 하나 이상 여러개 고를 수 있는 네모 체크 입력
- submit : <form>의 내용을 페이지로 전송하는 버튼
- image : <form>의 내용을 페이지로 전송하는 이미지 버튼
- reset : <form>의 변경된 내용을 모두 초기화 하는 버튼
<input> 태그가 아닌 다른 폼
- textarea : 엔터로 여러 줄의 내용을 넣을 수 있는 여러줄 입력.
- select : 여러개 중 하나를 선택할 수 있는 형식의 입력
- button : 누를 수 있는 버튼
* form tag의 Get/Post 에 대한 상식
1. <form></form> 태그 내에 있는 어떠한 것도 GET/POST에 따라 바꿀 필요 없다.
2. GET은 주소에 붙여서 전송하므로, <a>태그의 링크형태로 값을 전송할 수도 있다.
3. POST는 내용에 붙여서 전송하므로, 일반적으로 로그인/회원가입 등 보안성이 필요할 때 사용한다. (그러나 HTTP는 보안에 취약하다. 그래서 만약을 위헤 ActiveX를 설치하여 보안성을 높이는 것이다.)
4. 파일까지 전송하기 위해서는 POST를 사용한다.
* asp.net(aspx) 뿐만 아니라, asp, jsp, php 등 모~든 웹프로그래밍 언어에서 어떤 값을 입력받기 위한 과정인 <form></form>태그에 관련해서는 공통적인 내용이다. 왜냐하면, 그래봐야 HTML일 뿐이기 때문
# 출처
'[DEV] App Dev ∕ Web Front > Framework ∕ Asp.Net' 카테고리의 다른 글
[ASP.NET] asp.net 몰아보기 2부 (0) | 2021.03.15 |
---|---|
[ASP.NET] 닷넷 웹앱 기초 (0) | 2020.12.29 |
[ASP.NET] 한 큐에 정리하기 (0) | 2020.12.23 |
[ASP.NET] API 요청 : CookieContainer, HttpWebRequest, HttpWebResponse (0) | 2020.12.22 |
ASP.NET 기초 클래스 (0) | 2020.12.18 |
최근댓글