C# & VB.NET2006. 7. 15. 01:19

LogonUser 함수는 Windows API의 일부이지만, .NET에서 Impersonation을 코드로 구현할 때 쓰이기도 한다.
How to implement impersonation in an ASP.NET application(http://support.microsoft.com/default.aspx?scid=kb;en-us;Q306158) 문서를 보면 그 자세한 방법을 알 수 있다.


그런데 이 함수의 스펙을 보면, LogonType이라는 파라미터가 있는 것을 알 수 있다. 이 파라미터는 로그온 유형을 정의하는데, 일반적으로 .NET에서 Impersonation 용도로 사용할 때에는 Interactive 모드를 사용하게 된다. 하지만 실제로는 이 것 말고도 몇 가지 유형이 더 있다. 다음은 이 파라미터에서 선택할 수 있는 모든 유형에 대한 설명이다. (MSDN 영문 문서를 번역한 것으로, 오역이 있다면 알려주시길 부탁드린다)


LOGON32_LOGON_BATCH - 이 유형은 사용자를 대신해서 프로세스를 처리하는 배치 서버를 위해서 만들어졌다. 또 이 유형은 많은 plaintext 인증시도를 하는 고성능 서버가 사용하기 위해서 만들어 진 것으로, 메일 서버나 웹 서버가 바로 그 예이다. LogonUser 함수는 이 경우에 사용자의 Credential을 캐싱하지 않는다.


LOGON32_LOGON_INTERACTIVE - 이 유형은 컴퓨터를 이용해서 상호작용하는 - 예를 들면 터미널 서버, 원격 셸, 혹은 유사한 프로세스 - 사용자를 위해서 만들어진 것이다. 이 유형은 접속이 끊어졌을 때의 오퍼레이션을 위해서 로그온 정보를 캐싱하기 때문에 부가적인 비용이 소요된다. 그렇기 때문에, 메일 서버와 같은 클라이언트/서버 애플리케이션에는 부적당하다.


LOGON32_LOGON_NETWORK - 이 유형은 plaintext 패스워드로 인증하는 고성능 서버를 위해서 만들어졌다. LogonUser 함수는 이 경우에 Credential을 캐시하지 않는다.


LOGON32_LOGON_NETWORK_CLEARTEXT - 이 유형은 Impersonating하는 동안 다른 서버로 또 연결할 수 있도록, 인증 패키지에 이름과 패스워드를 저장한다. 서버는 클라이언트로부터 plaintext credential을 받을 수 있고, LogonUser 함수를 호출해서, 네트워크에 있는 다른 서버로 접속할 수 있는지 확인하고, 다른 서버와 계속 통신할 수 있다. (NT에서는 지원하지 않는다)


LOGON32_LOGON_NEW_CREDENTIALS - 이 유형은 호출자가 현재의 토큰을 복제해서 외부로 나가는 연결에 대해서 새로운 credential을 지정하게 해준다. 새로운 로그온 세션은 같은 로컬 식별자를 가지지만, 외부 연결에서는 다른 Credential을 가지게 된다. 이 유형은 LOGON32_PROVIDER_WINNT50 프로바이더를 지정했을 때만 지원된다. (NT에서는 지원하지 않는다)


LOGON32_LOGON_SERVICE - 서비스 타입 로그온을 가리킨다. 계정은 반드시 서비스 권한이 활성화되어 있어야 한다.


LOGON32_LOGON_UNLOCK - 이 유형은 GINA(Graphical Identification and Authentication) DLL - Window인증창을 생각하면 된다 - 이 사용한다. 이 유형의 로그인은 워크스테이션이 잠금해제되었다는 유니크한 감사 레코드를 생성한다.

Posted by kkongchi
asp.net2006. 6. 21. 00:34

ASP.NET 2.0에서는 웹파트를 추가할 수 있는 카탈로그 컨트롤 등의 장치를 제공한다. 하지만, 이 카탈로그 컨트롤을 쓰지 않고, 별도의 팝업 페이지 등을 사용해서 웹 파트를 선택하고 페이지에 추가하고 싶을 때에는 웹파트를 프로그래밍 방식으로 추가해야 한다. 이럴 때에는 WebPartManager 클래스에 있는 AddWebPart 메서드를 다음과 같이 사용하면 된다.

첫 번째 파라미터에는 추가할 웹파트 클래스의 인스턴스를,

두 번째 파라미터는 그 웹파트가 들어갈 웹파트존을 지정한다.

세 번째 파라미터는 웹파트존에서의 위치를 숫자 인덱스로 지정하면 된다.

//웹파트 인스턴스 초기화
MyWebPart oWebPart = new MyWebPart();
//웹파트존에 웹파트 추가
this.WebPartManager1.AddWebPart(oWebPart, this.WebPartZone1, 1);
 
Posted by kkongchi
C# & VB.NET2006. 6. 21. 00:27

클래스를 참조하지 않은 상태에서, DLL로부터 동적으로 클래스를 로드해서 써야 경우가 있다. 그럴때는 .NET에서 제공하는 Reflection API사용해서 클래스를 로드하고 인스턴스화할 있다. 다음 코드와같이 사용하면 된다.

System.Reflection.Assembly assm =

System.Reflection.Assembly.LoadFile(@"D:\Assemblies\SomeAssembly.dll");

object obj = assm.CreateInstance("FullClassName");

Posted by kkongchi
MS office2006. 5. 29. 22:43
UI가 너무 많이 바뀌어서, 아주 생소하다...
아직 많이 써보질 않아서 기능이 추가가 많이 되었는지는 잘 모르겠지만..
암튼 베타2부터 이렇게 많은 사람에게 다운로드를 할 수 있게 하는 걸 봐서는
MS에서 UI가 바뀐 것에 대한 부담이 확실하게 있는 듯...










'MS office' 카테고리의 다른 글

[Article]Windows Live Writer  (2) 2006.10.16
[Article]Word 2007 Blog Post 기능  (2) 2006.10.15
[Article]OWA 2007의 모습...  (0) 2006.09.15
Posted by kkongchi
Software Engineering2006. 5. 23. 22:23

Work toward a shared vision
비전을 공유하고, 그 비전을 목표로 작업한다.

프로젝트에는 명확한 비전 혹은 목표가 있어야 한다. 그 비전은 복잡해서도 안 되고, 애매해서도 안 된다. 이를테면, "이번 프로젝트를 통해서 3달안에 우리의 전자결재 솔루션 제품에 오피스 지원 기능을 추가함으로써 경쟁 제품에 대한 우위를 점하고 업계 No.3로 올라선다" 정도의 간단하면서도 프로젝트를 통해서 달성할 비즈니스 가치, 그 비즈니스 가치를 달성하기 위한 제품의 목표 등을 완전히 기술하는 형태가 되어야 한다. 그리고 그 달성해야 할 비즈니스 가치는 엄격한 조사와 많은 토론을 통해서 제련된 아주 현실성 있는 목표여야 한다.

목표가 명확해야 길을 잃지 않는다. 목표가 명확해야 다른 길로 잘못 들어서지 않는다. 목표가 명확해야 팀원들이 힘을 잃지 않는다. 현재 No.4인데 무조건 No.1로 올라서자 등의 현실성 없는 목표나 최고의 전자결재 솔루션을 만든다 등의 애매한 목표를 가지고 일을 하게 되면, 끝도 보이질 않고 중간에 헤매게 되고 그러다 보면 팀원들의 힘은 빠지는 최악의 상황으로 흘러 갈 수 있다. 명확하고 현실성 있는 목표를 설정해야, 그 목표를 이룰 수 있다. 그리고 결국 프로젝트의 성패를 가루는 기준은 프로젝트가 목표한 바를 이루었느냐이다.



다른 원칙 보기

Foster open Communications (열린 커뮤니케이션을 장려한다)

Work toward a shared vision (비전을 공유하고, 그 비전을 목표로 작업한다)
Empower Team Members (팀 멤버들에게 많은 권한을 위임한다)
Establish clear accountability and shared responsibility (팀,개인의 의무를 분명히 하고, 동시에 책임을 모두가 공유해야 한다)
Focus on delivering business value(비즈니스 가치에 초점을 맞춰야 한다)
Stay agile, expect change (언제나 유연하게 변화에 대응할수 있도록 한다)
Invest in Quality (품질에 투자한다)
Learn From all Experiences(모든 경험으로부터 배운다)

Posted by kkongchi
C# & VB.NET2006. 5. 12. 03:00

네이버가 구글처럼 웹 문서 검색, 지식인 검색 등의 기능을 원격에서 호출할 수 있는 API 서비스를 오픈했다. 현재는 베타 테스트 중이고 하루에 기능을 사용할 수 있는 횟수가 한정되어 있지만 이 API를 사용해서 실제 네이버 웹 문서 검색 페이지와 똑같은 기능을 하는 페이지를 만들어 볼 수 있다.

자세한 사항은 여기로 -> http://openapi.naver.com/
사용하려면 회원 가입을 해서 키를 하나 받아야 한다.

다음 소스는 이 API를 사용해서 네이버 웹 문서를 검색하는 페이지를 Visual Studio 2005, C#으로 만들어 본 샘플이다.

먼저 페이지 디자인.
간단하게 검색어를 입력하는 텍스트 박스와 검색을 실행하는 버튼으로 구성했다.


네이버 API를 통해서 검색한 결과는 다음과 같이 RSS 포맷으로 반환이 된다.

<?xml version="1.0" encoding="UTF-8" ?>
<rssversion="2.0">
<channel>
<title>Naver Open API - webkr ::'go'</title>
<link>http://search.naver.com</link>
<description>Naver Search Result</description>
<lastBuildDate>Tue, 11 Apr 2006 14:36:33 +0900</lastBuildDate>
<total>18992582</total>
<start>1</start>
<display>10</display>
  <item>
  <title><b>GO</b>.com</title>
  <link>http://www.go.com/</link>
  <description>... Victims, Military Personnel Sell Rations Online Government Report Finds Ready-to-Eat Meals for Sale on eBay...... trailers and the latest buzz on... Harry Potter and the Goblet of Fire , X-Men 3 , Spider-Man 3 , more... Tonight...</description>
  </item>
</channel>
</rss>

아래부터는 코드이다. 위의 RSS XML을 파싱해서, 목록으로 뿌려주는 것이다.
버튼 클릭 이벤트에서 실제 기능을 구현하도록 작성했다.

protected void Button1_Click(object sender, EventArgs e)
{    
//네이버 API는 정의된 URL을 호출해서 RSS타입의 XML을 받을 수 있도록 구성되어 있다
//URL 호출을 위해서 WebClient 클래스를 하나 선언하고, 인스턴스화한다

System.Net.WebClient oClient = new System.Net.WebClient();

  //네이버 API URL을 구성한다. GET방식으로 이루어져 있기 때문에 QueryString을 추가한다
//이 예제는 국내 웹 문서 검색을 하는 예제이다

oClient.QueryString.Add("key", "YourKey"); //회원가입 시에 받은 키
  oClient.QueryString.Add("target", "webkr"); //웹문서 검색
oClient.QueryString.Add("display", "100"); //100개의 결과 디스플레이
oClient.QueryString.Add("start", "1"); //1페이지부터 시작
  oClient.QueryString.Add("query", this.TextBox1.Text); //텍스트박스에 입력받은 텍스트를 검색어로 설정한다
  oClient.Encoding = System.Text.Encoding.UTF8; //반드시 인코딩은 UTF-8, 네이버 API의 규칙이다.

  //구성된 URL을 호출해서, 그 결과를 문자열로 받는다
  string s = oClient.DownloadString("http://openapi.naver.com/search");

  //문자열을 XMLDocument 객체로 로드한다
  System.Xml.XmlDocument oXmlDoc = new System.Xml.XmlDocument();
oXmlDoc.LoadXml(s);
 
//XPATH정규식을 통해서 item항목, 즉 검색 결과 항목들만을 뽑아낸다
  System.Xml.XmlNodeList oNodeList = oXmlDoc.SelectNodes("/rss/channel/item");

  //검색결과 화면을 위한 HTML 테이블 구성
  System.Web.UI.HtmlControls.HtmlTable oTable = new HtmlTable();
oTable.Width = "800";
oTable.Align = "left";
oTable.Border = 0;
oTable.CellPadding = 0;
oTable.CellSpacing = 0;

  //item항목 리스트에서 For Loop를 돌면서, 검색결과를 하나씩 붙인다
  for (int i = 0; i < oNodeList.Count; i++)
{
  //제목(title)을 위한 Row
       System.Web.UI.HtmlControls.HtmlTableRow oRow = new HtmlTableRow();
  System.Web.UI.HtmlControls.HtmlTableCell oTitleCell = new HtmlTableCell();
  string sTitle = oNodeList[i].ChildNodes[0].InnerText;

       //제목이 없을 경우를 위한 처리
       if (sTitle == null || sTitle.Length == 0)
  {
       sTitle = "제목없음";
  }
   

       //제목에다 link요소의 내용으로 링크를 건다.
      oTitleCell.InnerHtml =
       "<a target='_new' href='" + oNodeList[i].ChildNodes[1].InnerText + "'>" + sTitle + "</a>";
  oRow.Cells.Add(oTitleCell);
  oTable.Rows.Add(oRow);

       //상세 내용(Description)을 위한 Row
       System.Web.UI.HtmlControls.HtmlTableRow oRow2 = new HtmlTableRow();
  System.Web.UI.HtmlControls.HtmlTableCell oDescCell = new HtmlTableCell();
  oDescCell.InnerHtml = oNodeList[i].ChildNodes[2].InnerText;
  oRow2.Cells.Add(oDescCell);
  oTable.Rows.Add(oRow2);
}
//구성된 테이블을 페이지에 추가한다
  this.Page.Controls.Add(oTable);
}

실행한 화면이다.
내 별명인 kkongchi를 검색어로 검색을 해보았다.
사실은 페이징 부분을 추가하고, UI도 더 이쁘게 해야겠지만..


Posted by kkongchi
asp.net2006. 5. 10. 16:53

1. 웹 파트 개요


     a. ASP.NET 웹 파트는 최종 사용자가 웹 페이지의 내용, 모양 및 동작을 브라우저에서 직접 수정할 수 있는 웹 사이트를 만드는 데 사용할 통합 컨트롤 집합이다.


     b. 수정 내용은 사이트의 모든 사용자 또는 개별 사용자에게 적용될 수 있다. 사용자가 페이지와 컨트롤을 수정하는 경우 이후의 여러 브라우저 세션 간에 사용자의 개인 기본 설정을 유지할 수 있도록 설정을 저장할 수 있다. 이 기능을 개인 설정이라고 한다.


     c. 이러한 웹 파트 기능을 통해 개발자는 개발자나 관리자의 개입 없이도 최종 사용자가 웹 응용 프로그램을 동적으로 개인 설정할 수 있도록 권한을 부여할 수 있다.

2. Web Part 에서 사용자가 조절할 수 있는 것들


     a. 페이지 내용 개인 설정 - 사용자는 새 웹 파트 컨트롤을 페이지에 추가하거나 제거하고, 숨기거나 최소화할 수 있다.


     b. 페이지 레이아웃 개인 설정 - 사용자는 웹 파트 컨트롤을 페이지의 다른 영역으로 끌어 오거나 페이지의 모양, 속성 및 동작을 변경할 수 있다.


     c. 컨트롤 내보내기 및 가져오기 - 사용자는 다른 페이지 또는 사이트에 사용할 웹 파트 컨트롤 설정을 가져오거나 내보낼 수 있다.


     d. 연결 만들기 - 예를 들면 차트 컨트롤에 주식 기호 컨트롤의 데이터 그래프가 표시되도록 컨트롤을 서로 연결할 수 있다.


     e. 사이트 수준 설정 관리 및 개인 설정 - 권한이 부여된 사용자는 사이트 수준의 설정을 구성하고, 사이트 또는 페이지에 액세스할 수 있는 사용자를 결정할 수 있으며 컨트롤에 대한 역할 기반 액세스를 설정할 수 있다.

3. 웹 파트 구성



4. 웹 파트 호스팅 페이지


     a. 페이지 레이아웃용 영역 사용
             i. 웹 파트 용어로 영역, 즉 페이지에서 웹 파트 컨트롤을 포함하는 영역이라고 한다.
            ii. 페이지에는 영역이 하나 이상 있을 수 있으며 세로 또는 가로 방향으로 페이지를 레이아웃할 수 있는 각 영역에는 하나 이상의 웹 파트 컨트롤이 포함될 수 있다.


     b. 영역 내의 웹 파트 컨트롤
             i. 각 컨트롤은 컨트롤에 링크, 단추 또는 클릭할 수 있는 이미지로 나타낼 수 있는 UI, 즉 사용자가 수행할 수 있는 작업을 포함한다.
            ii. 각 컨트롤에 대한 메뉴에는 해당 컨트롤에 대한 세부 정보를 변경하는 옵션과 컨트롤을 이동하거나 삭제하고 도움말을 가져오는 등 일반적인 작업을 수행하는 기타 옵션이 포함되어 있다.


     c. 광범위한 개인 설정을 활성화하는 링크
               i. 사용자는 페이지의 내용, 색 및 레이아웃을 변경할 수 있다. 예를 들어 Add Content 링크를 클릭하여 사용자가 선택적으로 페이지에 추가할 수 있는 컨트롤 카탈로그를 표시할 수 있다

Posted by kkongchi
.NET General2006. 5. 4. 21:20

비주얼 스튜디오 닷넷 2003 을 사용할 때, 디버깅 시에 가장 유용하게 사용했던 도구라고 한다면, 내 경우는 직접 실행 창이었다. 물론 자동, 지역, 조사식 등의 도구들도 있지만, 난 대부분의 경우 직접 실행 창을 사용했다. 인텔리센스 기능도 지원하기 때문에, 코드 외의 여러 가지를 실행시켜보면서 작업할 수 있기도 하고, 변수에 담긴 값이 꽤 클 때도 보기가 편하다는 장점이 있어서, 디버깅을 할 때 코드를 step by step으로 실행시키면서 직접 실행창만을 가지고 작업을 했었다.

비주얼 스튜디오 2003(그리고 그 이전 버전)에서는 메뉴중에서 디버그->창->직접실행 을 선택하면 디버그 중에서 직접 실행 창을 볼 수 있었다. 그런데, 이번에 새로 출시된 Visual Studio 2005에서는 (내가 못 찾은 것인지 아니면 어딘가 숨어 있는지는 모르겠지만) 디버그->창 까지는 있는데 거기에 직접실행창을 띄우는 메뉴는 없다.

이 직접 실행 창을 띄우는 방법은 다음과 같다.

1. 기본적으로 명령 창은 디버그 시에 자동으로 나오게 된다. 이 명령 창에서 immed를 입력하고 엔터를 누른다




2. 그러면 직접 실행 창이 나오게 된다. 여기서 이전처럼 사용하면 된다.


Posted by kkongchi
asp.net2006. 4. 29. 15:26

1. 테마
a. 테마는 페이지와 컨트롤의 모양을 정의하고 웹 응용 프로그램의 페이지, 전체 웹 응용 프로그램 또는 서버의 모든 웹 응용 프로그램 간에 일관된 모양을 적용할 수 있는 속성 설정의 모음이다.
b. 테마는 스킨, CSS 스타일시트, 이미지 및 기타 리소스와 같은 일련의 요소로 구성된다. 테마에는 최소한 스킨이 포함된다. 테마는 웹 사이트 또는 웹 서버의 특수 디렉터리에 정의된다.
c. 테마는 웹 사이트에서 \App_Themes 폴더의 하위 폴더에 만들어진다. 각 테마는 \App_Themes 폴더의 개별 하위 폴더이다.

2. 스킨
a. 스킨 파일은 파일 이름 확장명이 .skin이며 Button, Label, TextBox 또는 Calendar 컨트롤과 같은 개별 컨트롤의 속성 설정을 포함한다.
b. 컨트롤 스킨 설정은 컨트롤 태그 자체와 비슷하지만 테마의 일부로 설정되는 속성만 포함한다.
c. 테마 폴더에 .skin 파일을 만든다. .skin 파일에는 여러 컨트롤 형식에 대한 하나 이상의 컨트롤 스킨이 포함될 수 있다. 각 컨트롤에 대해 별도로 스킨 파일을 정의하거나 테마에 있는 모든 스킨을 단일 파일로 정의할 수 있다.
d. 스킨 파일 예

<asp:button runat="server" BackColor="lightblue" ForeColor="black" />

e. 기본 스킨
i. 테마를 페이지에 적용할 때 같은 형식의 모든 컨트롤에 기본 스킨이 자동으로 적용된다. SkinID 특성이 없는 컨트롤 스킨은 기본 스킨이다.
f. 명명된 스킨
i. SkinID 속성이 설정된 컨트롤 스킨이다.
ii. 명명된 스킨은 형식별로 컨트롤에 자동으로 적용되지 않는다. 그 대신 컨트롤의 SkinID 속성을 설정하여 명명된 스킨을 컨트롤에 명시적으로 적용할 수 있다.
iii. 명명된 스킨을 만들면 응용 프로그램에서 동일 컨트롤의 각 인스턴스에 대해 서로 다른 스킨을 설정할 수 있다.


3. 테마 설정
a. 단일 웹 응용 프로그램에 대한 테마를 정의할 수도 있고 웹 서버의 모든 응용 프로그램에서 사용할 수 있는 전역 테마를 정의할 수도 있다.
i. @Page 지시문의 Theme 또는 StyleSheetTheme 특성을 사용하여 개별 페이지에 배치할 수도 있다.
<%@ Page Theme="ThemeName" %>

ii. 응용 프로그램 구성 파일의 <pages> 요소를 설정하여 응용 프로그램의 모든 페이지에 적용할 수도 있다. Machine.config 파일에서 <pages> 요소를 정의하면 서버의 웹 응용 프로그램에 있는 모든 페이지에 테마가 적용된다.

<pages theme="ThemeName" />

iii. 프로그래밍 방식 적용 (반드시 PreInit이벤트에 해야 한다)

Protected void Page_PreInit(object sender, EventArgs e)
{
switch (Request.QueryString["theme"])
{
  case "Blue":
   Page.Theme = "BlueTheme";
   break;
  case "Pink":
   Page.Theme = "PinkTheme";
   break;
}
}


4. 테마 적용의 예
a. 한 페이지에 Pink테마, Blue테마를 적용시켜서 버튼의 색깔을 바꿔 본 예제






Posted by kkongchi
windows2006. 4. 29. 00:31


1. Microsoft Operation Manager?


· 시스템 관리 및 모니터링 프로세스, 지원 단계의 지원, 문제점 관리 및 복구 프로세스, 최적화 단계에서의 시스템의 최적화를 위한 근거 자료 제공 등의 기능을 지원하는 Microsoft Operations Manager는 분산 환경에서의 마이크로소프트의 서버 운영체제와 서버 기반 응용프로그램 전체에 대해 시스템의 가용성, 성능, 보안을 근본적으로 향상시킬 수 있는 모니터링 솔루션으로, 시스템에 대한 문제 이벤트 수집, Knowledge Base 연결, 시스템 성능 모니터링 및 리포팅 기능을 제공한다.
○ 이벤트 통합, 성능 모니터링, 경고 및 리포팅
○ 이벤트 뷰 제공 및 Microsoft Knowledge Base 및 기업 Knowledge Base 연결
○ 발생한 문제 및 시스템 추이 분석



2. Microsoft Operation Manager가 제공하는 기능


a. 이벤트, 성능 관리
i. 엔터프라이즈 이벤트 컬렉션
ii. 규칙 기반의 이벤트 필터링과 통합
iii. 경고에 대한 자동 응답 액션 수행


b. 엔터프라이즈 지원
i. 중앙 콘솔
ii. 클러스터링 구축 가능
iii. 확장성
iv. MOM Connector Framework를 통한 확장성


c. 자동화
i. 스크립트
ii. 태스크
iii. 분석


d. 리포트
i. 웹 기반의 리포트 생성
ii. 일정 기간 동안의 리포트 자동 생성(스케줄링)


e. 모니터링
i. 서버,애플리케이션 헬스 모델
ii. 규칙 라이브러리
iii. Knowledge Base


3. Microsoft Operation Manager를 통해서 IT관리자는 다음과 같은 작업을 수행할 수 있다.


a. Identifying Concern
i. 시스템에서 장애가 생긴 지점을 빠르게 식별해낼 수 있게 도와줘야 한다.
ii. 예: 기업의 전체 Exchange 2003 환경 모니터링에서, 각 서버들의 상태를 한 눈에 볼 수 있어야 한다.


b. Understanding the Issue
i. 많은 미리 정의된 규칙, 지식, 작업 등이 매니지먼트 팩을 통해서 제공된다. 이를 통해서 각 이슈에 대해서 더 빨리 더 명확하게 이해를 할 수 있게 도와준다.


c. Resolving the issue
i. 이미 알려진 이슈들에 대한 해결 작업을 자동으로 이루어지게 할 수 있다.
ii. Task
1) 명령 줄 작업
2) 스크립트
3) .NET 코드 실행
4) 파일 전송

Posted by kkongchi