SAP GUI 화면 안에서 외부 웹 페이지(예: 회사 위키·매뉴얼·외부 API 결과 페이지·구글 도움말 등) 를 띄우고 싶을 때, 사용자가 별도 브라우저를 열고 URL 을 복붙하게 만드는 건 사용성이 떨어집니다. SAP 표준 클래스 cl_abap_browser 한 줄이면 SAP GUI 내부에 모달 팝업 형태로 웹 브라우저 창을 띄울 수 있습니다.
핵심은 cl_abap_browser=>show_url( url = '...' ). 추가 파라미터로 창 크기·모달 여부·내비게이션 버튼·인쇄 허용 등을 조절할 수 있고, HTML 문자열을 직접 띄우는 show_html 메서드도 같은 클래스가 제공합니다. 화면 컨테이너에 임베드해 ALV 옆에 붙이는 용도도 가능.
이 글은 cl_abap_browser=>show_url 한 줄 호출부터 옵션 파라미터·HTML 직접 렌더링·컨테이너 임베드·관련 대안 비교 까지 한 번에 정리한 메모입니다.
핵심 원리
SAP GUI 안에서 웹 브라우저(또는 HTML) 을 띄우는 방법 4가지 비교.
| 방법 | 특징 | 언제 쓰나 |
|---|---|---|
cl_abap_browser=>show_url |
SAP GUI 내부 모달/모달리스 팝업으로 URL 렌더 | 가장 빠르고 간단 — 한 줄로 끝 |
cl_abap_browser=>show_html |
HTML 문자열을 직접 받아 렌더 (URL 불필요) | 동적 생성 리포트·미리보기 페이지를 보여줄 때 |
cl_gui_html_viewer |
화면 컨테이너에 영구 임베드 (저수준 API) | ALV 옆에 항상 띄워두고 싶을 때 (다이얼로그 프로그램) |
CALL FUNCTION 'CALL_BROWSER' |
사용자 OS 의 기본 브라우저(Chrome/Edge) 를 열어 URL 표시 | SAP GUI 밖에서 보여주고 싶을 때 (외부 사이트 링크 등) |
핵심 트레이드오프: 간단한 외부 URL 한 번 보여주기 는 cl_abap_browser=>show_url 이 표준. 컨테이너에 영구 임베드해서 ALV 옆에 띄워두려면 cl_gui_html_viewer 가 더 적합합니다. 외부 OS 브라우저로 띄울 일이라면 CALL_BROWSER.
1단계 — cl_abap_browser=>show_url 한 줄 호출
가장 단순한 형태. URL 만 넘기면 SAP GUI 내부 팝업 창에 페이지가 뜹니다.
cl_abap_browser=>show_url(
url = 'https://www.google.com'
title = 'Google 검색' ).

