기본 콘텐츠로 건너뛰기

라벨이 automation인 게시물 표시

한국에서 늘어가는 RPA중 Akabot, UiPath의 부모는 Microsoft(WWF)였다는 사실을 아시는지요?

  UiPath 요즘들어 각광 받고 있는 UiPath는 초기 5000억원이라는 경이적인 투자액을 받아 한 번에 이름을 날리며 RPA 시장에 뛰어들어 기존의 Automation Anywhere, WinAutomation이나 WinActor, Control-M등의 강자들을 누르고 세계 RPA 1위에 등극하였습니다. https://www.youtube.com/watch?v=lgiChrgzzoU 이런 UiPath와 아래의 링크들에 있는 이미지들을 봐주시기 바랍니다. 모두 각 회사의 RPA툴입니다. https://docs.microsoft.com/ja-jp/dotnet/framework/windows-workflow-foundation/state-machine-workflows https://docs.uipath.com/studio/lang-ja/v2018.3/docs/state-machines https://akabot.com/wp-content/uploads/guide/jp/jp_akabot_guideline_studio.pdf 너무 같아서 이상하지 않나요? Microsoft는 자체적으로 RPA를 독점 공급하려던 과거의 개념을 버리고 ecosystem(생태계)를 만드는 방향으로 전환 했습니다.  즉, Platform은 누구나 사용가능하도록 오픈을 하고 그 위에 올라간 마켓 플레이스는 반드시 Microsoft의 Marketplace를 사용하게 하여 거기서 이득을 취하는 구조로 간 것이지요. (이렇게 플랫폼 정책을 바꾼 이유는 제 글 중  https://talklowykr.blogspot.com/2015/03/platform.html  에서 알 수 있습니다.) 때문에 WWF의 특징인 State machine이라는 개념이나 Orchestrator를 기반으로 하는 Studio의 개념, 그리고 파일명인 xaml을 그대로 가져가고 있습니다. 현재 UiPath및 Akabot 개발자들을 서포트해 주고 있는 저역시 UiPath등이 이상한 동작을 취...

Excel의 버그인가? 이미 열린 파일이 null이 되거나 두 개 열면 문제가.. - UiPath RPA

MS의 저주일지도 모르지만,  역시 윈도우에서 발생하는 버그는 상상을 초월한다.  많은 부분을 Exception을 처리해도 알 수 없는 오류가.. 이번에는 Excel을 두 개 열어서 A파일의 S시트를 B파일로 복사해서  데이터를 그 포맷에 Write Range 로 쓰도록 하였다.  A파일의 S시트는 템플릿이 아니고 현재 사용하는 시트이다 보니 데이터가 있다.  그래서 Delete Range를 이용해서 삭제를 하니.. 에러가.. Excel Application Scope를 여러개 열면 뭔가 충돌이 난다.  그래서 이번에는 close workbook을 이용해서 매번 닫도록 해봤다.  그런데도 역시 Delete Range에서 알수없는 오류로 종료... B파일의 Excel Application Scope를 열어서 그 안에서 A파일의 Excel Application Scope를 열고, Copy -> Delete -> Write를 해보았다.  역시 에러.. 이번엔 분기를 해봤다.  Copy하는 경우는 Delete를 하지 않고,  Copy하지 않는 경우는 Delete를 하고..  기존 시트명이 있는 경우만 데이터를 삭제를 하는 방식이다.  이렇게 하니까 Delete Range는 성공 했으나 몇 개 실행하다보니 Excel workbook이 닫히지 않기 시작하면 다음 처리에서 에러가 발생..  두 개이상 workbook이 열리면 Write Range나 Delete Range에서 해당 파일을 찾지 못하는 것 같다.  결국 마지막 부분에 close workbook을 하여 강제로 죽여주니까 성공.. 그냥 놔둬도 닫히지만 안닫힐 때도 있는 경우에 따른 변수가 생겨서 close workbook의 타이밍에 따라서 에러가 나오기도 안나오기도 하네.. 윈도우즈의 버그는 ...  익셉션 처리하는게 코드 짜는 거보다 많은 거 같다.. -------- 추...

필드명 지정없이 For Each로 csv나 xlsx를 json으로 변환 - UiPath

