스크럼과 XP



스크럼과 XP

저자
헨릭 크니버그 지음
출판사
인사이트 | 2009-05-01 출간
카테고리
컴퓨터/IT
책소개
스웨덴 크리스프 사의 자바와 애자일 소프트웨어 개발 관련 컨설턴...
가격비교



스프린트 계획회의에서 다음과 같은 구체적인 산출물이 나와야 한다.

-하나의 스프린트 목표

-팀원의 목록

-스프린트 백로그(해당 스프린트에 포함된 스토리 목록)

-확정된 스프린트 데모 날짜

-확정된 일일 스크럼을 위한 시간과 장소



우리가 테스트 주도 개발을 하면서 사용한 도구들은 다음과 같다

JUnit/HttpUnit/JWebUnit: 이밖에 TestNG나 Selenium도 고려하고 있다.

HSQLDB : 테스트에 사용하는 내장 메모리 DB

제티(jetty) : 테스트에 사용하는 내장 메모리 웹 컨테이너

코버투라(cobertura): 테스트 커버리지 분석 도구

스프링 프레임워크: 목(mock)을 사용하는 것, 사용하지 않는 것 그리고 외부 데이터베이스가 필요한 것, 내장 데이터베이스를 사용하는 것 등 여러가지 종류의 테스트 픽스쳐를 연동하는데 사용




이 책을 읽다보면 

우리가 종종 프로젝트를 진행할때 기초적인 것들을 놓치고 지나가고 있는것이 아닌가 생각이 들때가 있다

테스트를 진행하지 않고 릴리즈 한다던지

의사소통의 문제라던지 하는 기초적인 것들


회의를 많이 하는 것이 안좋을 수 있겠지만

그래도 일주일에 한번은 했으면 좋겟는데

지금 사실 잘 이루어 지지 않고 있다.


그런 면에서 회의롤 어떻게 하면 좋을지 까지 알려주는 책인 것 같다

재미도 있어서 책이 술술 읽힘 ㅋㅋ


근데 스크럼이 뭐지

스크럼(Scrum)은 프로젝트관리를 위한 상호,점진적 개발방법론이며, 애자일 소프트웨어 공학 중의 하나이다. 스크럼(Scrum)은 소프트웨어 개발 프로젝트를 위하여 고안되었지만, 소프트웨어 유지보수 팀이나 일반적인 프로젝트/프로그램 관리에서도 적용될 수 있다.


제품 백로그를 생성하는 것은 재미있어 보인다

시각적으로 보여지는 것이 프로젝트에 자극이 될 것 같으니까!!!




'기록 > ' 카테고리의 다른 글

ㅇㅇ  (0) 2013.05.16
인생학교: 일  (0) 2013.04.23
뜨거운 침묵  (0) 2013.02.25
독립연습  (0) 2013.02.17
늦지 않았어 지금 시작해  (0) 2012.05.16

7.드라이버에서 라이브러리 사용하기

1.      Example

A.     Examlpe.h

B.      Examlpe.lib

C.      Examlpe.dll

2.      lib포함

A.     Source 파일에 라이브러리 포함

                         i.         TARGETLIBS=$Examlpe.lib

B.      라이브러리는 build를 하는 곳에 저장

C.      라이브러리 위치가 잘못 되었을 경우에는 build시 에러 메시지 발생

                         i.         Error U1073 : don’t know how to make ‘.lib’

                        ii.        

3.       

 

 

 

 

 

6. 드라이버와 에이전트와의 통신

1.      윈도우에서는 커널 모드와 유저 모드간에 데이터를 주고 받기 위해 크게 두 가지 방식 제공

A.     Buffered I/O

                i.         I/O manager에서 해당 데이터의 사이즈를 먼저 체크 한 후 해당 데이터가 들어갈 만한 충분한 사이즈의 페이지 되지 않은 버퍼메모리를 성성

               ii.         드라이버에 데이터를 쓰는 작업의 경우 유저 모드 데이터를 이 버퍼에 복사

              iii.         드라이버에서 이 버퍼 메모리의 값을 참조하거나 혹은 데이터 읽기 작업일 경우 버퍼에 드라이버가 가지고 잇는 데이터를 저장

              iv.         해당 작업이 완료되면 I/O manager는 버퍼에 있는 데이터를 다시 유저 모드 메모리에 복사하고 버퍼메모리를 해제

