ASP.NET 개념
ASP.NET 프로젝트 운용 방식
1. 파일시스템 : IIS가 설치되지 않았거나, IIS와 연동이 필요없는 기능을 개발할때 사용하는 모드 - 개발자를 위한 모드
2. HTTP : IIS 연동 모드, 모든 개발환경이 IIS를 통해서 실행이 되는 모드. 가장 정확한 모드 -> 실제 웹서비스 환경과 동일함
3. FTP, 원격 사이트 : 원격 모드. 외부에서 접속해서 개발 환경
** IIS에서 .NET Framework 4.0 설정 후 aspnet_regiis -i로 재설치
** 프로젝트 저장
- 되도록 사이트 실제 경로에 한글, 공백, 특수문자는 포함안되게..
- 바탕화면.. 내문서.. 추천안함
프로젝트 -> 결과물(cs,리소스) -> 실행파일(exe,dll) <- 응용 프로그램
웹프로젝트(사이트) -> 결과물(html,aspx,리소스) -> 실행파일(dll) <- 웹응용 프로그램
*.htm
= XHTML + CSS + Javascript
WPF
= XAML(디자인) + C#(프로그램)
*.aspx
= XHTML + CSS + Javascript + C#(프로그램) + ASP.NET 태그(디자인)
ASP.NET - 1000
- Active Server Pages .NET
- 동적으로 서버에서 웹페이지를 만드는 기술
- C# / VB.NET 구현
ASP - 10
- Active Server Pages
- VBScript, Javascript 구현
- PHP, CGI, JSP
ASPX 페이지
- + ASPX.CS 파일 <- Behind Code, Beside Code
ASPX 페이지 기본 구성
1. <%@ Page ... %>
- 페이지 지시자
- 웹페이지 처리 프로그램에게 페이지의 정보를 알려주는 역할
2. runat="server"
- 서버측에서 인식하고 핸들링 가능한 요소 표식
ASP.NET 컨트롤
1. ASP.NET 컨트롤
- ASP.NET에서 추가된 컨트롤(전용)
- 브라우저는 인식 못함
- 랜더링을 통해서 브라우저가 인식 가능한 태그로 변환
- <asp:Button runat="server" />
2. HTML 컨트롤
- 태그
- 브라우저가 인식 가능
- 서버측에서 인식 불가능
- <input type="submit" />
3. HTML 서버 컨트롤
- 태그(2번과 거의 유사)
- 태그에 runat="server" 속성을 추가하면 HTML 서버 컨트롤이 된다.
- 서버에서 인식 가능하게 하기 위해서..
- <input type="submit" runat="server" />
포스트백(PostBack)
- 폼의 내부 컨트롤(버튼(submit))이 전송이 되면서 자기 자신 페이지를 action으로 재 호출하는 현상
- 주로 포스트백은 ASP.NET 컨트롤이 발생
- 그중에서도.. ASP.NET 버튼류는 무조건 포스트백을 발생함
- 버튼이외의 컨트롤도 포스트백을 발생시킬 수 있음!!!!!
(form을 전송 -> document.form1.submit();)
포스트백이 아닌 경우
- 첫요청
- 브라우저 주소창에 직접 주소를 기입해서 페이지를 요청하는경우
- F5 새로고침
- 자바스크립트나 프로그램 처리에 의해서 페이지 요청되는 경우
- ASP.NET 버튼을 눌러서 접근하는 경우를 제외한 나머지..
ASP.NET 페이지 처리 단계
- ASP.NET 페이지 수명 주기
- ASP.NET 페이지 = *.aspx + *.cs
- 클라이언트(브라우저)가 특정 페이지를 요청하면(HTTP Request) 웹서버(IIS)가 처리가 불가능하기 때문에 aspnet_isapi.dll(페이지 생성 사람) 실행기에 처리를 위임한다. 실행기는 넘겨받은 페이지를 미리 정해진 규칙에 따라서 단계별로 처리를 한 후 최종 결과물을 클라이언트에게 반환한다(HTTP Response).
- 페이지 객체 생성부터 페이지 객체 소멸까지의 단계
0. 페이지 객체 생성
- aspx 페이지 소스를 원본으로 클래스 인스턴스를 생성
- cs파일의 내용은 이벤트가 발생하면 실행됨
- cs파일은 초기 객체에는 영향이 없음
1. Init
- 0단계에서 만들어진 페이지 객체가 생성된 직 후 객체 초기화를 위해 제공되는 단계
- ViewState값이 복구되기 전이라 컨트롤 제어는 되도록 안함
2. ViewState 복구
- PostBack 요청시 발생하는 단계
- 페이지 상태 유지 단계 -> 이전 요청때의 상태를 기억했다가 복구 단계를 통해서 페이지 객체의 상태를 유지함
- ViewState에 의해서 컨트롤의 상태가 유지됨
2.5 다시 게시된 데이터 처리
- 폼 입력 컨트롤(텍스트박스, 체크박스 등..)의 값이 PostBack에 의해서 현재 페이지로 전송이 되면, 그 전송된 컨트롤의 값을 해당 컨트롤 값으로 적용시키는 단계
- PostBack 요청시 발생하는 단계
3. Load
- 페이지 객체가 메모리에 로드되고 난 직 후 발생
- 윈폼의 Form_Load 이벤트와 동일
- 주로 페이지와 초기 작업을 하는 단계
- Init 단계와 달리 ViewState복구가 완료된 단계이기 때문에 컨트롤에 접근해도 상태가 안정되어 있음(안전)
- 가장 코딩이 많은 단계 중 하나
3.5 게시 변경 알림
- 특정 컨트롤의 이벤트 발생 유무 확인 단계(**)
- 이 단계를 통해서 원격지에 있는 클라이언트 컴퓨터의 브라우저안의 컨트롤이 특정 이벤트를 발생시켰는지 확인 가능
- 2단계와 2.5단계간의 컨트롤 값의 변화를 통해서 확인!!!
4. PostBack
- PostBack 요청이 일어나면 발생하는 단계
- 사용자 및 서버 이벤트 발생 단계
- 버튼 클릭, 아이템 선택, 텍스트 변경 등 모든 컨트롤 이벤트는 이 단계에서 처리가 이루어짐
- Load와 같이 가장 코딩이 많은 단계
5. PreRender
- 페이지 객체를 랜더링하기 바로 전 단계
- 페이지 처리 순서에 의한 논리 오류를 해결하기 위해 만든 단계
- 주로 Load에서 하던 일을 이곳에서 처리
6. ViewState 저장
- 페이지 객체와 그 내부에 있는 컨트롤의 내용을 ViewState 공간에 저장하는 단계
- 보통 컨트롤의 상태를 나타내는 속성값이 저장됨(이벤트는 저장 안됨)
- PostBack 요청시 ViewState 복구 단계에서 이 값이 사용됨
- 2번과 6번 단계에 의해서 ASssP.NET의 상태 유지가 구현됨
//- 폼 컨트롤의 Value값을
7. Render
- 페이지 객체와 그 내부의 컨트롤을 HTML로 변환시키는 단계
- 페이지 객체를 브라우저가 인식 가능한 내용으로 변환
- 브라우저에게 돌려줄 임시 페이지를 만드는 단계
- 페이지 객체 + 컨트롤 + ViewState = 임시 페이지
8. Unload
- 페이지 객체 처리 후 마지막 단계
- 처리가 끝나고 Render까지 마친 페이지 객체를 소멸시키는 단계
- 주로 자원 반환 코드 구현
- 이 단계가 실행되고 나면 0~7단계에 걸쳐 사용된 페이지 객체이하 모든 자원이 서버 메모리상에서 소멸된다
ASP.NET에서의 이벤트
- 예) TextBox1에 TextChanged 이벤트 등록
a. TextChanged 이벤트 -> 특정 메서드 호출(C#) -> 이벤트 메서드가 실행되는 장소? -> 서버(aspnet_isapi.dll이 페이지 처리 단계중 하나에서 실행)
b. TextBox1 컨트롤에 TextChanged 이벤트 발생시키는 장소? -> 브라우저가 있는 클라이언트측
정규 표현식(Regular Expression)
- 문자열의 특정 패턴을 이용해서 원하는 데이터 검색하는 표현식
정규 표현식 문법
1. .
- 임의의 한문자
- ex) "...", "표.."
2.
- 출현횟수(생략X, 중복X)
- ex) "abc"
3. ?
- 출현횟수(생략O, 중복X)
- ex) "a?bc" -> "bc", "abc"
"홍?길동" ->
4. +
- 출현횟수(생략X, 중복O)
- ex) "a+bc" -> "abc", "aabc", "aaabc", "aaaaabc"
"0+25" -> 025, 0025, 00025
5. *
- 출현횟수(생략O, 중복O)
- ex) "a*bc" -> "bc", "abc", "aabc", "aaaaaabc"
"0*25" -> 25, 025, 0025, 00025
6. ^
- 바로 뒤에 나오는 표현으로 시작합니까?
- ex) "^abc"
"^홍.."
7. $
- 바로 앞에 나오는 표현으로 끝납니까?
- ex) "xyz$"
"하세요\?$"
8. []
- 열거형
- 나열된 문자 중 1개
- ex) "[abc]"
"[김이홍]?길동" -> 김길동, 이길동, 홍길동, 길동
숫자 1개 검색
- [0123456789]
숫자 3개 검색
- [0123456789][0123456789][0123456789]
전화번호 검색
- [0123456789][0123456789][0123456789]?-[0123456789][0123456789][0123456789][0123456789]?-[0123456789][0123456789][0123456789][0123456789]
- [0-9][0-9][0-9]?-[0-9][0-9][0-9][0-9]?-[0-9][0-9][0-9][0-9]
알파벳 소문자 1개
- [abcdefghijklmnopqrstuvwxyz]
알파벳 1개
- [abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]
영어단어 2글자~20글자
숫자 1개
- [0-9]
영어 소문자
- [a-z]
영어 대소문자
- [a-zA-Z]
한글 1개
- [가-힣]
영어 혹은 숫자 1개 -> 식별자 구성 요소
- [a-zA-Z0-9]
9. {}
- 출현횟수(세세하게 지정 가능)
- {count}
- {minCount,}
- {minCount, maxCount}
- ex) "a{2}b" -> aab
"a{2,}b" -> aab, aaab, aaaab, aaaaaaaaab
"a{2,4}b" -> aab, aaab, aaaab
주민번호 검사(123456-1234567)
- "[0-9]{6}-[0-9]{7}"
- "[0-9][0-9][0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9]"
전화번호
- "[0-9]{2,3}-[0-9]{3,4}-[0-9]{4}"
아이디 입력
- 길이는 4~12자이내
- 영어와 숫자로 구성
- 숫자로는 시작 불가
- _는 사용 가능
10. 표현법
- "\s" -> 공백
- "\d" -> [0-9]
- "\w" -> 영어대소문자,숫자,_
- 홍길동, 홍 길동 -> "홍\s?길동"
- [0-9]{2,3}-[0-9]{3,4}-[0-9]{4}
-> \d{2,3}-\d{3,4}-\d{4}
- 영어와 숫자와 _로 구성된 4~12자이내
-> \w{4,12}
데이터 바인딩(Data Binding)
- 데이터소스(원본) + 컨트롤(출력)
- 데이터 바인딩이란 데이터 소스를 컨트롤 통해서 자동으로 출력해주는 기술
- 데이터소스 : 변수, 배열, 컬렉션, DataReader, DataTable, DataView, Procedure..
- 컨트롤 : 1개 이상의 내부 항목을 가지는 컨트롤..
- 개발자가 편함..(생산성, 유지보수..)
데이터 바인딩의 종류
1. 단일값 바인딩
-> 데이터소스가 단일값일때 컨트롤 통해서 출력
2. 다중값 바인딩(*****)
-> 데이터소스가 다중값일때 컨트롤 통해서 출력
데이터 바인딩 표현식
- <%# 데이터소스 %>
- 현재 표현식 위치에.. 표현한 데이터소스 가져와 대입
ASP.NET의 웹객체
ASP 5가지 객체
1. Request(요청)
a. HttpRequest 클래스
b. this.Request 프로퍼티
2. Response(응답)
a. HttpResponse 클래스
3. Application(사이트 전체)
4. Session(고객) *****
5. Server(잡다한것들..)
Application & Session
- 사용 용도 : 데이터를 저장하는 역할(내부에 컬렉션)
- Application, Session안에 저장된 데이터는 페이지가 이동되어도 살아있음. (페이지간에 전달 과정없이도 데이터를 인식 가능) -> 상태 유지 가능
Application
- 공용 데이터를 관리 공간
- 죽지않는 변수
- 모든 페이지에서 접근 가능한 변수(전역변수)
- 모든 사용자가 접근 가능한 변수(공용변수)
- ex) 연결문자열
Session
- 개인 데이터를 관리 공간
- 죽지않는 변수
- 모든 페이지에서 접근 가능한 변수
- 개인 사용자만 접근 가능한 변수(다른 사용자의 Session 접근 불가능)
Cookie(쿠키)
- 사이트 방문자에 대한 개별적인 데이터를 사이트 운영중에 유지/관리
- 상태 유지
1. 유지
2. 개별
비교
Application 전역변수 공용변수 Object 서버
Session 전역변수 개인변수 Object 서버 **
Cookie 전역변수 개인변수 string 클라이언트 **
ViewState 지역변수 개인변수 Object 클라이언트
데이터 바인딩 전용 컨트롤
- 템플릿 기반 컨트롤
- 컨트롤 자신이 표현해야하는 형식이 없는 컨트롤
- 컨트롤의 템플릿을 직접 정의해서 바인딩 후 내용물을 어떤 형태로 출력할지 미리 준비하는 컨트롤
- 데이터소스와 함께 바인딩해서 사용함(단독 사용 불가)
1. Repeater : 5개 파트 구성, 가장 원시적(단순,구조 간단), 내마음대로~
- Repeater 자신은 렌더링이 안됨. 하위 템플릿의 내용만 렌더링
2. DataList **
3. DataGrid **
4. GridView ** : 가장 고성능, 개발자가 마음대로 수정이 힘듦
5. DetailsView, FormView, ListView 등..