Jump to content
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr ×
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr

[아티클] [DelphiCon 요약] 델파이콘 2023 - 요점 보기: 윈도우 서비스의 장점


Recommended Posts

<< DelphiCon 2023 목록으로 이동

원본 비디오(YouTube) 보기 (9 min): 아래 원본 비디오에는 이 요약글 보다 더 자세한 예시와 설명이 있습니다.

DelphiCon 의 2023 시리즈 중, "A quick look at the Benefits of Windows Services" - Ian Barker (10 min) 의 한글 요약본입니다.  

  • 이 세션에서는 윈도우 서비스의 장점과 델파이에서 활용하는 방법을 요점 위주로 살펴봅니다.

발표자

발표자료 등이 있는 링크

 

윈도우 서비스

DelphiCon2023IanBarker1-1.png

  • 서비스가 필요한 상횡에서 매우 유용하다.
    • 참고로, 서비스가 모든 앱에서 필요한 것은 아니다.

윈도우 서비스의 특징

  • 사용자가 로그아웃을 해도 계속 실행될 수 있다 (일반 윈도우 애플리케이션이라면 이런 경우에는 작동할 수 없다).
  • 서버에서든, 일반 PC에서든 모두 작동한다.
  • 백그라운드에서 실행될 수 있다 (백신 즉, Antivirus 소프트웨어가 대표적이다).
  • 중요한 기능을 하는 많은 소프트웨어에서 사용된다 (웹서버 등).
  • 웹서버 애플리케이션 등 서버 등에서 사용자가 직접적으로 사용하지 않는 유형의 소프트웨어를 실행할 때 특히 유용하다.

윈도우 서비스 기동(start up)하기

DelphiCon2023IanBarker1-2.png

  • 컴퓨터가 시작될 때 해당 윈도우 서비스가 자동으로 시작되도록 할 수 있다 (기본 설정은 자동 시작이다).
  • 또는 수동으로 시작하도록 지정할 수도 있다.

윈도우 서비스 실행 주체(사용자)

DelphiCon2023IanBarker1-3.png

  • 'service user'라고 하는 '가공된' 사용자가 주체가 된다.
  • 하지만, 주체(사용자)를 직접 지정하여 덮어쓸 수도 있다 (특정 사용자, 네트워크, 로컬 시스템 계정 등).
  • 대체로 서버가 아니라 일반 PC에 설치하는 경우, 로컬 시스템 계정을 사용한다. 그러면,
    • 경고 창 등 PC의 모든 서비스와 상호작용할 수 있도록 할 것인지를 선택할 수 있다.
  • 로컬 시스템 계정이 아닌 다른 계정도 지정할 수 있으므로, 상황에 맞게 지정하면 된다.

RAD 스튜디오를 사용해 윈도우 서비스를 만드는 방법은 간단하다

DelphiCon2023IanBarker1-4.png

  • 메인 메뉴>File>New>Windows>Windows service를 선택한다.
  • 아래 메시지는VCL을 사용할 지를 묻는 것이다. 이 창에서는 "Yes"를 클릭한다 (VCL을 사용할 필요가 있기 때문)
    DelphiCon2023IanBarker1-5.png
  • 그러면 빈 윈도우 서비스가 만들어 진다.
    DelphiCon2023IanBarker1-6.png
  • 위와 같이 기본 골력이 생성된다.
    • 즉, 모든 서비스에 있어야 하는 기본 기능 즉 서비스 시작, 일시 중지, 정지 등이 완성되어 있다.
    • 다만, 기본 기능 외에 다만 실제 서비스 내용은 비어있다.

윈도우 서비스를 위한 중요한 유닛과 TService 클래스

  • 위 그림과 같이 자동 생성된 유닛 안에 있는 TService 클래스를 활용하면 된다.
    • 빈 유닛(폼)이 자동으로 생기는데, 여기에서 Object Inspector 창 안에서 Events 탭을 보면 OnStart, OnStop, OnExecute, OnPause 이벤트가 있다. 
    • 즉, 윈도우 서비스에서 활용할 수 있는 것들이다. 이름에서 알 수 있듯이, 서비스가 시작될 때, 중단될 때, 실행될 때, 일시 정지될 때, 무엇을 할 것인지를 각 알맞은 이벤트 핸들러에 넣으면 된다.

