'분류 전체보기'에 해당되는 글 189건

  1. 2008.01.07 동적 LINQ (파트 1: LINQ 동적 쿼리 라이브러리 사용하기)
  2. 2007.10.14 ASP.NET MVC 프레임웍 1
  3. 2007.07.20 SQL 쿼리를 작성할 때 문자열 연결 대신 매개변수를 사용하십시오.
  4. 2007.07.19 웹 사이트를 업데이트하는 중이라면 "App_Offline.htm"를 사용하세요.
  5. 2007.07.18 지연된 웹 사이트 컴파일 옵션을 사용하면 빌드 타임을 줄일 수 있습니다.
  6. 2007.07.17 /app_code 디렉토리에 있는 파일의 수는 최소화 하십시오.
  7. 2007.07.16 DebuggerDisplay 특성을 사용하면 디버거 경험을 향상시킬 수 있습니다.
  8. 2007.07.15 자바스크립트 코드를 디버깅하는 방법
  9. 2007.07.14 SQL 서버 데이터베이스에 저장 프로시져 매개변수 이름을 지정할 때 “@”을 포함하지 마세요.

동적 LINQ (파트 1: LINQ 동적 쿼리 라이브러리 사용하기)

번역/ScottGu's Blog 2008. 1. 7. 16:07

원문 : Dynamic LINQ (Part 1: Using the LINQ Dynamic Query Library)

LINQ (언어 통합 쿼리)는 VS2008과 .NET 3.5에서 제공되는 새로운 기능의 하나입니다. LINQ는 데이터 쿼리라는 개념을 .NET에 있어서 가장 중요한 프로그래밍 개념으로 만들고, 프로그래밍 언어에서 효율적으로 쿼리를 표현할 수 있게 합니다.

LINQ가 좋은 점 중 한 가지는 VB와 C#에서 형식에 안전한 쿼리를 작성할 수 있다는 것입니다. 즉, LINQ 쿼리는 컴파일 타임에 검사가 되며, 작성한 코드는 완전한 자동완성과 리팩토링을 지원합니다.

형식에 안정한 쿼리를 작성하는 것이 대부분의 경우에는 바람직한 일이겠지만, 동적으로 쿼리를 작성하는 유연함이 필요한 경우도 있을 것입니다.예를 들어서, 최종 사용자인 비즈니스 분석자가 드롭다운을 이용하여 스스로 자신에게 필요한 쿼리(또는 뷰)를 만드는 것과 같이, 애플리케이션에 비즈니스를 이해하는 UI를 탑재할 수 있습니다.

예전에는 이러한 동적 쿼리 시나리오를 문자열을 서로 연결하여 동적 SQL 쿼리를 생성하는 것으로 해결하곤 하였습니다. 최근에 몇몇 분들이 제게 메일로 물어보시기를, LINQ를 사용할 때는 이런 시나리오를 어떻게 처리할 수 있냐고 하셨습니다. 아래 포스트는 LINQ 팀에서 제공하는 동적 쿼리 라이브러리를 사용하여 LINQ 쿼리를 동적으로 생성하는 방법에 대해서 설명합니다.

LINQ 동적 쿼리 라이브러 다운로드하기

VS 2008 샘플 다운로드 페이지에는 동적 쿼리 LINQ 헬퍼 라이브러리를 포함하는 VB와 C# 샘플 패키지에 대한 링크가 있습니다. 동적 쿼리 라이브러리(그리고 그에 대한 문서)로 바로 가는 링크는 아래와 같습니다.

VB와 C#의 DynamicQuery 샘플에는 형식에 안전한 언어 연산자 대신 문자열 매개변수를 가지는 익스텐션 메서드를 사용하여 LINQ 쿼리를 표현할 수 있는 헬퍼 라이브러리의 소스 구현이 포함되어 있습니다. DynamicQuery 라이브러리의 C# 혹은 VB 구현물을 프로젝트에 복사/붙여넣기 하면, 엔드 유저의 입력에 따라 더욱 더 동적으로 LINQ 쿼리를 생성할 수 있습니다.

간단한 동적 쿼리 라이브러리 예제

LINQ to SQL, LINQ to Objects, LINQ to XML, LINQ to Entities, LINQ to SharePoint, LINQ to TerraServer 등을 포함하여 어떠한 LINQ 데이터 프로바이더에 대해서도 DynamicQuery 라이브러리를 사용할 수 있습니다. LINQ 쿼리를 작성하기 위해 언어 연산자나 형식에 안전한 람다 익스텐션 메서드를 사용할 필요 없이, 동적 쿼리 라이브러리를 이용하면 어떤 문자열 식도 수용할 수 있는 익스텐션 메서드 기반의 문자열을 사용할 수 있습니다.

