예전에 가상 함수를 만들어 엘리베이트 태우는 방법을 프로젝트 할 떄 배웠다.
그런데, 그 방법은 좀 아름 답지 않게 만들 수 밖에 없었다.
그런데, 이번에 SharePoint SDK 문서를 읽던 중... 참으로 아름 다운 방법을 발견해서
적는다.

SPSecurity.CodeToRunElevated elevatedGetSitesAndGroups
        = new SPSecurity.CodeToRunElevated(엘리베이트 태울 함수이름);
SPSecurity.RunWithElevatedPrivileges(elevatedGetSitesAndGroups);

예를 들자면... 만일 Button Click Event 중에, DoElevate 라는 함수를 권한 상승 처리를 해야 한다면 다음과 같이 구성될 수 있다.

private void DoElevate()
{
      // 관리자 권한이 있어야만 실행되는 코드....
}

protected void Button1_Click(object sender, EventArgs e)
{
     SPSecurity.CodeToRunElevated elevatedGetSitesAndGroups
        = new SPSecurity.CodeToRunElevated(DoElevate);
     SPSecurity.RunWithElevatedPrivileges(elevatedGetSitesAndGroups);
}

728x90
지금 RSS Reader Web part를 만드는 중에 테스트로 쓸 일정 데이터
관련해서 이것 저것 만지다가, 일정 관련 RSS 피드가 걸작이라는 생각이 든다.
(걸작 - 반어법이다 -_-;;)

테스트를 위해 데이터를 미리 넣은 형태가 아래와 같다.
사용자 삽입 이미지


아주 일반 적인 형태로 넣은 것으로 보통 고객들은 위와 같은 일정으로 구성하여 넣곤 한다.
이를 RSS Feed를 통해 꺼내 본 결과...
사용자 삽입 이미지


아주 정직하게 데이터가 나온다.
이게 뭐 어때서... 라고 할 수도 있지만, 예를 들어...
주간 업무 보고 같은 경우 되풀이로 만든 이벤트이다. 그러면 해당 날짜에 대해 반복적으로 표시되어야 한다. 게다가, 특정 날만 되풀이에서 제거한 경우( 6월 8일 주간 업무 보고 같은 경우 ) 제거된 날이 아니라 그냥 표시만 안해주면 되어야 하지 않을까?

728x90

사용자 삽입 이미지

WSS 3.0 에서 추가적인 기능 중에, RSS Feed를 구독하는 기능이 있다.
일정, 작업, 목록 등등에서 위의 메뉴 바의 내용 중 작업 -> RSS 피드 보기를 선택하면 된다.

그러면 RSS 피드가 활성화 되게 되는데, 이 내용을 그대로 클릭하게 되면 Xml 문서가 꺼내지고 그에 맞는 Xslt 파일과 연동되면서 화면에 보여지게 된다.

그런데, Internet Explore 7.0 같은 경우에는 이 RSS 리더 기능을 자체적으로 가지고 있다보니 다소 희안하게 표시되게 된다.

같은 일정 목록을 가지고 RSS 피드 보기를 각각 IE 6.0과 IE 7.0에서 돌려보았다.
차이는 아래의 그림을 참조하면 된다.  보면 알 수 있듯이 IE 7.0 같은 경우에는 무슨 dll 이라고 표시되고 IE 6.0 같은 경우에는 그냥 XSLT에서 제공한 내용대로 우수하게 표시된다.

버그라면 버그겠지만, WSS 3.0 서비스 팩이 나오면 아마도 해결될 수 있을 만한 내용이라고 생각한다. 설마하니 외국 사람들 중에서 아래와 같은 문제점을 발견하지 않았으리라 생각된다.

[IE 7.0]

사용자 삽입 이미지















[IE 6.0]
사용자 삽입 이미지

728x90
SharePoint로 사이트를 구성하면, 해당 페이지, 사이트로 이동하면
자동적으로 NTLM 창이 뜨면서 사용자 로그인을 묻게 된다.
그런데, 이 NTLM 창에서 암호 저장을 하게 되면, 희안하게
계속 로그온이 되도록 구성된다.

사용자 삽입 이미지
그런데 웃기는 건, 이 사이트 내에서 로그아웃을 해도 여전히 로그온이 된 것 처럼 나오고,
게다가, 공유 폴더도 로그온 정보를 전혀 안묻고 위의 권한으로 열린다는 것이다.