이 한 줄만으로:
- SAP GUI 안에 새 창이 열리고
- 지정한 URL 의 페이지가 IE 엔진(또는 Edge WebView2) 으로 렌더링되며
- 사용자가 닫기 전까지 모달로 표시
2단계 — 옵션 파라미터 상세
show_url 은 풍부한 파라미터를 제공합니다. 자주 쓰는 것 정리.
cl_abap_browser=>show_url(
EXPORTING
url = 'www.google.de' " URL
title = 'abap_browser' " Window Title
size = cl_abap_browser=>medium " Size (S, M, L, XL)
modal = abap_true " Display as Modal Dialog Box
printing = abap_false "
buttons = abap_true " Navigation Keys navigate...
format = cl_abap_browser=>landscape " Landscape/portrait format
position = cl_abap_browser=>topleft " Position
* container = " Abstract Container for GUI Controls
context_menu = abap_false " Display context menu in browser
).
각 파라미터 의미.
| 파라미터 | 값 예시 | 설명 |
|---|---|---|
url |
'https://...' |
표시할 페이지 주소 (필수). https 권장 |
title |
'사용자 매뉴얼' |
팝업 창 타이틀바 텍스트 |
size |
small·medium·large·xlarge |
팝업 크기 (클래스 상수 사용) |
modal |
abap_true / abap_false |
true 면 모달(뒤 화면 비활성), false 면 모달리스 |
buttons |
abap_true |
뒤로/앞으로 내비게이션 버튼 표시 여부 |
printing |
abap_false |
Ctrl+P 인쇄 기능 허용 여부 |
format |
landscape / portrait |
가로/세로 비율 (가로형 권장) |
position |
topleft·topright·center 등 |
화면상 팝업 위치 (클래스 상수) |
container |
REF TO cl_gui_container |
지정하면 팝업 대신 컨테이너에 임베드 |
context_menu |
abap_false |
우클릭 컨텍스트 메뉴 허용 (보안상 false 권장) |
핵심 포인트:
size·format·position은 클래스 상수 로 받음 — 직접 문자열 넣지 말 것modal = abap_true가 기본 — 모달리스로 하려면 명시적으로 falsecontext_menu = abap_false가 안전 — 사용자가 "소스 보기" 등으로 내부 코드 접근 차단
3단계 — HTML 문자열 직접 렌더링 (show_html)
외부 URL 이 아닌 동적 생성 HTML 을 보여주고 싶을 때.
DATA: lt_html TYPE TABLE OF char255,
lv_size TYPE i.
APPEND '<html><head><title>미리보기</title></head><body>' TO lt_html.
APPEND '<h1>주문 요약</h1>' TO lt_html.
APPEND |<p>주문번호: <strong>{ lv_ebeln }</strong></p>| TO lt_html.
APPEND |<p>총 금액: <strong>{ lv_amount NUMBER = USER }</strong></p>| TO lt_html.
APPEND '</body></html>' TO lt_html.
cl_abap_browser=>show_html(
EXPORTING
title = '주문 미리보기'
size = cl_abap_browser=>large
modal = abap_true
html_string = lt_html ).
show_html 은 string 또는 string table 둘 다 받으므로, 동적으로 조립한 HTML 페이지를 그대로 표시할 수 있습니다. PDF/엑셀 외에 가벼운 리포트를 사용자에게 보여줄 때 유용.
4단계 — 화면 컨테이너에 임베드 (다이얼로그 프로그램)
팝업이 아닌 ALV 옆 / 화면 일부에 영구 임베드하려면 container 파라미터를 전달.
DATA: lo_container TYPE REF TO cl_gui_custom_container.
" Screen 의 Custom Container 'CC_BROWSER' 에 연결
CREATE OBJECT lo_container
EXPORTING
container_name = 'CC_BROWSER'.
cl_abap_browser=>show_url(
url = 'https://internal.example.com/manual'
container = lo_container
modal = abap_false ).
이 방식이면 SE51 Screen Painter 에서 만든 Custom Container 영역 안에 브라우저가 박혀 ALV 와 나란히 동작합니다. 다만 화면 컨테이너 임베드가 필요한 본격적인 케이스라면 cl_gui_html_viewer 가 이벤트 처리·소스 동적 변경 등에서 더 유연합니다.
흔히 빠뜨리는 함정
URL 프로토콜 누락
'google.com' 처럼 프로토콜 없이 넘기면 일부 환경에서 렌더 실패. 'https://google.com' 식으로 항상 명시.
size·position 에 문자열 직접 사용
size = 'M' 같이 직접 문자열 넣으면 동작 안 함. 반드시 클래스 상수 cl_abap_browser=>medium 사용.
modal = abap_true 인데 닫혀도 다음 화면 안 뜸
모달 팝업이 닫힌 다음 후속 ABAP 코드가 실행됩니다. 만약 후속 화면이 안 뜨면 cl_abap_browser=>close / Screen 0 전환 등 명시적으로 처리.
HTTPS 인증서 오류
내부망 사이트가 자체 서명 인증서를 쓰면 SAP GUI 내장 브라우저가 거부할 수 있음. STRUSTSSO2 에 인증서 신뢰 등록 또는 HTTP 로 우회.
IE 엔진 의존성
Windows 기반 SAP GUI 의 내장 브라우저는 IE 컴포넌트를 사용. 모던 자바스크립트(ES6+) 가 안 돌 수 있음. 복잡한 SPA 페이지를 띄울 거면 CALL_BROWSER 로 OS 기본 브라우저에서 띄우는 게 안전.
context_menu = abap_true 의 보안 위험
활성화하면 사용자가 우클릭으로 "소스 보기" 가능 → 내부 HTML/URL 패턴 노출. 운영 환경은 abap_false 권장.
container 임베드 시 메모리 해제 누락
cl_gui_custom_container 객체는 화면 종료 시 free( ) 호출 안 하면 GUI 컨트롤 누수. PAI 의 EXIT 처리에서 명시적 해제.
URL 에 한글/특수문자 — URL 인코딩
쿼리 스트링에 한글이 들어가면 깨질 수 있음. cl_http_utility=>escape_url( ) 로 사전 인코딩.
전체 코드 — 복사용 통합본
위 단계를 하나의 ABAP 프로그램으로 합친 통합본입니다. SE38 에 그대로 복사해서 활성화하면 동작합니다(인터넷 접속 가능한 환경 필요).
REPORT zexample_abap_browser.
PARAMETERS:
p_url TYPE string LOWER CASE DEFAULT 'https://www.google.com',
p_mode TYPE c LENGTH 1 DEFAULT '1'.
" 1 = show_url 기본, 2 = show_url 옵션 풀세팅, 3 = show_html
START-OF-SELECTION.
CASE p_mode.
* ---------------------------------------------------------
* 1) 가장 단순한 형태 — URL 한 줄 호출
* ---------------------------------------------------------
WHEN '1'.
cl_abap_browser=>show_url(
url = p_url
title = 'Web Browser' ).
* ---------------------------------------------------------
* 2) 옵션 풀세팅 — size/modal/buttons/position/context_menu
* ---------------------------------------------------------
WHEN '2'.
cl_abap_browser=>show_url(
EXPORTING
url = p_url
title = 'Web Browser - Full Options'
size = cl_abap_browser=>large " S/M/L/XL
modal = abap_true " 모달 팝업
printing = abap_false " 인쇄 차단
buttons = abap_true " 뒤로/앞으로 버튼
format = cl_abap_browser=>landscape " 가로형
position = cl_abap_browser=>topleft " 좌상단
context_menu = abap_false ). " ★ 우클릭 차단 (보안)
* ---------------------------------------------------------
* 3) show_html — HTML 문자열 직접 렌더
* ---------------------------------------------------------
WHEN '3'.
DATA: lt_html TYPE TABLE OF char255,
lv_now TYPE string.
lv_now = sy-datum && ' ' && sy-uzeit.
APPEND '<html><head><meta charset="utf-8"><title>ABAP HTML</title></head>' TO lt_html.
APPEND '<body style="font-family:sans-serif; padding:24px;">' TO lt_html.
APPEND '<h1 style="color:#4338ca;">ABAP 동적 HTML 렌더링</h1>' TO lt_html.
APPEND |<p>현재 시각: <strong>{ lv_now }</strong></p>| TO lt_html.
APPEND |<p>사용자: <strong>{ sy-uname }</strong></p>| TO lt_html.
APPEND |<p>시스템: <strong>{ sy-sysid }</strong></p>| TO lt_html.
APPEND '</body></html>' TO lt_html.
cl_abap_browser=>show_html(
EXPORTING
title = 'ABAP HTML 미리보기'
size = cl_abap_browser=>large
modal = abap_true
html_string = CONV string( REDUCE string(
INIT s = ``
FOR <ln> IN lt_html
NEXT s = s && <ln> ) ) ).
WHEN OTHERS.
MESSAGE 'p_mode 는 1/2/3 중 하나' TYPE 'E'.
ENDCASE.
* ※ 참고:
* - size/position/format 은 반드시 클래스 상수 사용
* - HTTPS 인증서 문제 시 STRUSTSSO2 에 등록
* - context_menu = abap_false 가 보안상 안전
* - 복잡한 SPA(React/Vue 등) 페이지는 CALL_BROWSER 로 OS 브라우저 권장
요약
| 단계 | 처리 | 핵심 |
|---|---|---|
| 1 | 한 줄 호출 | cl_abap_browser=>show_url( url = '...' ) — 즉시 모달 팝업 |
| 2 | 옵션 파라미터 | size·modal·buttons·position·context_menu 등 (클래스 상수) |
| 3 | HTML 직접 렌더 | show_html 로 동적 생성한 HTML 문자열 표시 |
| 4 | 컨테이너 임베드 | container 파라미터로 Custom Container 안에 표시 |
| 5 | 주의 | HTTPS 우선 · IE 엔진 한계 · context_menu = false · URL 인코딩 |
SAP GUI 내부에서 외부 URL 또는 동적 HTML 을 보여주는 가장 간단한 방법은 cl_abap_browser=>show_url 한 줄 호출입니다. 옵션 파라미터로 모달·크기·내비게이션 버튼·우클릭 차단 등을 세밀히 제어할 수 있고, show_html 로 ABAP 에서 만든 HTML 을 그대로 띄울 수도 있습니다. 본격적인 화면 임베드가 필요하면 cl_gui_html_viewer, OS 기본 브라우저로 열고 싶으면 CALL_BROWSER 로 분기하는 게 표준 패턴입니다.
Disclaimer — 이 포스트는 실무 정리 노트를 바탕으로 AI 보조로 정리되었습니다. cl_abap_browser·cl_gui_html_viewer·CALL_BROWSER 는 SAP NetWeaver 표준에 포함되어 있으며 시스템 버전 의존 없이 동작합니다. Windows 기반 SAP GUI 의 내장 브라우저는 IE 컴포넌트 기반이므로 최신 JS 기능에 한계가 있을 수 있고, HTTPS 자체 서명 인증서는 STRUSTSSO2 에 사전 등록이 필요합니다. 운영 적용 전 보안(context_menu 차단) 과 인증서 신뢰 설정을 충분히 검증하시기 바랍니다.