정리는 시간나면 하고.. 일단 생각나는대로 적어둠. VBS에서는 for each를 이용해서 필드명을 가져오는 방법등이 있었지만 이는 원래 Recordset등의 필드명이 지정되었을 경우에만 해당한다.  datatable을 vbs에서 어떻게 for each로 만들지는 아직 연구하지 않았기 때문에 일단 패스, 아마 csv에서 첫 행을 헤더로 읽거나 xlsx에서 첫 행을 header로 읽으면 가능할 듯 하지만,  쉬운 방법으로 일단 기술해 본다.  ## csv의 경우 파일을 header있음으로 우선 datatable에 저장. 그리고 다시 파일을 text읽기로 하여 첫 로우만 변수로 저장. 저장된 변수를 sFields라고하면 aryFields = split(sFields, ",")  로 assign activity에 집어 넣음 물론 aryFields의 속성은 text속성의 array 타입 그리고 각 필드의 전후에 스페이스를 없애기 위해  Trim을 사용해서 스페이스를 없애줌. replace로 먼저 없애고 split을 하는 것도 가능. 그리고 datatable의 for each row 를 이용하여  매 row마다 for each로 aryFields를 호출(for each에서 row를 가져오면 안됨!) jLine = jLine + """" + item.toString + """:""" + row(item).toString + """" 이렇게 하면 필드 개수를 모르더라도 한 라인을 Json타입으로 가져올 수 있음.  물론 좌우는 {}를 적절히 넣어주고, 콤마도 적절히 if를 이용해서 넣을 것.  row(item).toString이 숫자인 경우의 처리는  Microsoft.VisualBasic.Information.IsNumeric 을 이용하여 판단 가능.  VBScript를 선택하였다 하더라도 MS Visual Basic과는 코드가 ...

RPA에게 준 업무로 인해 얼마나 시간을 절약할 수 있는지를 알 수 있습니다! - giip

giip에서는 내가 만든 RPA스크립트로 인해서 얼마나 업무 시간을 줄여 주고 있는지 한 눈에 알 수 있습니다.  한 달 평균 업무 시간은 160시간 전후이지만,  로봇은 여러 대로 무한하게 일을 시킬 수 있기 때문에  내가 로봇들에게 시킨 업무로 인해 800시간을 줄일 수 있었네요!  점점 늘어나는 것을 기대하면서 계속 업무를 자동화 해가고 있습니다. ^^ UiPath를 사용해도 되고 Auto Hot Key를 사용해도 됩니다.  아니면 자신이 직접 만든 스크립트를 사용해도 됩니다.  이 모든 것을 giip에서 통합 관리를 하고, 자신이 만든 자동화가 얼마만큼의 인건비를 줄일 수 있었는지 알 수 있는 지표를 대시보드로 나타냈습니다.  여러분은 얼마나 많은 일을 아직까지 수동으로 하고 계신가요? giip :: Free mixed RPA orchestration tool!  https://giipasp.azurewebsites.net/

UiPath CSV에 데이터가 없는 경우 타이틀 유지하여 txt(tsv)저장

UiPath에서 Read CSV를 이용하면 Datatable에 저장이 된다.  이를 tab으로 분리된 text파일로 저장을 하는데는 몇 가지 방법이 있다.  1. write text 액티비티를 사용하는 경우 write text를 하게 되면, 그냥 텍스트로 저장이 되면서 tsv포맷에 맞지 않게 되고,  내용이 없는 경우 필드명도 표시 되지 않는다.  2. write excel을 이용 write excel 액티비티를 이용하여 저장후 이를 excel application scope를 이용해서 연 다음 다른이름으로 저장을 하여 txt파일로 저장. 번거롭지만 가장 편하게 tsv형태로 저장 가능 3. 하드코딩 첫 행에 필드명을 탭으로 나열 for each datarow를 이용하여 행을 읽은 뒤에 for each item으로 각 필드를 변수에 넣으면서 사이에 tab을 추가,  데이터가 없는 경우 필드명을 for each에 넣으면 데이터가 없기 때문에 패스한다.  때문에 첫 행은 하드코딩을 해야 하는 불편함이 있어 확정된 케이스가 아니라면 사용하기 귀찮다. 이걸 할 바엔 차라리 1번의 write text를 사용하는 것을 추천. Automation human works! giip :: Free mix RPA orchestration service! https://giipasp.azurewebsites.net/