B.     Direct I/O

                i.         데이터를 주고 받는 요청이 발생하면 I/O manager에서 해당 메모리가 스와핑 되지 않도록 일종에 잠금 장치를 함

               ii.         잠겨진(Locked) 메모리를 드라이버에서 쉽게 참조할 수 있도록 관련 정보가 저장된 MDL을 만듬

              iii.         드라이버에서는 DML을 가지고 참조 가능한 메모리 포인터를 리턴해주는 MmGetSystemAddresForMdl()이라고 하는 API를 사용하여 데이터를 주고 받을 포인터를 만들고 이 포인터를 이용해서 데이터를 처리

              iv.         I/O manager는 쓰기/읽기 동작이 완료되면 MDL을 제거하고 해당 메모리의 잠금 장치를 해제

               v.          


2.      두개의 파일 필요

A.     유저 어플인 exe

B.     디바이스 드라이버 sys

3.      유저 어플

A.     DeviceIoControl 함수

                i.         유저어플과 디바이스와 대화를 할 수 있는 함수

               ii.         양방향성을 가짐

B.     단방향성을 가지는 함수

                i.         ReadFile, WireFile

4.      디바이스 드라이버 코드

A.     DriverEntry

                i.         IoCreateDevice : 디바이스 생성

               ii.         IoCreateSymbolicLink : 이름 지정

 

5. 드라이버의 설치 및 확인 방법

1.      레지스트리의 값을 변경하여 설치 하는 방법

A




.     서비스의 파일의 위치 변경

                i.         C:\Windows\System32\drivers

B.     레지스트리 편집기를 이용하여 설치

                i.         [실행] – regedit

               ii.         HKEY_LOCAL_MACHINE\SYSTEM\Current ControlSet\Servcices

1.      sys파일 이름과 같은 키 생성

              iii.         키안에 값이 1 DWORD

1.      Start

2.      ErrorControl

3.      Type

C.     재부팅

 

2.      확인

A.     [컴퓨터] - 마우스 오른쪽 버튼 클릭 – [관리]

B.     [왼쪽 장치 관리자] – 마우스 오른쪽 버튼 – [보기] -  [숨김 장치 표시]

                i.        

C.     중앙에 [비 플러그 앤 플레이 드라이버] 메뉴 선택

                i.         설치 확인

               ii.         

서비스 프로그램에서 ShellExecute 사용법

아래 방법으로 서비스에서 응용 프로그램를 실행해 보았는데, 

프로그램의 UI는 나타나지 않고 

작업 관리자에 프로세스 실행은 확인 할 수 있었다. 제대로 동작하는지는 알 수 없ㅋ엉ㅋ ㅜㅜ


서비스에서는 콘솔, 윈도우 UI를 제공하지 않아서 

이것들을 가지고 있는 프로그램은 나타나지 않는다


STARTUPINFO si;

PROCESS_INFORMATION pi;


si.cb = sizeof(si);

si.lpDesktop = "WinSta0\\default";


CreateProcess( NULL, "c:\\1.txt", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);



==========================================================================

C++빌더나 Delphi로 Service 프로그램 만드는것은 매우 쉽습니다. 

그런데 이 서비스프로그램에서 일반 윈도우 어플리케이션을 실행하거나
어플리케이션과 통신을 해야 할때는 좀 까다로운 부분이 있습니다. 

그 이유는
Sercive가 실행되는 desktop이 일반 어플리케이션이 실행되는 desktop이 다르기 때문입니다.
http://cafe.naver.com/bcbmaster/765

그래서 Service프로그램에서 윈도우 어플리케이션을 실행하면 정상적으로 실행이 잘안됩니다.

또한 Service에서 
FindWindow, EnumWindows 등으로 
desktop에 실행된 윈도우 핸들도  찾아지지 않으며 
당연히 SendMessage로 메세지를 보낼수도 없습니다..(불가능한것은 아님)
 

 [Service에서 default 데트스탑에 어플리케이션 실행하기]

 그럼 Service프로그램에서 logon한 user화면에 어플리케이션을 실행하려면 어떻게 해야 할까요?
간단합니다. 

CreateProcess로 프로그램을 실행하면서
9번째 파라메터로 넘기는 STARTUPINFO 구제체에서 lpDesktop에 해당 desktop을 설정해주면 됩니다.
 