예컨데, 아래는 Northwind 데이터베이스에서 데이터를 가져와 ASP.NET GridView 컨트롤에 표시하는, 일반적인 형식 안전한 LINQ to SQL VB 쿼리입니다.

위 쿼리를 LINQ DynamicQuery 라이브러리를 사용하여 다시 쓴다면 다음과 같습니다.

조건절(where)과 정렬절(orderby)이 코드 식이 아닌 문자열 식을 가지는 것을 주목하여 주십시오. 이 문자열 식들은 늦은 바인딩이 되기 때문에 동적으로 생성될 수 있습니다. 예를 들어, 엔드 유저인 비지니스 분석자가 (임의의 조건절을 포함하여) 스스로에게 필요한 쿼리를 생성할 수 있도록 할 수도 있는 것입니다.

동적 쿼리 라이브러리 문서

위 VB와 C# 동적 쿼리 샘플에는 동적 쿼리 라이브러리 익스텐션 메서드를 사용하는 상세한 방법을 담고 있는 HTML 문서가 포함되어 있습니다. 동적 쿼리 라이브러리를 더 깊이 사용하기 위해서는 반드시 이 문서를 볼 필요가 있을 것입니다.

동적 쿼리 라이브러 예제의 다운로드와 실행

저는 LINQ to SQL을 사용하여 Northwind 샘플 데이터베이스를 쿼리하는 ASP.NET 웹사이트에서 동적 LINQ 라이브러리가 응용되는 간단한 VB와 C# 예제를 작성하였습니다. 아래 링크에서 이를 다운로드 받을 수 있습니다.

위 예제는 무료인 Visual Web Developer 2008 Express 나 VS 2008에서 모두 동작합니다.

동적 LINQ 쿼리를 생성하는 다른 방법들

동적 쿼리 라이브러리를 사용하는 것은 대단히 간단하고 쉽습니다. 또한 대부분의 쿼리가 동적이라서 엔드 유저에게 동적 쿼리를 만드는 UI를 제공하여야 하는 경우에는 특히 유용합니다.

