Associate Developer
모의고사 50문항

OutSystems 11 공식 시험 유형 기반 · 실전 대비

문항 수
50
권장 시간
90분
합격 기준
70%
합격 커트라인
35/50
0 / 50 answered
데이터 모델링 — Entity, 속성, 관계, 데이터 타입 Q1–Q10
1
아래 다이어그램에서 Customer와 Order 간의 1대다(1-N) 관계를 구현하는 올바른 방법은?
Customer # Id Aa Name Aa Email Aa Phone 1 : N Order # Id Aa Description ? ___________ 📅 CreatedOn
A
Order 엔티티에 Customer.Id 타입의 기본키를 추가한다
B
Order 엔티티에 CustomerId 속성을 추가하고, Customer.Id를 참조하는 Identifier 타입으로 설정한다
C
Customer 엔티티에 OrderId 속성을 추가한다
D
Order와 Customer를 연결하는 중간 테이블(조인 엔티티)을 생성한다
정답: B
1:N 관계 구현 시 N쪽(Order)에 1쪽(Customer)의 Identifier 타입 속성(CustomerId)을 추가하여 외래키를 설정합니다. 중간 테이블은 N:N 관계에 사용됩니다.
2
아래 다이어그램에서 Order와 Product 간의 다대다(N-N) 관계를 구현하기 위해 필요한 것은?
Order #Id AaDescription 📅CreatedOn N : N Product #Id AaName 12Price
A
OrderId와 ProductId 속성을 포함하는 제3의 엔티티(OrderProduct)를 생성한다
B
OrderId 타입의 기본키와 ProductId 타입 속성을 포함하는 제3의 엔티티를 생성한다
C
Product 엔티티에 OrderId 속성을 추가하고, Order 엔티티에 ProductId 속성을 추가한다
D
Order 엔티티에 ProductId 속성만 추가한다
정답: A
N:N 관계는 두 엔티티의 Id를 각각 참조하는 Identifier 타입 속성을 갖는 중간 엔티티(조인 테이블)를 생성하여 구현합니다.
3
아래 속성 목록을 참고하여, OutSystems가 데이터 타입을 잘못 자동 추론하는 속성은?
속성명예상 자동 추론 타입
ProductNameText
TotalAmountDecimal
IsActiveBoolean
CreatedOnDate
A
ProductName → Text
B
TotalAmount → Decimal
C
IsActive → Boolean
D
CreatedOn → Date
정답: D
*On으로 끝나는 속성은 Date가 아닌 DateTime으로 자동 추론됩니다. CreatedOn은 DateTime 타입이 됩니다. 나머지 세 가지는 올바른 추론입니다.
4
Entity 식별자(Identifier)에 대한 설명 중 올바른 것은?
A
엔티티 식별자의 데이터 타입은 반드시 Long Integer로 설정되어야 한다
B
엔티티 식별자는 반드시 Auto Number로 설정되어야 한다
C
엔티티 식별자는 오직 단일 속성으로 구성되어야 한다
D
엔티티 식별자는 자동으로 생성되며 수정할 수 없다
정답: C
Entity 식별자는 단일 속성입니다. 데이터 타입은 Integer, Long Integer, Text 등 가능하며, Auto Number 설정은 선택사항입니다. 또한 개발자가 식별자 값을 직접 지정할 수 있습니다.
5
아래의 Static Entity 설정 화면을 참고하여, 올바른 설명을 고르시오.
Static Entity: OrderStatus
Is Active
Yes
Label
"New"
Records
New
Shipped
Cancelled
A
Static Entity의 레코드는 런타임 중 CRUD 액션을 통해 자유롭게 추가/삭제할 수 있다
B
Static Entity는 데이터베이스 테이블에 저장되며, 레코드는 개발 중에만 추가/삭제 가능하다
C
Static Entity는 메모리에만 존재하며 데이터베이스에 저장되지 않는다
D
Static Entity는 Identifier 속성을 가질 수 없다
정답: B
Static Entity는 DB에 저장되지만 레코드 추가/삭제는 개발 시에만 가능합니다. 런타임 CRUD 조작은 불가능합니다. 메모리에만 존재하는 것은 Structure입니다.
6
OutSystems에서 Structure에 대한 설명으로 올바른 것은?
A
Structure는 데이터베이스 테이블로 생성되어 영구 저장된다
B
Structure는 자동으로 CRUD 액션이 생성된다
C
Structure는 메모리에만 존재하며, 주로 임시 복합 데이터 구조를 표현할 때 사용된다
D
Structure는 Static Entity와 동일하게 동작한다
정답: C
Structure는 메모리에만 존재하는 복합 데이터 타입입니다. DB에 저장되지 않으며, CRUD 액션도 없습니다. 웹서비스 반환값 등 임시 데이터에 적합합니다.
7
아래 속성 패널을 참고하여, Customer 엔티티의 PhoneNumber 속성이 자동 추론될 데이터 타입은?
Attribute Properties
Name
PhoneNumber
Data Type
(자동 추론)
Mandatory
No
A
Integer
B
Long Integer
C
Text
D
Phone
정답: C
"PhoneNumber"는 *Number로 끝나지만 Phone 관련 키워드는 Integer/Number 추론 규칙에 포함되지 않습니다. 인식되지 않는 패턴은 기본값인 Text로 추론됩니다.
8
OutSystems에서 엔티티가 자동 생성하는 Entity Actions를 모두 올바르게 나열한 것은?
A
Insert, Update, Delete
B
Create, CreateOrUpdate, Update, Get, GetForUpdate, Delete
C
GET, POST, PUT, DELETE
D
Add, Modify, Remove, Find
정답: B
OutSystems Entity는 자동으로 Create, CreateOrUpdate, Update, Get, GetForUpdate, Delete 6개의 Entity Action을 생성합니다.
9
아래 엔티티 다이어그램에서 Customer 엔티티에 고객 이메일의 고유(Unique) 인덱스를 만들려고 한다. 올바른 방법은?
Customer #Id AaName @Email AaPhone 📅CreatedOn
A
Email 속성의 Mandatory 속성을 Yes로 설정한다
B
엔티티 Indexes 탭에서 Email 속성을 포함하는 인덱스를 추가하고 Unique 속성을 Yes로 설정한다
C
Email 속성의 Is Unique 속성을 Yes로 직접 설정한다
D
SQL Query에서 UNIQUE 제약 조건을 직접 작성한다
정답: B
고유 인덱스는 엔티티의 Indexes 섹션에서 인덱스를 추가하고 Unique 속성을 Yes로 설정하여 만듭니다. 속성 개별 설정에는 Is Unique 옵션이 없습니다.
10
OutSystems에서 List에 대한 설명으로 올바른 것은?
A
List는 서로 다른 데이터 타입의 원소를 포함할 수 있다
B
List는 동일한 데이터 타입의 원소들로 구성된 컬렉션이다
C
List는 데이터베이스에 영구적으로 저장된다
D
List의 원소 수에는 플랫폼이 정한 상한선이 있다
정답: B
OutSystems의 List는 동일한 데이터 타입(Homogeneous)의 원소 컬렉션입니다. Entity List, Structure List, Text List 등 각각 타입이 지정됩니다.
데이터 조회 — Aggregate, SQL, 필터, Join, Pagination Q11–Q20
11
아래의 Aggregate 설정에서 GetOrdersShippingState.List.Current 레코드의 속성은 어떻게 구성되어 있는가?
📋 GetOrdersShippingState
3 Sources
No Filters
No Sorts
Order
OrderStatus
Priority
With or Without Order ↔ Priority
Order.Priority = Priority.Id
With or Without Order ↔ OrderStatus
Order.Status = OrderStatus.Id
Group: ShippingState Count: Id
A
2개의 집계 속성만: ShippingStateCount
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 (현재 상태)
Order
OrderStatus
Priority
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를 추가한다
D
OrderStatus Join을 제거하고, Priority.Id에 Count를 추가한다
정답: B
Priority별 집계 → Group By는 집계 기준인 Priority.Id에, Count는 집계 대상인 Order.Id에 적용합니다.
15
Fetch 속성이 Only On Demand로 설정된 Aggregate를 실행하려면?
Aggregate Properties: GetFilteredOrders
Fetch
Only On Demand
Max. Records
50
A
At Start로 설정된 Aggregate 완료 후 자동으로 실행된다
B
Server Action을 통해 프로그래밍적으로 실행된다
C
Screen Action 내 Refresh Data 노드를 사용하여 프로그래밍적으로 실행된다
D
화면이 초기화될 때 자동으로 실행된다
정답: C
Only On Demand Aggregate는 Screen Action 내에서 Refresh Data 노드를 사용할 때만 실행됩니다. 자동 실행되지 않습니다.
16
SQL Tool에 관한 설명 중 true인 것은?
A
SQL Tool은 서브쿼리(subquery)를 포함하는 쿼리를 작성할 수 있다
B
Entity 간 Join은 Aggregate에서만 정의할 수 있다
C
SQL Tool로 작성한 모든 쿼리는 Aggregate로도 동일하게 정의할 수 있다
D
속성 그룹화(Group By)는 SQL Tool로만 가능하다
정답: A
SQL Tool은 서브쿼리, DELETE, 복잡한 JOIN 등 Aggregate로 불가능한 쿼리도 작성 가능합니다. Output Entity/Structure 지정이 필수이며, Non-SELECT 쿼리에서는 Query Parameter 사용이 불가합니다.
17
아래 Pagination 위젯 속성 패널을 보고 잘못 설정된 속성을 고르시오. (페이지 이동 시 결과가 변경되지 않음)
Pagination Properties
StartIndex
StartIndex
MaxRecords
GetMovies.Count
TotalCount
RecordsPerPage
GetMovies Aggregate
Start Index
StartIndex
Max. Records
RecordsPerPage
A
GetMovies Aggregate가 OnNavigate 액션에서 새로고침 되지 않고 있기 때문이다
B
Aggregate의 Max. Records가 DB 내 전체 레코드 수와 같기 때문이다
C
OnNavigate 액션에서 테이블이 새로고침 되지 않기 때문이다
D
MaxRecords는 RecordsPerPage, TotalCount는 GetMovies.Count로 설정되어야 한다
정답: A
페이지 변경 이벤트(OnNavigate)에서 GetMovies Aggregate를 Refresh해야 새로운 페이지 데이터를 가져옵니다. StartIndex 변수가 업데이트되어도 Aggregate를 명시적으로 새로고침하지 않으면 데이터가 바뀌지 않습니다.
18
SQL Query의 Output에 대한 설명으로 올바른 것은?
A
SQL Tool은 Output Entity 또는 Structure를 지정하지 않아도 된다
B
SQL Tool의 Output은 반드시 Entity여야 하며, Structure는 사용할 수 없다
C
SELECT 쿼리에서는 Output Entity 또는 Structure 지정이 필수이다
D
SQL Tool은 Aggregate와 동일한 Output 타입을 반환한다
정답: C
SQL Tool의 SELECT 쿼리는 Output Entity 또는 Structure를 반드시 지정해야 합니다. Entity와 Structure 모두 사용 가능합니다. 특히 SELECT가 아닌 DML 쿼리는 Output 지정이 불필요합니다.
19
Aggregate와 SQL Query의 차이점으로 true인 것은?
A
모든 SQL Query는 Aggregate로 대체할 수 있다
B
Aggregate에서 정의할 수 있는 모든 것은 SQL Query로도 작성할 수 있다
C
Aggregate는 SQL Query보다 느리지만 더 안전하다
D
SQL Query는 Aggregate보다 플랫폼 최적화 혜택을 더 많이 받는다
정답: B
Aggregate에서 가능한 모든 것은 SQL로도 작성 가능하지만, 역은 성립하지 않습니다(SQL이 더 강력). Aggregate는 자동 최적화 혜택을 받습니다.
20
Country 드롭다운 선택 시 해당 국가의 도시만 가져오기 위해 적절하지 않은 방법은?
CountrySelection
Country
City
현재 설정
GetCountries.Fetch = At Start
GetCities.Fetch = At Start
A
GetCities의 Fetch 속성을 Only On Demand로 설정한다
B
Country 드롭다운의 OnChange 이벤트에서 GetCities Aggregate를 새로고침한다
C
GetCities Aggregate에 선택된 국가를 기준으로 필터를 추가한다
D
GetCountries의 On After Fetch 이벤트 핸들러에서 GetCities를 호출한다
정답: D
On After Fetch는 데이터 로드 완료 시점이지, 국가 선택 변경과 무관합니다. 국가 선택 변경 시에는 OnChange 이벤트를 사용하고, GetCities를 필터링하거나 Refresh해야 합니다.
로직 — Actions, 예외 처리, 디버깅, 유효성 검사 Q21–Q30
21
아래 액션에서 GetEmployeeById Aggregate가 아무런 레코드도 반환하지 않으면 어떻게 되는가?
⊞⊞GetEmployeeById
List.Empty?
True
!
False
Exception Handlers
DatabaseException
RecordNotFound
A
DatabaseException 플로우가 실행된다
B
RecordNotFound 플로우가 실행된다
C
예외 플로우는 실행되지 않는다
D
모듈의 전역 예외 처리가 실행된다
정답: B
흐름도를 보면, 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는 자동 생성되며 반드시 존재합니다.
UI 디자인 — 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 이전에 실행됩니다. 초기 변수 값 설정 등에 사용합니다.
36
Check Box 위젯이 바인딩될 수 있는 변수 타입은?
A
Integer
B
Text
C
Boolean
D
Decimal
정답: C
Check Box 위젯은 Boolean 타입 변수에 바인딩됩니다. 체크 = True, 미체크 = False.
37
아래 화면에서 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를 해칩니다.
아키텍처 & 보안 — 모듈 의존성, 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 탭에 있습니다.