Kori 2월 27일에 포스트됨 공유하기 2월 27일에 포스트됨 << DelphiCon 2023 목록으로 이동 원본 비디오(YouTube) 보기 (9 min): 아래 원본 비디오에는 이 요약글 보다 더 자세한 예시와 설명이 있습니다. DelphiCon 의 2023 시리즈 중, "A quick look at the Benefits of Windows Services" - Ian Barker (10 min) 의 한글 요약본입니다. 이 세션에서는 윈도우 서비스의 장점과 델파이에서 활용하는 방법을 요점 위주로 살펴봅니다. 발표자 Ian Barker 엠바카데로 MVP 발표자료 등이 있는 링크 http://tinyurl.com/delphiqlservices 윈도우 서비스 서비스가 필요한 상횡에서 매우 유용하다. 참고로, 서비스가 모든 앱에서 필요한 것은 아니다. 윈도우 서비스의 특징 사용자가 로그아웃을 해도 계속 실행될 수 있다 (일반 윈도우 애플리케이션이라면 이런 경우에는 작동할 수 없다). 서버에서든, 일반 PC에서든 모두 작동한다. 백그라운드에서 실행될 수 있다 (백신 즉, Antivirus 소프트웨어가 대표적이다). 중요한 기능을 하는 많은 소프트웨어에서 사용된다 (웹서버 등). 웹서버 애플리케이션 등 서버 등에서 사용자가 직접적으로 사용하지 않는 유형의 소프트웨어를 실행할 때 특히 유용하다. 윈도우 서비스 기동(start up)하기 컴퓨터가 시작될 때 해당 윈도우 서비스가 자동으로 시작되도록 할 수 있다 (기본 설정은 자동 시작이다). 또는 수동으로 시작하도록 지정할 수도 있다. 윈도우 서비스 실행 주체(사용자) 'service user'라고 하는 '가공된' 사용자가 주체가 된다. 하지만, 주체(사용자)를 직접 지정하여 덮어쓸 수도 있다 (특정 사용자, 네트워크, 로컬 시스템 계정 등). 대체로 서버가 아니라 일반 PC에 설치하는 경우, 로컬 시스템 계정을 사용한다. 그러면, 경고 창 등 PC의 모든 서비스와 상호작용할 수 있도록 할 것인지를 선택할 수 있다. 로컬 시스템 계정이 아닌 다른 계정도 지정할 수 있으므로, 상황에 맞게 지정하면 된다. RAD 스튜디오를 사용해 윈도우 서비스를 만드는 방법은 간단하다 메인 메뉴>File>New>Windows>Windows service를 선택한다. 아래 메시지는VCL을 사용할 지를 묻는 것이다. 이 창에서는 "Yes"를 클릭한다 (VCL을 사용할 필요가 있기 때문) 그러면 빈 윈도우 서비스가 만들어 진다. 위와 같이 기본 골력이 생성된다. 즉, 모든 서비스에 있어야 하는 기본 기능 즉 서비스 시작, 일시 중지, 정지 등이 완성되어 있다. 다만, 기본 기능 외에 다만 실제 서비스 내용은 비어있다. 윈도우 서비스를 위한 중요한 유닛과 TService 클래스 위 그림과 같이 자동 생성된 유닛 안에 있는 TService 클래스를 활용하면 된다. 빈 유닛(폼)이 자동으로 생기는데, 여기에서 Object Inspector 창 안에서 Events 탭을 보면 OnStart, OnStop, OnExecute, OnPause 이벤트가 있다. 즉, 윈도우 서비스에서 활용할 수 있는 것들이다. 이름에서 알 수 있듯이, 서비스가 시작될 때, 중단될 때, 실행될 때, 일시 정지될 때, 무엇을 할 것인지를 각 알맞은 이벤트 핸들러에 넣으면 된다. 윈도우 서비스를 만들 때 실무 팁 프로퍼티 중 Name과 DisplayName를 직접 알맞은 이름으로 명시하면 좋다. 그러면, 윈도우 서비스 관리자(Windows Service Manager) 창에서 식별하기 쉽다 (특히 버그 해소 작업 시 필요할 것이다). 윈도우 서비스에 대한 설명 붙이기 윈도우 서비스 관리자 창의 서비스 목록 화면에서 설명(discription)에 해당 서비스에 대한 설명이 표시되도록 할 수 있다. 윈도우 서비스에 설명이 표시되지 않으면, 윈도우 서비스 관리자를 보는 사람들은 해당 서비스가 무엇을 하는 것인지를 전혀 알 수 없다. 그래서 이름만 보고 추측을 하게 되는데, 이 때 서비스 이름이 바이러스 이름 같아 보인다면, 걱정이 되어 해당 서비스를 삭제해 버릴 수도 있을 것이다. 내 윈도우 서비스에 설명을 붙이는 방법은 간단하다. OnAfterInstall 이벤트의 핸들러에 위 그림과 같이 코드를 넣으면 된다. 레지스트리 키 항목을 추가하는 간단한 코드이다. 윈도우 서비스 설치하기 윈도우 서비스는 대부분 Administrator 계정으로 설치해야 한다. 권한이 없는 사용자가 설치를 시도하면 아래 그림과 같이 (일반 사용자는 윈도우 서비스를 설치할 수 없다는) 접근 불가 에러가 표시된다. 윈도우 서비스를 Administrator 계정으로 설치하려면, Admin용 콘솔 창에서 설치를 진행해야 한다. Admin 계정으로 명령 창을 열려면, 윈도우 메뉴>작업 관리자를 선택>명령창을 선택하면 관리자 계정으로 실행 (Run As Administrator)을 선택할 수 있는 창이 표시된다. 아래 그림 처럼 관리자 권한으로 콘솔창을 열고, 맨 아랫 줄처럼 입력한다. 실행 파일이름 (위 예에서는, example_windows_service.exe)을 적고 한칸 띄고, /install을 적고 나서 엔터키를 친다. (권한이 있는 사용자라면) 해당 윈도우 서비스가 설치된다. 해당 Admin의 비밀번호 입력이 필요할 수도 있다. 성공적으로 설치되면 표시되는 알림 설치 스크립트에서 사용되는 옵션 /INSTALL /UNINSTALL /SILENT (위 2개와 섞어서 사용) 예를 들어, [ 실행파일명] /INSTALL /SILENT를 실행하면, 설치 중에 많은 대화창이 표시되는 것을 방지할 수 있다. 윈도우 서비스를 수동으로 기동(start) 하기 윈도우 서비스를 설치했다고 해서 실행까지 되는 것은 아니다. 직접 실행하려면, NET START [서비스명]을 입력하고 엔터 키를 친다. 윈도우 서비스가 작동되고 있는 지 확인하기 윈도우 서비스 관리자를 열면 해당 서비스의 상태가 Running이라고 표시될 것이다. 윈도우 서비스 동작을 로그에 남기기 문제가 있어서 서비스가 작동하지 않을 때를 대비하려면 로그를 남기도록 해 놓는 것이 좋다. 사용자와 상호 작용하는 일반적인 앱이 아니기 때문에, 서비스가 어떻게 하고 있는 지를 알기가 힘들기 때문이다. 로그 기록용 외부 도구를 사용하면 수준높게 구현할 수 있다. https://github.com/danieleteti/loggerpro 매우 좋다 https://github.com/grijjy/GrijjyCloudLogger 원하는 클라우드에 남길 때 좋다. 또는 TService.LogMessageMethod를 사용하여 윈도우 이벤트 로그에 남도록 송출할 수 있다. 이벤트 로그를 남길 때, 이벤트 로그의 구분 항목 (에러인지 정보인지 등)에 알맞게 내용을 담아서 기록할 수 있다. 윈도우 이벤트 로그에 대해서 잘 모른다면 이번 기회에 알아두는 것도 좋다. 또는 OutputDebugString 을 사용하여 디버그 콘솔 (Debug Console)에 출력할 수도 있다. 위 그림과 같이 파라미터에 문자열을 적어주면 디버그 콘솔에 출력된다. 실행되고 있는 일반적인 앱에서는 RAD 스튜디오 IDE 안에서 'Events' 탭을 열면 출력되는 내용을 볼 수 있다. IDE를 닫았다면 그리고, 다른 디버그 콘솔 앱을 연다면 OutputDebugString은 그곳에 기록한다. 고객의 컴퓨터 안에 RAD 스튜디오의 로깅 앱을 설치할 수는 없을 것이다. 그래도 OutputDebugString을 통해 기록되는 내용을 볼 수 있는 방법이 있다. 추천할만 한 도구는 마이크로소프트가 소유한 SysInternals에서 제공하는 DebugView이다. 훌륭한 앱이다. 여기에서는 모든 곳에서 나오는 모든 디버그 콘솔 아웃풋을 볼 수 있다. https://learn.microsoft.com/en-us/sysinternals/downloads/debugview 예를 들면 아래 그림과 같이 어떤 개발자가 만든 프로그램에서 invalid parameter를 전달하려고 하려는 에러가 몇차례 발생했음을 알 수 있다. 또한 빨간색 상자 안을 보면, 우리가 앞에서 OutputDebugString 사용하여 남긴 문자열이 표시되고 있다. RAD 스튜디오로는 원하는 거의 모든 것을 할 수 있다. 라즈베리파이에서 작동하는 앱을 만들 수도 있다. 매우 값싼 아마존 파이어 태블릿에서 작동하는 앱을 만들 수 있다. 그저 RAD 스튜디오에서 안드로이드 앱을 만들면 된다. 윈도우, 맥OS(인텔, ARM 둘다), iOS, 안드로이드, 뿐만 아니라 웹용 앱까지도 단일 프로젝트와 코드 베이스에서 만들 수 있다. 운영체제 전체가 업그레이드 된 이후에도 여러분이 만든 앱이 여전히 작동하기를 원하는가? 새로 다운로드 하거나 재구성을 할 필요없이도 실행되는 것은 델파이로 만든 프로그램에서는 매우 전형적이며, 델파이 만 가진 독특한 점이다. 이렇게 할 수 있는 개발 환경은 거의 없다. 다른 개발환경에서는 대부분 런타임과 지원 라이브러리를 업데이트해야 하지만, RAD 스튜디오와 델파이에서는 그럴 필요가 없다. 내가 델파이를 선택하는 이유이기도 하다. << DelphiCon 2023 목록으로 이동 View full 엠바카데로 기술자료 1 인용하기 이 댓글 링크 다른 사이트에 공유하기 더 많은 공유 선택 사항
Recommended Posts
이 토의에 참여하세요
지금 바로 의견을 남길 수 있습니다. 그리고 나서 가입해도 됩니다. 이미 회원이라면, 지금 로그인하고 본인 계정으로 의견을 남기세요.