[델파이 예제]
  

  
procedure TService1.ServiceCreate(Sender: TObject);  
var  
  si: STARTUPINFO;  
  pi : PROCESS_INFORMATION;  
  bResult : Boolean;  
begin  

  ZeroMemory( @si, sizeof(si) );  
  si.cb := sizeof(si);  
  si.lpDesktop:=PChar('WinSta0\default');                    // 이부분이 핵심 

  bResult := CreateProcess( nil, // No module name (use command line). 
  'C:\Zzang\[기술예제]\DelphiToHTML\DelphiToHTML.exe', // Command line. 
  nil, // Process handle not inheritable. 
  nil, // Thread handle not inheritable. 
  FALSE, // Set handle inheritance to FALSE. 
  0, // No creation flags. 
  nil, // Use parent's environment block. 
  nil, // Use parent's starting directory. 
  si, // Pointer to STARTUPINFO structure. 
  pi ); // Pointer to PROCESS_INFORMATION structure. ) 

end; 
     

 

만약 로그인 화면에 어플리케이션을 실행하려면
STARTUPINFO 구조체의 lpDesktop에 "WinSta0\Winlogon" 으로 설정해주면됩니다.
 

 [서비스 프로그램에서 FindWindow  , SendMessage를 사용하려면]

 일반 윈도우 프로그램과 SendMessage등 상호 작용이 가능한 Service프로그램을
Interactive Service라고 합니다..
다시말해 Service프로그램을 Interactive Service로 설정해놓으면 일반 윈도우 어플리케이션과 상호작용이 가능합니다.
 

그럼 Service프로그램을 어떻게 Interactive Service로 설정할까요?

서비스 - 속성 - 로그온 에서 "서비스와 테스트톱 상호 작용 허용"을 체크해 놓으면 된다. 

 참조 http://www.simpleisbest.net/archive/2005/10/18/260.aspx

 그런데 일반 사용자가 Service 속성을 열어서 직접 수정할수는 없으니
Service프로그램을 Windows에 install할때 설정해서 install 해야 한다.

보통 서버스를 install 하려면   command 모드에서  서비스실행파일네임.exe  /install 하면 설치되고
 서비스실행파일네임.exe  /uninstall 하면 uninstall 된다.

그런데 Interactive Service로 install하려면
CreateService로   서비스 프로그램을 인스톨해야 합니다.

참조 http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=51&MAEULNo=20&no=7998&ref=7998

 

그런데 위 그림을 보면 "로컬 시스템 계정"이라는 것 밑에 " Interactive Service"관련 항목이 있다.
즉 " Interactive Service"는 로컬 시스템 계정에서만 동작한다는 것이다.

 administrator가 아니면 user의 desktop의 윈도우와 상호작용이 불가능하다는 얘기...
앗참
 Interactive Service에서  윈도우 어플리케이션을 실행하면 기본적으로
"WinSta0\default" 데스크톱에서 실행됩니다.
STARTUPINFO 의 lpDesktop을 설정하지 않아도 된다는....


참고로..
XP나 Vista 같은경우 로그아웃 하지 않고 여러명의 User로 로그인한 상태가 되는경우도 있습니다.
이경우 원하는 데스트탑에 프로그램이 뜨지 않고 엉뚱한(다른계정의 desktop)에 프로그램이 뜰수도 있습니다.
이 문제는 좀더 머리아픕니다.


그럼..



출처 http://www.delmadang.com/community/bbs_view.asp?bbsNo=17&bbsCat=41&indx=409951&page=393

문서작성의 5가지 口訣

필자가 22년간 IT 업계에 종사하면서 세 곳의 다른 회사를 다녔지만 개발과 재무관리를 제외하고는 다양한 업무를 경험한 것 같다. 그래서인지 그 동안 나름대로 쌓아왔던 경험의 지식들을 새로 시작하는 분들이나 현재 다양한 고민을 가진 분들에게 조금이라도 도움이 되고 싶다는 생각이 드는 시기인 것도 사실이다. 

그러나 22년이라는 세월의 IT 경험을 간단하게 정리하여 핵심을 전달하기란 사실 쉽지 않다. 하지만 TV무협시리즈를 보면 주인공이 무림의 고수에게 간단한 “구결(口訣)”을 전수 받고 열심히 연마하여, 상승무공을 익히는 장면이 자주 등장한다. 