다음 블로그 포스트에서는 동적 LINQ 쿼리를 작성하는 방법에 대해 더 깊숙이 살펴보도록 하겠습니다. 또한 형식 안전한 조건자 메서드를 사용하여 동적 LINQ 쿼리를 작성하는 방법들에 대해서도 살펴보고자 합니다. (C# 3.0 In a Nutshell book의 탁월한 저자인 Joseph와 Ben Albahari는 이미 이에 대한 훌륭한 기사를 여기에 썼습니다.)

도움이 되길 바라며,

스캇

:

ASP.NET MVC 프레임웍

번역/ScottGu's Blog 2007. 10. 14. 01:24

원문 : ASP.NET MVC Framework

오랜 시간 동안 ASP.NET에 대해 많은 사람들이 요청한 기능 중 한 가지는 모델-뷰-컨트롤러 (MVC) 아키텍쳐에 기반한 웹 응용프로그램 개발을 지원해달라는 것이었습니다.

지난 주말에 오스틴에서 열린 Alt.NET 컨퍼런스에서 저는 현재 우리 팀이 작업하고 있는 ASP.NET MVC 프레임웍의 첫번째 퍼블릭 데모를 시연하였습니다. Scott Hanselman의 블로그에서 제가 한 프리젠테이션을 보실 수 있습니다.

ASP.NET MVC 프레임웍은 올해 연말에 퍼블릭 프리뷰가 출시될 예정입니다. 그리고 내년 상반기에는 ASP.NET을 완벽하게 지원하는 버전이 출시될 것입니다.

모델 뷰 컨트롤러 (MVC) 프레임웍이란?

MVC는 애플리케이션의 구현을 세 부분(모델, 뷰, 컨트롤러)으로 나누는 프레임웍 방법론입니다.

  • MVC에 기반한 애플리케이션에서 "모델"은 상태를 관리하는 책임을 지고 있는 컨퍼넌트입니다. 주로 이 상태는 데이터베이스에 저장됩니다. (예를 들어, 주문 데이터를 표현할 때 사용되는 Product 클래스는 SQL의 Products 테이블에서 가져올 수 있습니다.)
  • MVC에 기반한 애플리케이션에서 "뷰"는 애플리케이션의 유저 인터페이스를 표시하는 책임을 지고 있는 컴퍼넌트입니다. 보통 이 UI는 모델 데이터로부터 생성됩니다. (예를 들어, Product 객체의 현재 상태를 표시하는 텍스트박스, 드롭다운, 체크박스를 가지고 있는 Product "수정" 뷰를 만들 수 있습니다.)
  • MVC에 기반한 애플리케이션에서 "컨트롤러"는 최종 사용자와의 인터랙션 처리, 모델의 관리, 그리고 UI를 표시하는 데 사용할 뷰를 선택하는 책임을 지고 있는 컴퍼넌트입니다. MVC 애플리케이션에서 뷰는 단지 정보를 표시하는 것에 불과합니다. 사용자의 입력과 인터랙션을 처리하고 또 그에 응답하는 것은 컨트롤러입니다.

MVC 방법론을 사용할 때의 한 가지 이점은 애플리케이션 내의 모델과 뷰와 컨트롤러를 명확하게 분리할 수 있다는 것입니다. 모델과 뷰와 컨트롤러를 명확하게 분리하면 애플리케이션의 테스트를 더욱 쉽게 수행할 수 있습니다. 왜냐하면, 서로 다른 애플리케이션 컴퍼넌트 간의 계약이 더욱 명료하게 정의되어 있기 때문입니다.

MVC 패턴을 사용하면 테스트 주도 개발 (TDD)에도 도움이 됩니다. 여기서 테스트 주도 개발이란 실제 코드를 작성하기 전에, 새로 작성할 코드의 요구사항을 정의하고 검증하는 자동화된 단위 테스트를 구현하는 것을 의미합니다.

좀 더 자세히 알아볼까요?

ASP.NET MVC 프레임웍의 다운로드가 가능하게 되면, 몇 주 안으로 저는 ASP.NET MVC 프레임웍에 대한 좀 더 상세한 튜토리얼 포스트를 작성할 계획입니다. (그 전까지는 저의 Alt.net 프리젠테이션 비디오를 보는 것이 ASP.NET MVC 프레임웍을 배우는 가장 좋은 방법일 것입니다.)

구체적으로는 아래와 같은 내용을 다룰 예정입니다.

  • ASP.NET MVC 프레임웍을 적용하면 기본적으로 모델/뷰/컨트롤러의 명확한 분리, 테스트 가능성, TDD가 가능합니다. MVC 프레임웍의 모든 핵심 계약은 인터페이스 기반이며 쉽게 목(mock)으로 사용이 가능합니다 (IHttpRequest/IHttpResponse 기반 인터페이스 포함). ASP.NET 프로세스에서 컨트롤러를 실행하지 않아도 애플리케이션의 단위 테스트를 수행할 수 있습니다 (이는 단위 테스트가 좀 더 빨리 수행될 수 있게 합니다). 단위 테스트 프레임웍은 어떠한 것을 사용하더라도 무방합니다 (NUnit, MBUnit, MS Test 등).
  • ASP.NET MVC 프레임웍은 확장성이 높고 플러그인이 가능합니다. MVC 프레임웍 내의 모든 것은 쉽게 교체/커스터마이징이 가능하도록 디자인 되었습니다 (예를 들어, 뷰 엔진. 라우팅 정책, 파라미터 직렬화를 직접 구현하여 플러그인 할 수 있습니다.). 또한 ASP.NET MVC 프레임웍은 기존의 의존성 주입이나 IOC 컨테이널 모델 (Windsor, Spring.Net, NHibernate 등)도 지원합니다.
  • ASP.NET MVC 프레임웍은 명료한 URL을 가진 애플리케이션을 개발하는 필요한 대단히 강력한 URL 매핑 컴퍼넌트를 제공합니다. 이 때 URL에는 별도의 확장자를 지정할 필요가 없으며, URL은 SEO와 REST에 어울리는 네이밍 패턴을 지원하게끔 설계되었습니다. 예를 들어 보자면, /products/edit/4 라는 URL을 ProductsController 클래스의 "수정" 액션에 매핑한다든지, /Blogs/scottgu/10-10-2007/SomeTopic/ URL을 BlogEngineController 클래스의 "포스트 표시" 액션에 매핑하는 식입니다.
  • ASP.NET MVC 프레임웍은 기존의 ASP.NET .ASPX, .ASCX, .Master와 같은 마크업 파일들을 "뷰 템플릿"으로 간주하여 지원합니다 (즉, 중첩된 마스터 페이지, <%= %> 조각, 선언적 서버 컨트롤, 템플릿, 데이터바인딩, 지역화와 같은 ASP.NET 기능이 사용 가능 하다는 이야기입니다.). 하지만, 서버와 인터랙션을 할 때 포스트백 모델을 사용하지는 않습니다. 대신 최종 사용자의 인터랙션은 컨트롤러 클래스로 보내어 집니다. 이를 통해 모델/뷰/컨트롤러의 명확한 분리나 테스트 가능성이 보장됩니다. (또한 이 말은 MVC 기반 뷰에서는 뷰스테이트나 페이지 수명주기가 없다는 말이기도 합니다.)
  • ASP.NET MVC 프레임웍은 기존 ASP.NET의 기능들을 완전히 지원합니다. 이에는 폼/윈도우 인증, URL 권한, 멤버쉽/역할, 출력 캐쉬와 데이터 캐쉬, 세션/프로파일 상태 관리, 헬스 모니터링, 구성 시스템, 공급자 아키텍쳐 등이 포함됩니다.
요약

MVC 방법에 따라 웹 애플리케이션을 개발하는 방법을 찾는 중이라면 ASP.NET MVC 프레임웍이 명료하고 편리한 선택이 될 수 있을 것입니다. ASP.NET MVC 프레임웍은 모델/뷰/컨트롤러을 명확히 분리하고 테스트와 TDD을 쉽게 할 수 있도록 합니다.

MVC를 사용할 때의 이점과 그 작동 방법에 대해서는 몇 주 안으로 더 상세한 튜토리얼을 포스팅하도록 하겠습니다.

도움이 되길 바라며,

스캇

:

SQL 쿼리를 작성할 때 문자열 연결 대신 매개변수를 사용하십시오.

번역/.NET Tip of The Day 2007. 7. 20. 16:19

원문 : Use parameters instead of string concatenation for forming SQL queries

문자열 연결은 약간의 트릭만 사용하면 잘못된 SQL 문장이 실행될 있기 때문에(SQL injection attack) 안전한 방법이 아닙니다. 가능하다면 매개변수를 사용하십시오.

나쁜 코드:

    SqlCommand command = new SqlCommand("SELECT COUNT(*) FROM Accounts WHERE Login='" + login + "' AND Password='" + password + "'", conn);

좋은 코드:

    SqlCommand command = new SqlCommand("SELECT COUNT(*) FROM Accounts WHERE Login=@login AND Password=@password", conn);

    SqlParameter param = new SqlParameter("login", SqlDbType.VarChar, 100);

    param.Value = login;

    command.Parameters.Add(param);

    param = new SqlParameter("password", SqlDbType.VarChar, 100);

    param.Value = password;

    command.Parameters.Add(param);

:

웹 사이트를 업데이트하는 중이라면 &quot;App_Offline.htm&quot;를 사용하세요.

번역/.NET Tip of The Day 2007. 7. 19. 16:09

원문 : Use "App_Offline.htm" feature while updating a web site

ASP.NET 애플리케이션을 업데이트하기 위해 잠시 꺼두는 동안 사용자들의 접근을 막아야 하는 경우가 있습니다. 이 때 "App_Offline.htm" 기능을 사용하면 매우 편리합니다.

App_Offline.htm 기능을 사용하기 위해서는 이 파일을 애플리케이션의 루트에 만들어 두면 됩니다. ASP.NET이 이 파일을 감지하면, 애플리케이션의 애플리케이션 도메인을 종료시키고, 이후의 모든 요청에 대해 App_Offline.htm 파일의 내용을 응답합니다. 웹 사이트의 업데이트가 끝나면 단순히 App_Offline.htm 파일을 삭제하기만 하면 됩니다.

:

지연된 웹 사이트 컴파일 옵션을 사용하면 빌드 타임을 줄일 수 있습니다.

번역/.NET Tip of The Day 2007. 7. 18. 16:08

원문 : Use on-demand web-site compilation option to improve build times

지연된 웹 사이트 컴파일 모드란, 페이지를 편집하고 F5 (run with debugging) 혹은 Ctrl-F5 (run without debugging)를 눌렀을 때 솔루션이 모든 클래스 라이브러리 프로젝트를 컴파일한 후, /app_code 디렉토리와 Global.asax 파일을 컴파일 하고, 웹 사이트의 모든 페이지를 컴파일 하는 대신에 현재 페이지와 현재 페이지가 참조하는 유저 컨트롤만을 컴파일 한다는 의미입니다. 아시다시피 ASP.NET은 런타임에 필요한 페이지와 컨트롤을 다시 컴파일 하기 때문에 항상 최근 애플리케이션이 실행됩니다. (따라서 이전 코드가 실행되지 않을까 하는 걱정을 할 필요는 없습니다.)

이 기능을 켜기 위해서는 웹 사이트 프로젝트에서 오른쪽 클릭을 하고 프로젝트 속성 페이지를 엽니다. "빌드" 탭을 클릭하여 빌드 설정을 엽니다. F5 Start Action을 "Build Web Site"에서 "Build Page"로 변경하면 됩니다.

Web-site On-demand Compilation

:

/app_code 디렉토리에 있는 파일의 수는 최소화 하십시오.

번역/.NET Tip of The Day 2007. 7. 17. 15:48

원문 : Keep the number of files in your /app_code directory small

웹 사이트 프로젝트의 빌드 시간을 줄이고 싶으면 /app_code 디렉토리에 있는 파일의 수를 적게 유지하십시오. /app_code 디렉토리에 매우 많은 파일이 있으면, 이를 별도의 클래스 라이브러리 프로젝트로 분리하고 웹 사이트에서 참조하십시오. /app_code에 파일이 많지 않다면 이는 별 다른 이슈가 되지는 않습니다. 하지만 /app_code에 매우 많은 디렉토리와 파일이 있다면 이 방법을 이용하면 상당한 속도 향상을 얻게 될 것입니다.

또 한 가지 알아두셔야 할 것은 비주얼 스튜디오 HTML 디자이너에서 소스 보기와 디자인 보기를 전환할 때 마다, 디자이너 화면에 로드되기 전에 디자이너는 /app_code 디렉토리를 컴파일한다는 것입니다. 이는 /app_code에 정의되어 있는 컨트롤을 디자이너에서 호스팅하기 위한 것입니다. /app_code 디렉토리가 없거나, 그 안에 파일이 조그만 있다면 페이지 디자이너는 훨씬 빨리 로드될 것입니다. (컴파일 작업을 할 필요가 없기 때문입니다.)

:

DebuggerDisplay 특성을 사용하면 디버거 경험을 향상시킬 수 있습니다.

번역/.NET Tip of The Day 2007. 7. 16. 15:45

원문 : Use DebuggerDisplay attribute for a better debugger experience

디버거 변수 창에서 클래스 혹은 멤버가 표시되는 방법을 제어하려면 DebuggerDisplay 특성을 지정하십시오. 예를 들어, 다음 C# 코드는 디버거에 "Count = 4"라고 표시됩니다.

[DebuggerDisplay("Count = {count}")]

class MyHashtable

{

public int count = 4;

}

:

자바스크립트 코드를 디버깅하는 방법

번역/.NET Tip of The Day 2007. 7. 15. 15:37

원문 : How to debug a JavaScript code

방법 1.  비주얼 스튜디오에서 .js 파일을 열고 디버그 할 줄에 중단점을 설정합니다. Attach to Process 대화상자를 열고 (메뉴 항목 Debug | Attach to Process...) 인터넷 탐색기 프로세스(iexplore.exe)에 연결합니다. 인터넷 탐색기에서 원하는 코드를 실행합니다.

방법 2. 자바스크립트를 작성하고 디버그 시 중단하고 싶은 지점에 debugger 키워드를 삽입합니다. 자바스크립트 인터프리터는 이 키워드를 인식하면 실행을 멈추고 제어를 IDE로 되돌립니다. 이는 비주얼 스튜디오에서 중단점을 설정하는 것과 동일합니다.

참고 : 디버깅을 활성화하려면 인터넷 탐색기에서 스크립트 디버깅 항목을 켜야합니다. 인터넷 탐색기에서 인터넷 옵션을 열고 고급 탭으로 이동합니다. 스크립트 디버깅 사용 안 함(Internet Explorer) 항목을 해제합니다.

Enable JavaScript Debugging

:

SQL 서버 데이터베이스에 저장 프로시져 매개변수 이름을 지정할 때 “@”을 포함하지 마세요.

번역/.NET Tip of The Day 2007. 7. 14. 15:34

원문 : Do not include the "@" character when supplying stored procedure parameter names to a SQL Server database

저장 프로시져 매개변수 이름에 특정 데이터베이스와 관계된 토큰을 포함하지 마십시오. 몇몇 공급자에 대해서는 ADO.NET 클래스가 필요한 매개변수 이름을 자동으로 조정하는 코드를 생성합니다. 이 기능을 이용하면 기존의 ADO.NET 프로그램을 쉽게 다른 DBMS로 마이그레이션 할 수 있습니다.

: