1. Throw가 된 후 변수 유지

기존에 Exception이 나면 정보가 저장되지 않고 빠져나간다고 알고 있었다.

가령 io_dtData라는 datatable 변수에 가공이 있었는데 Exception이 나는 경우,

in 했을 때의 상태가 유지되는 것으로 알았는데 최근 테스트를 해보니 가공된 채로 전달이 됨을 확인했다.(2022-06)

 

2. For Each + Try Catch에서 Break

Try Catch와 For each를 겹쳐놓고 Try 중간에 Break가 되어도 Finally는 수행함

 For each

  Try

      Try Sequence

      Break

  Catch

       Exception Sequence

  Finally

        Finally Sequence (Break가 돼도 수행함)

End For each

 

3. Try Catch 안에 Try Catch

Try Catch 안에 Try Catch를 쓰고 그 안쪽에서 Throw가 되면

Try(2) Sequence (Throw) => Catch(2) Exception Sequence => Finally(2) => Try(1) Sequence => Finally(1)[각주:1] 순으로 수행

(원리를 알면 자연스러운 전개다)

Try

  Try

    Throw

  Catch

  Finally

Catch

Finally

  1. 괄호 안에 있는 숫자는 depth를 의미 [본문으로]

최근 Browser Migration을 할 일이 잦다.

Conversion Tool로 초반 작업을 하고난 이후에

download 부분이나 alert 관련 부분이 남는데, 그러면서 메세지 타입을 갈무리 해봤다

 

1. alert, confirm

 - 보통 대부분의 IE와 Chrome 웹 페이지 메시지는 이렇게 뜬다.

 - IE에서 ctrlId = 65535

 - Type1은 Browser Console창에서 Alert("메세지")로 띄울 수 있고, Type2는 업로드나 다운로드 위치 같은 걸 틀려보자.

 - Type1(IE는 Win32 라이브러리 느낌으로 뜨고, Chrome은 크롬 위젯 Alert로 뜸)

   <IE의 Alert> : 정보가 부족해 보이지만 잘 가져온다.

<wnd app='iexplore.exe' cls='#32770' />
<wnd ctrlid='65535' aaname='*' />

 

  <Chrome의 Alert> : 굉장히 지저분해 보이지만 role을 Text로 잡으면 빈값을 가져오거나 한줄만 가져온다.

<wnd app='chrome.exe' cls='Chrome_WidgetWin_1' />
<ctrl name='*내용:' role='dialog' />
<ctrl role='pane' idx='1' />
<ctrl role='pane' idx='1' />
<ctrl role='pane' idx='1' />
<ctrl role='pane' idx='1' />
<ctrl role='pane' idx='1' />
<ctrl role='pane' idx='1' />
<ctrl role='pane' idx='1' />
<ctrl role='pane' />

* 테스트 해보니 이렇게 하면 인식 자체가 안 되는 케이스도 존재했다.

<wnd app='chrome.exe' cls='Chrome_WidgetWin_1' title='*Chrome' />
<ctrl name='*내용:' role='dialog' />
<ctrl role='text' />

=> 안 될 때는 이 방법으로도 시도


- Type2(IE와 크롬 모두 Win32 라이브러리 느낌으로 뜸)

  <IE, Chrome 공통> : 보통 파일 업로드, 다운로드 등에서 에러났을 때 cls가 DirectUIHWND로 뜨는 타입이다. 

<wnd app='*.exe' cls='#32770' title='*' />
<wnd aaname='*' cls='DirectUIHWND' />
<ctrl name='*' role='pane' />
<ctrl name='*' role='text' />

2. prompt

 - 자주 쓰이진 않지만 prompt를 잡아야 하는 경우도 있다.

 - 여기서도 IE, Chrome은 각자 다른 라이브러리를 쓰는 것으로 보인다.

  <IE의 경우> : ctrlid가 확실하게 나뉜다.

<wnd app='iexplore.exe' cls='#32770' title='*' />
<wnd ctrlid='8132' /> [텍스트]
<wnd app='iexplore.exe' cls='#32770' title='*' />
<wnd ctrlid='8133' /> [입력창]

  <Chrome의 경우> : 텍스트를 얻으려면 이것의 Name 속성을 가져와야 한다. 입력칸은 바로 Type Into하면 된다.

<wnd app='chrome.exe' cls='Chrome_WidgetWin_1'/>
<ctrl role='dialog' />
<ctrl role='editable text' />

 

이외 확인, 취소 버튼도 비슷하게 잡아주면 된다. [버튼이라 더 잘 구분되기 때문에 이보다 잡기 쉽다.]

** title 속성은 취향인 거 같다. 보통 넣지 않아도 잡힌다.

주의점

URL에 띄어쓰기가 있는 경우 크롬에서는 새로운 파라미터로 인식하게 되어 탭을 새로 띄우는 식으로 동작할 수 있다. URL을 미리 urlencode하여 보내거나 최소 띄어쓰기를 "+"나 "%20"으로는 replace 해줘야 좋다.

