■10장 풍부한 데이터 제어 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385
그리드뷰. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386
열 정의 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386
GridView 형식을 지정합니다. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390
필드 서식 지정 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390
스타일. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392
서식별 값. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395
GridView 행 선택. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397
선택 항목을 사용하여 마스터 세부 정보 양식 만들기 . . . . . . . . . . . . . . . . . . . . 398
SelectedIndexChanged 이벤트. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400
데이터 필드를 선택 버튼으로 사용. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401
GridView를 정렬합니다. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401
SqlDataSource를 사용하여 정렬합니다. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402
ObjectDataSource를 사용하여 정렬합니다. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402
정렬 및 선택. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404
고급 정렬 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405
xiv ■목차
GridView 페이징. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406
자동 페이징. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407
ObjectDataSource를 사용한 사용자 지정 페이지 매김. . . . . . . . . . . . . . . . . . . . . . 408
호출기 표시줄 사용자 정의 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411
GridView 템플릿. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412
여러 템플릿 사용. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414
Visual Studio에서 템플릿 편집. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415
메소드에 바인딩. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416
템플릿에서 이벤트 처리하기 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417
템플릿으로 편집. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418
ListView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423
그룹화 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426
페이징. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428
DetailsView 및 FormView. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429
세부정보 보기 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429
FormView. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432
고급 그리드. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433
GridView의 요약입니다. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434
단일 테이블의 상위/하위 보기 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435
조회 테이블을 사용하여 필드 편집 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438
데이터베이스에서 이미지 제공. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440
동시성 충돌 감지. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450
■11장 캐싱 및 비동기 페이지 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451
ASP.NET 캐싱 이해. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451
출력 캐싱. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452
선언적 출력 캐싱. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452
캐싱 및 쿼리 문자열. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453
특정 쿼리 문자열 매개변수를 사용한 캐싱. . . . . . . . . . . . . . . . . . . . . 454
사용자 정의 캐싱 제어. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455
HttpCachePolicy 클래스를 사용한 캐싱. . . . . . . . . . . . . . . . . . . . . . . . . . . 456
캐시 후 대체 및 조각 캐싱. . . . . . . . . . . . . . . . . . . . 457
캐시 프로필. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459
캐시 구성. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 460
데이터 캐싱. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461
캐시에 항목 추가. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462
간단한 캐시 테스트. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 464
캐시 우선순위. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465
데이터 소스 컨트롤을 사용한 캐싱. . . . . . . . . . . . . . . . . . . . . . . . . . . . 466
캐시 종속성. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469
파일 및 캐시 항목 종속성. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469
집계 종속성. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470
■목차 xv
항목 제거 콜백. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471
SQL 캐시 알림 이해. . . . . . . . . . . . . . . . . . . . . . . . . . . 473
SQL Server 2000 및 SQL Server 7의 캐시 알림. . . . . . . . . . . . 474
SQL Server 2005 및 SQL Server 2008의 캐시 알림. . . . . . . . 479
사용자 정의 캐시 종속성. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481
기본 사용자 정의 캐시 종속성. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 482
메시지 대기열을 사용한 사용자 정의 캐시 종속성. . . . . . . . . . . . . . . 483
비동기 페이지. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485
비동기 페이지 만들기. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486
비동기 페이지에서 데이터 쿼리. . . . . . . . . . . . . . . . . . . . . . . . . . . 488
오류 처리. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490
비동기 작업에 캐싱 사용. . . . . . . . . . . . . . . . . . . . . . . . . . 492
다중 비동기 작업 및 시간 초과. . . . . . . . . . . . . . . . . . . . . . . . 495
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496
■12장 파일 및 스트림 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497
파일 시스템 작업 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497
디렉토리 및 파일 클래스. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498
DirectoryInfo 및 FileInfo 클래스. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500
DriveInfo 클래스. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503
속성 작업 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504
와일드카드로 파일 필터링 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 506
파일 버전 정보를 검색하는 중입니다. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 506
경로 클래스. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 507
파일 브라우저. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 510
스트림을 사용하여 파일 읽기 및 쓰기. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514
텍스트 파일 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 516
바이너리 파일 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 517
파일 업로드 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518
여러 사용자를 위해 파일을 안전하게 만들기. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 520
압축. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 525
직렬화. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 526
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 529
■13장 LINQ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 531
LINQ 기본. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 531
지연된 실행. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533
LINQ 작동 방식. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 534
LINQ 표현식. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 534
LINQ 표현 "Under the Hood" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541
LINQ에서 DataSet으로. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 544
형식화된 데이터 세트. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 546
Null 값. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547
xvi ■목차
LINQ에서 SQL로. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547
데이터 엔터티 클래스. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 548
DataContext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550
LINQ to SQL 쿼리 “내부적으로” . . . . . . . . . . . . . . . . . . . . . . . . . . . . 551
LINQ to SQL 및 데이터베이스 구성 요소. . . . . . . . . . . . . . . . . . . . . . . . . . . 554
단일 레코드 또는 값 선택. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 556
데이터 클래스를 자동으로 생성하기. . . . . . . . . . . . . . . . . . . . . . . . . . . . 557
관계. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563
저장 프로시저에 대한 메서드 생성. . . . . . . . . . . . . . . . . . . . . . . . . 571
변경 사항 커밋 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573
LinqDataSource. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 578
데이터 표시. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 579
관련 데이터 가져오기. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 582
데이터 편집. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583
확인. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 586
■14장 XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 587
XML을 사용하는 것이 언제 의미가 있습니까? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 587
XML 소개. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 588
XML의 장점. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 589
잘 구성된 XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 590
XML 네임스페이스. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 590
XML 스키마. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 592
스트림 기반 XML 처리. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594
XML 파일 작성 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594
XML 파일 읽기. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 597
메모리 내 XML 처리. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 600
XmlDocument . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 601
XPathNavigator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 605
XDocument . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 607
XML 콘텐츠 검색 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612
XmlDocument로 검색 중입니다. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612
XPath로 XmlDocument 검색하기. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 615
LINQ로 XDocument 검색하기. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 617
XML 콘텐츠 유효성 검사 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 619
기본 스키마. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 619
XmlDocument로 유효성을 검사합니다. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 619
XDocument로 유효성 검사. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 621
XML 콘텐츠 변환 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 622
기본 스타일시트. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 622
XslCompiledTransform 사용. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 623
■목차 xvii
XML 컨트롤 사용. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625
LINQ를 사용하여 XML을 XML로 변환합니다. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625
XML 데이터 바인딩. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 627
비계층적 바인딩. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 627
XPath를 사용합니다. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 629
중첩된 그리드. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 632
TreeView를 사용한 계층적 바인딩. . . . . . . . . . . . . . . . . . . . . . . . . . . . 633
XSLT 사용. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 635
다른 소스의 XML 콘텐츠에 바인딩. . . . . . . . . . . . . . . . . . . . . . . . 637
XmlDataSource를 통해 XML 업데이트. . . . . . . . . . . . . . . . . . . . . . . . 637
XML 및 ADO.NET DataSet. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 638
DataSet을 XML로 변환합니다. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 639
DataSet에 XML로 액세스. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 640
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 642
PART 3 ■ ■ ■ ASP.NET 웹사이트 구축
■15장 사용자 컨트롤. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 645
사용자 컨트롤 기본 사항. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 645
간단한 사용자 컨트롤 만들기. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 646
페이지를 사용자 정의 컨트롤로 변환. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 647
사용자 정의 컨트롤에 코드 추가. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 648
이벤트 처리 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 648
속성 추가. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 649
사용자 정의 개체 사용 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 651
이벤트 추가 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 654
내부 웹 컨트롤 노출. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 657
사용자 컨트롤을 동적으로 로드합니다. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 657
포털 프레임워크. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 658
부분 페이지 캐싱. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 661
VaryByControl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 662
캐시된 컨트롤 공유. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 663
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 663
■CHAPTER 16 테마 및 마스터 페이지 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 665
계단식 스타일 시트. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 665
스타일시트 만들기 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 665
스타일시트 규칙 적용 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 668
xviii ■목차
테마. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 670
테마 폴더 및 스킨. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 671
간단한 테마 적용 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672
테마 충돌 처리. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 673
동일한 컨트롤에 대해 여러 스킨 만들기 . . . . . . . . . . . . . . . . . . . . . . . 674
템플릿과 이미지가 포함된 스킨. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675
테마에서 CSS 사용. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 677
구성 파일을 통해 테마 적용. . . . . . . . . . . . . . . . . . . . . 677
테마를 동적으로 적용하기. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 678
웹사이트 레이아웃 표준화. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 680
마스터 페이지 기본 사항. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 680
간단한 마스터 페이지. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 681
간단한 콘텐츠 페이지. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683
기본 콘텐츠. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 684
테이블과 CSS 레이아웃이 포함된 마스터 페이지. . . . . . . . . . . . . . . . . . . . . . . . . 685
마스터 페이지 및 상대 경로. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 687
구성 파일을 통해 마스터 페이지 적용. . . . . . . . . . . . . . . . . 688
고급 마스터 페이지. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 689
마스터 페이지 클래스와 상호 작용합니다. . . . . . . . . . . . . . . . . . . . . . . . . . . . 689
동적으로 마스터 페이지 설정 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 690
마스터 페이지 중첩. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 691
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 693
■CHAPTER 17 웹사이트 탐색 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 695
다중 보기가 있는 페이지. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 695
멀티뷰 컨트롤 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 696
마법사 컨트롤 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 700
사이트 맵. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 707
사이트 맵 정의. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 708
사이트 맵에 바인딩. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 710
이동 경로 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 711
사이트 맵의 일부 표시 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 713
사이트 맵 개체. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 716
사용자 정의 사이트 맵 정보 추가. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 718
사용자 정의 SiteMapProvider를 생성합니다. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 718
URL 매핑. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 725
보안 트리밍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 726
TreeView 컨트롤. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 728
트리노드 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 729
요청 시 노드 채우기. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 731
TreeView 스타일. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 733
■목차 xix
메뉴 컨트롤 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 737
메뉴 스타일. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 740
메뉴 템플릿. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 741
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 743
■18장 웹사이트 배포 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 745
인터넷 정보 서비스(IIS). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 745
IIS 웹사이트 및 가상 디렉터리. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 746
IIS 관리 콘솔 및 IIS 구성. . . . . . . . . . . . . . . . . . . . . 747
웹사이트, 가상 디렉터리 및 파일을 URL에 매핑합니다. . . . . . . . . . . . . 748
IIS 아키텍처에 대해 자세히 알아보세요. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 750
IIS 설치. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 765
웹사이트 관리. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 771
IIS 5.x 및 IIS 6.0을 사용하여 가상 디렉터리 및 웹 사이트 관리. . . . . . . 772
IIS 6.0에서 응용 프로그램 풀 관리. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 778
IIS 7.0을 사용하여 가상 디렉터리 및 웹 사이트 관리. . . . . . . . . . . . . . . 784
IIS 7.0에서 응용 프로그램 풀 관리. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 796
ASP.NET 응용 프로그램 배포. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 798
IIS 5.x 및 IIS 6.0에서 ASP.NET 설치 확인. . . . . . . . . . . . . . 800
IIS 5.x 및 IIS 6.0에서 ASP.NET 병렬 실행. . . . . . . . . . . . . . . 801
IIS 7.0에서 ASP.NET 병렬 실행. . . . . . . . . . . . . . . . . . . . . . . . 803
IIS 5.x에 배포 시 HTTP 런타임 설정 구성. . . . . . . . 803
ASP.NET의 컴파일 모델. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 804
Visual Studio를 사용하여 배포. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 808
Visual Studio 2005 웹 배포 프로젝트. . . . . . . . . . . . . . . . . . . . . . 809
ASP.NET의 VirtualPathProvider. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 815
ASP.NET의 상태 모니터링. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 819
기본 구조 이해. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 820
이벤트 및 공급자. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 820
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 823
PART 4 ■ ■ ■ 보안
■19장 ASP.NET 보안 모델 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 827
보안 소프트웨어를 만드는 것이 무엇을 의미합니까? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 827
잠재적인 위협 이해. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 828
보안 코딩 지침. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 828
게이트키퍼 이해 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 829
보안 수준 이해. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 830
입증. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 831
승인 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 832
xx ■목차
기밀성 및 무결성. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 833
모두 함께 끌어당기기. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 833
인터넷 정보 서비스 보안. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 835
IIS 5.x 및 IIS 6.0의 인증 및 권한 부여. . . . . . . . . . . . . . . 835
IIS 7.0의 보안 구성. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 838
SSL(Secure Sockets Layer) 이해. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 843
ASP.NET 보안 아키텍처. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 852
입증. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 853
승인 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 855
보안 컨텍스트. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 855
멤버십 및 역할 API. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 857
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 858
■20장 양식 인증 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 859
양식 인증을 소개합니다. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 859
양식 인증을 사용하는 이유는 무엇입니까? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 860
왜 양식 인증을 사용하지 않겠습니까?. . . . . . . . . . . . . . . . . . . . . 862
쿠키 인증을 직접 구현하지 않는 이유는 무엇입니까? . . . . . . . . . . . . . . . . 863
양식 인증 클래스. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 864
양식 인증 구현. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 865
양식인증 구성 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 865
익명 사용자에 대한 액세스 거부. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 869
사용자 정의 로그인 페이지 만들기 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 869
사용자 정의 자격 증명 저장소. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 876
양식 인증의 영구 쿠키. . . . . . . . . . . . . . . . . . . . . . . . 877
IIS 7.0 및 양식 인증. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 878
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 884
■CHAPTER 21 회원 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 885
ASP.NET 멤버십 API를 소개합니다. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 885
멤버십 API 사용. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 888
양식인증 구성 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 889
데이터 저장소 생성 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 890
연결 문자열 및 멤버십 공급자 구성. . . . . . . . . . . . . 896
사용자 생성 및 인증 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 900
보안 제어 사용. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 902
로그인 컨트롤. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 904
LoginStatus 컨트롤. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 914
LoginView 컨트롤. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 915
PasswordRecovery 컨트롤. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 916
ChangePassword 컨트롤. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 921
CreateUserWizard 컨트롤. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 922
■목차 xxi
IIS 7.0에서 구성원 구성. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 926
공급자 및 사용자 구성. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 926
다른 애플리케이션과 함께 멤버십 API 사용. . . . . . . . . . . . . . . . . . 928
멤버십 클래스를 사용합니다. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 930
스토어에서 사용자 검색 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 930
스토어에서 사용자를 업데이트하는 중입니다. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 933
사용자 생성 및 삭제 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 933
사용자 확인 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 934
Windows Forms에서 멤버십 사용. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 935
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 937
■22장 Windows 인증. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 939
Windows 인증을 소개합니다. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 939
Windows 인증을 사용하는 이유는 무엇입니까? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 940
Windows 인증을 사용하지 않는 이유는 무엇입니까? . . . . . . . . . . . . . . . . . . 941
Windows 인증 메커니즘. . . . . . . . . . . . . . . . . . . . . . . . . . 942
Windows 인증 구현 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 948
IIS 5.x 또는 IIS 6.0 구성. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 948
IIS 7.0 구성. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 950
ASP.NET 구성 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 952
익명 사용자에 대한 액세스 거부. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 955
Windows 사용자 정보 액세스. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 957
가장. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 962
Windows 2000의 가장. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 963
Windows XP에서의 가장. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 964
Windows Server 2003의 가장 및 위임. . . . . . . . . . . . . 964
Windows Vista에서의 가장. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 967
Windows Server 2008의 가장 및 위임. . . . . . . . . . . . . 968
가장을 구성했습니다. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 968
프로그래밍 방식의 가장. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 970
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 973
■23장 권한 부여 및 역할 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 975
URL 인증. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 975
권한 부여 규칙. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 976
파일 승인. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 981
코드의 권한 부여 확인 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 982
IsInRole() 메서드를 사용합니다. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 982
PrincipalPermission 클래스 사용. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 983
역할 기반 인증을 위한 역할 API 사용. . . . . . . . . . . . . . . . . . . . . . . . 985
역할과 함께 LoginView 컨트롤 사용. . . . . . . . . . . . . . . . . . . . . . . . . . . . 991
프로그래밍 방식으로 역할에 액세스. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 992
Windows 인증과 함께 역할 API 사용. . . . . . . . . . . . . . . . . . . 994
xxii ■목차
IIS 5 및 6에서 ASP.NET이 아닌 리소스 보호. . . . . . . . . . . . . . . . . . . . . . . . 997
파일 형식 매핑 추가 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 997
사용자 정의 HTTP 핸들러 작성 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 998
IIS 7.0의 권한 부여 및 역할. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1000
IIS 7.0에서 ASP.NET 역할을 통한 권한 부여. . . . . . . . . . . . . . . . . . . . . . . 1002
IIS 7.0으로 ASP.NET 역할 관리. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1005
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1006
■24장 프로필. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1009
프로필 이해. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1009
프로필 성능 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1009
프로필이 데이터를 저장하는 방법. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1010
프로필 및 인증. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1011
프로필과 맞춤 데이터 구성요소. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1011
SqlProfileProvider 사용. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1012
프로파일 테이블 생성 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1012
공급자 구성 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1015
프로필 속성 정의. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1016
프로필 속성 사용. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1017
프로필 직렬화. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1018
프로필 그룹. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1020
프로필 및 사용자 정의 데이터 유형. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1021
프로필 API. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1024
익명 프로필. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1026
사용자 정의 프로필 제공자. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1029
사용자 정의 프로필 공급자 클래스. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1029
FactoredProfileProvider 설계. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1031
FactoredProfileProvider 코딩. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1033
FactoredProfileProvider를 테스트합니다. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1037
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1040
■25장 암호화 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1041
데이터 암호화: 기밀성이 중요합니다. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1041
.NET 암호화 네임스페이스. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1042
.NET 암호화 클래스 이해. . . . . . . . . . . . . . . . . . . . . . . . . . 1046
대칭 암호화 알고리즘. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1047
비대칭 암호화. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1048
추상 암호화 클래스. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1049
ICryptoTransform 인터페이스. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1050
CryptoStream 클래스. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1050
■목차 xxiii
민감한 데이터 암호화. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1051
비밀 관리. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1052
대칭 알고리즘 사용. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1053
비대칭 알고리즘 사용. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1058
데이터베이스의 민감한 데이터 암호화. . . . . . . . . . . . . . . . . . . . . . . . . . 1061
쿼리 문자열 암호화. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1065
쿼리 문자열 래핑. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1066
테스트 페이지 만들기 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1069
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1070
■26장 맞춤형 멤버십 공급자 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1071
사용자 정의 공급자의 아키텍처. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1071
사용자 정의 공급자 생성을 위한 기본 단계. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1073
사용자 정의 공급자의 전체 디자인. . . . . . . . . . . . . . . . . . . . . . . . . . . 1073
사용자 정의 저장소 설계 및 구현 . . . . . . . . . . . . . . . . . . . . 1074
공급자 클래스 구현. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1082
사용자 정의 공급자 클래스 사용. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1102
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1106
PART 5 ■ ■ ■ 고급 사용자 인터페이스
■27장 사용자 정의 서버 컨트롤. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1109
사용자 정의 서버 제어 기본 사항. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1109
기본 사용자 정의 컨트롤 만들기 . . . . . . . . . . . . . . . . . . . . . . . . . . . 1110
사용자 정의 컨트롤 사용. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1112
도구 상자의 사용자 정의 컨트롤. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1113
스타일 속성을 지원하는 웹 컨트롤 만들기. . . . . . . . . . . . . . 1114
렌더링 프로세스. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1118
다양한 브라우저 다루기 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1119
HtmlTextWriter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1119
브라우저 감지. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1120
브라우저 속성. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1122
브라우저 유형 감지 재정의 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1124
적응형 렌더링. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1125
상태 및 이벤트를 제어합니다. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1127
상태 보기 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1127
제어 상태. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1129
포스트백 데이터 및 변경 이벤트. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1131
포스트백 트리거. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1133
기존 웹 컨트롤 확장. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1135
복합 컨트롤. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1135
사이드바파생 컨트롤을 종료합니다. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1138
xxiv ■목차
템플릿 컨트롤. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1141
템플릿 컨트롤 만들기 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1141
사용자 정의된 템플릿 사용 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1143
스타일. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1148
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1150
■28장 디자인 타임 지원 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1151
핵심 플레이어. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1151
디자인 타임 속성. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1152
속성 창. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1153
속성과 상속. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1157
도구 상자 아이콘. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1158
웹 리소스. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1159
리소스 생성. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1159
리소스 검색. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1160
텍스트 대체. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1161
코드 직렬화. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1162
유형 변환기. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1162
직렬화 속성. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1170
유형 편집기. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1172
컨트롤 디자이너. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1174
디자인 타임 HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1175
스마트 태그. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1177
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1182
■29장 동적 그래픽 및 GDI+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1183
ImageMap 컨트롤. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1183
핫스팟 생성 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1184
핫스팟 클릭 처리. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1185
맞춤형 핫스팟. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1186
GDI+로 그리기. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1188
간단한 그리기 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1189
이미지 형식 및 품질. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1191
그래픽 클래스. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1192
GraphicsPath를 사용합니다. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1194
펜. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1195
브러쉬. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1198
웹 페이지에 동적 그래픽 삽입. . . . . . . . . . . . . . . . . . . . . . . . . . 1199
PNG 형식 사용. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1200
동적 이미지에 정보 전달 . . . . . . . . . . . . . . . . . . . . . . . . . . 1201
GDI+를 사용하는 사용자 정의 컨트롤. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1204
GDI+를 사용한 차트 작성. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1208
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1213
■목차 xxv
■30장 웹 파트 페이지가 포함된 포털 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1215
일반적인 포털 페이지. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1216
기본 웹 파트 페이지. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1217
페이지 디자인 만들기. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1218
WebPartManager 및 WebPartZone 컨트롤. . . . . . . . . . . . . . . . . . . . . . 1219
페이지에 웹 파트 추가. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1221
페이지 사용자 정의. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1224
웹 파트 만들기. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1226
간단한 웹 파트 작업. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1227
고급 웹 파트 개발. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1235
웹 파트 편집기. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1244
웹 파트 연결. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1250
사용자 정의 동사 및 웹 파트. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1258
사용자 컨트롤 및 고급 웹 파트. . . . . . . . . . . . . . . . . . . . . . . . . . . 1259
웹 파트를 동적으로 업로드. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1262
웹 파트 인증. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1268
개인화를 위한 최종 작업 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1268
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1269
PART 6 ■ ■ ■ 클라이언트 측 프로그래밍
■31장 JavaScript 및 Ajax 기술 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1273
자바스크립트 필수 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1273
HTML 문서 개체 모델. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1274
클라이언트 측 이벤트. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1275
스크립트 블록. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1277
HTML 요소 조작 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1279
자바스크립트 디버깅 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1280
기본 JavaScript 예제. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1282
JavaScript 페이지 프로세서 만들기. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1282
JavaScript를 사용하여 이미지를 비동기적으로 다운로드합니다. . . . . . . . . . . . . . 1285
렌더링 스크립트 블록 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1290
스크립트 삽입 공격. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1291
유효성 검사를 요청합니다. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1291
요청 유효성 검사를 비활성화합니다. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1292
JavaScript를 사용한 사용자 정의 컨트롤. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1294
팝업창 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1294
롤오버 버튼. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1298
프레임. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1301
프레임 탐색 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1302
인라인 프레임. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1303
xxvi ■목차
Ajax 이해하기 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1304
XMLHttpRequest 객체. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1305
Ajax 예제. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1307
클라이언트 콜백과 함께 Ajax 사용. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1311
클라이언트 콜백 생성 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1311
클라이언트 콜백 "Under the Hood". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1317
사용자 정의 컨트롤의 클라이언트 콜백. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1318
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1322
■32장 ASP.NET AJAX. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1323
ASP.NET AJAX를 소개합니다. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1323
클라이언트의 ASP.NET AJAX: 스크립트 라이브러리. . . . . . . . . . . . . . . . . . 1325
서버의 ASP.NET AJAX: ScriptManager . . . . . . . . . . . . . . . . . . 1325
서버 콜백. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1326
ASP.NET AJAX의 웹 서비스. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1327
웹 서비스 프록시. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1334
페이지에 웹 메소드 배치. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1336
ASP.NET AJAX 응용 프로그램 서비스. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1337
ASP.NET AJAX 서버 컨트롤. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1344
UpdatePanel을 사용한 부분 렌더링. . . . . . . . . . . . . . . . . . . . . . . . . . . 1344
타이머를 사용한 시간 초과 새로 고침. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1351
UpdateProgress를 사용한 시간 소모적인 업데이트. . . . . . . . . . . . . . . . . . . . 1352
클라이언트 라이브러리에 대해 자세히 알아보세요. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1355
클라이언트 모델 이해. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1356
JavaScript의 객체지향 프로그래밍. . . . . . . . . . . . . . . . . . . . . . . 1357
웹페이지 프레임워크. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1364
컨트롤 익스텐더. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1369
ASP.NET AJAX 제어 도구 키트 설치 . . . . . . . . . . . . . . . . . . . . . . . 1370
AutoCompleteExtender . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1371
ASP.NET AJAX 제어 도구 키트. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1374
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1378
■CHAPTER 33 실버라이트. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1379
실버라이트 이해. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1379
Silverlight 대 플래시. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1380
Silverlight 채택. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1382
실버라이트와 WPF. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1382
Silverlight 및 Visual Studio 확장 설치. . . . . . . . . . . . . . . 1383
Silverlight 프로젝트 만들기 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1384
HTML 입력 페이지. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1385
Silverlight 초기화 스크립트. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1386
XAML 페이지. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1388
XAML 코드 숨김. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1391
■목차 xxvii
속성 및 이벤트. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1392
실버라이트 편집. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1393
실버라이트 필수품. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1394
Silverlight의 .NET Framework 클래스. . . . . . . . . . . . . . . . . . . . . . . . . . . 1395
캔버스. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1396
텍스트 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1401
HTML과 상호작용. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1402
격리된 스토리지. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1406
실버라이트와 ASP.NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1408
ASP.NET 선물. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1408
Silverlight와 ASP.NET 간의 통신. . . . . . . . . . . . . . . . . . 1412
2D로 그리기. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1412
간단한 모양. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1413
경로 및 기하학. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1417
브러쉬. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1425
투명성. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1427
애니메이션. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1429
애니메이션 기초. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1430
애니메이션 정의. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1430
대화형 애니메이션 예. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1434
변환합니다. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1437
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1440
■인덱스 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1441
확장하다