이에 필자도 그 동안 다양한 시행착오를 거쳐 익혀왔던 것들을 정리해보면서 경쟁이 심화되고 있는 IT 비즈니스에서 혜안을 갖는데 작은 보탬이 되고자 간단한 구결 하나를 전하고자 한다. 

IT 이외의 모든 비즈니스의 시작은 사실상 문서작업의 시작이라 할 수 있다. 사업 계획서에서 제안서, 업무 계획서, 개발 계획서 등등 모든 문서화의 작업이 사업의 프로세스를 만드는 초석이 되고 있다. 이런 점에서 문서 작성은 특히 IT 종사자들이 다른 분야에 비해 약한 편이다. 

일전에 전남 강진의 다산초당 앞 찻집에 들러 정약용 선생이 쓰신 글을 인쇄한 다포(다기를 덥는 천)를 사왔다. “동트기 전에 일어나라, 기록하기를 좋아하라”라는 다산의 가르침을 들으니, 문서작성의 중요성을 강조하던 필자의 주장과 다르지 않아 흐뭇한 생각도 들었다.

공공기관의 입찰 선정 심사위원으로 참여한 적이 몇 번 있었다. 내공이 있는 심사위원은 제출된 문서의 형식만 척 보아도, 업체의 역량을 가늠해 볼 수가 있다. 커버에 반드시 있어야 할 제목, 부제목, 작성일자, 작성자명, 작성자 이메일, 부서명, 회사명, 문서의 비밀등급을 제대로 기입하였다면 잘 된 문서이다. 특히, 문서의 파일명을 귀퉁이에 기재한 경우는 정보검색의 효율을 관리하고 있다는 반증이 된다. 요약문과 구조화된 목차, 흔히 오리발 조항이라는 disclaimer의 유무, 약자의 설명페이지가 있다면 외형적 형식은 아주 잘 되어 있는 것이다. 그러나, 품격 있는 문서는 그 이상이 필요하다. 

아래의 5가지의 구결은 비즈니스 문서의 품격에 관한 좋은 가이드가 될 것이다. 이것 역시 IT업계에 종사하는 전문인은 항시 외울 것을 권하고 싶다. 외울 수 없다면, 전천후로 판단 기준을 상기할 수 없을 것이다. 

첫째, 결론부터 말하라. 많은 문서는 결론을 문서의 마지막에 제시한다. 비즈니스 문서는 신속한 의사결정을 위하여 본문의 결론을 한 페이지로 요약하여 표지 다음으로 위치시키는 것이 좋다. 바쁜 의사결정권자가 설명 중에 떠나더라도, 그 표지 한 장으로도 키 메시지를 이해시켜야 한다. 젊은 작성자들은 대개 요약문(Executive Summary)과 개요(Overview)를 구별하지 못하는 경우가 많은데, 요약문은 어떤 의사결정을 하게 되면 어떤 경영적 이점이 달성된다는 메시지가 분명히 기재되어야 한다. 

둘째, 구조화하고 시각화하라. 장황한 설명보다는 주요 메시지가 눈에 잘 들어오도록 시각화하고, 구조화시켜야 독자들이 짧은 시간에 이해할 수 있게 된다. 특히 동일 레벨의 메시지가 5개~8개를 넘어가게 된다면, 2개의 상위레벨로 하위레벨을 분리하여 종속시키는 것이 원칙이다. 

셋째, 추상화레벨을 맞추어라. 독자나 청중의 수준에 맞추어 메시지의 심도가 달라야 한다. 경영자에게는 추상화 레벨을 높이고, 실무자에게는 추상화 레벨을 심화시키는 것이 좋으며, 각 장의 수준은 동일한 추상화레벨을 유지하는 것이 좋고, 추상화레벨이 더욱 심화된 것은 별첨으로 옮기는 것이 효과적이다. 직원들이 “추상화레벨”이라는 용어를 잘 이해하고 사용하는 경우는 의사소통문화가 진일보하는 증거가 되기도 한다. 

넷째, 논리적 연관성을 유지하라. 작성자들은 각각의 장에 해당 메시지만을 포함시키는 우를 범하여, 결정적인 의사결정을 유도하는 논리적 설명을 요하는 페이지를 누락시키는 경우가 많이 있다. 특히, “요건-제안기능-효과”를 각 장에서 별도로 설명했어도 이들 내용의 논리적 연관성을 설명하는 매칭 테이블이 포함된다면, 이것이 키 메시지가 될 것이다. 

