Visual Studio 2010 을이용한웹애플리케이션개발 (ASP.NET) 웹애플리케이션개발 (ASP.NET) 과정 2013 김명정 Microsoft MVP(Visual C#) Microsoft BizSpark Network Partner kmjrabbit@live.com
웹애플리케이션 (ASP.NET) 개발과정 ASP.NET 살펴보기 ASP.NET 프로그래밍 Visual Studio 2010 설치하기 ASP.NET의특징들 C# 닷넷기초 기본사용 using, class, Main() 메서드, 주석문, Nullable, var 문 변수와상수변수, 값형식과참조형식, 문자형식과문자열형식, 상수와열거형식 구조 Namespace, Class, Method, Field, Attribute 연산자 형변환 흐름제어 반복문 클래스와객체 2
웹애플리케이션 (ASP.NET) 개발과정 ASP.NET 기초개발환경소개및 IIS설정 ASP.NET 4.0을이용한웹페이지구현 ASP.NET 웹폼 ASP.NET 내장개체 ASP.NET 중급표준컨트롤로그인컨트롤유효성검사컨트롤페이지추적 ADO.NET ( 데이터베이스 ) ASP.NET 사이트구축 3
4 Ⅰ. ASP.NET 살펴보기
웹애플리케이션 (ASP.NET) 개발환경 http://www.microsoft.com/ http://msdn.microsoft.com/ko-kr 세계최대수준의라이브러리및예제 http://msdn.microsoft.com/ko-kr/library/67ef8sbd(vs.80).aspx 유용한라이브러리소스제공 5 http://www.codeplex.com
Visual Studio 2010 설치하기 Visual Studio 2010 평가판다운로드 http://www.microsoft.com/visualstudio/ko-kr/download Ultimate Version 평가판 : Web Installer http://go.microsoft.com/fwlink/?linkid=186896 Ultimate Version 평가판 : ISO 버전다운받기 http://go.microsoft.com/fwlink/?linkid=186897 DAEMON TOOL 다운받기 http://file.naver.com/pc/view.html?fnum=277449&cat=44 6
ASP.NET 의정의및특징 ASP.NET 의정의마이크로소프트닷넷기반의웹개발관련기술의집합체동적웹사이트를만들기위한마이크로소프트의웹기반기술 ASP.NET 은 ASP 와는많이다르며.NET Framework 기반이므로 ASP.NET 웹응용프로그램작성시.NET 기반의모든언어사용이가능하다. 기존 ASP 는스크립트언어로서주로 VBScript 를사용하는웹스크립트언어이며 ASP.NET 은.NET Framework 에서지원하는 Visual Basic, Visual C++, C# 등의언어를사용하여개발할수있다. ASP.NET 의특징.NET 은 XML 웹서비스를위한마이크로소프트의플랫폼 이다. 앞으로의인터넷환경은 Anywhere, Anytime, Any device 7
ASP.NET 의정의및특징.NET Framework 구성요소 8
ASP.NET 의정의및특징 정적웹페이지와동적웹페이지정적웹페이지사용자 ( 클라이언트 ) 가서버쪽에웹페이지를요청했을때이미만들어진페이지를클라이언트에서제공하는경우를말한다. 그대로전달하기때문에모든클라이언트는같은내용의페이지를볼수있다. HTML 파일 동적웹페이지사용자 ( 클라이언트 ) 가웹페이지를요청했을경우서버에서실시간으로해당작업을처리해클라이언트에게제공하는경우를말한다 ASP, JSP, PHP, ASP.NET 등의웹프로그래밍언어로구현한경우에해당된다. 9
ASP.NET 의정의및특징 ASP.NET 실행모델 ASP.NET 프로그램은처음실행시는느리지만한번실행된이후 Assembly Cache 영역에빌드하여그것을메모리에올려클라이언트에게보여주는방식으로처리되므로처리속도가빠르다. Caching 은 Memory 부터처리됨. 10
ASP.NET 의정의및특징 ASP.NET 웹응용프로그램 :: 웹폼 (Web Form) 또는.aspx 페이지웹응용프로그램의 UI 를구성 :: Code Behind 페이지 Visual C# 등의코드구현 :: Web.config 파일환경구성파일, 환경을구성하고있는 XML 파일 :: Global.asax 파일애플리케이션수준의이벤트처리를담당 ASP 3.0 의 Global.asa 파일과비슷한역할을함 :: 웹서비스 (Web Services) 프로그래밍가능한서비스의제작원격에있는데이터를읽어사용하는서비스 (WCF 서비스 ) :: 캐싱 (Caching) 첫번째요청이후캐싱으로웹페이지의속도향상 :: 데이터베이스연결 DB 연결자를통한 Database 활용 11
12 Ⅱ. C# 닷넷기초
닷넷 (.NET) 의등장배경및역사 2006 년닷넷 3.0 발표닷넷 2.0 발표후곧이어닷넷 3.0 에대한스펙과 SDK 가공개 WPF,WCF,WF,CardSpace 암시적인타입을적용한지역변수 : var 타입 ( 컴파일러가타입을유추 ) 익명타입 : LINQ 중간과정에생기는타입을 Class 로정의하지않고익명으로정의확장메서드 : 기존타입에추가로메서드를추가할때사용. 람다 ( 익명메서드를보완한것 ) 와쿼리표현식 ( 데이터추출시쿼리를작성하는것 ) 2007 년 Visual Studio2008 과함께닷넷프레임워크버전이 3.5 로높아짐. LINQ, C#3.0( 람다식, 확장메서드지원 ) 2008 년 3.5 SP1 ASP.NET Dynamic Data, Client Profile 2009 년 4.0 CLR 버전이 2.0 에서 4.0 으로업그레이드됨. 13
닷넷 (.NET) 과 Visual Studio 버젼 Visual Studio : IDE(Integrated Development Environment: 통합개발환경 ) Visual Studio Framework Visual Studio.NET 1.0 Visual Studio.NET 2003 1.1 Visual Studio 2005 2.0 Visual Studio 2008 3.0 Visual Studio 2008 SP1 3.5 Visual Studio 2010 14
C# 닷넷기초 C# 의정의 C# 은.NET Framework 기반의개발을할수있는언어중하나이다. 기존 Visual C++.NET 이나 Visual Basic.NET 등은이전부터존재해왔던언어이며이전버전과호환성을제공해야하기에.NET 의기능을완전히제공하지않는경우가있으나 C# 은.NET Framework 기반으로출시된언어이므로.NET 기반모든기능들을완전하게제공한다. C# 의특징 - 객체지향언어이다. - 하나의 C# 파일을생성시상단에클래스정의부가기술된다. - 클래스, 인터페이스, 구조체를지원한다. C# 언어의활용범위 - Windows Form 응용프로그램, ASP.NET, WCF, Windows Phone, Windows 8 등 기본사용문장단위는세미콜론 (;) 으로구분큰단위를이루는문장은중괄호 (.) 로감싸준다. namespace > class > 메서드 / 속성으로구성되어있다. 15
기본문법참고 클래스와구조체구조체 C 언어에서부터내려온기능으로새로운데이터타입을만드는역할을담당한다. 여러개의변수를묶어새로운데이터타입을만들수있다. 기본구조가클래스와유사하게필드 ( 변수 ) 와메서드를가진다. 하지만클래스와구조체의가장핵심이자큰차이점은클래스는참조타입이지만구조체는값형식이라는것이다 구조체를사용하는이유는클래스가객체를참조하는것은장점이지만클래스가작다면그클래스의객체를위해참조때문에발생하는시간적인낭비가발생할수있다. 이에반해구조체는값형식이므로직접적으로메모리에접근하기때문에낭비를막을수있다. 따라서 C# 에서는크기가작고단순한함수들을포함하고잇는선, 컬러등의요소들은구조체로정의해두고있다. 구조체는상속할수없으며상속해줄수도없다. new 연산자를사용할수있다. 구조체는기본생성자는재정의해서사용할수없다. 이유는값타입의변수를선언함과동시에메모리에생성되기때문이다. 16
기본문법참고 인터페이스클래스와유사하지만인터페이스의멤버요소들은구현부분이없는프로토타입만가지고있다. 인터페이스의모든멤버의접근한정자는 public 을기본으로한다. abstract, public, protected, internal, private, virtual, override, static 과같은키워드는사용할수없다. 클래스는하나의클래스만을상속받을수있다. 이때여러개로부터상속받고자할경우하나의클래스로부터상속을받고나머지는인터페이스로부터상속을받는다. 이때인터페이스에설계된되어있고구현되지않은멤버요소는구현처리를하게되면다중상속이가능해진다. class ChildClass : ParentClass, I1Interface, I2Interface 만약위와같이 ChildClass 가하나의클래스와 2 개의인터페이스로부터상속을받았는데같은이름의메서드를포함하고있다면문제가발생한다... 17
기본문법참고 속성속성이란클래스안에선언된필드의내용을설정 (Set) 하거나참조 (Get) 할때사용하는코드블록을말한다. 개체의필드중에서외부에공개하고자할때사용하는방법으로개체의성질이나특징, 색상, 크기, 모양등을표현할수있다. 속성은 get 접근자를이용하여저장된값이아닌계산되어진값을반환한다. 형식 ) public string _CarColor get; set; public class Button private string text; public string Text get return text; set text = value; Button b = new Button(); b.text = OK ; string s = b.text; 18
기본문법참고 메서드 (Method) c, c++ 에서는함수 (Function) 파스칼에서는프로시져 (Procedure) 혹은서브루틴 (Subroutine) 이나서브프로그램 (SubProgram) 메서드는일련의코드를하나의이름으로묶는것. 이렇게묶은코드는메서드를호출해서실행할수있다. 형식 ) class 클래스명 접근제한자 [static] 반환형식메서드명 ( 매개변수목록 ) // 실행코드들 return 메서드수행후호출한쪽으로결과리턴 모든메서드들이결과를반환하는것은아니다. 리턴값이없는경우는반환형식부분에 void 를적고 return 구문은생략하면된다. 19
기본문법참고 메서드 (Method) 예제 using System; namespace MethodEx class Calculator public static int Plus(int a, int b) return a+b; class Program public static void Main() int result = Calculator.Plus(3,4); Console.WriteLine(result); 20
기본문법참고 메서드 (Method) 오버로딩메서드오버로딩 (Method Overloading) 이란하나의메서드이름에여러개의구현을만드는것이다. 예제 ) class Calculator public static int Plus(int a, int b) return a+b; public static double Plus(double a, double b) return a+b; 21
기본문법참고 가변길이매개변수가변길이매개변수란그개수가유연하게변할수있는매개변수를말한다. 형식 ) int Sum(Params int[] args) int sum = 0; for(int i=0;i<args.length;i++) sum+=args[i]; return sum; 22
기본문법참고 23 가변길이매개변수예제 using System; namespace UsingParams class MainApp static int Sum(Params int[] args) int sum=0; for(int i=0;i<args.length;i++) if(i>0) Console.Write(, ); sum+=args[i]; Console.WriteLine(); return sum; static void Main(string[] args) int sum=sum(3,4,5,6,7,8,9); Console.WriteLine( Sum : 0, sum);
C# 프로그램실습 개발환경구축예제 - c:\dotnetcsharp\csharpex01 - Visual Studio 2010 을이용해서프로그램만들기 작성순서 Visual Studio 2010 을실행하고새프로젝트를만든다. 솔루션으로만들기 (Create directory for solution) 를체크한다. Visual C# - Console Application 으로, Name 은 CSharpEx01 로설정한다. Visual Studio 2010 에서콘솔프로그램의기존형식 using System; namespace CSharpEx01 class Program static void Main(string[] args) 24
C# 프로그램실습 Using 문 using System; System 네임스페이스안에있는클래스들을사용하겠다고컴파일러에게알리는역할 1 using using 키워드뒤의네임스페이스내클래스들을현재작업하는파일 ( 클래스 ) 에서사용하겠다고정의하는키워드 2 System 닷넷프레임워크에서제공하는기본적인데이터처리클래스 3 ;( 세미콜론 ) 컴파일러에게문장의끝을알리는기호. C# 에서는그냥줄을바꿔쓰고문장의끝부분에세미콜론을붙여주면된다. 짧은문장을한줄안에몰아넣을때도유용하다. 25
C# 프로그램실습 namespace 문 namespace CSharpEx01 네임스페이스키워드는성격이나하는일이비슷한클래스, 구조체, 인터페이스, 델리게이트, 열거형식등을하나의이름아래묶는일을한다. namespace 네임스페이스명 // 클래스 // 구조체 // 인터페이스 // 등등..NET 프레임워크라이브러리에많은클래스들이존재하지만이들클래스들이각용도 / 분야별로정리되어네임스페이스로관리되기때문에혼돈없이편리하게사용가능하다. 26
C# 프로그램실습 코드설명 namespace CSharpEx01 class HelloWorld 프로그램작성시다른네임스페이스에 CSharpEx01 네임스페이스내 HelloWorld 클래스를사용하려면 1.using CSharpEx01; 문장을사용해서 CSharpEx01 네임스페이스를참조하거나 2.CSharpEx01.HelloWorld 처럼클래스가소속되어있는네임스페이스와클래스의이름을붙여줘야한다. 27
C# 프로그램실습 class 문 class Program class Program 은 Program 이라는이름의클래스를만드는문장이다. 일반적으로소스파일 (Program.cs) 과클래스이름은동일하게지정한다. 클래스는 C# 프로그램을구성하는기본단위로써데이터와데이터를처리하는기능으로이루어진다. 28
C# 프로그램실습 Main() 메서드 static void Main(string[] args) static void Main(string[] args) 는메서드메서드중에서도프로그램의진입점으로프로그램을시작하면실행되고이메서드가종료되면프로그램도역시종료된다. 모든프로그램은반드시 Main 이라는이름을가진메서드를하나만가지고있어야한다. 29
C# 프로그램실습 주석문 // : 한줄주석 /* ~ */ : 여러줄주석 주석은소스코드안에기록하는메모같은것이며 C# 컴파일러는소스코드를컴파일하면서주석을만나면무시하고지나간다. 30
C# 프로그램실습 Nullable 문데이터형식? 변수이름 = null; int? a = null; 어떤값을가지지않는즉 0 이아닌비어있는변수가필요할때사용된다. Nullable 형식을사용할수잇는경우는값형식에한해서이다. 변수의 HasValue 속성과 Value 속성 31
C# 프로그램실습 예제 - c:\dotnetcsharp\csharpex02 - Nullable 사용법 작성순서 Visual Studio 2010 을실행하고새프로젝트를만든다. 솔루션으로만들기 (Create directory for solution) 를체크한다. Visual C# - Console Application 으로, Name 은 CSharpEx02 로설정한다. using System; namespace CSharpEx02 class Program static void Main(string[] args) 코드입력 32
C# 프로그램실습 작성순서 static void Main(string[] args) int? a = null; Console.WriteLine(a.HasValue); Console.WriteLine(a!=null); a = 3; Console.WriteLine(a.HasValue); Console.WriteLine(a!=null); Console.WriteLine(a.Value); 33
C# 프로그램실습 var 문 var a =3; var b = Hello ; //a는 int형식 //b는 string형식 int, string 같은명시적형식대신 var 키워드를사용해서변수선언시컴파일러가자동으로해당변수의형식을지정해준다. 단, var 키워드를이용해서변수를선언하려면반드시선언과동시에초기화를해줘야한다. 34
C# 프로그램실습 예제 - c:\dotnetcsharp\csharpex03 - var 키워드사용법 작성순서 Visual Studio 2010 을실행하고새프로젝트를만든다. 솔루션으로만들기 (Create directory for solution) 를체크한다. Visual C# - Console Application 으로, Name 은 CSharpEx03 로설정한다. using System; namespace CSharpEx03 class Program static void Main(string[] args) 코드입력 35
C# 프로그램실습 작성순서 static void Main(string[] args) var a = 20; Console.WriteLine( Type : 0, Value : 1, a.gettype( ), a); var b = 3.1414213; Console.WriteLine( Type : 0, Value : 1, b.gettype( ), b); var c = Hello, World ; Console.WriteLine( Type : 0, Value : 1, c.gettype( ), c); var d = new int[] 10, 20, 30; Console.WriteLine( Type : 0, Value :, d.gettype( )); foreach(var e in d) Console.Write( 0, e); Console.WriteLine( ); 36
C# 프로그램실습 예제 - c:\dotnetcsharp\csharpex04 - 문자형식사용법 작성순서 Visual Studio 2010 을실행하고새프로젝트를만든다. 솔루션으로만들기 (Create directory for solution) 를체크한다. Visual C# - Console Application 으로, Name 은 CSharpEx04 로설정한다. using System; namespace CSharpEx03 class Program static void Main(string[] args) 코드입력 37
C# 프로그램실습 작성순서 static void Main(string[] args) char a= 안 ; char b= 녕 ; char c= 하 ; char d= 세 ; char e= 요 ; //Console.Write( ) 메서드는데이터출력후줄을바꾸지않는다. Console.Write(a); Console.Write(b); Console.Write(c); Console.Write(d); Console.Write(e); //Console.WriteLine( ) 메서드느데이터출력후줄을바꾼다. Console.WriteLine(); 38
C# 프로그램실습 예제 - c:\dotnetcsharp\csharpex05 - 문자열형식사용법 작성순서 using System; namespace CSharpEx05 class StringEx static void Main(string[] args) string a = 안녕하세요 ; string b = 반갑습니다. ; Console.WriteLine(a); Console.WriteLine(b); 39
C# 프로그램실습 상수 (Constants) const 자료형상수명 = 값 ; const string c= ABC ; 상수란변하지않는값으로임의의값을강제로처음부터지정한다. 변수의선언과유사하며데이터형식앞에 const 키워드가위치하고상수가가져야하는데이터를반드시대입해줘야한다. 40
C# 프로그램실습 예제 - c:\dotnetcsharp\csharpex06 - 상수지정및사용법 작성순서 using System; namespace CSharpEx06 class ConstantEx static void Main(string[] args) const int MAX_INT = 2147483647; const int MIN_INT = -2147483648; Console.WriteLine(MAX_INT); Console.WriteLine(MIN_INT); 41
C# 프로그램실습 열거형식 enum 열거형식명 상수 1, 상수 2.. enum 열거형식명 상수 1= 값 1, 상수 2= 값 2 enum Dig YES, NO 종류는같지만다른값을갖는상수를선언할경우각각의상수를선언할수도있지만열거형식을이용하는게편리하다. 열거형이가지고있는값은컴파일러가자동으로할당한다. 열거형식이만들어진목적이가지고있는값의중요성보다요소들간의중복되지않는값을갖고있는것에목적을둔다. 42
C# 프로그램실습 예제 - c:\dotnetcsharp\csharpex07 - 열거형식사용법 작성순서 using System; namespace CSharpEx07 class EnumEx enum DialogResult YES, NO, CANCEL, CONFIRM, OK static void Main(string[] args) Console.WriteLine((int)DialogResult.YES); Console.WriteLine((int)DialogResult.NO); DialogResult result = DialogResult.CONFIRM; Console.WriteLine(result == DialogResult.CONFIRM); Console.WriteLine(result == DialogResult.OK); 43
C# 프로그램실습 예제 - c:\dotnetcsharp\csharpex08 - 값을할당하는열거형식사용법 작성순서 using System; namespace CSharpEx08 class EnumValueEx enum DialogResult YES=10, NO, CANCEL, CONFIRM=50, OK static void Main(string[] args) Console.WriteLine((int)DialogResult.YES); Console.WriteLine((int)DialogResult.NO); Console.WriteLine((int)DialogResult.CANCEL); Console.WriteLine((int)DialogResult.CONFIRM); Console.WriteLine((int)DialogResult.OK); 44
C# 프로그램실습 변수 자료는크게 변수 와 상수 두가지로나뉘어진다. 자주쓰이는자료로는계산할수있는 숫자 형태와보이는그대로인 문자 에관련된자료형그리고참 (True) 와거짓 (False) 형태의 Boolean(bit) 자료형등이있다. 숫자 정수 ( 음수와양수 ), 실수 ( 소수점 ) 문자 1byte 인 문자 와 2byte 이상인 문자열 반드시변수에값을담을필요는없으나차후에사용하기위해변수에담아둔다. 45
C# 프로그램실습 예제 - c:\dotnetcsharp\csharpex09 - 변수사용법 작성순서 using System; namespace CSharpEx08 class Program static void Main(string[] args) 코드입력 46
C# 프로그램실습 작성순서 static void Main(string[] args) // 숫자 int i1 = 6; int i2 = -6; uint ui1 = 5; //uint ui2 = -5; // 오류 : unsigned int float f1 = -5.1f; float f2 = -5.1; // 오류 : double double d = -32.1; // 문자 char c= 1 ; string b= 6 47
C# 프로그램실습 질문과답변 왜자료형은 (int, uint, float 등과같이 ) 여러가지로존재하는가? 48
C# 닷넷기초 구조 Namespace : class 를묶는단위. 실제프로그래밍기능으로는사용하지않고특정 class 를이용하기위한참조 (reference) 로사용 Class : C# 의모든형태로서실제기능을구현하는단위. 일반적으로 file 단위로나뉘어지지만반드시그런것은아니다. 실제기능을구현하기위한메서드및속성의묶음. 접근제한자로기능을숨기거나상속해서사용할수있다. Method : Class 내부에존재하며프로그램처리프로세스를하나로묶어두는기능파라미터 (parameter) 를받을수있으므로특정기능을하기위한수단으로사용. Field,Attribute : 실제값 ( 변수와상수 ) 을필드를이용해데이터공간을만들어두고속성을통해이에대한접근 ( 읽기, 쓰기 - 값할당 ) 을제어할수있다. 49
C# 프로그램실습 연산자 - 대입연산자 = 는모든자료형에서사용 - 계산가능한숫자형변수및상수에 +,-,*,/,% 적용시해당연산자로연산 - 계산불가능한문자열변수및상수에 + 적용시문자열결합 - 계산불가능한 Boolean 변수및상수에 (OR, 또는 ), && (AND, 그리고 ),! (NOT, 아니요 ) 적용 - 비교연산자는값을비교하여결과를 Boolean 값 (true 또는 false) 으로리턴 모든연산자는결과가있다. 1. 정수형과정수형 = 정수형 2. 문자열과정수형 = 문자열 3. 문자열과비트형 = 문자열 50
C# 프로그램실습 예제 - c:\dotnetcsharp\csharpex10 - 연산자사용법 작성순서 using System; namespace CSharpEx10 class Program static void Main(string[] args) 코드입력 51
C# 프로그램실습 작성순서 static void Main(string[] args) int a, b; a = 5; b = a + 6; string str1, str2; str1 = 5 ; str2 = str1 + 6 ; bool b1, b2; b1 = true; b2 = b1 false; 52
C# 프로그램실습 C# 기본자료형클래스 기본자료형클래스숫자형 System.Int16, System.Int32, System.Int64, System.Single, System.Double 문자형 System.Char, System.String -int 와 System.Int32 는같다. Int16 은 short 이며, Int64 는 long 이다. -String 과 string 은같은의미이다. 53
C# 프로그램실습 형변환 형변환 ( 숫자 ) - 같은형은변환이필요없으나다른형은형변환이필요할때가있다. - 정수형은작은자료형 (short, System.Int16) 에서큰자료형 (int, System.Int32) 으로할당은자동으로잘된다. ( 묵시적형변환 ) - 위와반대의경우는형변환이필요하며변환할값의앞에형식을 ( ) 으로감싸서적는다. ( 명시적형변환 ) int i = 23; short s = i; ( 에러 ) short s = (short)i; 54
C# 프로그램실습 형변환 형변환 ( 문자 ) - 문자열은계산할수없는자료형이다. 이를계산할수있는자료형인정수형으로변환하려면 Parse() 를이용한다. int, float, double 등에서모두사용가능하다. string str = 52 ; int ia = int.parse(str); - 만약변환할숫자가아닌값이들어있다면오류가발생한다. string str = 531a ; int ia = int.parse(str); // 오류이경우 Boolean 값을리턴하는 TryParse() 를이용하여문자열이숫자값을나타내는지확인가능하다 string str = 532a ; int num; bool b = int.tryparse(str, out num); //b=false (532a 변환은오류 ) 55
C# 프로그램실습 if-else 문 if( 비교 ) else if( 비교 1) else if( 비교 2) else 비교연산자가참 (True) 일때해당 을처리한후끝내게되며, 처리구문이단일구문으로 1 줄이면중괄호 는생략가능하다. 56
C# 프로그램실습 switch 문 switch( 변수 ) case 상수값 1 : // 처리구문 1; break; case 상수값 2: // 처리구문 2; break; default: // 처리구문 3; break; 변수의값이 case 상수값과매치되면각각의 case 문하단의처리구문을실행 case 의값이모두아니면 default 의처리구문을실행한다. 57
C# 프로그램실습 3 항조건문 (? : ) 조건식? 참 : 거짓 int num = 5; string str = (num == 5)? yes : no? 앞의조건식이참이면 yes 값이? 앞의조건식이거짓이면 no 값이문자열변수 str 에할당된다. 58
C# 프로그램실습 반복문 (for 문 ) for( 초기값 ; 조건문 ; 증감값 ) // 처리구문? 앞의조건식이참이면 yes 값이? 앞의조건식이거짓이면 no 값이문자열변수 str 에할당된다. 59
C# 프로그램실습 예제 - c:\dotnetcsharp\csharpex11 - for 문 ( 반복문 ) 사용법 작성순서 using System; namespace CSharpEx11 class ForEx static void Main(string[] args) for(int i=1;i<=9;i++) Console.WriteLine(i); 60
C# 프로그램실습 예제 - c:\dotnetcsharp\csharpex12 - for 문 ( 무한루프 ) 사용법 작성순서 using System; namespace CSharpEx12 class InfiniteLoop static void Main(string[] args) for( ; ; ) Console.WriteLine( * ); 61
C# 프로그램실습 반복문 (foreach 문 ) foreach( 자료형사용할변수 in 배열변수명 ) // 사용할변수로사용 배열 (Array) 형식의반복을수행한다. 배열변수에들어있는하나하나의값이처음부터끝까지 사용할변수 이름으로할당되며배열이므로자료형은배열의자료형으로잡아야한다. 외부로부터넘어오는데이터경우처럼자료형을지정하기애매할경우 var 키워드를사용하여지정할수있다. 62
C# 프로그램실습 예제 - c:\dotnetcsharp\csharpex13 - foreach 문사용법 작성순서 using System; namespace CSharpEx13 class ForeachEx static void Main(string[] args) int[ ] i = 1,3,5,7,9; foreach(int order in i ) Console.WriteLine( NOW VALUE = + order); 63
C# 프로그램실습 반복문 (while 문 ) while( 조건문 ) // 실행구문 조건문이거짓일때까지실행문을반복한다. while 문의경우조건문을먼저비교하므로조건문을판단하여거짓일경우 while 문내의실행구문은한번도실행되지않을수있다. 64
C# 프로그램실습 예제 - c:\dotnetcsharp\csharpex14 - while 문사용법 작성순서 using System; namespace CSharpEx14 class WhileEx static void Main(string[] args) int i = 1; while (i == 0) i++; Console.WriteLine(i); 65
C# 프로그램실습 반복문 (do-while 문 ) do // 실행구문 while( 조건문 ) 조건문이거짓일때까지실행문을반복한다. do-while 문의경우 do 문내의실행구문을무조건 1 회실행후 while 문내의조건문을비교한다. 66
C# 프로그램실습 예제 - c:\dotnetcsharp\csharpex15 - do-while 문사용법 작성순서 using System; namespace CSharpEx15 class DoWhileEx static void Main(string[] args) int i = 1; do i++; Console.WriteLine(i); while(i == 0); 67
C# 프로그램실습 예제 - c:\dotnetcsharp\csharpex16 - do-while 문을이용한무한루프사용법 작성순서 using System; namespace CSharpEx16 class Program static void Main(string[] args) while(true) Console.WriteLine( * ); 68
C# 프로그램실습 빠져나오기 - break : 반복문을빠져나온다. - return : 메서드에서결과를리턴하고즉시중단한다. - throw : 예외를발생시킨다. - goto : 지정한위치로분기 모든반복문에서사용가능하며수행하는반복문에서빠져나오기위한명령어로 break, return, throw, goto 가있다. 69
C# 프로그램실습 70 예제 - c:\dotnetcsharp\csharpex17 - break 문을이용하여반복문빠져나오기 작성순서 using System; namespace CSharpEx17 class BreakEx static void Main(string[] args) int i = 0; while(true) i++; Console.WriteLine(i); if (i==10) break;
C# 프로그램실습 건너뛰기 continue 반복문내에서 continue 문을만나면반복문의처음으로되돌아간다. 71
C# 프로그램실습 예제 - c:\dotnetcsharp\csharpex18 - continue 문사용법 작성순서 using System; namespace CSharpEx18 class ContinueEx static void Main(string[] args) // 코드작성 72
C# 프로그램실습 작성순서 static void Main(string[] args) for(int i=0;i<9;i++) if(i%2==0) Console.WriteLine(i); continue; Console.WriteLine( x ); 73
C# 프로그램실습 클래스와객체 클래스정의형식 [ 접근한정자 ] class [ 클래스이름 ] // 필드, 프로퍼티, 메서드, 이벤트정의 객체의원형이클래스 (Class) 이다. 닷넷은클래스들을기본으로하여모든것들이구성되어있다. 74
C# 프로그램실습 예제 - c:\dotnetcsharp\csharpex19 - 클래스와객체사용법 작성순서 using System; namespace CSharpEx19 class ClassEx static void Main(string[] args) Car car1 = new Car(); public class Car public string CarType; public string CarID; public int CC; public DateTime StoredDate; 75
C# 프로그램실습 76 예제 - c:\dotnetcsharp\csharpex20 - 객체인스턴스화 작성순서 using System; namespace CSharpEx20 class Program Car car = new Car(); car.cartype = 경차 ; car.carid = 12가1234 ; car.cc = 900; car.storeddate = DateTime.Parse( 2012-01-01 ); public class Car public string CarType; public string CarID; public int CC; public DateTime StoredDate;
C# 프로그램실습 클래스로부터객체를만드는법 먼저클래스를정의하고사용할변수이름을지정한다. Car car1; 객체를인스턴스화한다 car1 = new Car(); Car car1 = new Car(); 77
C# 프로그램실습 78 예제 - c:\dotnetcsharp\csharpex24 - 차량출력 작성순서 using System; namespace CSharpEx24 class Program static void Main(string[] args) Car car1 = new Car(); car1.cartype = 경차 ; car1.carid = 12 가 1234 ; car1.cc = 900; car1.storeddate = DateTime.Parse( 2012-01-01 ); Console.WriteLine(car1.CarTypeCheck()); car1.printcar();
C# 프로그램실습 작성순서 public class Car public static int CAR_COUNT; public string CarType; public string CarID; public int CC; public DateTime StoredDate; public bool CarTypeCheck() bool isvalid = true; if(cartype!= 경차 && CarType!= 중형차 && CarType!= 대형차 ) isvalid = false; return isvalid; public void PrintCar() Console.WriteLine( 0 1 [ 입고일 : 2, CarType, CarID, StoredDate.ToShortDateString()); 79
80 Ⅲ. ASP.NET 기초
ASP.NET 기초 ASP.NET 개발환경일반적으로웹페이지를개발하기위해서는개발툴 ( 메모장, 텍스트에디터, Visual Studio) 이필요하며페이지를처리할웹서버 (PWS, IIS) 가필요하고결과를확인해볼웹브라우저가필요하다. 다만, 개발툴로 Visual Studio 를선택했다면 IIS 설정없이개발이가능하다. 개발환경소개 Visual Studio 2010 :: 멀티타겟팅제공 :: 여러형식의개발환경제공 :: HTML5, CSS3 등최신웹개발환경제공 :: Debug & Deploy :: 도움말및문서 IIS 설정 (P69 참고 ) IIS(Internet Information Service) 는 Microsoft 의인터넷기반서비스이다. 즉, 웹서버이다. 81
ASP.NET 프로그램실습 예제 - c:\dotnetaspnet\webhelloworld - Hello! World 와현재시간출력 작성순서 -ASPX 에서의코드생성 <form id= form1 runat= server > <div> 안녕하세요 <br/><br/> <asp:label ID= lblcurrenttime runat= server ></asp:label> 입니다. </div> </form> 82
ASP.NET 프로그램실습 작성순서 -CS 에서의코드생성 using System; namespace WebHelloWorld public partial class WebHelloWorld : System.Web.UI.Page protected void Page_Load(object sender, EventArgs e) lblcurrenttime.text = DateTime.Now.ToLongTimString(); 83
ASP.NET 기초 웹응용프로그램개발단계 84
ASP.NET 기초 ASP.NET 웹응용프로그램관련파일 :: 솔루션파일 (.sln,.suo) :: 프로젝트파일 (.vbproj,.csproj) :: 웹애플리케이션파일 - ASP.NET 웹폼 (.aspx) : asp.net 파일 - 서비스 (.svc) : WCF 서비스 - ASP.NET 웹서비스 (.asmx) : 웹서비스 - 클래스 (.vb /.cs) : C#, Visual Basic 파일 - 글로벌애플리케이션클래스 (.asax) : 웹사이트의관문역할 - 웹사이트정의컨트롤 (.ascx) - 제네릭핸들러 (.ashx) : html 코드를동반하지않고로직을수행할때 :: 마스터페이지 (.master) : 웹사이트의공통레이아웃을담고있는파일 :: 환경설정파일 (.config) : 여러가지환경설정을담을수있는파일 :: 어셈블리파일 (.dll) :: 스타일시트파일 (.css) 85
ASP.NET 프로그램실습 예제 - c:\dotnetaspnet\webwebform - @Page 지시문설명 작성순서 -ASPX 에서의코드생성 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm.aspx.cs" Inherits="WebWebForm.WebForm" %> 참고사항 - AutoEventWireup= true 현재페이지가실행될때코드비하인드 (.cs) 파일의 Page_Load 이벤트를자동실행시킨다. - CodeFile= WebForm.aspx.cs.aspx 파일과연동되는 C# 파일을정의해놓은구문으로.cs 파일이해당됨. - Inherits= WebForm 코드비하인드파일의클래스명을정의한다. 86
ASP.NET 프로그램실습 예제 - c:\dotnetaspnet\webpageevent - Page_Load 와 PostBack 과페이지간게시 컨트롤 컨트롤종류속성속성값 Label ID lblloadtime Button ID btnpostback Text 현재페이지다시게시 DropDownList ID lstfavorites 87
ASP.NET 프로그램실습 작성순서 -ASPX 에서의코드생성 <form id= form1 runat= server ><div> 페이지이벤트확인 : Page_Load 와 PostBack<br/><br/> <asp:label ID= lblloadtime runat= server Text= Label ></asp:label> <br/> <asp:button ID= btnpostback runat= server Text= 페이지다시게시 /> <br/><br/> <asp:dropdownlist ID= lstfavorites runat= server > </asp:dropdownlist> </div></form> -CS 에서의코드생성 protected void Page_Load(object sender, EventArgs e) if(!page.ispostback) lblloadtime.text = DateTime.Now.ToShortTimeString(); lstfavorites.items.add( C# ); lstfavorites.items.add( ASP.NET ); 88
ASP.NET 프로그램실습 예제 - c:\dotnetaspnet\webresponsewrite - 내장개체 Response.Write 작성순서 컨트롤종류속성속성값 Button ID btnclick Text Click 이벤트 화면출력 btnclick_click Button ID btnjavascript Text Click 이벤트 자바스크립트로출력 btnjavascript_click Label ID lbldisplay 89
ASP.NET 프로그램실습 작성순서 -ASPX 에서의코드생성 <form id= form1 runat= server > <div> 내장개체 Response.Write() <br/> <%= [1] aspx 파일에서바로출력 : + DateTime.Now.ToShortDateString()%> <br/> <asp:button ID= btnclick runat= server Text= 화면출력 onclick= btnclick_click /> <asp:button ID= btnjavascript runat= server Text= 자바스크립트로출력 onclick= btnjavascript_click /> <br/><br/> <asp:label ID= lbldisplay runat= server ></asp:label> </div> </form> 90
ASP.NET 프로그램실습 작성순서 -CS 에서의코드생성 protected void Page_Load(object sender, EventArgs e) Response.Write("[2] C# 코드 - Page_Load() 이벤트에서의 Response.Write()"); lbldisplay.text = "[3] Label 컨트롤에출력 : " + DateTime.Now.ToShortTimeString(); protected void btnclick_click(object sender, EventArgs e) Response.Write("<span style='color:red;'>[4] 버튼클릭시출력 </span>"); protected void btnjavascript_click(object sender, EventArgs e) string strjs = @ <script type='text/javascript > document.write('[5] 자바스크립트구문처리 '); </script> ; Response.Write(strJs); 참고사항 P.85 Response 내장개체참조 91
92 Ⅴ. ADO.NET
ADO.NET ( 데이터베이스 ) 데이터베이스는데이터의집합 데이터베이스설치하기 (Microsoft SQL Server 2008 R2 Express) 인스턴스구성 : STUDY 인증모드 : 혼합모드 (SQL Server 인증및 Windows 인증 ) 암호 : 1234 (SQL Server 에서는기본으로최고관리자의 ID 가 sa 이다 ) 93
ADO.NET ( 데이터베이스 ) SQL Server Management Studio( 관리도구 ) 실행하기로컬또는원격지에있는 DB 서버로접속하기위한화면이며접속하기위한정보를입력해야한다. 서버이름 : NOTEBOOK-PC\STUDY 인증 : SQL Server 인증로그인 : sa 비밀번호 : 1234 연결이성공되었다면 DB 서버내데이터를사용할수있다. 94
ADO.NET ( 데이터베이스 ) 외부의프로그램에서 DB 를입력하거나조회하기전에 SQL 관리도구를이용해서조회나 SQL 쿼리문등을먼저처리해서결과를확인후비교해볼수있다. MSSQL Server 는 Oracle, MySQL 과같이 DBMS(DataBase Management System) 의한종류이며 DB 의기본개요는동일하다. 데이터베이스 (DB) 의구성 95
ADO.NET ( 데이터베이스 ) DB 를관리하는총체가 DBMS 이며 DataBase 의묶음이다. DB 는 1 개이상의테이블로이루어져있으며처음 DB 를생성하면테이블은존재하지않는다. 96
ADO.NET ( 데이터베이스 ) 닷넷 (ASP.NET) 과 DBMS(MS SQL Server) 웹프로그래밍시해당파일들은 (2) 에위치한다. (1) 을위해 (2) 가존재한다. (3) 은 (2) 가무슨서버인지신경쓸필요가없다. DB 를요청하면해당자료를꺼내주면될뿐이다. (2) 는자료입출력이있을때만 (3) 에접속할것이다. (1) 은 (2) 에게 GET 으로요청한다. (2) 는 (1) 에게동봉된자료와함께뿌려준다. 97
ADO.NET ( 데이터베이스 ) 닷넷 (ASP.NET) 과 DBMS(MS SQL Server) (3) 은명령을기다리고있다가요청명령이오면응답한다. (2) 가 (3) 에게내리는명령은 SQL( 쿼리 ; 쿼리문 ; 시퀄 ) 이다. (3) 이 SQL 명령을받게되면그명령의결과를 (2) 에게줄경우가있고주지않을경우가있다. 자료를요청하는명령에대해서만결과를돌려주며 DB 에자료를입력, 수정, 삭제하는 SQL 명령에대해서는돌려줄자료가없다. 98
ADO.NET ( 데이터베이스 ) 닷넷 (ASP.NET) 과 DBMS(MS SQL Server) DB 를알아야되는이유는직접 DB 에자료를넣거나빼야되기때문이다. [ 중요 1] DB 는테이블 (TABLE) 의묶음이다. [ 중요 2] 테이블은 1 개이상의컬럼이꼭존재해야자료를담을수있다. [ 중요 3] ASP.NET 과 DB 는아무관련이없다. 자료저장소가 DB 일뿐이다. [ 중요 4] ASP.NET 에서 DB 서버로내리는명령을 SQL 이라고한다. [ 중요 5] DB 서버는받은명령이자료요청이라면결과를응답할것이다. 99
ADO.NET ( 데이터베이스 ) 데이터베이스작업 DB 에관해알아보기위해 [ 시작 - 프로그램목록 ] 에서 SQL Server Management Studio 를실행한다 DB 서버접속정보를입력한후접속을한다. 서버이름 : NOTEBOOK-PC\STUDY 인증 : SQL Server 인증로그인 : sa 비밀번호 : 1234 현재작업컴퓨터는웹서버기능과동시에 DB 서버도동작한다. WEB(HTTP) 는기본네트워크포트 80 번이며 SQL Server 는 1443 번포트이다. 포트번호가다르기때문에여러서버가한컴퓨터에서동작할수있다. 현재접속하는서버가로컬서버이기에컴퓨터이름으로접속이가능한것이며외부서버접속은서버의도메인이나 IP 로접속해야한다. 100
ADO.NET ( 데이터베이스 ) 데이터베이스생성데이터베이스명 : aspnet 101
ADO.NET ( 데이터베이스 ) 테이블생성새테이블만들기를수행하면중간에입력항목이생긴다. 총 3 개의항목이며테이블내열 (Column) 을만드는과정이다. DATABASE(TABLE 의묶음 ) > TABLE( 자료담는곳 ) > COLUMN 의모음 102
ADO.NET ( 데이터베이스 ) 테이블생성회원테이블 : member_table DB 설계 (member_table) 열 (Column) 이름자료형식목적 user_id 문자열 (varchar), 20 자회원의로그인아이디 user_password 문자열 (varchar), 15 자로그인비밀번호 user_name 문자열 (varchar), 10 자회원이름 user_regdate 날짜 (datetime), 기본회원가입일자 103
ADO.NET ( 데이터베이스 ) 테이블생성회원테이블 : member_table DB 설계 (member_table) [ 데이터형식 ] 항목에서괄호 ( ) 의내용은해당자료형의크기이다. 문자열은크기를 DB 설계자가지정해주지만정수형, 날짜, bit 형등은해당자료형의크기가고정이라지정할수없다. Null 허용이체크되지않은컬럼에값을주지않으면 DB 에서오류가발생된다. 입력이다되었으면저장하기버튼을눌러 member_table 이라는이름으로테이블을저장한다. 104
ADO.NET ( 데이터베이스 ) 개체탐색기 ( 생성된테이블 ) 관리도구의개체탐색기에서 [aspnet] 데이터베이스내에테이블 [member_table] 이저장된것을확인할수있다. 만든테이블수정시테이블을선택후오른쪽마우스버튼을눌러 [ 디자인 ] 에서수정가능하다. 105
ADO.NET ( 데이터베이스 ) DB 명령어 (SQL 문 ; 쿼리 ; 쿼리문 ; 시퀄 ) 관리도구에서 aspnet 이라는이름의데이터베이스생성 member_table 이라는이름의테이블생성이라는과정은모두내부적으로 DB 명령어를수행한것이다. 자료롤넣거나보는것도모두쿼리문으로명령을한다. ASP.NET 에서도마찬가지로 DB 에자료를넣거나빼기위해쿼리문을이용한다. 따라서 SQL 문을알아야한다. 쿼리문은 DB 단계에서이루어진다. 테이블단위가아니라 DB 에서 1 개이상의테이블에게명령을내리게된다. 106
ADO.NET ( 데이터베이스 ) DB 명령어 (SQL 문 ; 쿼리 ; 쿼리문 ; 시퀄 ) 관리도구에서 SQL 문을작성해서실행해보자. 상단의 [ 새쿼리 (N)] 버튼을클릭한다중간에입력할수있는화면이뜨게되며여기에 SQL 문을입력할수있다. 꼭알아야할 4 가지 SQL 문 1. 테이블에자료넣기 (INSERT) - 게시물글쓰기, 회원가입 2. 테이블의자료가져오기 (SELECT) - 게시물목록, 회원목록 3. 테이블자료수정 (UPDATE) - 게시물수정, 회원정보변경 4. 테이블자료삭제 (DELETE) - 게시물삭제, 회원탈퇴 member_table 에는총 4 개의열이있다. 이 4 개의열은각각자료가모두들어가야지만하나의자료가만들어진다. 이하나의자료를레코드 (Record) 라고부른다. 쿼리문으로자료를넣는다는것은상수값을할당하는것과유사하다. 프로그래밍시 DB 를연동하는가장큰목적은테이블에들어가는자료는 사용자또는어떤외부의변하는값 이기때문이다. 107
ADO.NET ( 데이터베이스 ) DB 명령어 member_table 에자료입력 : INSERT INSERT -자료입력 INTO -어디에 테이블명 -해당테이블에 ( 컬럼1, 컬럼2.) -해당컬럼순서대로 VALUES -값은 ( 컬럼1값, 컬럼2값,..) -( 홍길동,35 ) 자료를넣는쿼리문은다음과같다. INSERT INTO member_table (user_id, user_password, user_name, user_regdate) VALUES ( test_id, testpwd, 홍길동,getdate()) 해당컬럼명에맞는자료를넣으면된다. 관리도구에서입력하고 F5 를눌러실행한다. 실행후하단에실행결과메시지를확인할수있다. 108
ADO.NET ( 데이터베이스 ) DB 명령어 member_table 의자료조회 : SELECT SELECT 컬럼 1, 컬럼 2 ( 또는 *) FROM 테이블명 WHERE 조건문 member_table 의모든자료를조회하는구문은아래두개의구문과같다. SELECT * FROM member_table SELECT user_id, user_password, user_name, user_regdate FROM member_table hems 컬럼의정보를출력하려면 * 또는모든컬럼명을나열한다. 해당컬럼만결과를얻고자할경우해당컬럼명만입력한다. SELECT 쿼리문에조건을주고자할경우 WHERE 키워드를입력하고뒤에조건문을입력한다. 조건문의형식은 컬럼명 [ 연산자 ] 값 형식이다. (P95 참고 ) 109
ADO.NET ( 데이터베이스 ) DB 명령어 member_table 의자료수정 : UPDATE UPDATE 테이블명 SET 컬럼명 = 컬럼값 1, 컬럼명 2= 컬럼값 2. WHERE 조건문 WHERE 조건문이없다면테이블전체가수정된다. 일반적으로 UPDATE 문은 WHERE 절이들어가게된다. UPDATE member_table SET user_name= 김철수 WHERE user_id= test_id UPDATE member_table SET user_password= 1234, user_name= 손님 WHERE user_id= test_id 110
ADO.NET ( 데이터베이스 ) DB 명령어 member_table 의자료삭제 : DELETE DELETE FROM 테이블명 WHERE 조건문 UPDATE 쿼리문처럼 DELETE 문도 WHERE 조건문이없다면테이블전체가삭제된다. DELETE FROM member_table WHERE user_id= test_id ; DELETE FROM member_table WHERE user_name= 홍길동 OR user_name LIKE 김 % 관리도구에서 DB 에명령을내리기위한기본적인 4 개의쿼리문형식을알아보았다. 111
ADO.NET ( 데이터베이스 ) ASP.NET 에서 DB 연동하기 ASP.NET 은닷넷 (.NET Framework) 중웹어플리케이션개발을위한것이다. 닷넷에서 DB 연동은 ADO.NET 이라불리기도하는 System.Data 네임스페이스를이용한다. 닷넷플랫폼을이용하는 DB 연동방법은모두동일하다. 개발자가 DB 와연동하기위해다음사항은알아두자. 1. 어떤 DBMS 인가? SQL Server, MySQL, Oracle 2. DB 서버는어디에있으며접속을어떻게구성하였나? 도메인서비스방식연결, IP 연결방식. 3. 접속하는 DB 명은무엇인가? aspnet 4. 해당 DB 의권한 ID/PW 는무엇인가? sa, 1234 DB 연결을위해 ADO.NET 을이용한다고했다. ADO.NET 을이용한다는것은 System.Data.XXX 를사용한다고생각하면된다. DB 연동시에는기본적으로 System.Data 를참조한다. SQL Server 연동에해당되는클래스를이용하기위해 System.Data.SqlClient 네임스페이스도참조한다. 112
ADO.NET ( 데이터베이스 ) Visual Studio 2010 에서새로운프로젝트를생성해보자. [ 새프로젝트 ASP.NET 웹어플리케이션 이름 : AspNet] 프로젝트를생성후솔루션탐색기를살펴보면해당프로젝트의구성파일들이자동생성되어있다. [ 솔루션탐색기 추가 새항목 WebForm db1.aspx] 를지정한다. 113
ADO.NET ( 데이터베이스 ) 예제 - c:\dotnetcsharp\aspnet - ASP.NET 에서 DB 연동하기 작성순서 <%@ Page Language= C# runat= server %> <%@ Import Namespace= System.Data %> <%@ Import Namespace = System.Data.SqlClient %> <script language= C# runat= server > void Page_Load(). </script> aspx 파일에서 namespace 참조는상단코드에서처럼 import 키워드를사용하여선언한다. <html> </html> 등의디자인관련태그는필요하지만프로그래밍코드부분과의혼돈을배제하기위해예제해서는생략한다. 114
ADO.NET ( 데이터베이스 ) DB 연결 우선 DB 서버에연결을해야할것이고쿼리문을이용해 DB 에명령을내려서자료를넣거나지우거나수정하거나가져올수있을것이다. 그리고 DB 연결을끊어준다. 1. DB 연결 2. 명령 ( 쿼리문수행 ) 3. DB 연결끊기 115
ADO.NET ( 데이터베이스 ) DB 연결명령 ( 쿼리문수행 ) 에해당하는부분이쿼리문에해당된다. 1. SELECT FROM [ 테이블명 ] 결과가 1 개인것, 결과가 2 개이상인것 2. INSERT( 입력 ), UPDATE( 수정 ), DELETE( 삭제 ) 결과가없다. 크게결과가있는 SELECT 와그외결과가없는쿼리문으로나뉘어진다. SELECT 문을쓰는이유는조회하기위함이니결과가존재한다. 그외결과가없는 INSERT, UPDATE, DELETE 처럼데이터를넣거나수정, 삭제하는쿼리들은결과가없지만해당쿼리에의해적용된레코드수는알수있다. ADO.NET 에서는이런 DB 연동시에입출력되는자료의종류에따라몇가지의메서드를제공한다. 결과가 1 개밖에없다고예상되면단일값을리턴하는메서드를이용하고, 결과가여러개인것은좀더규모가큰결과를리턴하는메서드를이용해야한다. 116
ADO.NET ( 데이터베이스 ) 프로그래밍코드로 DB 접속하기사용할 DB 는생성한 aspnet 데이터베이스의 member_table 테이블을이용한다. DB 에연결하는클래스이름은 SqlConnection 이다. SQL Server 용의클래스는앞에 Sql 이붙는다고생각하자. 다른 DB 는 Ole.. 명령을위한클래스이름은 SqlCommand 이다. SqlCommand 로명령을내린결과물이있을경우 1 개의결과를리턴하는경우와여러개의결과를리턴하는경우가있다고했다. 여러개의결과가넘어오는 DataSet 이라는것으로리턴되는데이것은 Data Adapter 에의해만들어진다. 각각의클래스이름은 DataSet, SqlDataAdapter 이다. 1. DB 연결 2. 명령 3. DB 연결끊기 먼저 1.DB 연결과 3.DB 연결끊기코드를작성해보자. 117
ADO.NET ( 데이터베이스 ) 예제 - c:\dotnetcsharp\aspnet\db1.aspx - ASP.NET 에서 DB 연동하기 (DB 연결과 DB 연결끊기 ) 작성순서 <%@ Page Language= C# runat= server %> <%@ Import Namespace= System.Data %> <%@ Import Namespace = System.Data.SqlClient %> <script language= C# runat= server > void Page_Load() string str_conn = server=notebook-pc\\study;user id=sa;password=1234;database=aspnet ; SqlConnection conn = new SqlConnection(str_conn); Response.Write( before : + conn.state + <hr> ); conn.open(); Response.Write( before : + conn.state + <hr> ); conn.close(); Response.Write( before : + conn.state + <hr> ); </script> 118
ADO.NET ( 데이터베이스 ) 설명 DB 서버에연결하기위한클래스인 SqlConnection 을 str_conn 이름의스트링변수로지정하였다. SqlConnection conn = new SqlConnection(string 연결문자열 ) 연결문자열의상수가지정된 str_conn 변수를살펴보자. server=notebook-pc\\study; user id=sa password=1234; database=aspnet server, user id, password, databse 이렇게 4 가지로지정하여연결문자열을구성할수있다. conn.open(); conn.close() 부분이 DB 와연결을하고 (Open), 연결끊기 (Close) 할때의연결상태를출력해본다. Close() 메서드로명시적으로연결을끊어주지않으면웹서버와 DB 서버의연결이일정시간동안유지될것이다. 그시간동안불필요한자원을낭비하게된다. 그러므로열었으면꼭끊어주도록한다. 119
ADO.NET ( 데이터베이스 ) 예제 - c:\dotnetcsharp\aspnet\db2.aspx - ASP.NET 에서 DB 연동하기 ( 쿼리문 ) 작성순서 <%@ Page Language= C# runat= server %> <%@ Import Namespace= System.Data %> <%@ Import Namespace = System.Data.SqlClient %> <script language= C# runat= server > void Page_Load() string str_conn = server=notebook-pc\\study;user id=sa;password=1234;database=aspnet ; SqlConnection conn = new SqlConnection(str_conn); conn.open(); //DB 연동작업시작 //DB연동작업끝 conn.close(); </script> 120
ADO.NET ( 데이터베이스 ) 결과값이없는 INSERT, DELETE, UPDATE 쿼리문 INSERT 문실행쿼리문을담당하는클래스는 SqlCommand 클래스이다. MSDN 에서 System.Data.SqlClient 내의 SqlCommand 클래스를살펴보자. 메서드를보면여러가지메서드들이있는데 ExecuteReader, ExecuteNonQuery, ExecuteScalar 이렇게 3 개의메서드가필요하다. ExecuteNonQuery() 메소드 : 결과물이없는쿼리문을실행할때사용하는메서드 결과가없는쿼리문을실행할때 ExecuteNonQuery() 메서드사용결과가있는쿼리문을실행할때 ExecuteScalar(), ExecuteReader() 메서드사용 121
ADO.NET ( 데이터베이스 ) DB 관리도구를실행시켜 aspnet DB 에있는테이블의자료를확인해보자. SELECT * FROM member_table db2.aspx 코드내에 INSERT 문으로 member_table 에자료를넣는코드를추가 INSERT INTO member_table VALUES( aspnet, 1234, 닷넷초보 getdate()) //DB 연동작업시작 string QUERY = INSERT INTO member_table VALUES( aspnet, 1234, 닷넷초보,getdate()) ; SqlCommand cmd = new SqlCommand(QUERY, conn); cmd.executenonquery(); //DB 연동작업끝 db2.aspx 파일을저장하고한번실행하고 DB 관리도구에서 F5 를눌러자료가잘입력되었는지확인해본다. 리턴이없는 INSERT, DELETE, UPDATE 쿼리문의실행방법은모두동일하게사용하면된다. 122
ADO.NET ( 데이터베이스 ) 결과값이있는 SELECT 문 (1 개의결과값을리턴하는 ExecuteScalar() 메서드 ) SELECT 문실행 ExecuteScalar() 메서드는딱하나의값만결과값으로읽어온다. 레코드가 1 개인값이라도컬럼이 2 개라면 ExecuteScalar() 메서드를사용할수없다. 오직한개만가능하다. ExecuteScalar() 메서드의리턴형은 object 형이다. object 형은어떤자료인지알수없는특정클래스형이자닷넷의모든자료형을일컫는다. 자료를리턴하는형은왜 object 형일까? DB 서버에보낸 SELECT 쿼리의결과를예상할수없기때문이다. 닷넷입장에서어떤자료형의값을넘겨받을지알수없기때문이다. 그러므로 ExecuteScalar() 메서드는개발자가받아서따로자료를실제 DB 의컬럼에해당하는자료형으로바꾸어주어야한다. 123
ADO.NET ( 데이터베이스 ) DB 관리도구를실행시켜 aspnet DB 에있는테이블의자료를확인해보자. SELECT count(*) FROM member_table SELECT user_name FROM member_table db2.aspx 코드내에 SELECT 문으로 member_table 에서해당데이터가져오기 SLECT user_name FROM member_table WHERE user_id= aspnet //DB 연동작업시작 string QUERY = SLECT user_name FROM member_table WHERE user_id= aspnet ; SqlCommand cmd = new SqlCommand(QUERY, conn); object result = cmd.executescalar(); Response.Write(result); //DB 연동작업끝 일반적으로 ExecuteScalar 메서드는 WHERE 절이들어가는경우가많다. 목적상 1 개의레코드에 1 개의컬럼을가져오기위한메서드이기때문이다. 124
ADO.NET ( 데이터베이스 ) SELECT 의결과로리턴되는값이 member_table 의 user_regdate 컬럼일경우 user_regdate 컬럼은 datetime 데이터형식을가지므로다음과같은작업을해서닷넷 DateTime 을출력한것처럼활용할수도있다. //DB 연동작업시작 string QUERY = SELECT user_regdate FROM member_table WHERE user_id= aspnet ; SqlCommand scmd = new SqlCommand(QUERY, conn); //object result = scmd.executescalar(); DateTime result = (DateTime)scmd.ExecuteScalar(); //Response.Write(result); Response.Write(result.ToString( yyyy 년 MM 월 dd 일 )); //DB 연동작업끝 125
ADO.NET ( 데이터베이스 ) 결과값이있는 SELECT 문 (2 개이상의결과값을리턴하는 ExecuteReader() 메서드 ) SELECT 문실행 ExecuteReader() 메서드는 2 개이상의결과값을리턴한다. 테이블의모든자료를가져오는쿼리의경우 ExecuteReader() 메서드로가능하다. ExecuteScalar() 메서드의리턴형은 SqlDataReader 클래스형이다. 그러므로결과값은 SqlDataReader 클래스형으로받으면된다. SqlDataReader 클래스는아직생소하다. MSDN 에서 SqlDataReader 클래스의멤버들을살펴보자. SqlDataReader 클래스에서눈여겨봐야할메서드는 Read() 메서드이다. MSDN 에보면 Read() 메서드는 SqlDataReader 를다음레코드로이동합니다. 라고적혀있다. 126
ADO.NET ( 데이터베이스 ) 결과값이있는 SELECT 문 (2 개이상의결과값을리턴하는 ExecuteReader() 메서드 ) SqlDataReader 의 data 를가리키는현재위치는아래그림과같다. 이위치에서는데이터를읽을수없다. data.read() 를 1 회실행하면 SqlDataReader 는결과값의첫번째레코드로이동한다. 빨간동그라미하단의화살표가위치한레코드의각각의컬럼인 user_id, user_regdate 등의데이터를읽을수있다. 그런이후 Read() 를다시한번실행하면다음레코드로이동하여읽을수있다. MSDN 에설명되어있는 Read() 메서드의리턴은 bool 이다. 읽을수있는행 ( 레코드 ) 가있으면 true, 없으면 false 의값을리턴한다. 그러므로모든데이터를읽기위해서는 SqlDataReader.Read() 가 false 일때까지루프를돌면된다. 127
ADO.NET ( 데이터베이스 ) 결과값이있는 SELECT 문 (2 개이상의결과값을리턴하는 ExecuteReader() 메서드 ) SqlCommand.ExecuteReader() 메서드는모든자료를읽기는하는데정방향 (Forward) 전용이다. 한번읽은자료는되돌아가서다시읽을수없다는의미이다. Read() 메서드는다음레코드로이동할뿐이다. 128
ADO.NET ( 데이터베이스 ) 예제 - c:\dotnetcsharp\aspnet\db2.aspx - ASP.NET 에서 DB 연동하기 ( 쿼리문 ) 작성순서 <%@ Page Language= C# runat= server %> <%@ Import Namespace= System.Data %> <%@ Import Namespace = System.Data.SqlClient %> <script language= C# runat= server > void Page_Load() string str_conn = server=notebook-pc\\study;user id=sa;password=1234;database=aspnet ; SqlConnection conn = new SqlConnection(str_conn); conn.open(); //DB 연동작업시작 //ExecuteReader 코드작업 //DB연동작업끝 conn.close(); </script> 129
ADO.NET ( 데이터베이스 ) 작성순서 //DB 연동작업시작 string QUERY = SELECT * FROM member_table ; SqlCommand scmd = new SqlCommand(QUERY, conn); SqlDataReader data = scmd.executereader(); while(data.read()) Response.Write( String.Format( 사용자 : 0 ( 이름 : 1, 비밀번호 : 2)<hr> data[0], data[ user_name ], data[1], data[3]) ); //DB 연동작업끝 130
ADO.NET ( 데이터베이스 ) 결과값이있는 SELECT 문 (2 개이상의결과값을리턴하는 ExecuteReader() 메서드 ) 자료의출력방법은위의예처럼 SqlDataReader 컬렉션을사용하면된다. 컬럼순서에따라 data[0] 에서 data[3] 까지이용하거나컬럼명을 data[ 컬럼명 ] 형식으로지정하면된다. 이자료는 object형이기때문에따로가공하려면해당자료형으로변환을하여사용해야한다. String user_name = data[ user_name ]; String user_name = (string)data[ user_name ]; string user_name = data[ user_name ] + 님 ; // 오류발생, object 형을가지고있음 131
ADO.NET ( 데이터베이스 ) ASP.NET 과 DB 연동에관한정리 닷넷프로그래밍에서 DB 연동을위해 ADO.NET 을이용한다. ADO.NET 을이용하려면 System.Data 네임스페이스에들어있는클래스들을이용한다. 연결하기위해서는 (1)SqlConnection 클래스를이용하고해당연결정보를 SqlCommand 클래스에서참조하게된다. (2)SqlCommand 는실제 DB 서버에쿼리문을날리는역할을한다. SqlCommand 로 ExecuteNonQuery, ExecuteScalar, ExecuteReader 의세가지메서드를이용해서쿼리문의성격에맞게적용할수있다. 132
ADO.NET ( 데이터베이스 ) ADO.NET 에서 SqlDataAdapter 클래스사용하기 게시판서비스를보면게시물들을데이터베이스의테이블내자료를가져와서뿌려주는기능을한다. SqlCommand.ExecuteReader() 메서드로 SqlDataReader 클래스형식을만들어출력하면되겠지만 Read() 한이후다시돌아갈수없다는단점이있다. 가장큰문제점은연결지향방식이기때문에자료를처리하는동안 DB 와연결을끊을수없다. 그말은즉, DB 서버와연결되는자원을계속사용하고있다는말도일치한다. 이런단점을위해 ADO.NET 에서는 SqlDataAdapter 는쿼리의결과를 DataSet 클래스에담아주는역할을한다. DBMS 의 DB 의모습을그대로옮겨왔다고생각하면쉽다. 133
ADO.NET ( 데이터베이스 ) ADO.NET 에서 SqlDataAdapter 클래스사용하기 DataSet 클래스가 DB 와유사한모습을하고있다. DataSet 은 DataTable 클래스의묶음이고, DataTable 클래스는 DataRow 를가지고있다. DataRow 는 DataColumn 을가지고있게된다. 이들은각각해당컬렉션으로동작한다. DataSet 에쿼리문의결과값을 SqlDataAdapter 클래스를이용하여 DataSet 에그대로넣을수있다. SqlDataReader 대신 DataSet 을이용하는이유는데이터를 DataSet 에넣은후바로 DB 연결을끊을수있기때문에단지자료를보여주기위한기능으로서는매우적합하다. 134
ADO.NET ( 데이터베이스 ) 예제 - c:\dotnetcsharp\aspnet\db3.aspx - ADO.NET 에서 SqlDataAdapter 클래스사용하기 작성순서 //DB 연동작업시작 string QUERY = SELECT * FROM member_table ; SqlDataAdapter da = new SqlDataAdapter(QUERY, conn); DataSet ds = new DataSet(); da.fill(ds); Response.Write( 1.DataTable : + ds.tables[0] + <br> ); Response.Write( 2.DataTable.Rows.Count : + ds.tables[0].rows.count + <br> ); Response.Write( 3.DataTable.Rows : + ds.tables[0].rows + <br> ); Response.Write( 4.DataTable.Rows[0] : + ds.tables[0].rows[0] + <br> ); Response.Write( 5.DataTable.Columns.Count : + ds.tables[0].columns.count + <br> ); Response.Write( 6.DataTable.Columns : + ds.tables[0].columns + <br> ); Response.Write( 7.DataTable.Columns[0] : + ds.tables[0].columns[0] + <br> ); //DB 연동작업끝 135
ADO.NET ( 데이터베이스 ) 예제 - c:\dotnetcsharp\aspnet\db3.aspx - ADO.NET 에서 SqlDataAdapter 클래스사용하기 작성순서 //DB 연동작업시작 string QUERY = SELECT * FROM member_table ; SqlDataAdapter da = new SqlDataAdapter(QUERY, conn); DataSet ds = new DataSet(); da.fill(ds); //DB 연동작업끝 conn.close(); DataTable dt = ds.tables[0]; for(int i=0; i<dt.rows.count;i++) Response.Write( String.Format( 사용자 : 0 ( 이름 : 1, 비밀번호 : 2)<br> 등록일 :3<hr>, dt.rows[i][0], dt.rows[i][ user_name ], dt.rows[i][1], dt.rows[i][3]) ); 136
ADO.NET ( 데이터베이스 ) 설명 DB 서버에연결하여쿼리를날린결과를 DataSet 클래스의객체인 ds 에채웠다. 데이터를채운후바로 DB 연결을끊었다. 이미결과는 DataSet 인 ds 에담겨져있기때문에 DB 연결은더이상필요가없다. DataTable 은 DataTable.Rows 라는컬렉션이있기때문에모든자료를가져오는방법은 dt.rows.count 로가지고있는레코드수만큼루프를돌리면된다. dt.rows[2][3] : 세번째레코드의네번째컬럼 2011-03-02 15:53:02 dt.rows[0][1] : 첫번째레코드의두번째컬럼 testpwd dt.rows[1][ user_password ] : 두번째레코드의 user_password 컬럼 1234 상단내용교재 P117 내용정정 137
ADO.NET ( 데이터베이스 ) 예제 - c:\dotnetcsharp\aspnet\db4.aspx - ADO.NET 에서 SqlDataAdapter 클래스사용하여 DataGrid 컨트롤에바인딩하기 작성순서 - 코드부분 (C# Script 부분 ) //DB 연동작업시작 string QUERY = SELECT * FROM member_table ; SqlDataAdapter da = new SqlDataAdapter(QUERY, conn); DataSet ds = new DataSet(); da.fill(ds); //DB 연동작업끝 conn.close(); //DB 연동작업끝 138
ADO.NET ( 데이터베이스 ) 작성순서 - 디자인부분 <form runat= server > <ASP:DataGrid id= dg1 runat= server /> </form> - 코드부분추가.. dg1.datasource = ds.tables[0]; dg1.databind(); 139
ADO.NET ( 데이터베이스 ) 설명 SELECT 쿼리결과를 SqlDataAdapter 로 DataSet 을만들어데이터를보관하고있다가해당컨트롤에서 DataSource 를지정하고 DataBind 를해주면지정한컨트롤에서 DataSet 내의자료를이용할수있다 ASP.NET 에서 DB 연동시 DataSource 즉, DataTable 형식을이용하여데이터를연결할수있는웹폼이여러개존재한다. DataList, DataGrid, GridView, Repeater 등등의정보는 MSDN 을참고하자. 여러웹폼중 Repeater 컨트롤만예제와함께살펴보도록하자. 140
ADO.NET ( 데이터베이스 ) 예제 - c:\dotnetcsharp\aspnet\db5.aspx - ADO.NET 에서 SqlDataAdapter 클래스사용하여 Repeater 컨트롤에바인딩하기 작성순서 - 코드부분 (db5.aspx.cs) using System.Data; using System.Data.SqlClient; protected void Page_Load(object sender, EventArgs e) string str_conn = server=notebook-pc\\study + user id=sa;password=1234;database=aspnet ; SqlConnection conn = new SqlConnection(str_conn); conn.open(); string QUERY = SELECT * FROM member_table ; SqlDataAdapter da = new SqlDataAdapter(QUERY, conn); DataSet ds = new DataSet(); da.fill(ds); conn.close(); 141
ADO.NET ( 데이터베이스 ) 작성순서 - 디자인부분 (db5.aspx) <form id= form1 runat= server > <div> <asp:repeater ID= rpt1 runat= server > <ItemTemplate> <%# Eval( user_name ) %> <br/> 가입일 : <%# Eval( user_regdate ) %> <hr/> </ItemTemplate> </asp:repeater> </div> </form> - 코드부분추가 (db5.aspx.cs) Page_Load 이벤트내하단에추가한다. rpt1.datasource = ds.tables[0]; rpt1.databind(); 142
ASP.NET( 웹프로그래밍 ) 웹프로그래밍 PHP, JSP 등모든웹어플리케이션의결과물은 HTML 이다. javascript, css, html 태그등은웹브라우저가해석하는결과물로출력될뿐닷넷자체로는많은연관성을가지고있는것은아니다. ASP.NET 은 [ 서버컨트롤 ] 이라는큰특징을가지고있다. 프로그래머가서버컨트롤을이용하여웹프로그램을만들게되면닷넷에서서버컨트롤을웹브라우저가해석할수있도록태그등으로렌더링하게된다. 응용어플리케이션처럼닷넷의모든기능을사용할수있으나플랫폼특징상제한이있다. 143
ASP.NET( 웹프로그래밍 ) 예제 - c:\dotnetcsharp\aspnet\ex1.aspx - 입력한문자뿌려주기 작성순서 - 디자인부분 (ex1.aspx) form 태그내에 3 개의컨트롤을삽입한다. <asp:textbox ID= TextBox1 runat= server ></asp:textbox> <asp:button ID= Button1 runat= server Text= 클릭 /> <br/><br/> <asp:label ID= Label1 runat= server Text= - 출력 - ></asp:label> - 코드부분 (ex1.aspx.cs) 디자인부분에서추가한컨트롤중버튼컨트롤을더블클릭한다. protected void Button1_Click(object sender, EventArgs e) Label1.Text = String.Format( 어서오세요!0 님, 환영합니다., TextBox1.Text); 144
ASP.NET( 웹프로그래밍 ) 예제 - c:\dotnetcsharp\aspnet\ex2.aspx - 카운터구현 ( 파일처리관련클래스 ) 작성순서 - 디자인부분 (ex1.aspx) form 태그내에 3 개의컨트롤을삽입한다. 총 <asp:label1 ID= Label1 runat= server >/asp:label1> 회방문하였습니다. - 코드부분 (ex1.aspx.cs) 디자인부분에서추가한컨트롤중버튼컨트롤을더블클릭한다. using System.IO; protected void Page_Load(object sender, EventArgs e) // 카운터코드작성 145
ASP.NET( 웹프로그래밍 ) 작성순서 - 코드부분 (ex1.aspx.cs) // 카운터코드작성 string count_path = Server.MapPath( count.txt ); // 물리파일경로 int new_count = 1; if(file.exists(count_path) == false) StreamWrite sw = File.CreateText(count_path); // 파일이없으면 : 맨처음접속자 sw.writeline( 1 ); sw.close(); else StreamReader sr = File.OpenText(count_path); string now_count = sr.readline(); sr.close(); // 방문객 +1 new_count = Int32.Parse(now_count) + 1; StreamWriter sw = File.CreateText(count_path); sw.writeline(new_count); sw.close(); Label1.Text = new_count.tostring(); 146
147
148 WCF
WCF 서비스제작 WCF 는 XML 웹서비스 (Web Service) 기반의차세대서비스통신프레임워크이다. WCF 는통신에사용되는것이며서로통신하고자하는두프로그램이 WCF 를이용하여통신을할수있다 WCF 를통해클라이언트와서비스가통신을하며 WCF 는클라이언트와서비스사이에서상호작용하며둘사이의통신을보다쉽고강력하게해주는역할을한다. 클라이언트와서비스는 XML 메시지를주고받으며클라이언트가서비스에게요청을하고서비스가요청에처리결과를클라이언트에게반환해주는것이다. WCF 를메시징프레임워크라고부르는것도클라이언트와서비스가 XML 메시지를주고받는데사용되는통신프레임워크이기때문이다. 149
WCF 서비스제작 어떤기능을제공하는프로그램으로서호출을받는피호출자를서비스 (Service, 서버 ) 라하고기능을제공받기위해호출을수행하는호출자를클라이언트라한다. WCF 서비스는 XML 기반의 SOAP(Simple Object Access Protocol) 메시지를주고받음으로원격호출을수행한다. 실제로 WCF 는 SOAP 메시지뿐아니라 POX 나 JSON 과같은 REST 스타일의메시지를주고받을수있다. WCF 서비스의주요구성요소 : Contract, Address, Binding Address( 주소 ) 클라이언트가서비스를호출하기위해서비스가되고있는인터넷주소. 이주소는바인딩이어떤프로토콜을사용하는가에따라약간다른형태이다. Contract( 계약 ) WCF 서비스가제공하는기능들에대한인터페이스를말한다. WCF 서비스가제공하는메소드들은무엇이며어떤타입의매개변수를취하고그반환타입이무엇인지를기술하는인터페이스를말한다. 150
WCF 서비스제작 WCF 서비스의주요구성요소 : Contract, Address, Binding Binding( 바인딩 ) WCF 서비스를네트워크를통해호출할때고려해야할다양한요소들의집합. 1. 어떤프로토콜을사용할것인가? TCP? HTTP? FTP? 2. 데이터포맷은어떤방식을사용할것인가? 바이너리? 텍스트?MIME? 3. 네트워크보안을적용할것인가? 적용할경우보안방식은? SSL? 암호화? Endpoint WCF 서비스의핵심구성요소인주소, 계약, 바인딩이세가지요소를합쳐서비스의종점 (endpoint) 라부르며 WCF 서비스는반드시하나이상의종점을갖는다. WCF 에서클라이언트는반드시서비스의종점을통해서만서비스를호출할수있다. 실제 WCF 클라이언트가 WCF 서비스를호출하기위해서는서비스에대한종점객체를생성해야만가능하며이종점객체는서비스의인터넷주소가무엇인지, 어떤바인딩구성을사용하는지, 서비스의계약은어떠한지를모두명시해야한다. WCF 서비스는 2 개이상의종점을가질수있다. 하나의서비스가 HTTP 기반의바인딩과 TCP 기반의바인을각각사용하는 2 개의종점을가질수있다. 151
WCF 서비스제작 서비스가복수개의종점을제공할수있다는것은이전닷넷기반통신기술들인 ASP.NET 웹서비스 (ASMX), 닷넷리모팅, COM+ 이따라올수없는 WCF 만의장점. WCF 서비스를구현하면이서비스는 WCF 호스트에의해호스팅이되어야만클라이언트의호출을받을수있게된다. WCF 가제공하는호스트는다중쓰레드풀을지원하기때문에개발자가여러클라이언트의동시호출도염려없다. 호스트객체 (ServiceHost 클래스 ) 를생성하고 Open() 메서드를호출하면 WCF 런타임이네트워크포트 (port) 나 HTTP 프로토콜을구성하여클라이언트메시지를수신할것이고수신된클라이언트호출은쓰레드풀의쓰레드중한쓰레드에의해 WCF 서비스가호출된다. WCF 클라이언트는서비스의계약으로부터서비스가어떤메서드를제공하며그메서드의매개변수, 반환값에대한정보를얻을수있다. WCF 런타임과유틸리티는서비스의계약정보로부터서비스에대한프록시클래스를생성할수있으며이프록시클래스는웹서비스호출을마치로컬메서드호출과도같은간단한작업으로만들어줄수있다. 152
153 추가설명
기본문법참고 클래스와구조체구조체 C 언어에서부터내려온기능으로새로운데이터타입을만드는역할을담당한다. 여러개의변수를묶어새로운데이터타입을만들수있다. 기본구조가클래스와유사하게필드 ( 변수 ) 와메서드를가진다. 하지만클래스와구조체의가장핵심이자큰차이점은클래스는참조타입이지만구조체는값형식이라는것이다 구조체를사용하는이유는클래스가객체를참조하는것은장점이지만클래스가작다면그클래스의객체를위해참조때문에발생하는시간적인낭비가발생할수있다. 이에반해구조체는값형식이므로직접적으로메모리에접근하기때문에낭비를막을수있다. 따라서 C# 에서는크기가작고단순한함수들을포함하고잇는선, 컬러등의요소들은구조체로정의해두고있다. 구조체는상속할수없으며상속해줄수도없다. new 연산자를사용할수있다. 구조체는기본생성자는재정의해서사용할수없다. 이유는값타입의변수를선언함과동시에메모리에생성되기때문이다. 154
기본문법참고 인터페이스클래스와유사하지만인터페이스의멤버요소들은구현부분이없는프로토타입만가지고있다. 인터페이스의모든멤버의접근한정자는 public 을기본으로한다. abstract, public, protected, internal, private, virtual, override, static 과같은키워드는사용할수없다. 클래스는하나의클래스만을상속받을수있다. 이때여러개로부터상속받고자할경우하나의클래스로부터상속을받고나머지는인터페이스로부터상속을받는다. 이때인터페이스에설계된되어있고구현되지않은멤버요소는구현처리를하게되면다중상속이가능해진다. class ChildClass : ParentClass, I1Interface, I2Interface 만약위와같이 ChildClass 가하나의클래스와 2 개의인터페이스로부터상속을받았는데같은이름의메서드를포함하고있다면문제가발생한다... 155
기본문법참고 대리자직접메소드를호출하여처리하는것이아닌대리자를통해메서드를호출하고자할때대리자 (Delegate) 를사용할수있다. 이럴때한번호출로한개또는여러개의메서드를동시에실행가능하다. 또하나이벤트를만들기위한중간역할또한대리자 (Delegate) 가담당한다. 156
157 Ⅵ. ASP.NET 사이트구축
감사합니다. 김명정 Microsoft BizSpark Network Partner kmjrabbit@live.com 158
일자별커리큘럼참고 1 일 - HTML 의이해 / - C#.NET 기초 / - Visual Studio 2010 으로 ASP.NET 살펴보기 2 일 - 개발환경소개및 IIS 설정 / - ASP.NET 4.0 을이용한웹페이지구현 - ASP.NET 웹폼만들기 / - ASP.NET 웹폼에기능추가하기 3 일 - 표준컨트롤활용 / - 사용자입력검증 - 마스터페이지와사용자컨트롤만들기 / - 웹프로그램의상태관리 4 일 - 파일관련클래스이용하기 - 데이터베이스의이해 / - ADO.NET 5 일 - 데이터베이스를이용한 ASP.NET 페이지 - Ajax 가가능한 ASP.NET 웹프로그램만들기 - ASP.NET 보안 / - ASP.NET 을이용한웹사이트구축 159