RPA가 보여주는 파워

유난히도 요청이 많았던 날이다. 그래서 한 번 요청 오늘 처리한 데이터 추출작업 파일 수를 세어 보았다. 94건... 일반적인 데이터 추출은 추출 조건 및 내용을 보고 요청자와의 커뮤니케이션, 추출 작업, 추출된 결과의 엑셀 정리 작업까지 하면 평균 25분 걸린다. 하루에 8시간 일한다면 쉬지않고 한시간에 3건 정도, 8시간에 24건 추출 가능하다. 정말로 쉬지 않고 말이다. 실제로 이 업무는 세 명이서 했던 것이고, 우연히 이렇게 몰려오면 날짜를 미루거나 해서 처리하는 것 같았는데, 그냥 하다보니 다 처리를 해버렸다. 상담도 들어주고, 휴식도 하곤 했지만, 요청 내용의 변경만 RPA에 적용 시키는데에도 하루 종일 걸렸다. 하다보니 조금 더 개선해야지 하는 내용도 머릿속에 떠올랐으나, 오늘은 정기 점검도 미룰 수 없고, 다른 요청 작업들도 담당자가 미룰 수 없다고 사정하는 바람에 전부 처리를 해주게 되었다. RPA의 파워가 느껴지는 하루였긴 했지만, 회사에서는 이 속도가 기준이 되어 버리지 않을까 하는 불안함이 생긴다. 나를 나가게 했던 모 회사가 나의 자리를 메우기 위해 5년을 사람을 찾다가 결국 타협하고 5명으로 늘린 실제 상황이 있었기 때문에.. 경영자들이 이런 과오를 또 일으키지 않았으면 한다.  Do not login your machine any more! giip :: Free RPA orchestration tool! https://giipasp.azurewebsites.net/

WIndows Batch파일에서 다른 bat파일을 호출 할 때

배치(Batch)파일에서 다른 bat파일을 호출 할 때 그냥 aaa.bat 처럼 입력해주면 된다. 하지만 call aaa.bat 이란 명령도 있다. aaa.bat은 include된 것 처럼 aaa.bat을 실행하고 그 다음 terminate될 수가 있다. 하지만 call aaa.bat을 하면 그냥 메인 배치 파일에서 aaa.bat을 호출만 한 것이므로 실행 결과는 같지만 terminate되거나 하지 않는다. 물론 둘 다 include는 아니기 떄문에 변수를 공유하거나 하지는 않는다. 가급적 호출한 batch파일의 상황에 좌우되지 않으려면 call을 써주는 것이 영향도가 적어 좋은 것 같다. Do not login your server any more! giip :: Free server management tool! https://giipasp.azurewebsites.net/

UiPath로 ANSI파일 실행.. 결국 포기 - giip RPA

UiPath를 이용한 giipAgentUIP 를 받아서 실행. wsf를 호출하는건 문제가 없는데.. 디렉토리명이 일본어로 되어 있는 wsf를 호출하니 문제가!! wsf를 실행하는 것도 UiPath는 모르는 확장자라고 내뱉어서 우선 wsf파일로 저장후 wsf파일을 실행하는 batch파일을 저장, Start Process Activity를 이용하여 CMD.exe 를 실행하여 batch파일을 실행하도록 함. 이렇게 했으나, 결국 자동으로 UTF-8로 저장된 wsf파일은 열어보면 잘 보이지만 더블클릭하면 일본어가 깨짐. 이걸 ANSI로 저장하여 더블클릭해서 실행하면 정상 실행이 되었다. 그래서 Write Text File Activity에서 Endoding을 "shift_jis"로 저장하였더니 열어보면 ANSI로 되어 있다. 더블클릭하면 정상 실행, 하지만 UiPath상에서는 에러가.. 아직 해볼 법한 내용들은 몇 개 더 있지만, 소스에서 shift_jis를 박을 수 없고, 그렇다고 giipAgent에서 각각 스크립트마다 언어코드를 가져오도록 사양 변경은 쉽지 않은 상태. 기본은 UTF-8통신을 시키고 있다. UTF-8로만 할 수 있도록 모든 것을 맞추는 것이 나중에도 큰 불편함이 없으리라 생각해서 일단 언어 변환은 포기하고 우선 UiPath에서 일본어 디렉토리를 인식하여 처리하는 xaml파일을 만들어 invoke로 호출하는 것으로 대처함. UiPath : https://uipath.com giip로 Orchestrator없는 UiPath 자동화를! RPA를 생각한다면 다양한 툴은 많지만, 툴들의 장단점을 살려 의존을 줄인 giip에서 컨트롤을! Do not login your server any more! giip :: Free server management tool! https://giipasp.azurewebsites.net/