다섯째, 장기적 비전 혹은 남겨진 과제를 제시하라. 요청자가 1차적인 과제에 대한 해답만을 요구하였다 하더라도, 제안자가 1차 과제 이후에 발생할 과제까지 예측하여 제시하여 준다면, 요청자는 제안자의 식견에 경의를 표할 것이고 만약 그와 같은 예측 상황이 실제로 발생하게 된다면, 1차 과제의 제안자를 먼저 초대하게 될 것이다. 대다수의 실무자가 근시안적 관점으로 이러한 미래기회를 미리 확보하지 못하는 과오를 범하고 있다. 당신이 미래의 비전이나 과제를 제시할 능력이 있다면, 당신은 사회적 성공을 기대할 자질을 가지고 있는 사람이다.

필자의 경험으로 훈련을 많이 받은 직원들이 많이 놓치는 것이 네 번째와 다섯 번째 원칙이다. 구결은 단순하지만, 2~3년 훈련 받지 않으면 활용하기 힘든 구결이다.@

필자 이정규 안랩코코넛 대표이사는 현 정보보호산업협회의 부회장, 정보관리기술사, 미국공인회계사로 IBM과 안철수연구소를 거쳐 안랩코코넛에 이르기까지 22년간 IT 산업에 종사하여온 IT 전문가이다.

'and so on' 카테고리의 다른 글

프로파일링  (0) 2014.03.14
개발 문서화 방법  (0) 2014.03.11
0  (0) 2013.01.08
assembly  (0) 2013.01.02
RegAsm  (0) 2012.09.21

4. Admin 권한으로 실행되는 프로그램에 대한 정리

- Admin 권한으로 실행되는 프로그램에 대한 정리

1.      계정에 관리자 권한을 부여 한다는 것이(Admin 권한으로 프로그램을 실행한다는 것이) 사용자 계정 컨트롤 경고 창 조차 발생하지 않도록 하는 것 인줄 잘못 알았다.... ㅡㅡㅋ

  

1.      계정별 설치 확인

A.     관리자 계정 사용자 계정 컨트롤의 값이 항상 알림일 때

                i.         OpenSCManager() 함수 사용시 액세스 거부 되어 설치 불가능

B.     사용자 계정

                i.         관리자 계정과 같이 SCM 접근 불가로 설치 불가능

 



2.      계정에 관리자 권한 부여

A.     프로그램에 관리자 권한 부여 이유

                i.         일반 프로그램의 경우 사용자가 프로그램을 실행하였을 때 UAC의 값에 따라 서비스가 실패되는 경우가 발생

               ii.         UAC 확인 창을 명시적으로 띄워 관리자 권한으로 프로그램을 실행 할 경우에 사용자가 권한을 허용할 경우 서비스 설치 가능해짐

B.     Manifest파일 이용 방법과, 직접 코딩하여 관리자 권한을 부여하는 방법이 있음

C.     관리자 계정을 부여하지 않았을 경우 사용자가 수동으로 관리자 권한을 부여 하는 법

                i.         UAC 기능을 중지

1.      제어판 사용자 계정 및 가족 보호 사용자 계정

2.      사용자 계정 컨트롤 설정 변경의 값을 항상 알리지 않음으로 설정

               ii.         실행 파일의 오른쪽 버튼 클릭 후 관리자 권한으로 이 프로그램 실행

              iii.         실행 파일의 속성의 호환성 탭에서 관리자 권한으로 이 프로그램 실행 체크

 



3.      Manifest파일 이용하는 방법과 직접 코딩으로 관리자 권한을 부여 하였을 때 장단점

A.     Manifest 파일 이용

                i.         장점 : 구현 용이, 코드 수정 없이 변경 가능

               ii.         단점 : UAC 실행 수준의 값 만이 가능

B.     직접 코딩 이용

                i.         장점 : 다양한 제어 가능

               ii.         단점 : 코딩 부담



 

4.      직접 코딩으로 계정에 권한 부여

A.     사용자 계정에 권한을 할당하는 함수 생성

                i.         권한에 SeServiceLogonRight 값 적용하여 권한 부여

1.      서비스로서 로그인

B.     프로세스에 권한을 할당하는 함수 생성

                i.         OpenProcessToken()

1.      프로세스의 Access Token을 가져옴

               ii.         LookupPrivilegeValue()

1.      Access TokenPrivilege 목록에 권한이 있는지 살펴 봄

              iii.         AdjustTokenPrivilege()