윈도우 서비스를 만들 때 실무 팁

DelphiCon2023IanBarker1-7.png

  • 프로퍼티 중 Name과 DisplayName를 직접 알맞은 이름으로 명시하면 좋다.
    • 그러면, 윈도우 서비스 관리자(Windows Service Manager) 창에서 식별하기 쉽다 (특히 버그 해소 작업 시 필요할 것이다).

윈도우 서비스에 대한 설명 붙이기

윈도우 서비스 관리자 창의 서비스 목록 화면에서 설명(discription)에 해당 서비스에 대한 설명이 표시되도록 할 수 있다.

윈도우 서비스에 설명이 표시되지 않으면, 윈도우 서비스 관리자를 보는 사람들은 해당 서비스가 무엇을 하는 것인지를 전혀 알 수 없다.
그래서 이름만 보고 추측을 하게 되는데, 이 때 서비스 이름이 바이러스 이름 같아 보인다면, 걱정이 되어 해당 서비스를 삭제해 버릴 수도 있을 것이다.

내 윈도우 서비스에 설명을 붙이는 방법은 간단하다.

DelphiCon2023IanBarker1-8.png

  • OnAfterInstall 이벤트의 핸들러에 위 그림과 같이 코드를 넣으면 된다. 레지스트리 키 항목을 추가하는 간단한 코드이다.

윈도우 서비스 설치하기

DelphiCon2023IanBarker1-9.png

  • 윈도우 서비스는 대부분 Administrator 계정으로 설치해야 한다.
    • 권한이 없는 사용자가 설치를 시도하면 아래 그림과 같이 (일반 사용자는 윈도우 서비스를 설치할 수 없다는) 접근 불가 에러가 표시된다.
      DelphiCon2023IanBarker1-10.png
  • 윈도우 서비스를 Administrator 계정으로 설치하려면, Admin용 콘솔 창에서 설치를 진행해야 한다.
    • Admin 계정으로 명령 창을 열려면,
    • 윈도우 메뉴>작업 관리자를 선택>명령창을 선택하면 관리자 계정으로 실행 (Run As Administrator)을 선택할 수 있는 창이 표시된다. 
  • 아래 그림 처럼 관리자 권한으로 콘솔창을 열고, 맨 아랫 줄처럼 입력한다.
    • 실행 파일이름 (위 예에서는, example_windows_service.exe)을 적고 한칸 띄고, /install을 적고 나서 엔터키를 친다.
    • (권한이 있는 사용자라면) 해당 윈도우 서비스가 설치된다. 해당 Admin의 비밀번호 입력이 필요할 수도 있다. 
  • 성공적으로 설치되면 표시되는 알림
    DelphiCon2023IanBarker1-12.png
  • 설치 스크립트에서 사용되는 옵션
    • /INSTALL
    • /UNINSTALL
    • /SILENT (위 2개와 섞어서 사용)
      • 예를 들어, [ 실행파일명] /INSTALL /SILENT를 실행하면, 설치 중에 많은 대화창이 표시되는 것을 방지할 수 있다.

윈도우 서비스를 수동으로 기동(start) 하기

윈도우 서비스를 설치했다고 해서 실행까지 되는 것은 아니다.
직접 실행하려면, NET START [서비스명]을 입력하고 엔터 키를 친다.

DelphiCon2023IanBarker1-13.png

윈도우 서비스가 작동되고 있는 지 확인하기

DelphiCon2023IanBarker1-14.png

윈도우 서비스 관리자를 열면 해당 서비스의 상태가 Running이라고 표시될 것이다.

윈도우 서비스 동작을 로그에 남기기

문제가 있어서 서비스가 작동하지 않을 때를 대비하려면 로그를 남기도록 해 놓는 것이 좋다. 
사용자와 상호 작용하는 일반적인 앱이 아니기 때문에, 서비스가 어떻게 하고 있는 지를 알기가 힘들기 때문이다. 

