아래의 Aggregate 설정에서 GetOrdersShippingState.List.Current 레코드의 속성은 어떻게 구성되어 있는가?
📋 GetOrdersShippingState
3 Sources
No Filters
No Sorts
Sources
⊞ Order
⊞ OrderStatus
⊞ Priority
Joins & Output
With or Without Order ↔ Priority
Order.Priority = Priority.Id
With or Without Order ↔ OrderStatus
Order.Status = OrderStatus.Id
Output Columns
Group: ShippingStateCount: Id
A
2개의 집계 속성만: ShippingState 및 Count
B
2개의 집계 속성(ShippingState, Count) + Source Entities의 모든 속성
C
Aggregate에 보이는 6개 컬럼에 해당하는 6개 속성
D
2개의 집계 속성(ShippingState, Count) + 집계 계산에 사용된 컬럼들
정답: A
Group By와 Count를 사용하면 Output은 그룹핑된 속성(ShippingState)과 Count 속성만 포함됩니다. Source Entity의 다른 속성은 포함되지 않습니다.
12
아래 Aggregate에서 Orders를 Employees(리뷰어)와 함께 가져온다. Join 타입을 참고하여 올바른 설명을 고르시오.
📋 GetOrdersWithReviewers
With or Without Order ↔ Employee
Order.AssignedTo = Employee.Id
Only With Order ↔ Priority
Order.Priority = Priority.Id
Only With Order ↔ OrderStatus
Order.Status = OrderStatus.Id
A
Priority, Status, Employee가 모두 있는 오더만 반환한다
B
Employee와 Status가 없는 오더를 반환한다
C
Status가 있고 Employee가 하나 이상인 오더를 반환한다
D
Priority가 있고 Employee가 0개 이상인 오더를 반환한다
정답: D
Only With는 INNER JOIN (해당 데이터 반드시 있어야 함), With or Without은 LEFT JOIN (없어도 반환). Priority=Only With, Status=Only With → Priority와 Status가 있어야 함. Employee=With or Without → 0개 이상 가능.
13
Aggregate에 여러 필터를 추가할 때 false인 것은?
📋 GetActiveOrders — Filters
Order.IsActive = True
Order.CreatedOn >= #2024-01-01#
A
필터들은 AND 연산자로 연결된다
B
레코드는 적어도 하나의 필터에 일치하면 결과에 포함된다
C
논리 연산자 및 일부 내장 함수를 필터 내에서 사용할 수 있다
D
모든 필터는 SQL의 WHERE 절로 변환된다
정답: B
Aggregate의 필터들은 AND로 연결됩니다. 즉, 레코드는 모든 필터 조건을 동시에 만족해야 결과에 포함됩니다. "하나 이상" 일치(OR)가 아닙니다.
14
Priority 별 오더 수를 반환하기 위해 아래 Aggregate를 어떻게 변경해야 하는가?
📋 GetOrders (현재 상태)
Sources
⊞ Order
⊞ OrderStatus
⊞ Priority
Joins
With or Without
Order ↔ Priority
With or Without
Order ↔ OrderStatus
A
Order ↔ Priority Join을 Only With로 변경하고, Priority.Id에 Count 추가
B
Priority.Id에 Group By를 추가하고, Order.Id에 Count를 추가한다
C
Order.Id에 Group By를 추가하고, Priority.Id에 Count를 추가한다
흐름도를 보면, List.Empty? = True 분기에서 Exception 노드(!)로 이동하고 있습니다. 이 Exception은 RecordNotFound로 Raise됩니다. Aggregate 자체는 예외를 던지지 않지만, 개발자가 Raise Exception 노드로 직접 발생시킨 것입니다.
22
아래 Absolute 액션에서 N=0으로 호출할 때 반환값은?
▶
Otherwise
N>=1
abs = N
■
N<0
abs=-1*N
■
호출 조건
N = 0
Switch 분기
N >= 1 → abs = N
N < 0 → abs = -1*N
Otherwise → abs = 0
A
절대 0을 반환하지 않는다
B
N이 0보다 작을 때 0을 반환한다
C
N이 0일 때 0을 반환한다 (Otherwise 분기)
D
N이 0보다 클 때 0을 반환한다
정답: C
N=0이면 N>=1 조건 False, N<0 조건 False → Otherwise 분기 실행 → abs=0 할당. 절대값(|0|)은 0이므로 올바른 결과입니다.
23
아래 SquareRoot 액션에서 N=0으로 호출하고 디버거가 Start 노드에서 중지된 상태에서 F9(Continue)를 누르면?
▶
N < 0?
True
!
False
N=0 or N=1?
True
sqrt=N
■
False
sqrt=Sqrt(N)
■
🔴 Breakpoints
Start 노드 (현재 중단)
마지막 End 노드
A
액션이 종료되고 sqrt = 0이다
B
예외가 발생하고 sqrt 값이 나오지 않는다
C
디버거가 N<0? If 노드에서 멈춘다
D
디버거는 두 번째 End 노드의 브레이크포인트에서 멈춘다
정답: D
N=0: N<0? → False → N=0 or N=1? → True → sqrt=N(=0) → 두 번째 End 노드로 이동. 이 End 노드에 breakpoint가 있으므로 디버거는 여기서 멈춥니다.
24
Client Action의 Function 속성에 대해 올바른 것은?
A
Function = Yes로 설정하면, 해당 액션은 Output Parameter를 하나만 가질 수 있으며, Expression에서 직접 사용 가능하다
B
Function = No로 설정하면, 해당 액션은 정의된 모듈에서만 사용 가능하다
C
액션이 다른 모듈에 Public으로 노출된 경우 Function = Yes로 설정할 수 없다
D
Function = No로 설정하면 Screen Expressions에서만 사용 가능하다
정답: A
Function = Yes: Output Parameter 1개로 제한 + Expression에서 직접 호출 가능. Public 노출과 Function 설정은 독립적입니다.
25
아래 폼에서 저장 버튼의 Built-in Validations = Yes 설정 시 자동으로 수행되는 유효성 검사는?
Customer Registration
Full Name
Email
Notes
A
필수 필드가 모두 입력되었는지 확인한다
B
필수 필드 + 이후 로직에서 사용되는 비필수 필드도 모두 입력되었는지 확인한다
C
필수 필드가 모두 입력되었는지 확인하고, 제출 데이터가 입력란의 데이터 타입과 일치하는지 확인한다
D
모든 필드가 입력되었는지 확인하고, 비즈니스 규칙도 자동 검사한다
정답: C
Built-in Validations = Yes 시 자동 검사 항목: ① Mandatory 필드 입력 여부 ② 입력 데이터의 타입 일치 여부. 비즈니스 규칙은 개발자가 직접 구현해야 합니다.
26
아래 폼에서 필수 입력란이 비어있을 때 서버 전송을 막는 가장 적합한 구현 방법은?
Customer Form
Name
Email
A
저장 버튼의 Built-in Validations를 Yes로만 설정한다
B
모든 Input에 직접 유효성 검사를 수행하고, 실패 시 폼의 Valid 속성을 False로 설정한다
C
Built-in Validations = Yes 설정 후, 폼의 Valid 속성이 True인지 확인하고 서버 액션을 호출한다
D
Built-in Validations = Yes 설정 후, 유효하지 않은 입력 처리를 위한 Exception Handler Flow를 추가한다
정답: C
Built-in Validations가 실행된 후 폼의 Valid 속성이 True인 경우에만 서버 액션을 호출하는 것이 올바른 패턴입니다. Valid = False면 오류가 화면에 표시되고 서버 호출을 막습니다.
27
Client Action과 Server Action의 차이에 대해 올바른 것은?
A
Client Action은 데이터베이스에 직접 접근할 수 있다
B
Server Action은 클라이언트 변수(Client Variable)에 직접 접근할 수 없다
C
Client Action과 Server Action 모두 외부 시스템 연동(API 호출 등)에 동일하게 적합하다
D
Server Action은 브라우저에서 실행되어 UI를 직접 조작할 수 있다
정답: B
Server Action은 서버에서 실행되므로 클라이언트 변수에 직접 접근할 수 없습니다. Client Action은 브라우저에서 실행되고 DB 직접 접근 불가, Server Action은 서버에서 실행되어 DB 접근 가능합니다.
28
All Exception Handler에 대해 true인 것은?
A
All Exception Handler는 항상 다른 Exception Handler보다 먼저 실행된다
B
All Exception Handler가 있으면 다른 Handler를 추가할 수 없다
C
All Exception Handler는 발생한 예외를 설명하는 다른 특정 Handler가 없을 경우 모든 예외를 처리한다
D
All Exception Handler는 Global 수준에서만 사용 가능하다
정답: C
All Exception Handler는 다른 특정 Exception Handler(DatabaseException, UserException 등)가 해당 예외를 처리하지 않을 경우의 Fallback 역할을 합니다. 우선순위는 특정 Handler가 더 높습니다.
29
OutSystems에서 디버깅 시 브레이크포인트를 설정할 수 있는 위치는?
A
Actions에서만 가능하다 (Client-side 및 Server-side)
B
Server-side 로직에서만 가능하다
C
Client-side 로직에서만 가능하다
D
Actions의 노드와 Variables 모두에 설정 가능하다
정답: D
OutSystems 디버거에서는 Action 노드와 Variables에도 브레이크포인트를 설정할 수 있습니다.
30
Switch 노드(If)의 동작 방식으로 올바른 것은?
Switch
Branch 1
Cond1=True
Branch 2
Cond2=True
Otherwise
나머지
A
True로 평가되는 모든 브랜치가 순차적으로 실행된다
B
True로 평가되는 첫 번째 브랜치만 실행되고, 나머지는 무시된다
C
Otherwise 브랜치는 반드시 존재해야 한다
D
True인 브랜치가 없으면 예외가 발생한다
정답: B
Switch는 조건을 순서대로 평가하여 첫 번째로 True인 브랜치만 실행합니다. True인 것이 없으면 Otherwise가 실행됩니다. Otherwise는 자동 생성되며 반드시 존재합니다.
섹션 4UI 디자인 — Blocks, Events, Widgets, 라이프사이클Q31–Q40
31
OutSystems Reactive 앱의 Block에 대한 설명 중 올바른 것은?
A
블록은 화면(Screen)에서만 인스턴스화할 수 있다
B
블록은 화면 및 다른 블록에서 인스턴스화할 수 있다
C
블록은 화면 내 Client Action에서 인스턴스화할 수 있다
D
블록은 특수 HTML 태그를 사용하여 외부 HTML 페이지에 배치할 수 있다
정답: B
Block은 Screen과 다른 Block(중첩 Block) 두 곳에 인스턴스화할 수 있습니다. Client Action이나 외부 HTML에는 배치 불가합니다.
32
아래 그림에서 Rating 블록이 부모 화면에 사용자가 별점을 선택했음을 알리려 한다. 올바른 방법은?
📦 Block: RatingWidget
Input Parameters
MaxStars: Integer
User clicks a star ⭐
→ 부모 화면에 알림 필요
🖥️ Screen: ProductDetail
RatingWidget 블록을 사용 중
→ 별점 선택 시 서버에 저장하는 로직 필요
A
블록에서 Trigger Event를 사용하여 부모 화면에 이벤트를 발생시킨다
B
블록의 Input Parameter를 통해 부모 화면에 값을 전달한다
C
화면에서 블록의 Client Action을 직접 호출한다
D
Screen Action에서 블록의 내부 변수를 직접 읽는다
정답: A
Block → 부모(Screen/Block) 방향 통신은 Trigger Event를 사용합니다. Input Parameter는 부모 → Block 방향(데이터 전달)입니다.
33
아래 CountriesDropdown의 속성 패널을 참고하여, 드롭다운에 국가명이 표시되도록 Options Text 속성을 어떻게 설정해야 하는가?
Element Tree
▼ Country (Static Entity)
▶ Records: Japan, USA, Korea...
⊞ Id
⊞ Label
⊞ Is_Active
▼ GetCountries
▼ Country
Id, Label, Is_Active
CountriesDropdown Properties
Variable
Country
List
GetCountries.List
Options Content
Text Only
Options Text
???
Options Value
(empty)
A
Country.Id
B
GetCountries.Country.Label
C
Country
D
Country.Label
정답: D
Dropdown의 Options Text는 List의 현재 아이템(Current) 기준으로 표시할 속성을 지정합니다. List가 GetCountries.List이고 각 항목이 Country 레코드이므로, Country.Label을 설정합니다.
34
화면의 버튼에서 On Click 속성으로 설정할 수 없는 것은?
Button Properties
Label
"Save"
On Click
???
Is Form Default
No
A
Screen (다른 화면으로 이동)
B
Client Action
C
Block (블록으로 이동)
D
External Site (외부 URL)
정답: C
On Click은 Screen(이동), Client Action(실행), External Site(외부 URL)를 설정할 수 있습니다. Block은 On Click의 대상이 될 수 없습니다.
35
On Initialize 라이프사이클 이벤트에 대해 올바른 것은?
On Initialize
→
Data Fetch
→
After Fetch
→
Render
→
On Ready
A
화면/블록이 렌더링되기 전, 데이터 fetch 전에 트리거된다
B
화면/블록이 렌더링된 후 트리거되어 UI를 조작할 수 있다
C
Aggregate의 데이터 fetch 완료 후 트리거된다
D
블록의 Input Parameter가 변경될 때 트리거된다
정답: A
On Initialize는 Screen/Block 생명주기의 첫 번째 이벤트로, 렌더링과 데이터 fetch 이전에 실행됩니다. 초기 변수 값 설정 등에 사용합니다.
아래 화면에서 Input 위젯의 Valid 속성이 False로 설정되면 어떻게 표시되는가?
Edit Customer
Email
올바른 이메일 형식을 입력하세요
A
위젯이 회색으로 비활성화되어 표시된다
B
위젯이 화면에서 사라지고 오류 메시지만 표시된다
C
위젯에 마우스를 올렸을 때만 오류 메시지가 표시된다
D
위젯은 정상 표시되나 특정 스타일(빨간 테두리 등)과 함께 오류 메시지가 표시된다
정답: D
Valid = False 시 위젯은 화면에 그대로 표시되지만 오류 스타일(빨간 테두리 등)이 적용되고, 검증 오류 메시지가 함께 표시됩니다.
38
Events에 관한 설명 중 false인 것은?
A
Event는 Block의 범위에서 부모의 범위로 정보를 전달할 수 있다
B
Event는 Block에 의해 트리거되고 부모에 의해 처리된다
C
Event는 Block 또는 Screen 수준 어디서나 정의할 수 있다
D
동일 Block의 두 인스턴스는 각자 다른 핸들러를 사용할 수 있다
정답: C
Events는 Block 수준에서만 정의됩니다. Screen은 Event를 정의할 수 없습니다. 핸들러는 부모(Screen 또는 Block)에서 정의합니다.
39
Ajax Refresh가 정상 동작하기 위한 조건으로 올바른 것은?
A
위젯은 반드시 Table Records여야 하고, Screen Action은 Ajax Submit으로 실행해야 한다
B
위젯에 Name이 설정되어 있어야 하고, Screen Action은 Ajax Submit으로 실행해야 한다
C
위젯에 Name이 설정되어 있어야 하고, Screen Action은 Submit으로 실행해야 한다
D
위젯에 Name이 설정되어 있어야 하고, Screen Action은 Navigate로 실행해야 한다
정답: B
Ajax Refresh는 ① 새로고침할 위젯에 Name이 설정되어 있어야 하고, ② Screen Action이 Ajax Submit으로 트리거되어야 합니다.
40
Reactive Web App에 대해 false인 것은?
A
크로스 디바이스 앱이다
B
데이터 요청이 동기적(Synchronous)으로 실행된다
C
OutSystems가 생성하는 코드는 SPA(단일 페이지 앱)다
D
Service Studio에서 개발한다
정답: B
Reactive Web App은 비동기(Asynchronous) 데이터 요청을 사용합니다. 동기 방식은 UI를 "freeze"시켜 UX를 해칩니다.
섹션 5아키텍처 & 보안 — 모듈 의존성, Role 기반 보안, 변수Q41–Q50
41
아래 화면 속성에서 마이클(Michael)은 OrdersAdmin Role만 보유하고 있다. 마이클이 접근 가능한 화면은?
Screen A: OrderList
Roles
Registered
Screen B: AdminPanel
Roles
OrdersAdmin
Screen C: LoginPage
Roles
Anonymous
A
Screen A (Registered Role 화면)에 접근할 수 있다
B
Screen C (Anonymous Role 화면)에 접근할 수 없다
C
Screen B에만 접근 가능하고, Screen A에는 접근 불가하다
D
Screen B에만 접근 가능하다
정답: A
로그인한 사용자는 자동으로 Registered Role을 가집니다. OrdersAdmin Role도 있으므로 Screen A(Registered)와 Screen B(OrdersAdmin) 모두 접근 가능합니다. Anonymous는 미로그인 사용자를 위한 화면으로 로그인한 누구나 접근 가능합니다.
42
Producer 모듈에서 Element 노출에 대해 올바른 것은?
A
모든 Element를 노출할 수 있으나, 같은 앱의 모듈에서만 재사용 가능하다
B
모든 Element를 어떤 앱의 모듈에서도 노출 및 재사용할 수 있다
C
Public 속성이 Yes인 Element만 노출되어 어떤 앱의 모듈에서도 재사용 가능하다
D
Public 속성이 Yes인 Element만 같은 앱 내 모듈에서만 재사용 가능하다
정답: C
Public = Yes로 설정된 Element만 Producer 모듈에서 노출되며, 어떤 앱의 Consumer 모듈에서도 재사용할 수 있습니다.
43
아래 역할(Role) 관련 내장 액션 중 존재하지 않는 것은?
CheckRole()
GrantRole()
RevokeRole()
CreateUserWithRole()
A
CheckRole
B
GrantRole
C
RevokeRole
D
CreateUserWithRole
정답: D
OutSystems 내장 Role Actions: CheckRole, GrantRole, RevokeRole. CreateUserWithRole은 존재하지 않는 액션입니다. 사용자 생성은 Users 앱에서 관리합니다.
44
Client Variable의 적절하지 않은 사용 사례는?
A
사용자 이름 (로그인 후 표시용)
B
비밀번호 (Password)
C
검색 필터 키워드
D
사용자 세션 ID
정답: B
Client Variable은 브라우저 로컬 스토리지에 평문으로 저장됩니다. 비밀번호 같은 민감 정보를 저장하는 것은 보안상 매우 위험합니다.
45
OutSystems에서 앱의 Lifecycle을 여러 환경(Dev → QA → Prod)에 걸쳐 관리하는 도구는?
A
Service Center
B
LifeTime
C
Service Studio
D
Integration Studio
정답: B
LifeTime은 여러 환경(Infrastructure)에 걸쳐 앱 배포, 사용자 권한, 팀 관리 등 Lifecycle 전반을 관리하는 도구입니다.
46
아래 모듈 의존 관계에서 잘못된 설명은?
OrdersApp
Consumer Module
→
CoreServices
Producer Module
CustomerAPI (Public=Yes)
InternalUtils (Public=No)
A
OrdersApp은 CustomerAPI를 재사용할 수 있다
B
OrdersApp은 InternalUtils를 직접 호출할 수 있다
C
CoreServices는 Producer 모듈이다
D
OrdersApp은 Consumer 모듈이다
정답: B
InternalUtils는 Public = No이므로 외부 모듈(OrdersApp)에서 접근 불가합니다. Consumer는 Public = Yes인 Element만 재사용할 수 있습니다.
47
OutSystems에서 사용자 및 역할을 생성·관리하는 내장 앱은?
A
UserMgmt 앱
B
Users 앱
C
LifeTime
D
Service Center
정답: B
OutSystems는 내장 Users 앱을 통해 최종 사용자 계정 및 역할을 관리합니다.
48
OutSystems에서 화면의 Role 기반 접근 제한을 설정하는 위치는?
Screen Properties: OrderDetail
Name
OrderDetail
Accessible by
[Roles 목록]
Title
"Order Detail"
A
Users 앱에서 화면과 Role을 연결한다
B
Screen Properties에서 접근 허용할 Role을 선택한다
C
Screen Action에서 CheckRole 함수를 호출하여 수동으로 처리한다
D
모든 화면은 로그인한 사용자만 접근 가능하므로 별도 설정이 불필요하다
정답: B
화면의 Role 기반 접근 제한은 Screen Properties의 Roles 항목에서 허용할 Role을 선택/해제하여 설정합니다.
49
1-Click Publish 시 OutSystems 플랫폼이 생성하는 것은?
A
.NET 코드, HTML, JavaScript, CSS
B
HTML, JavaScript, CSS만 생성 (서버 코드 없음)
C
Java bytecode와 HTML
D
Python 코드와 CSS
정답: A
1-Click Publish 시 OutSystems는 .NET 코드(서버), HTML, JavaScript, CSS(클라이언트)를 자동 생성합니다.
50
Service Studio에서 Screen과 Block이 위치하는 레이어(탭)는?
Processes
Interface
Logic
Data
A
Processes
B
Interface
C
Logic
D
Data
정답: B
Service Studio의 4개 레이어: Data(Entity, 변수), Logic(Actions), Interface(Screen, Block, Theme), Processes(BPT). Screen과 Block은 Interface 탭에 있습니다.