Jump to content
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr ×
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr
  • [DelphiCon 요약] 델파이콘 2023 - 요점 보기: 윈도우 서비스의 장점


    Kori

    << 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 목록으로 이동


    User Feedback

    Recommended Comments

    There are no comments to display.


×
×
  • Create New...

중요한 정보

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