또는

  • TService.LogMessageMethod를 사용하여 윈도우 이벤트 로그에 남도록 송출할 수 있다.
    • 이벤트 로그를 남길 때, 이벤트 로그의 구분 항목 (에러인지 정보인지 등)에 알맞게 내용을 담아서 기록할 수 있다.
    • 윈도우 이벤트 로그에 대해서 잘 모른다면 이번 기회에 알아두는 것도 좋다.

또는 

  • OutputDebugString 을 사용하여 디버그 콘솔 (Debug Console)에 출력할 수도 있다.
    DelphiCon2023IanBarker1-15.png
    • 위 그림과 같이 파라미터에 문자열을 적어주면 디버그 콘솔에 출력된다.
    • 실행되고 있는 일반적인 앱에서는 RAD 스튜디오 IDE 안에서 'Events' 탭을 열면 출력되는 내용을 볼 수 있다.
    • IDE를 닫았다면 그리고, 다른 디버그 콘솔 앱을 연다면 OutputDebugString은 그곳에 기록한다.
    • 고객의 컴퓨터 안에 RAD 스튜디오의 로깅 앱을 설치할 수는 없을 것이다. 그래도 OutputDebugString을 통해 기록되는 내용을 볼 수 있는 방법이 있다.
      • 추천할만 한 도구는 마이크로소프트가 소유한 SysInternals에서 제공하는 DebugView이다.
        • 훌륭한 앱이다. 여기에서는 모든 곳에서 나오는 모든 디버그 콘솔 아웃풋을 볼 수 있다. 
        • https://learn.microsoft.com/en-us/sysinternals/downloads/debugview
        • 예를 들면 아래 그림과 같이 어떤 개발자가 만든 프로그램에서 invalid parameter를 전달하려고 하려는 에러가 몇차례 발생했음을 알 수 있다.
          DelphiCon2023IanBarker1-16.png
        • 또한 빨간색 상자 안을 보면, 우리가 앞에서 OutputDebugString 사용하여 남긴 문자열이 표시되고 있다.

RAD 스튜디오로는 원하는 거의 모든 것을 할 수 있다.

  • 라즈베리파이에서 작동하는 앱을 만들 수도 있다.
  • 매우 값싼 아마존 파이어 태블릿에서 작동하는 앱을 만들 수 있다. 그저 RAD 스튜디오에서 안드로이드 앱을 만들면 된다.
  • 윈도우, 맥OS(인텔, ARM 둘다), iOS, 안드로이드, 뿐만 아니라 웹용 앱까지도 단일 프로젝트와 코드 베이스에서 만들 수 있다.
  • 운영체제 전체가 업그레이드 된 이후에도 여러분이 만든 앱이 여전히 작동하기를 원하는가?
    • 새로 다운로드 하거나 재구성을 할 필요없이도 실행되는 것은 델파이로 만든 프로그램에서는 매우 전형적이며, 델파이 만 가진 독특한 점이다.
    • 이렇게 할 수 있는 개발 환경은 거의 없다. 다른 개발환경에서는 대부분 런타임과 지원 라이브러리를 업데이트해야 하지만, RAD 스튜디오와 델파이에서는 그럴 필요가 없다.
    • 내가 델파이를 선택하는 이유이기도 하다.

<< DelphiCon 2023 목록으로 이동


View full 엠바카데로 기술자료

이 댓글 링크
다른 사이트에 공유하기

이 토의에 참여하세요

지금 바로 의견을 남길 수 있습니다. 그리고 나서 가입해도 됩니다. 이미 회원이라면, 지금 로그인하고 본인 계정으로 의견을 남기세요.

Guest
이 토픽(기고/질문)에 답하기

×   서식있는 텍스트로 붙여넣기.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   이전에 작성한 콘텐츠가 복원되었습니다..   편집창 비우기

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

중요한 정보

이용약관 개인정보보호정책 이용규칙 이 사이트가 더 잘 작동하기 위해 방문자의 컴퓨터에 쿠키가 배치됩니다. 쿠키 설정 변경에서 원하는 설정을 할 수 있습니다. 변경하지 않으면 쿠키를 허용하는 것으로 이해합니다.