이 부분에 대해서 전혀 설명을 못하고 있었다.

그런데, 하나의 Utility를 이용해서 하나의 가정을 세울 수 있었다.
http://www.nirsoft.net/utils/network_password_recovery.html
위의 사이트에서 하나의 프로그램을 받았는데, 네트워크 연결이 되면 발생되는 Credential들을 전부 나열해주는 도구였다. 이 도구를 이용해서 확인해 본 결과,
암호 저장을 하면, 네트워크 공유로 영구 연결을 해버린다는 것이다.
즉 암호를 영구 연결을 통해 유지한다는 것이다.

즉, 이 NTLM 창의 암호 저장은 단순하게 특정 웹페이지를 위한 쿠키 따위를 저장하는
레벨이 아닌 직접 해당 경로의 네트워크 공유를 걸어 버린다는 것이다.
사실 저것 처럼 해당 경로의 네트워크 공유를 건다는 것은 웹 폴더를 아무 권한없이
열수 있다는 의미지 않을까 싶다. 즉 웹 페이지는 인증 없이 통과하고, 네트워크 공유는 자동적으로 수행되는 결과를 가져올 수 있는 것이다.

 
그러면 이제... 저 네트워크 Credential 만 지우면 된다. 최소한 -_-;;;
728x90
ASP.NET의 서버 웹컨트롤로 만들면 CS 프로그램 짜듯이 쉽게 UI를 구성할 수 있다.
마치 일반 Windows Form 프로그램 짜듯이 붙이게 되는데,
이 컨트롤을 실제 웹 브라우저에서 볼 수 있도록 HTML로 번역하게 된다.

TextBox 같은 경우 <Input type="text" .. >로,
Button 같은 경우 <Input type="button" ...> 로  번역되어 나타낸다.

그런데, 이 중 요상한 것이 있는데, 바로 Label 컨트롤이다.
이 Label 컨트롤을 다른 컨트롤 처럼 만들어서 붙이면 이상하게 <span> 으로 붙는다.
그런데 다른 부분의 Html 소스를 보면 <Label ..> 로 구성되어 있다.
그래서 간혹 CSS를 구성하다 보면 유독 그 녀석만 CSS가 안먹는 기이한 현상을
만들어 낸다. 게다가 HTML 코드 자체가 틀리니 미묘하게 짜증까지...

하지만 그 속에서 쓰고 있는 웹 컨트롤은 모두 똑같이 Label 이였다.
그럼 이와 같은 차이가 발생하는 이유는 무엇일까?

그것은 Label의 역할에 따라 다르게 번역되는 것이다.
사용자 삽입 이미지
위의 구성 내용 중 RSS Feed 주소 부분이 바로 이 Label로 만들어진 부분인데,
그냥 Label을 생성해서 붙이기만 하면 저 부분은 Span으로 구성되게 된다.
      <span .... > RSS Feed 주소 </span>

만일 html에서 Label로 표시하고 싶으면, Label의 속성 중에 AssociatedControlID 라는 부분에 이 Label이 수식하고 있는 컨트롤 ID를 넣으면 된다.
즉 만일 저 위의 그림의 예제에서 TextBox ID가 txtRSSFeeder 이면,
  label.AssociatedControlID  = "txtRSSFeeder";
이렇게 서버에서 구성해주면 된다.

그러면 실제 웹에서 보여주는 소스를 보게 되면,
     <Label for="txtRSSFeederxxxxxxxx" > RSS Feed 주소 </Label>
     (txtRSSFeederxxxxxx에서 xxxxxx 부분은 볼때 마다 틀린 값이 붙는다.)






     
728x90
사용자 삽입 이미지
사실 아래에 있는 Visual Studio 2005에 있는 Web Test 도구는 Visual Studio 2005 Team Suit라는 패키지 안에 있다.

애석하게도 일반 Partner 업체나, Gold Partner 업체 모두 MSDN에서
정식버전을 받지 못하고 Trial 정도 까지만 받을 수 있다.
아직 Trial 가지고는 테스트 해보진 못했는데, MS Premier Engineer의 의견에서는 Trial에서도 수행가능하다고 했었다.