1.      권한 활성화



5.      Manifest 파일 이용하여 권한을 할당

A.     Manifest 파일을 생성 (ex) add.manifest)

B.     프로젝트 파일에 생성한 Manifest 파일 포함

C.     프로젝트 속성 매니페스트 도구 추가 매니페스트 파일

                i.         생성한 manifest 파일 이름으로 값 설정 (ex) $(ProjectDir)add.manifest

D.     프로젝트 속성 링커 매니페스트 파일 – UAC 실행 수준

                i.         requireAdministrator로 값 설정

E.      프로그램 실행 할 경우

F.      UAC 확인 창을 명시적으로 확인 가능

 

 

 

3. 드라이버 서비스 설치

-드라이버 서비스 설치

1.      드라이버 파일 생성

A.     sys 파일

B.      Makefile, sources, c 파일 이용

C.      test.c 파일 동작 과정

                         i.         드라이버 시작시

1.       DbgPrint(“I loaded!!\n”);

                        ii.         OnUnload()

1.      DbgPrint(“OnUnload called\n”);

2.      드라이버가 시작 될때마다 디버그 창에 출력

 

2.      드라이버 설치과정

A.     OpenSCManager() 권한 변경

                         i.         SC_MANAGER_ALL_ACCESS

B.      CreateService()

                         i.         서비스 유형 : SERVICE_KERNEL_DRIVER

                        ii.         서비스 실행 시점 : WERVICE_AUTO_START

 

3.      계정별로 설치 과정 확인

A.     관리자 계정

                         i.         사용자 계정 컨트롤의 값에 따라 항상 알림, 알리지 않음의 경우로 나뉨 

                        ii.         항상 알림

1.      SCM에 접근 불가하여 

2.      드라이버 설치 불가능

                       iii.         알리지 않음

1.      드라이버 설치 가능

 

B.      사용자 계정

                         i.         사용자 계정 컨트롤 변경이 불가능하여 설치 불가능

 

C.      관리자 계정에서 드라이버 설치할 경우 사용자 계정에도 설치가 되지만 표준 사용자 계정에서는 설치가 될 수 없음 (시작, 중지, 일시중지도 변경 불가능)

D.     문제점

                         i.         관리자 계정에서 항상 알림으로 사용자 계정 컨트롤의 값을 설정 하였을 때 SCM에 접근이 불가능 한 상황

2. 서비스 디버깅

-서비스 디버깅

: 서비스는 SCM에 의해서 실행되므로 디버깅이 되지 않는다. 즉 일반 응용 프로그램 처럼 바로 실행하지 않기 때문에 디버깅이 안됌

1.      서비스 실행 중임

2.      서비스 프로그램 소스코드에서 SleepBreak Point를 설정

A.     Break Point를 지나치지 않게 Sleep을 이용하여 디버깅

B.      Break Point 전에 Sleep 설정

3.      디버그 – [프로세스에 연결]

4.      모든 사용자의 프로세스 표시, 모든 세션의 프로세스 표시에 체크

5.      사용 가능한 프로세스 목록에서 서비스 프로세스 선택

6.      연결

1. 윈도우 서비스 프로그램 생성

드라이버 설치를 요즘 하고 있는데 힝 정리가 안돼 

내가 그동안 어떤 작업들을 해서 지금 결과가 나왔는지 작업 과정을 적도록 해야겠다.


-윈도우 서비스 프로그램 생성

: 서비스를 동작하기 위해서 세 가지의 프로그램을 생성하였다. 서비스 프로그램, 서비스 설치, 제거 프로그램, 서비스 제어 프로그램

 

1.      서비스 프로그램 (MemstatService.exe)

A.     구성

                         i.         Main 함수

                        ii.         서비스 메인

                       iii.         핸들러 함수

 

2.      서비스 설치, 제거 프로그램

A.     Install()과정

                         i.         OpenSCManager()

                        ii.         CreateService()

B.      UnInstall() 과정

                         i.         OpenSCManager()

                        ii.         OpenService()

                       iii.         DeleteService()

                       iv.         서비스가 실행 중이면 멈추는 과정도 필요

 

3.      서비스 제어 프로그램

A.     서비스의 상태 변환을 도와주는 프로그램

                         i.         서비스의 상태

1.      시작

2.      중지

3.      일시중지

4.      사용자 정의 신호(ex) 새 로그 파일 )