Uipath 기준으로는 Uri.EscapeUriString(vURL)

-----------------------------------------------------------------------------------------------------------------------------------------------------------

보통 웹을 오픈할 때는 Open Browser에 해당하는 패키지들이 있다.

이슈는 셀레늄 같은 걸 이용하는 RPA툴에서 일어난다.

이미 하나의 브라우저 세션을 점유하고 있는 상태에서 새로운 브라우저를 띄우려고 할 때,

세션을 새롭게 잡아야 되는 케이스가 많다.

그래서 open browser로 열고 그 주소창에 Type into나 Set Text를 하는 경우가 있는데

그냥 "브라우저 실행 경로(.exe까지)" "웹사이트 주소" 형태로 주소를 한 칸 띄어쓰기로 파라미터를 주면 된다.

[Uipath는 셀레니움으로 작동하지 않기 때문에 이런 경우가 거의 없을 거고 아마 Brity RPA 같은 툴들이 그렇다.]

 

 

https://stackoverflow.com/questions/61531782/how-to-block-chromium-edge-from-using-ie-mode-on-single-page

 

How To Block Chromium Edge from using IE Mode on single page

I do not have access to change company policy that has enabled IE mode for intranet sites. On on page used by our team, IE cannot be used. Using Edge in IE mode, the page does not work. There is...

stackoverflow.com

※ 기본적으로 엣지 설정에서 IE모드 Enable을 할 수 없는 상태일 때의 팁임  

 

정리하자면,

1. edge://flags 에서 Enable IE Integration을 찾아 Enable

[특정 버전 이상이면 아예 없어진 듯하다. 그냥 설정에서 되게 해놨으니까 없앤 것으로 보임.[각주:1]]

2. 실행경로 뒤에 --ie-mode-test 라는 파라미터를 주어 실행

"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" --ie-mode-test

 

 

++

RPA에서 IE 모드로 바꿔서 기존 소스를 마이그레이션 하려는 분들이 있는데

애초에 서비스 제공자들이 아예 IE를 지원 안 한다는 추세가 심해서 웬만하면 크롬으로 바꿔주자

회사 내부 legacy들 중에 IE로만 되는 것들은 어쩔 수 없지만 ㅠ

  1. flags는 ,크롬도 마찬가지지만, 실험실 컨셉이기 때문에 중간에 사라질 수도 있다. [본문으로]

RPA를 운영할 때, 포탈같은 개념이 있으면 나쁘진 않은데

도입한 곳도 없고 그 기능에 비해 너무 비싸다.

(사실 대부분의 기능이 그냥 Swagger를 옮겨온 식이고 그나마 화면 모니터링이 있는데

그거 하나 쓰자고 포탈을 구입하는 건....)

따라서 모니터링 및 문제상황에 대한 녹화 기능 등이 대부분 필요하다.

그 경우 쓸만한 툴을 소개해 보고자 한다.

 

1. VNC 프로그램

VNC는 가상 네트워크 컴퓨팅으로 쉽게 말해, 원격 접속 및 컨트롤을 할 수 있는 기술이다.

RDP와는 다르게 여러 세션에서 같은 서버에 붙을 수 있다.

각 프로젝트 사이트에서 VNC를 사용한다면 각 Device마다 VNC 서버를 설치해놓으면 된다.

그럼 VNC Viewer를 통해 모든 Device를 한번에 모니터링할 수 있고,

모니터링을 하다 문제가 생기면 개입할 수 있다.

특히나 좋은 것은 RDP 세션의 경우 일단 붙어서 모니터링 하려고 하면 User의 input이 의도치 않게 들어가고

RDP 세션을 종료하면 로그오프가 되는데 VNC는 그런 것들을 사전에 차단하고 모니터링할 수 있다.

필자의 경우 프로젝트에서 RDP는 아예 금지한다.

(그렇지 않으면 RDP로 모니터링하고 나왔다가 그 디바이스 계속 잠겨있어서,

다음날 새벽 스케쥴 혹은 주말스케쥴 다 날려먹는 최악의 사례가 심심찮게 나온다.)

오픈 소스 프로그램으로는 UltraVNC가 있고 나머지 tightVNC, tigerVNC, RealVNC, NQVM 등등 많은데

문제가 없으려면 Ultra로 쓰는 걸 추천. (딱 하나 불편한 거는 input 허용 요청이 토글로 바로 안 됨 ㅠ)

세팅은 RPA용으로는 초기 세팅에서 조금 만져야 하니 차근차근 옵션을 체크해보길 바란다.

** 2022-07-12 보안에 따라 서버를 관리자 권한으로 실행해야만 되는 케이스가 있다. 관리자 권한으로 실행 후 install service - start service 해보고 Viewer로 붙어보자.

UltraVNC Server Setting1

 