현재로는 이 제품을 사거나 자신의 회사가 MS Premeier 파트너 정도는 되어야  정품으로 해당 기능을 사용하지 않을까 싶다.안되면.. 그냥 Trial을...
- 설마  개발자들에게 사장님들이 사주기라도 할까 ?? 이거 한다고 -_-;;
(이래서 MS가 욕먹는지도 모르겠지만 서도...)
728x90

MOSS 프로젝트를 하다보니, 역시 웹기반이여서 웹 기반 부하테스트를 할 기회가 생겼다.
얼씨구나 한 것 까지는 좋았는데, 이게 생각보다 큰 비용을 지불하는 고급 기능이였다.
어느 정도 고급인지는 알길은 없지만, 개인적인 범위나 간단한 테스트용도로는 쓸만하다고 판단된다.

쓰는 방법은 아래와 같다.

구성 준비

Visual Studio의 제품 별로 다르지만, 제품 군 중에, Visual Studio 2005 Team System(이하 VSTS) 제품에만 팀 개발자 및 테스터 도구을 설치할 수 있다. 그러므로 VSTS를 설치할 수 있으며, 또한 팀 개발자 및 테스트 도구부분을 설치해주어야 한다

사용자 삽입 이미지


Visual Studio Test 프로젝트 시작

Visual Studio 을 실행 한 뒤에 새로 만들기” -> “프로젝트를 한다.

사용자 삽입 이미지


프로젝트 종류 에서 “Visual C#” -> “테스트” -> “테스트 프로젝트를 선택 한 뒤 , 이름에 적절한 이름을 넣고 확인을 클릭한다.

사용자 삽입 이미지


웹 테스트를 위한 스크립트 작성

만들어진 프로젝트에서 오른쪽 마우스 클릭해서 나오는 Context 메뉴에서 추가” -> “웹 테스트를 선택한다.

사용자 삽입 이미지


스크립트 생성을 위한 웹브라우징 하기.
자동으로 Internet Explore가 뜨는데, 여기서 시나리오 대로 웹 브라우징을 한다. 브라우징을 시작하면 왼편의 웹 테스트 레코더에 이동한 경로에 대한 사항들이 저장된다. 브라우징이 완료되면 중지를 클릭한다.
사용자 삽입 이미지
사용자 삽입 이미지




















스크립트 생성

캡처 한 스크립트에 대한 접속 스크립트 소스를 생성해야 한다. 코드 생성 방법은 .webtest 파일을 선택한 뒤에 왼편 창에서 나오는 상위 메뉴 중 코드 생성을 선택한다.

생성이 완료되면 해당 cs 파일이 생성이 되는데 이 cs 파일을 열면 테스트를 위한 전체 진행 프로그램이 자동 생성되었음을 확인할 수 있다.

사용자 삽입 이미지


스크립트 소스 수정

코드 내에 수정할 필요가 있는 사항들을 수정한다.
코드 자체를 이해할 수 있다면 최소한 각 시나리오 별로 스크립트를 나누어 추가 스크립트 구성도 가능하고 제작도 가능하다. 이 중 다른 부분은 제외하더라도, 굵게 표시한 ThinkTime 정도의 값의 수정이 필요하다. Action 별로 지연시간을 의미하는데, 테스트의 중요한 요소 이므로 적절한 값으로 대체하여 구성한다



public override IEnumerator<WebTestRequest> GetRequestEnumerator()

