
기준: UiPath Studio 최신 문서 기준. Studio 2024.10 이후에는 Modern Design Experience가 기본/유일한 디자인 경험이며, Classic 액티비티는 Activities 패널의 Classic 카테고리/필터에서 계속 사용할 수 있다. 따라서 신규 개발은 Modern 기준으로 잡고, 기존 소스 유지보수나 특정 레거시 기능이 필요할 때 Classic을 병행하는 방식이 현실적이다.
액티비티 이름과 속성은 Studio 버전, 프로젝트 타입, 패키지 버전에 따라 조금씩 달라질 수 있다.
| 상황 | 권장 방식 | 설명 |
|---|---|---|
| 신규 UI 자동화 | Modern UI Automation | Use Application/Browser 중심으로 구성. Modern UI Automation은 strict selector, fuzzy selector, Computer Vision, image, native text 등을 조합해 UI 요소를 식별한다. |
| 기존 Classic 프로젝트 유지보수 | Classic UI Automation | 기존 Open Browser, Attach Browser, Element Exists 기반 로직 유지 시 사용. |
| 신규 Excel 자동화 | Modern Excel | Excel Process Scope → Use Excel File 구조 권장. Excel 프로세스 관리와 파일 범위를 명확히 분리하기 좋다. |
| Excel 미설치 환경에서 단순 파일 읽기/쓰기 | Workbook Activities | Workbook 액티비티는 Microsoft Excel이 설치되어 있지 않아도 실행 가능하며, 파일 기반 읽기/쓰기에 적합하다. |
| Orchestrator 자산/자격증명 사용 | Get Asset / Get Credential | 계정, URL, 환경값 등은 코드에 하드코딩하지 않고 Orchestrator 자산으로 관리한다. |
Modern UI 자동화는 보통 Use Application/Browser 안에 필요한 액티비티를 배치하는 방식으로 구성한다. Use Application/Browser는 대상 앱 또는 웹 페이지를 지정하고, 실행 시 앱이 열려 있지 않으면 열 수 있는 컨테이너 역할을 한다.
| 액티비티 | 용도 | 실무 메모 |
|---|---|---|
Use Application/Browser | 앱/브라우저 자동화 범위 지정 | Modern UI 자동화의 기본 컨테이너. 신규 웹/앱 자동화는 보통 여기서 시작. |
Click | 버튼, 링크, 메뉴 클릭 | 지정한 UI 요소를 클릭한다. 더블클릭, 마우스 버튼, 키 조합 설정 가능. |
Type Into | 텍스트 입력 | 일반 입력, 특수키 입력에 사용. Enter, Tab 같은 키 입력이 필요하면 Set Text보다 적합하다. Modern Type Into는 특수키 입력도 지원한다. |
Set Text | 텍스트를 한 번에 설정 | 긴 문자열을 빠르게 넣을 때 유리. 단, Enter 같은 추가 키 동작은 별도 액티비티가 필요할 수 있다. |
Keyboard Shortcuts | 단축키 입력 | Ctrl + A, Ctrl + C, Enter, Tab 등 키보드 조작용. |
Get Text | UI 요소의 텍스트 추출 | 화면 텍스트를 변수로 받을 때 사용. Use Application/Browser 내부에서 사용하는 것이 기본 구조. |
Get Attribute | UI 요소 속성 조회 | aaname, text, idx, href, class 등 속성 확인용. 동적 화면 판단에 유용. |
Check App State | 요소 표시/미표시 상태 확인 | Modern에서 Element Exists 대체 용도로 많이 사용. 요소가 나타나거나 사라지는지 확인하고, 발견/미발견 분기를 둘 수 있다. |
Check Element | 요소 활성/비활성 확인 | 버튼이 클릭 가능한 상태인지, 입력창이 비활성인지 판단할 때 사용. |
Navigate Browser | 브라우저 뒤로/앞으로/새로고침 등 | Modern 브라우저 기본 이동용. Use Application/Browser 안에서 사용한다. |
Go to URL | 특정 URL 이동 | 기존 Classic의 Navigate To와 유사한 용도로 사용. |
Extract Table Data | 웹/앱 테이블 추출 | 화면의 반복 구조 데이터를 DataTable로 추출할 때 사용. |
Find Elements | 조건에 맞는 여러 UI 요소 찾기 | 검색 결과 목록, 반복되는 버튼, 테이블 행 등 여러 요소를 다룰 때 사용. |
For Each UI Element | 여러 UI 요소 반복 처리 | Find Elements와 함께 자주 사용. 검색 결과 행을 하나씩 클릭하거나 텍스트를 추출할 때 적합. |
Hover | 마우스 오버 | 메뉴가 hover 상태에서만 표시되는 경우 사용. |
Select Item | 콤보박스/드롭다운 선택 | HTML select, 데스크톱 콤보박스 선택에 사용. |
Take Screenshot | 화면 캡처 | 오류 발생 시 증적 이미지 저장, 디버깅용으로 사용. |
Wait Attribute | 특정 속성값이 될 때까지 대기 | 버튼 활성화, 상태값 변경 등 화면 로딩 완료 판단에 사용. |
Wait Element Vanish | 요소가 사라질 때까지 대기 | 로딩바, 팝업, 알림창 사라짐 대기용. |
' 요소가 있으면 처리, 없으면 예외
If blnExists Then
' 처리
Else
Throw New BusinessRuleException("필수 버튼을 찾을 수 없습니다.")
End If
Modern에서는 단순 대기보다 Check App State, Wait Attribute, Wait Element Vanish처럼 상태 기반 대기를 우선 고려하는 것이 좋다. 고정 Delay만 사용하는 방식은 화면 속도 차이에 취약하다.
Classic UI 자동화는 기존 프로젝트 유지보수에서 여전히 많이 만난다. 최신 Studio에서도 Classic 액티비티는 사용할 수 있지만, 신규 개발에서는 Modern을 기본으로 잡는 편이 낫다.
| 액티비티 | 용도 | 실무 메모 |
|---|---|---|
Open Browser | 브라우저 열기 | 지정 URL을 브라우저로 열고 내부에 액티비티를 배치하는 컨테이너. |
Attach Browser | 이미 열린 브라우저에 연결 | 로그인 후 열려 있는 창, 기존 세션 재사용 시 사용. |
Navigate To | URL 이동 | Classic 브라우저 자동화에서 URL 변경 시 사용. |
Click | 요소 클릭 | Classic에서는 입력 방식, Simulate, SendWindowMessages, Hardware Events 차이를 확인해야 한다. |
Type Into | 텍스트 입력 | 한 글자씩 입력하는 방식에 가까워 대량 입력 시 느릴 수 있다. 특수키 입력 가능. |
Set Text | 텍스트 속성에 값 설정 | 입력 속도가 빠르지만, 모든 UI에서 안정적으로 동작하지는 않는다. |
Element Exists | 요소 존재 여부 확인 | Boolean 결과로 요소 존재 여부 판단. 보이지 않는 요소도 존재 여부 확인 대상이 될 수 있다. |
Find Element | 요소가 나타날 때까지 대기 후 반환 | UIElement 변수를 받아 재사용할 때 사용. |
Find Children | 하위 UI 요소 목록 조회 | 테이블, 목록, 반복 영역의 자식 요소를 가져올 때 사용. |
Get Text / Get Full Text | 텍스트 추출 | 일반 텍스트 추출. 화면 구조에 따라 결과 차이가 있을 수 있다. |
Text Exists | 특정 텍스트 존재 여부 확인 | 특정 문구가 화면에 있는지 판단. |
Click Text | 텍스트 위치 클릭 | Selector가 불안정하지만 텍스트가 명확할 때 보조적으로 사용. |
Wait Element Appear | 요소가 나타날 때까지 대기 | 로딩 후 특정 버튼/영역이 나타나는지 확인. |
Wait Element Vanish | 요소가 사라질 때까지 대기 | 로딩창, 팝업 제거 대기. |
Set Focus | 요소에 포커스 이동 | 입력 전 포커스가 필요한 화면에서 사용. |
Send Hotkey | 키보드 단축키 입력 | Ctrl+A, Ctrl+C, Alt+F4, Enter 등. |
Take Screenshot | 화면 캡처 | 오류 증적, 로그 첨부용. |
Element Exists는 Boolean 판단용으로 좋지만, 화면이 늦게 뜨는 경우 Retry Scope 또는 적절한 Timeout을 함께 고려한다.Simulate, SendWindowMessages, 기본 입력 방식의 호환성이 다르므로 대상 프로그램별로 테스트가 필요하다.UiPath Excel Modern은 Excel Process Scope와 Use Excel File을 중심으로 구성한다. Excel Process Scope는 Excel 프로세스 실행/재사용/관리 설정을 담당하고, Use Excel File은 자동화에서 사용할 Excel 파일 범위를 지정한다.
| 액티비티 | 용도 | 실무 메모 |
|---|---|---|
Excel Process Scope | Excel 프로세스 관리 | 기존 Excel 프로세스 처리 방식, 새 프로세스 실행 방식 등을 제어할 때 사용. |
Use Excel File | Excel 파일 사용 범위 지정 | 내부에 Read/Write/For Each Excel Row 등을 배치한다. |
Read Range | 범위 읽기 | 지정 범위를 DataTable로 읽는다. 범위를 비우면 전체 사용 범위를 읽는 식으로 동작할 수 있다. |
Write DataTable to Excel | DataTable을 Excel에 쓰기 | DataTable 결과를 시트에 출력할 때 사용. 대량 데이터 출력의 기본 선택지. |
Append Range | 기존 데이터 아래에 추가 | 결과 누적, 로그 누적, 보고서 누적에 사용. |
For Each Excel Row | Excel 행 반복 | Excel 범위를 행 단위로 처리. 빈 행 처리 옵션을 확인해야 한다. |
Read Cell Value | 단일 셀 읽기 | 설정값, 기준일자, 단일 결과값 읽기. |
Write Cell | 단일 셀 쓰기 | 상태값, 결과 메시지, 개별 필드 입력. |
Copy/Paste Range | 범위 복사/붙여넣기 | 양식 기반 보고서 작성 시 사용. |
Format As Table | 범위를 표로 변환 | 필터/표 스타일 적용 시 사용. |
Autofit Range | 열/행 너비 자동 맞춤 | 결과 파일 가독성 개선용. |
Find First/Last Data Row | 첫/마지막 데이터 행 찾기 | 동적 범위 계산에 사용. |
Save Excel File / Save Workbook | 변경사항 저장 | 파일 저장 시점 명확화. |
Excel Process Scope
└─ Use Excel File
├─ Read Range
├─ For Each Excel Row
├─ Write DataTable to Excel
└─ Save Excel File
Classic Excel은 Excel Application Scope 안에 Excel 액티비티를 넣는 구조가 기본이다. Excel Application Scope는 Microsoft Excel이 설치된 환경에서만 사용할 수 있다.
| 구분 | 액티비티 | 용도 | 실무 메모 |
|---|---|---|---|
| Classic Excel | Excel Application Scope | Excel 파일 열기 및 작업 범위 지정 | 기존 프로젝트에서 가장 흔한 구조. |
| Classic Excel | Read Range | 범위 읽기 | DataTable로 읽어 후처리. |
| Classic Excel | Write Range | DataTable 쓰기 | 지정 셀부터 DataTable 출력. 숨겨진 행/열이 있는 범위에 쓰면 오류가 날 수 있다. |
| Classic Excel | Append Range | 기존 데이터 아래 추가 | 로그/결과 누적. |
| Classic Excel | Read Cell / Write Cell | 단일 셀 읽기/쓰기 | 설정값, 상태값 처리. |
| Classic Excel | Filter Table | Excel 테이블 필터 | 표 형식 데이터 필터링. |
| Classic Excel | Sort Table | Excel 테이블 정렬 | 보고서 정렬. |
| Classic Excel | Execute Macro / Invoke VBA | 매크로/VBA 실행 | 기존 Excel 양식 자동화 시 사용. |
| Classic Excel | Save Workbook | 저장 | 명시적 저장이 필요한 경우 사용. |
| Workbook | Read Range Workbook | Excel 미설치 환경에서 범위 읽기 | 파일 기반으로 범위를 읽어 DataTable로 반환. |
| Workbook | Write Range Workbook | Excel 미설치 환경에서 범위 쓰기 | 단순 파일 쓰기용. |
| Workbook | Append Range Workbook | Excel 미설치 환경에서 데이터 추가 | 대량·복잡 서식보다는 단순 데이터 누적에 적합. |
| 액티비티 | 용도 | 실무 메모 |
|---|---|---|
Build Data Table | 빈 DataTable 구조 생성 | 컬럼 구조를 직접 정의할 때 사용. |
Filter Data Table | 행/열 필터링 | 입력 DataTable과 출력 DataTable을 같은 변수로 지정하면 원본이 덮어써진다. |
For Each Row in Data Table | DataTable 행 반복 | 각 행마다 처리. 이 액티비티는 child activity에서 persistence를 지원하지 않는 제한이 있다. |
Get Row Item | 현재 Row의 특정 컬럼값 가져오기 | row("컬럼명").ToString으로 대체 가능한 경우도 많다. |
Add Data Row | 행 추가 | 결과 DataTable에 처리 결과를 쌓을 때 사용. |
Remove Duplicate Rows | 중복 행 제거 | DataTable 기준 중복 제거. |
Merge Data Table | DataTable 병합 | Source를 Destination에 병합. 스키마 차이 처리 옵션 확인 필요. |
Join Data Tables | 두 DataTable 조인 | 키 컬럼 기준으로 Inner/Left/Full Join 처리. |
Output Data Table | DataTable을 문자열로 변환 | 디버깅, 로그 출력용. CSV 형식 문자열로 변환한다. |
Generate Data Table From Text | 텍스트를 DataTable로 변환 | CSV성 텍스트, 구분자 기반 데이터 변환에 사용. |
Clear Data Table | DataTable 내용 삭제 | 구조는 유지하고 행만 비울 때 사용. |
| 액티비티 | 용도 | 실무 메모 |
|---|---|---|
Assign / Set Variable Value | 변수 값 지정 | 단일 변수 대입. |
Multiple Assign | 여러 변수 한 번에 지정 | 초기화 구간에서 Assign을 여러 개 늘어놓는 대신 사용하기 좋다. |
If | 조건 분기 | 단순 조건 분기. 중첩이 깊어지면 guard clause 방식으로 If → Throw를 앞단에 빼는 편이 가독성이 좋다. |
Else If | 다중 조건 분기 | 여러 조건을 순차 평가할 때 사용. |
Switch | 값 기준 다중 분기 | 상태값, 코드값, 타입값 분기에 적합. |
For Each | Collection 반복 | List, Array, Dictionary 등 반복 처리. |
While | 조건 기반 반복 | 종료 조건이 명확해야 한다. 무한루프 방지 필요. |
Do While | 최소 1회 실행 후 반복 | 최초 실행이 필요한 루프에서 사용. |
Break | 반복 중단 | For Each/While 내부에서 즉시 반복 종료. |
Continue / Skip Current | 현재 반복 건너뛰기 | 현재 건만 스킵하고 다음 반복으로 이동. |
Return | 현재 Workflow 종료 | Invoke된 Workflow에서 더 이상 진행하지 않고 빠져나올 때 사용. |
Try Catch | 예외 처리 | 시스템 예외/업무 예외 구분 처리에 사용. |
Throw | 예외 발생 | 조건 불충족 시 명시적으로 예외를 던질 때 사용. |
Rethrow | 잡은 예외 재발생 | Catch 안에서만 사용 가능. 로깅 후 원래 예외를 상위로 다시 넘길 때 사용. |
Retry Scope | 실패 시 재시도 | 일시적 UI 불안정, 네트워크 지연, 화면 로딩 지연 대응에 사용. |
Delay | 고정 시간 대기 | 최후 수단에 가깝다. 가능하면 상태 기반 대기 사용. |
Invoke Workflow File | 다른 XAML 호출 | 공통 로직 모듈화. In/Out/InOut 인수 관리가 중요하다. |
Invoke Code | VB.NET 코드 실행 | 액티비티로 복잡해지는 로직을 코드로 처리할 때 사용. |
Log Message | 로그 기록 | 운영 로그, 디버깅 로그 남기기. |
Write Line | Output 패널 출력 | 간단한 디버깅용. 운영 로그는 Log Message가 더 적합. |
Message Box | 메시지 창 표시 | 개발/디버깅용. 무인 로봇에서는 사용 주의. |
Kill Process | 프로세스 종료 | Excel/Chrome 등 잔여 프로세스 정리. 대상 범위를 신중히 잡아야 한다. |
| 액티비티 | 용도 | 실무 메모 |
|---|---|---|
Get Asset | Orchestrator Asset 값 조회 | URL, 경로, 설정값 등 환경별 값을 가져올 때 사용. |
Set Asset | Asset 값 업데이트 | 실행 중 상태값 저장 등에 사용 가능. Robot에 Asset 편집 권한이 필요하다. |
Get Credential / Get Orchestrator Credential | 자격증명 조회 | ID/PW를 코드나 Config 파일에 직접 쓰지 않고 Orchestrator에서 가져온다. |
Set Credential | 자격증명 업데이트 | 비밀번호 교체 자동화 등 특수한 경우 사용. |
Get Secret | Secret 조회 | Credential보다 더 일반화된 보안값 관리에 사용. |
Add Queue Item | Queue에 거래 데이터 추가 | Dispatcher 역할 프로세스에서 사용. Robot이 Orchestrator에 연결되어 있어야 한다. |
Get Transaction Item | Queue에서 처리 대상 가져오기 | Performer 역할 프로세스에서 사용. |
Set Transaction Status | Queue 처리 결과 설정 | Success, Business Exception, Application Exception 구분 처리. |
Get Queue Items | Queue 항목 조회 | 상태 확인, 재처리 대상 조회 등에 사용. |
Wait Queue Item | Queue 항목 대기 | Queue가 비어 있으면 새 항목을 기다리는 방식. Get Transaction Item과 동작이 다르다. |
Orchestrator HTTP Request | Orchestrator API 호출 | 기본 액티비티로 어려운 Orchestrator 기능 호출 시 사용. |
UiPath Studio의 표현식은 VB.NET 기반이므로 문자열/리스트/DataTable 처리는 VB.NET과 .NET 메서드를 자주 사용한다.
| 메서드 | 예시 | 설명 |
|---|---|---|
.ToString() | intValue.ToString() | 값을 문자열로 변환. Null 가능성이 있으면 바로 호출하지 말고 사전 체크 필요. |
CStr() | CStr(intValue) | VB 변환 함수. 값을 String으로 변환. |
CInt() | CInt(strValue) | 값을 Integer로 변환. 숫자가 아닌 문자열이면 오류 가능. VB 변환 함수는 Microsoft 문서상 CInt, CStr 등으로 제공된다. |
Integer.TryParse() | Integer.TryParse(strValue, intValue) | 변환 성공/실패를 Boolean으로 반환하므로 운영 로직에서는 CInt보다 안전한 경우가 많다. |
.Replace() | strText.Replace("A", "B") | 문자열 A를 B로 치환. |
.Split() | strText.Split(","c) | 구분자를 기준으로 문자열을 배열로 분리. String.Split은 구분자를 기준으로 부분 문자열 배열을 반환한다. |
.Trim() | strText.Trim() | 앞뒤 공백 제거. |
.StartsWith() | strText.StartsWith("A") | 특정 문자열로 시작하는지 Boolean 반환. |
.EndsWith() | strText.EndsWith(".xlsx") | 특정 문자열로 끝나는지 Boolean 반환. EndWith가 아니라 EndsWith가 정확한 메서드명. |
.Contains() | strText.Contains("검색어") | 특정 문자열 포함 여부 확인. |
.Substring() | strText.Substring(0, 5) | 지정 위치부터 문자열 일부 추출. |
.Length | strText.Length | 문자열 길이. |
.ToUpper() | strText.ToUpper() | 대문자 변환. 비교/정규화 목적이면 ToUpperInvariant()도 고려. |
.ToLower() | strText.ToLower() | 소문자 변환. |
String.IsNullOrWhiteSpace() | String.IsNullOrWhiteSpace(strText) | Null, 빈 문자열, 공백 문자열 여부 판단. |
String.Join() | String.Join(",", arrText) | 배열/List를 구분자로 연결해 문자열 생성. |
Environment.NewLine | strText.Split({Environment.NewLine}, StringSplitOptions.None) | 줄바꿈 기준 처리 시 사용. |
' 콤마 기준 분리 + 앞뒤 공백 제거 + 배열 변환
arrText = strText.Split(","c).Select(Function(x) x.Trim()).ToArray()
' 줄바꿈 기준 분리
arrLines = strText.Split({Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries)
' 숫자 변환 안전 처리
Dim intValue As Integer
If Integer.TryParse(strText, intValue) Then
' 변환 성공
Else
Throw New BusinessRuleException("숫자 형식이 아닙니다.")
End If
LINQ는 VB.NET에서 Collection 데이터를 간결하게 다룰 때 많이 사용한다. Microsoft 문서 기준으로 LINQ는 데이터 소스 종류와 관계없이 일관된 쿼리 기능을 제공한다.
| 메서드 | 예시 | 설명 |
|---|---|---|
.Count | listData.Count | List 항목 수. |
.Add() | listData.Add("A") | List에 항목 추가. |
.Remove() | listData.Remove("A") | 특정 항목 제거. |
.Contains() | listData.Contains("A") | 항목 포함 여부. |
.First() | listData.First() | 첫 번째 항목. 빈 리스트면 오류 가능. |
.FirstOrDefault() | listData.FirstOrDefault() | 첫 번째 항목 또는 기본값. |
.Last() | listData.Last() | 마지막 항목. 빈 리스트면 오류 가능. |
.Where() | listData.Where(Function(x) x.Contains("A")).ToList() | 조건 필터. |
.Select() | listData.Select(Function(x) x.Trim()).ToList() | 각 항목 변환. Select는 지연 실행되므로 실제 배열/List 변환 시 ToArray() 또는 ToList()를 붙이는 경우가 많다. |
.Distinct() | listData.Distinct().ToList() | 중복 제거. 결과 순서 보장은 상황에 따라 기대하지 않는 편이 안전하다. |
.OrderBy() | listData.OrderBy(Function(x) x).ToList() | 오름차순 정렬. |
.OrderByDescending() | listData.OrderByDescending(Function(x) x).ToList() | 내림차순 정렬. |
.SequenceEqual() | listA.SequenceEqual(listB) | 순서와 값이 같은지 비교. |
.ToArray() | listData.ToArray() | List를 Array로 변환. |
.ToList() | arrData.ToList() | Array/IEnumerable을 List로 변환. |
' 순서까지 동일해야 같은 경우
blnSame = listA.SequenceEqual(listB)
' 순서는 상관없고 값 구성이 같은지 비교
blnSame = listA.OrderBy(Function(x) x).SequenceEqual(listB.OrderBy(Function(x) x))
' 중복 제거
listUnique = listData.Distinct().ToList()
| 표현식 | 설명 |
|---|---|
dtData.Rows.Count | DataTable 행 개수 |
dtData.Columns.Count | 컬럼 개수 |
row("컬럼명").ToString() | 현재 행의 특정 컬럼값 문자열 변환 |
row("컬럼명").ToString().Trim() | 컬럼값 앞뒤 공백 제거 |
dtData.Clone() | 구조만 복사하고 행은 없는 빈 DataTable 생성 |
dtData.Copy() | 구조와 데이터 모두 복사 |
dtData.AsEnumerable() | DataTable을 LINQ로 다루기 위한 Enumerable 형태로 변환. 반환된 enumerable은 원본 DataTable에 바인딩된다. |
CopyToDataTable() | LINQ 결과 DataRow들을 DataTable로 복사. |
' Status 컬럼이 OK인 행만 필터
rows = dtData.AsEnumerable().
Where(Function(r) r("Status").ToString().Trim() = "OK")
' 필터 결과를 DataTable로 변환
If rows.Any() Then
dtFiltered = rows.CopyToDataTable()
Else
dtFiltered = dtData.Clone()
End If
strValue = If(IsDBNull(row("컬럼명")), "", row("컬럼명").ToString().Trim())
.NET 정규식은 Regex.Match 또는 Regex.Matches로 패턴에 맞는 텍스트를 찾는다. Match.Groups를 사용하면 괄호로 묶은 캡처 그룹 값을 가져올 수 있다.
| 목적 | 예시 |
|---|---|
| 6자리 숫자 찾기 | System.Text.RegularExpressions.Regex.Match(strText, "\d{6}").Value |
인증번호: 뒤 6자리 숫자 추출 | System.Text.RegularExpressions.Regex.Match(strText, "(?<=인증번호:\s*)\d{6}").Value |
| 그룹으로 추출 | System.Text.RegularExpressions.Regex.Match(strText, "인증번호:\s*(\d{6})").Groups(1).Value |
| 숫자로 시작하는 줄 확인 | System.Text.RegularExpressions.Regex.IsMatch(strLine, "^\d+\s") |
| 이메일 형식 간단 확인 | System.Text.RegularExpressions.Regex.IsMatch(strMail, "^[^@\s]+@[^@\s]+\.[^@\s]+$") |
strCode = System.Text.RegularExpressions.Regex.Match(
strText,
"인증번호:\s*(\d{6})"
).Groups(1).Value
If String.IsNullOrWhiteSpace(strUserId) Then
Throw New BusinessRuleException("사용자 ID가 비어 있습니다.")
End If
If listData Is Nothing OrElse listData.Count = 0 Then
Throw New BusinessRuleException("처리할 데이터가 없습니다.")
End If
If dtData Is Nothing OrElse dtData.Rows.Count = 0 Then
Throw New BusinessRuleException("조회 결과가 없습니다.")
End If
나쁜 예시는 아니지만, 중첩이 깊어지면 유지보수가 어려워진다.
If 조건1 Then
If 조건2 Then
If 조건3 Then
' 실제 처리
End If
End If
End If
검증 실패 시 바로 예외를 던지는 방식이 더 읽기 쉽다.
If Not 조건1 Then
Throw New BusinessRuleException("조건1 불충족")
End If
If Not 조건2 Then
Throw New BusinessRuleException("조건2 불충족")
End If
If Not 조건3 Then
Throw New BusinessRuleException("조건3 불충족")
End If
' 실제 처리
Use Application/Browser
├─ Go to URL
├─ Check App State: 로그인 화면 확인
├─ Type Into: ID 입력
├─ Type Secure Text 또는 Type Into: PW 입력
├─ Click: 로그인 버튼
└─ Check App State: 로그인 성공 여부 확인
Excel Process Scope
└─ Use Excel File
├─ Read Range → dtInput
├─ Filter Data Table → dtFiltered
└─ Write DataTable to Excel → 결과 시트
Dispatcher
└─ Add Queue Item
Performer
├─ Get Transaction Item
├─ Process Transaction
└─ Set Transaction Status
Try
└─ 실제 처리
Catch BusinessRuleException
└─ 업무 예외 로그 / 실패 처리
Catch Exception
└─ 시스템 예외 로그 / 재시도 또는 중단
새 액티비티나 메서드를 추가할 때는 아래 형식으로 계속 누적한다.
## 액티비티명
- 구분: Modern / Classic / Excel / System / Orchestrator
- 용도:
- 자주 쓰는 위치:
- 입력값:
- 출력값:
- 주의사항:
- 예시:
예시:
## Check App State
- 구분: Modern UI Automation
- 용도: 특정 UI 요소가 나타나거나 사라지는지 확인
- 자주 쓰는 위치: 로그인 성공 확인, 로딩 완료 확인, 팝업 존재 확인
- 입력값: Target Element
- 출력/분기: Target appears / Target does not appear
- 주의사항: 단순 Delay보다 안정적이지만, Target 지정이 부정확하면 오탐 가능
- 예시: 로그인 버튼 클릭 후 메인 화면의 특정 메뉴가 나타나는지 확인