UltraVNC Server Setting2
UltraVNC Viewer Setting

 

2. 녹화 프로그램

디버깅이 잘 되게끔 소스를 짰다면, 녹화영상은 대부분 과제의 산출물로서 제작하게 된다.

간간히 영상 디버깅이 필요한 과제의 경우엔 과제 시작 시 녹화,

과제 끝나고 녹화 종료 하는 형태로 모듈을 하나 심어놓고 실행하게끔 하자.

(간단하게는 녹화 시작, 녹화 종료에 해당하는 hotkey를 누르는 것으로도 된다.)

보통 Ocam을 너무 좋아하는데 Ocam은 광고도 많고 창에 Attach 할 수도 없어서 녹화중엔 다른 짓을 못 한다.

따라서 ShareX나 OBS 같은 걸 깔아서 창, 프로그램에 Attach해서 녹화하는 걸 추천한다.

 

 

 

1편에 이어 2편이 굉장히 늦었다.

이번 글에서는 'RPA회사는 정확히 어떤 서비스를 파는가'와 '그런 서비스를 제대로 팔기 위해 필요한 것'을 쓰고자 한다.

 

일단 현재 대부분의 국내 SI업체들이 제안하는 계약형태는 이렇다.

과제 개수 N개 => 개발자 투입 M명 * L개월 (보통 1명이 한달에 2~4개 정도 개발한다고 생각하고 러프하게 함)

+ 라이선스 비용(중개비 포함)

 

개발자는 초급, 중급, 고급 기준으로 하는데 중*고급은 사실상 찾기 어렵고

초급 기준으로 500~600 내외로 계산하는 것으로 알고 있다. (2022년 기준)

운영은 그보다 1.5배는 더 비싸다 생각하면 되겠다.

 

계약 형태를 봤을 때, SI업체에서 생각하는 서비스의 방식은

러프한 '과제 개수'만큼의 구축, 안정화를 하고 나오는 것이다.

 

그 과정에서 구체적으로

개발자에게는 과제발굴, 과제컨설팅 및 PI, 과제설계, 과제개발, 과제안정화 및 산출물 작성 등이 요구되며

관리자에게는 개발규칙 및 소스 안정성 관리, 진행사항 리포트 및 요구사항 대응, 산출물 관리, 이슈 관리 등을

기대하게 된다.

 

이런 프로세스를 빠르고 퀄리티 높게 완성시키기 위해서는 하기와 같은 것들이 필요하다.

1) 공통 로깅이 자연스럽게 남고, 비지니스 로직만 넣으면 소스가 완성되는 프레임워크

2) 모듈화된 시스템 접근, 공통 기능

3) 요구사항이 정확하게 작성된 과제 디자인 문서

4) 합리적인 개발규칙 및 산출물 작성 기준

 

여기서 실제 프로젝트에서 생산성을 높이기 위해 가장 중요한 것을 하나 뽑으라면 PDD이다.

일반적으로 대기업이 아니고서는 보통 PDD 작성 및 조율까지 RPA 구축 업체에 맡기는 경우가 많다.

대기업에서도 RPA를 전문으로 하는 컨설턴트를 쓰지 않기 때문에 조율이 많이 필요하다.

이 부분이 중요한 이유는 이 단계에서 추후 개발의 크기가 결정되기 때문이다.

 

원래 제대로된 계약을 한다면 기존에 발굴 과정에서 선정할 때,

요구사항이 명확하고 시스템이 안정적인 걸 선택하거나 어려운 과제에 대해선 더 높은 공수를 부여해야 한다.

지금의 계약형태는 이런 과정을 단순히 비용으로만 치부하고 오버되는 부분을 개발자에게 떠넘기기 좋게 만든다.

게다가 고객사 입장에서도 웬만하면 과제개수를 압축해서 최대한 현업요구를 많이 들어주게 하고 싶다.

[물론 무조건 이런 방향만 있는 건 아니다. RPA 프로젝트를 제대로 관리하는 것도 고객사 담당자의 일이므로]

결과적으론 마치 1000원 받았는데 라면에 음료수, 과자까지 사줘야 되는 상황이 자주 나온다.

SI에 있는 RPA 개발자들이 인간 RPA가 되어있는 웃픈 상황은 근본적으로 여기에서 비롯된다.

 

 

 

---------------------------------------------------

프로젝트 대부분이 계약은 물론 내부에서 필요한 것들을 제대로 갖추지 않고 현장에 뛰어든다.

개발자들은 스튜디오 레벨, 패키지 레벨에서만 허우적대기 쉽고

6개월 이상 있으면 성장은 더뎌지기 쉽다.

그를 상쇄하기 위해선 서로 각자의 시스템, 협의방식에 대한 접근을 정리하고 공유해야 한다.

그래야 너머의 확장성과 아키텍쳐, 거버넌스를 보며 제안을 할 수 있다.

 

+ Recent posts