{

   WebTestRequest request1 = new WebTestRequest("http://tsquare.netswork.co.kr/");

  request1.ThinkTime = 8;

  ExtractHiddenFields rule1 = new ExtractHiddenFields();

  rule1.ContextParameterName = "1";

  request1.ExtractValues += new EventHandler<ExtractionEventArgs>(rule1.Extract);

  yield return request1;

 

WebTestRequest request2 = new WebTestRequest("http://tsquare.netswork.co.kr/_layouts/TLogin.aspx");

request2.Method = "POST";

request2.QueryStringParameters.Add("ReturnUrl", "%2f_layouts%2fAuthenticate.aspx%3fSource%3d%252f", false, false);

request2.QueryStringParameters.Add("Source", "%2f", false, false);

FormPostHttpBody request2Body = new FormPostHttpBody();

request2Body.FormPostParameters.Add("__VIEWSTATE", this.Context["$HIDDEN1.__VIEWSTATE"].ToString());

request2Body.FormPostParameters.Add("AccountID", "test001");

request2Body.FormPostParameters.Add("password", "test001");

request2Body.FormPostParameters.Add("__EVENTVALIDATION", this.Context["$HIDDEN1.__EVENTVALIDATION"].ToString());

request2Body.FormPostParameters.Add("login.x", "40");

request2Body.FormPostParameters.Add("login.y", "40");

request2.Body = request2Body;

ExtractHiddenFields rule2 = new ExtractHiddenFields();

rule2.ContextParameterName = "1";

request2.ExtractValues += new EventHandler<ExtractionEventArgs>(rule2.Extract);

yield return request2;

 

              [ 이하 생략 ]

 



부하테스트 설정
코드 정리가 되면 부하 테스트를 위한 준비를 시작한다. 프로젝트 위에서 마우스 오른쪽 버튼을 클릭하여 추가” -> “부하 테스트를 선택하여 부하테스트 제작 마법사를 띄운다.
사용자 삽입 이미지


사용자 삽입 이미지


패턴에 단계 부하에서 단계적으로 몇 명에 해당하는 부하를 넣을지를 판단하여 채운다.

사용자 삽입 이미지


부하테스트를 위한 테스트를 추가한다.

사용자 삽입 이미지


사용자 삽입 이미지


클라이언트 예상 브라우저를 선택한다. 만일 다양한 버전의 브라우저를 사용하는 환경에 대한 테스트라면 그 브라우저 사용 비율에 맞추어 추가한다
사용자 삽입 이미지


클라이언트와 서버 사이의 네트워크 매체를 설정한다.

일반적인 인트라넷은 LAN으로 하면 되고, 익스트라넷 또는 인터넷 환경이면 그에 맞는 유형과 비율을 설정한다.

사용자 삽입 이미지


부하테스트를 모니터링 할 대상을 설정한다. 그러나 AD 환경과 같이 모든 컴퓨터에 바로 접속할 수 있는 환경이 아닌 경우 타 시스템의 정보를 확인하는 작업은 제대로 진행되지 않는다. 차라리 대상 서버에서 직접 성능 MMC(제어판->를 이용하는 것이 좋다

사용자 삽입 이미지


테스트 실행

확장자가 .loadtest 라는 파일이 생성되는데, 이 파일을 연 뒤에 왼쪽 트리의 최상위에서 마우스 오른쪽 버튼을 클릭해서 테스트 실행을 선택한다

사용자 삽입 이미지


리포트 확인

실행을 하면 자동적으로 결과 리포트를 띄워주는데, 기본적으로 그래프를 제공하고 해당 로그 내용을 표나 요약등으로 확인할 수 있다.

사용자 삽입 이미지


728x90
MOSS 2007로 개발을 한 뒤에 테스트를 하다가 보면, 아래와 같이 썰렁한
에러 메시지만 보여주고 끝내는 경우가 많다.

사용자 삽입 이미지

이렇게 나오면, 도데체가 무엇때문에 에러가 발생했는지 전혀 알 수 없기 때문에, 아무런 조치를 취할 수 없게 된다.
이를 처리하는 방법은 해당 사이트에 있는 Web.Config를 수정해야 한다.

만일 80 포트를 쓰는 평범한 웹사이트(?) 라면,
  C:\Inetpub\wwwroot\wss\VirtualDirectories\80
위치에 web.config를 볼 수 있을 것이다. 사용하는 Drive 나 포트에 따라 경로를 변경하도록해서 해당 web.config를 띄운다.
그리고 아래와 같은 위치의 내용을 각각 수정한다.

1. CallStack = "false" 로 적힌 내용을 CallStack ="True" 로 변경한다.
사용자 삽입 이미지

2. CustomErrors mode = "On" 또는 "RemoteOnly"로 된 것을 "Off" 로 변경한다.
사용자 삽입 이미지

다 변경했으면 저장한 뒤 해당 페이지를 Refresh 하고 동작하면 된다.

그러면 단순하게 한줄로 나왔던 오류도....
사용자 삽입 이미지
 장엄하면서 다양한 내용이 쭈욱 나오게 된다.



* 이 글의 원본 블로그가 있는데, 즐겨 찾기가 날아가는 바람에 해당 사이트를 찾지 못하고 있다.
728x90

+ Recent posts

728x90