리눅스에서 특정 디렉토리의 일정 기간이 지난 파일을 다른 곳으로 이동 - Linux shell script

리눅스에서 로그성 데이터들이 쌓이는 곳들이 몇 곳이 있다. 그 중에서 일정 기간 지나면 자동으로 지워지지 않는 파일들이 있는데, 이를 매일 들어가서 지우는 것도 일이다. 삭제도 좋고, 데이터를 이동하는 것도 좋은데, 파일을 이동하는 스크립트로 만들어 봤다. mkdir -p /data1/expdata/partitions for   i   in   `find /oracle/expdata/partitions -mtime +4 -type f` ;  do  mv  $i  /data1/expdata/partitions;  done 이렇게 하면 4일이 지난 해당 디렉토리의 파일을 /data1/expdata/partitions 로 이동한다. 이걸 크론에 등록 하면 (crontab -l ; echo "1 0 * * * sh /data1/DBA/LowyWorks/arrange_oldfiles.sh")| crontab - 쉘에서 이걸 실행하면 자동으로 crontab에 등록 된다. 물론 등록 할 때의 로그인 계정으로 등록되니 crontab에 등록할 때 여기저기 계정으로 등록되지 않게 주의해서 등록하기 바란다. 위의 find 는 일반적인 find문을 그대로 쓸 수 있기 때문에 | grep -v .sh 처럼 이동하고 싶지 않은 파일들을 제외할 수도 있지만, 관리를 위해서는 로그성 데이터는 모두 한 곳으로 이동해 놓는 것을 추천한다. 더 많은 정보를 보고 싶다면, https://github.com/LowyShin/KB-KnowledgeBaseHome/wiki/Shell

어디까지 가상화가 발전할까? Docker vs. CHEF

우선 간단히 언급하고 시작하겠습니다. Docker 소개 http://giipwiki.littleworld.net/mspdocs/index.php?title=Docker Docker와 CHEF의 사용자를 위해 저도 공부하면서 정보를 늘려갈 예정입니다. 간단히 말씀드리자면, Docker는 개발자를 위한 Container Virtualization이고, CHEF는 SE를 위한 Automation Tool 이라고 생각하시면 좀 이해가 되실 것입니다. CHEF 소개 http://giipwiki.littleworld.net/mspdocs/index.php?title=CHEF 깊이있는 내용은 조금씩 만들어 가겠지만, 혹시라도 필요한 내용이 있으면 미리 알려주시면 빨리 공유하도록 하겠습니다.

[Linux/Shell] 프로세스 체크

특정 서비스가 자꾸 죽는 것이 발생하여 죽을때 포트가 막히거나 프로세스가 안보이게 되면 그걸 캐치해서 어딘가로 알리는 스크립트를 만들었다. 너무 간단해서 보완할 것은 많지만 급하게 처리해야하므로.. #!/bin/bash # 1433 포트(DB포트)를 확인해서 chkprocess.log 파일에 남김 netstat -antp | grep 1433 >chkprocess.log FILENAME=/root/chkprocess.log #파일이 있고, 파일 내용이 비어있지 않은경우 if [ -s $FILENAME ]; then         echo "ok" else #문제가 있는경우 간단하게 log를 쌓는 웹API를 호출         wget 'http://msp.littleworld.net/agent/aaa.asp?ltype=err&lsvc=lwweb&ltitle=service_process_down' #서비스가 떨어졌다면 특정 서비스 기동을 넣어도 됨         /usr/local/jakarta-tomcat-5.5.9/bin/startup.sh fi