기본 콘텐츠로 건너뛰기

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/

giip KVS에 UiPath에서 던질 때의 주의 점.

xls2kvs를 이용해서 giip KVS에 데이터를 던지는데 이슈가 발생했다. git :  https://github.com/LowyShin/lwrpa-uip-giipxls2kvs 참고로 xls2kvs는 Excel파일의 시트 내용을 읽어서 giip KVS로 던지는 툴이다. 이걸 이용해서 주기적으로 던지면 giip에서는 history로서 저장이 되고 서버 상세에서 바로 테이블 형태로 볼 수 있기 때문에 아주 편리하다. (Oracle의 테이블 스페이스에서 용량이 얼마 안남은 순서대로 표시하게 한 KVS의 예) 게다가 KVS API를 이용해서 데이터를 특정 지어 조건에 따른 다른 업무(Tablespace의 확장 쿼리를 날리기 라던가)를 Trigger에 걸어놓을 수가 있다. 문제는.. UiPath에서 xlsx처리가 편리해서 만들고 있는데, API를 호출하려 하니 Azure의 App Service 환경(Serverless) 에서는 UiPath의 Web.HttpRequest 요청이 정상 요청이 아니라고 에러를 반환한다. Python때처럼 Add Header를 이용해서 다른 브라우저인 척도 넣을 수 있는데, UiPath의 잇점을 살려서 그냥 브라우저를 열고 URL을 입력하는 방법으로 시도했다. 그랬더니, 이번에는 URL부분에 넣은 데이터의 따옴표["]가 사라진 것이다! 때문에 KVS에서는 필드명을 정상 인식 못하고 빈 테이블로 표시... 실제로 던지기 전의 URL을 Log activity를 이용해서 로깅해 봤더니 URL에는 정상적으로 따옴표가 보였으나, 크롬 브라우저의 주소창에 넣는 순간 자동으로 사라진 것이다. 브라우저에서 따옴표 강제 삭제 기능이 있었다니.. 그래서 URLEncode를 할까 고민을 했는데.. UiPath에서 URLEncode VBScript를 넣으면 해결 될 것이나, 이번에는 따옴표를 %22로 리플레이스 해서 처리.. 깔끔하게 코드를 짠다면 URLEncode로 해서 브라우저로 던지...

DBMS 튜닝(tuning)시 유의 점

DBMS의 튜닝의 70% 이상은 SQL튜닝과 Index튜닝으로 해결 됩니다. 하지만 예외적인게 조금 있지요. 얼마 전에 옆에서 이상하게 속도가 느려진 쿼리가 있어서 봐달라고 쿼리를 보여주었습니다. 힌트를 주어 강제로 인덱스를 태우고 있었습니다. 이 힌트는 왜 주었냐고 물어보니 원래 그렇게 되어 있어서 사용중이었다고 합니다. 아마 초기에 만든 사람이 사라지고 그냥 그 동안 문제 없이 쓰고 있었던 것 같네요. 그냥 잘 모르면 힌트를 없애고 돌려보세요. 라고 가이드를 했더니 3초 이상 걸렸던 쿼리가 0.01초로 끝났습니다. 이유는 뭘까요? 대부분의 인덱스는 초기 개발자가 개발하면서 만든 인덱스 외에는 나중에 추가 되는 경우가 많지 않습니다. 대부분 한 번 만들면 그게 최적이라고 생각하는 경우가 대 부분이고, 지금 처럼 초기에 만든 사람들이 사라지고 물려받은 사람들은 이유를 모르고 사용하는 경우도 있습니다. 테이블 설계시의 예상 데이터 축적량을 보고 아무리 DB 전문가가 Index를 걸어준들 사용자의 성향이나 시대에 따라 데이터는 전혀 달리 쌓이게 되는게 보통입니다. 예를 들어, 한국형 게시판은 대 부분 글이 많고 댓글이 적은 편입니다. 이유는 튀기 좋아하는 한국인들은 자기가 돋보여야 하기 때문에 댓글에 달 글 조차도 글쓰기로 올라와서 많은 사람들이 보게 하길 원하는 경우가 많기 때문이지요. 하지만 이 게시판으로 일본에서 서비스를 해보면 글은 얼마 안올라오는데 댓글이 수천에서 수만개가 쌓입니다. 즉 유저의 성향에 따른 데이터의 편중이 달라지는데, 이 때 게시글 옆에 댓글을 카운트 하는 경우 subquery를 이용해서 카운트 하는 경우도 많고, group by 를 이용해서 한 번 카운트 한 댓글 통계를 join하는 경우도 있습니다. 전자의 경우는 댓글 수가 적은 한국에서는 좋은 쿼리이나, 댓글이 너무 많아진 일본에서는 group by에 비해 많은 양의 카운트를 nested loop로 처리하게 되므로 효율이 많이 떨어집니다. ...

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/

스테이징, 본 서버와 소스 관리를 일원 화! Azure + Github !

1999년도 부터 서버쪽 일을 계속 하면서 느꼈는데, github등의 공동 작업 서비스들이 발전하면서 엄청난 진화를 했는데, 현재까지도 기존의 방식을 사용하고 있는 기업이 너무 많습니다. 게다가 클라우드면 다되는줄 알고 전부 클라우드에 올렸다가 막대한 비용을 내고 있는 기업들도 있지요.. 규모에 따라 여러가지 어렌지는 필요하지만, 제가 사용하는 방법을 공개합니다. 1. Github계정을 생성, 소스 마스터는 유료 계정으로 설정(월 $7). * 소스 마스터가 유료이면 Contributor를 무제한으로 늘릴 수 있으나 무료 계정이면 2 명까지 밖에 못늘림(언젠가 부터 바뀐 정책). 게다가 워크 그룹이나 오거나이저를 생성하면 계정당 비용을 내야 함. 2. Azure에서 F1(Free) 티어로 App Service등록 * giipasp : 서비스용 App service * giipaspstg01 : 스테이징 1 * giipaspdev01 : 개발 1 3. DB서버 역시 클라우드로 만들어도 되고, 자체 서버에 DB를 설치해도 됨. 이번엔 Azure의 sql cloud 를 사용함. * giipdb DB생성. (10DAU로 설정하면 고정 SQL라이선스를 내지 않아도 됨) * 참고로 S1등의 스탠다드 DB로 만들면 사용을 안해도 1서버당 25만원 정도의 라이선스 비용이 별도로 과금 됨. (처음에 몰랐다가 지불을.....) 4. Github에서 Repository를 Dev, Real 두 개를 생성 * Real은 위의 유료 계정이 아닌 다른 관리 계정으로 만듬.   유료 계정은 개발 및 기타 여러가지 Repository를 잔뜩 만들기 때문에 나중에 deploy관리시 아주 많이 어려움. Deploy는 Contributor가 필요 없으니 차라리 새로 생성해서 Deploy전용 repository만 관리. * Dev : https://github.com/LowyShin/giipasp.git * Stg : https://github....

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