온라인 프레임워크는 일반적인 웹 어플리케이션 개발에 필요한 다양한 기능들로 구성되어져 있다.
온라인 프레임워크는 아래와 같이 크게 10개의 기능으로 구분되어져 제공된다.
클라우드 환경을 위해 아래와 같은 기능을 제공한다.
클라우드 환경을 위해 아래와 같은 기능을 제공한다.
멀티인스턴스 관리 (로그변경, 어플리케이션 테스트, 사용자별 로그레벨 변경)
클라우드 환경에서 autoscaling 된 서버 자동감지 및 helthcheck
Mobile 프레임워크
모바일 프레임워크는 하이브리드 앱(iOS, Android) 개발을 위한 서버/클라이언트 실행,운영 환경을 제공한다.
HTML, Javascript 기반의 업무 웹 화면을 PC와 모바일 앱에서 One Source로 적용이 가능하며 MVC 기반의 서버 측 비즈니스 로직 역시 One source로 사용 가능하다. 또한 앱 내에 설치된 웹 화면에서 Native 기능을 사용하기 위해 Cordova Open Source를 사용하며 이를 업무 웹에서 손쉽게 사용할 수 있도록 Web Api를 제공하고 있다.
마지막으로 앱 및 앱을 사용하는 디바이스 기기를 관리 및 앱과 웹을 배포할 수 있는 관리자 화면을 제공하며 등록된 앱을 배포하기 위한 appstore 서버를 제공한다.
[그림] 모바일 프레임워크 구성요소
주요 구성요소는 아래와 같다.
모바일 실행환경 – 앱/기기 제어, 앱/웹 자동업데이트 등 모바일을 위한 실행 기능 제공한다.
모바일 운영환경 – 앱/기기 관리 및 앱/웹 배포를 위한 관리 환경을 제공한다.
모바일 AppStore 서버 – 앱 배포를 위한 Private AppStore 서버 환경을 제공한다.
모바일 클라이언트 실행환경 – 모바일 앱 개발을 위한 클라이언트 SDK이며, cordova를 도입하여 Web -> Native 기능 연동을 위한 확장된 기능을 제공한다.
Getting Started (Android)
개요
캐모마일은 하이브리드 앱 개발 및 실행 환경을 제공하고 이를 쉽게 운영하고 관리할 수 있도록 하는 통합 플랫폼이다. 캐모마일을 사용하여 쉽고 효율적으로 모바일 애플리케이션을 개발하고 관리할 수 있다.
이번 가이드를 통해서 캐모마일을 활용한 모바일 개발 환경을 설치할 수 있다. 설치 이후에, Android 애플리케이션을 생성하고, 실행하는 과정을 통해서 간단하게 모바일 개발 환경에 캐모마일을 사용해 볼 수 있다.
개발도구의 상단 메뉴 중 Window > Preferences를 선택하고 Chamomile > Administrator를 선택하여 라이선스 파일의 위치를 정의한다.
아래와 같이, License Home 경로에 제공받은 라이선스 파일을 위치시킨다.
참고) 어드민이 실행될 때 아래 경로로 복사하여 라이선스를 로드한다.
C:\Chamomile\eclipse\plugins\chamomile.ide_1.1.0[버전].202109232237[빌드날짜]\server\jettyRoot_admin\webapps\ROOT\WEB-INF\classes
캐모마일 어드민 실행
개발 도구에서 어드민을 실행한다.
개발 도구 상단 메뉴에서 아래에 표시된 아이콘을 클릭하여 Chamomile admin 관리 메뉴에 진입한다.
start 버튼을 클릭하여 어드민을 실행한다.
잠시 후 아래와 같이 어드민이 실행된다.
실행이 완료되어 status가 started로 변경되면, Chamomile admin 관리에서 Open 버튼을 클릭한다.
혹은 브라우저에서 localhost:23636 주소로 접속한다.
아래와 같이 로그인 화면을 볼 수 있고, 4.1.에서 제공된 sql 쿼리를 통해 테이블에 입력된 계정 정보로 로그인한다.
사용자아이디: admin
패스워드: 1111
만약 로그인에 실패한다면, 기본 계정 정보를 chamomile 데이터베이스 CHMM_USER_INFO 테이블에 추가한다.
(ID: admin, password: 1111)
INSERT INTO CHMM_USER_INFO (USER_ID,USER_PWD,USER_NAME,USE_YN) VALUES ('ADMIN','27d14effa31a772b2ee217b8c1b3a025fd9f888cb08fbf00dbc4970700b2dbe4ff501e29c7b853ab','관리자','1');
Project Name: MobileBootProject
Group ID: net.lotte.sample
Artifact ID: mobilebootproject
Version: 1.0
Base package: net.lotte.sample
라이선스 설정
프로젝트의 target\classes 디렉토리에 제공받은 라이선스 파일을 위치시킨다.
라이선스 파일의 이름은 chamomile.license으로 한다.
모바일(Android, ios) 프로젝트 생성
5.1.에서 프로젝트를 생성하면, 아래와 같이 chamomile-android-baseProject.zip 파일을 확인할 수 있다.
Android 프로젝트 생성
chamomile-android-baseProject.zip 파일을 압축 해제한다.
이후에 적절한 개발도구(Android Studio 혹은 IntelliJ)에서 압축 해제한 Android 프로젝트를 열어준다.
설정 파일 수정
local.properties 파일에서 sdk.dir 값을 Android SDK의 설치 경로로 수정한다.
local.properties 파일의 위치는 다음과 같다.
#sdk.dir 값을 Android SDK의 설치 경로로 수정한다.
#{계정 이름} 부분에 사용자 계정명을 기입한다.
sdk.dir=C\:\\Users\\{계정 이름}\\AppData\\Local\\Android\\Sdk
다음으로 chamomile_config.xml 파일에서 다음의 property를 변경한다.
파일의 위치는 다음과 같다.
아래와 같이 서버 정보를 수정한다.
app_id 값은 7.1.장에서 애플리케이션 등록 시, 앱아이디 항목 값으로 사용된다.
10.0.2.2 주소가 Android 에뮬레이터에서 localhost 주소가 된다. 본 가이드는 localhost 기준으로 작성되었기 때문에 다음과 같은 IP를 사용한다.
최초 실행 시에는 resource_type을 assets으로 설정해야 한다.
<?xml version='1.0' encoding='utf-8'?>
<chamomile>
<!--
## 앱 기동을 위한 Server 정보 지정
-->
<app_id value="chamomile" />
<server_ip value="10.0.2.2"/>
<server_port value="8083"/>
<server_context value="chamomile"/>
<server_ssl value="false"/>
<!--
## Version control을 담당할 Server 정보 지정
-->
<version_server_ip value="10.0.2.2"/>
<version_server_port value="8083"/>
<!--<version_server_context value="poc"/>-->
<version_server_context value="chamomile"/>
<version_server_ssl value="false"/>
<!--
## resource type 지정
local : 웹 컨텐츠 다운로드 후 chamobileConfig.json 을 읽어서 시작 페이지 설정
assets : 웹 컨텐츠 다운을 받지 않고 assets의 chamobileConfig.json을 읽어서 시작 페이지 설정
web : 웹 다운 안받고 web_resource_url을 load함
-->
<resource_type value="assets"/>
<web_resource_url value="http://10.0.2.2:8083/chamomile" />
<!--<web_resource_url value="http://10.0.2.2:8083/chamomile" />-->
</chamomile>
앱 아이디의 경우 settings.xml 파일에서 찾을 수 있다.
app hash 기능은 현재 불가능합니다.
애플리케이션 파일 등록
캐모마일 어드민에 애플리케이션 파일을 등록할 때, ipa파일 그리고 plist파일이 필요하다.
다음의 과정을 통해 얻을 수 있다.
[ipa 파일 생성]
Xcode에서 프로젝트를 빌드한다.
ipa 파일이란, 빌드 후 Export 되는 iOS 설치 파일이다. Export 방법은 아래와 같다.
[ Product > Archive ] ipa파일 추출
[plist 파일 수정]
앱의 bundle identifier 값을 수정한다.
url 부분에 export 된 ipa파일의 fileCode 정보를 입력한다. (ipa파일이 생성 될 때마다 값이 달라진다)
fileCode 정보는 ipa 파일 상세정보 ‘출처’ 부분에 있는 값을 이용한다.
이제 애플리케이션 파일을 등록한다.
캐모마일 어드민 실행 및 로그인 상태에서, 모바일 > 앱파일 관리 메뉴로 접근한다.
하단의 등록 버튼을 클릭 후, 아래와 같이 작성한다.
앱아이디: 7.1.에서 입력했던 앱아이디를 선택한다.
OS버전정보: 돋보기 아이콘 클릭 후, 전체선택 후 저장버튼 클릭한다.
Logo 파일: 원하는 이미지를 선택 후 첨부한다.
앱 바이너리 파일: ipa 파일을 첨부한다.
plist 파일 : 앱 정보를 입력한 plist 파일을 첨부한다.
위와 같이 모든 값을 입력 후에 저장 버튼을 클릭한다.
애플리케이션 실행
iOS 애플리케이션은 캐모마일 모바일 부트 프로젝트, 캐모마일 어드민을 실행한 상태에서 실행할 수 있다.
먼저 캐모마일 모바일 부트 프로젝트를 실행한다.
5.1.에서 생성한 Mobile Boot 프로젝트의 SampleApplication.java 파일을 run as java application을 선택하여 실행한다.
경로: src > main > java > net > lotte > sample > SampleApplication.java
다음으로 4.3.을 참고하여 캐모마일 어드민을 실행한다.
다음으로 Xcode에서 iOS프로젝트(.xcworkspace)를 실행한다.
다음으로 아래와 같이 에뮬레이터에 애플리케이션이 실행된 것을 확인한다.
정상적으로 애플리케이션이 실행됐다면 애플리케이션 실행 기기가 캐모마일 어드민에 아래와 같이 등록된다.
캐모마일 어드민 > 모바일 > 모바일기기 관리
설치 및 준비
요구사항
시스템 요구사항은 아래와 같다.
서버
항목
설명
운영체제 (OS)
Windows, Unix, Linux, MacOS
JVM
Java 1.8
WAS
Java 1.8을 지원하는 WAS는 기본적으로 지원
Database
Oracle 12c, SQL Server 2012, Mysql 5.7+, Mariadb 10.0+, Tibero 6.0
개발환경 (eclipse oxygen 4.7)
항목
설명
운영체제 (OS)
Windows, Linux, MacOS
JVM
Java 1.8+ (32bit, 64bit)
CPU
2GHz 이상, dual/quad core processor
메모리
1GB, (Recommend 2GB)
디스크 공간
2.1GB 이상
모바일
항목
설명
Cordova
Cordova 9.0 (android) Cordova 6.2 (iOS)
Android
4.412 (api level 2231)
iOS
iOS 11+
모바일 AppStore 서버 설치
AppStore는 앱을 배포하기위한 서버이며, 앱 업로드 및 관리기능은 어드민을 통해 수행한다.
Apache tomcat을 다운로드 하기 위해 홈페이지에 접속하여 tomcat을 내려받는다.
다운로드 받은 zip 파일을 원하는 드라이브에 압축을 해제 한다.
배포 된 chamomile-mobile-appstore-{version}.war 파일을 압축이 해제된 tomcat의 기본 Host의 appBase인 webapps 디렉토리에 복사한 후 chamomile-mobile-appstore 디렉토리에 압축을 해제하고, 복사된 war 파일을 제거한다.
Tomcat을 재기동하여 http://{host}:{port}/chamomile-mobile-appstore/ 으로 접속하여 정상적으로 설치된 것을 획인한다.
서버 설치가 완료된 경우 아래와 같이 모바일 앱 배포를 위한 AppStore가 설치 된 것을 확인할 수 있다.
모바일 API 가이드 서버 설치
모바일 API 가이드를 서버에 설치하기 위해 WAS를 설치한다.
웹/앱 개발을 위한 API를 제공한다.
본 매뉴얼에서는 apache tomcat 8.5 버전을 사용해 설치하는 것을 가이드 한다.
Apache tomcat을 다운로드 하기 위해 홈페이지에 접속하여 tomcat을 내려받는다.
다운로드 받은 zip 파일을 원하는 드라이브에 압축을 해제 한다.
배포 된 chamomile-mobile-api-{version}.war 파일을 압축이 해제된 tomcat의 기본 Host의 appBase인 webapps 디렉토리에 복사한 후 chamomile-mobile-api 디렉토리에 압축을 해제하고, 복사된 war 파일을 제거한다.
Tomcat을 재기동하여
http://{host}:{port}/chamomile-mobile-api/www/chamobile/chamobile.html 으로 접속하여 정상적으로 설치된 것을 획인한다.
서버 설치가 완료된 경우 아래와 같이 모바일 앱 개발을 위한 클라이언트 가이드 문서를 확인할 수 있다.
서버 개발
모바일 실행 환경에서 어플리케이션을 개발하는 것은 로그인 서비스를 제외하고 Web 개발 가이드와 동일하다. 본장에서는 모바일 실행 환경이 추가됨에 따라 일부 변경된 웹 프로젝트 구조 및 서버간 데이터 송/수신 시 모바일 앱과 PC웹의 데이터 포맷 차이에 대한 설명, 로그인 서비스 개발 시 일부 온라인과 다르게 개발 하는 것에 대한 내용을 설명한다.
웹 프로젝트 설정
모바일 앱 통신 데이터 포맷
로그인 서비스 개발
Web 프로젝트 설정
Web 개발 가이드 내용을 우선 확인바랍니다.
프로젝트 구조
모바일 서버 적용 시 추가 혹은 수정된 파일 기준 디렉토리 구조 및 파일의 용도는 아래와 같다.
디렉토리 이미지
디렉토리 및 파일
설명
resources
spring
context-mobile.xml
앱 기동 시 초기화 서비스를 제공하는 bean 설정 파일
context-security.xml
application/json 으로 통신하는 모바일 앱을 위한 Security 설정 파일
WEB-INF
spring
context-servlet.xml
Spring MVC 설정 파일
WEB-INF
web.xml
웹어플리케이션 설정 파일
수정 파일 내용
기존 chamomile 웹 프로젝트에서 모바일 서버 실행 환경 적용 시 추가 및 수정된 설정 파일은 아래와 같다.
파일명
구분
경로
context-mobile.xml
추가
resources/spring/context-mobile.xml
context-security.xml
수정
resources/spring/context-security.xml
context-servlet.xml
수정
webapp/WEB-INF/spring
web.xml
수정
webapp/WEB-INF
context-mobile.xml
모바일 앱은 android, iOS등의 native 앱과 앱의 UI화면인 web resource 파일로 구성되어 있다. 또한 chamobile admin에서 native 설치 파일, web resource 파일을 버전 관리하고 있으며 앱 실행 시 native core 내부적으로 버전 체크 및 앱, 웹을 업데이트를 하게 되어 있다.
이러한 과정은 앱 실행 시 앱 초기화 과정에서 이루어지게 되며 모바일 실행 환경에서는 앱 초기화 서비스들을 Controller및 spring bean service로 제공하고 있다. context-mobile.xml은 이러한 spring bean들에 대한 설정 및 모바일 앱 정보들이 담긴 테이블을 접근하기 위한 Mybatis Scan 설정 정보들이 들어 있는 모바일 실행환경에서만 사용하는 spring 설정 파일이다.
context-security.xml
모바일 앱은 UI가 web resource로 구성된 앱이며 PC Web과 같이 web 영역에서 ajax로 서버와 직접 통신하는 것이 아니라 native 영역에서 application/json 타입의 json 으로 서버와 통신하게 되어 있으며 모바일 실행 환경을 위한 별도의 메시지 포맷을 가지고 있다. 기본적인 spring security의 로그인 처리 시 user id와 password는 x-www-form-urlencoded 방식의 form data를 읽어들이는 방식으로 되어 있는데 모바일 앱의 데이터 타입은 application/json이므로 이를 위한 security filter들이 커스터마이징되어야 한다.
위와 같은 상황 때문에 context-security.xml에서는 아래와 같은 항목들이 커스터마이징 되어 있다.
http 엘리먼트 내 attributes 수정
auto-config값 false(기본은 true이나 FORM_LOGIN_FILTER및 entry-point-ref를 커스텀 등록 하기 위해 false로 설정)
entry-potin-ref값을 chamomile 모바일 제공 MobileAuthenticationEntryPoint bean으로 참조 설정
access-denied-handler 참조 bean 값을 MobileAccessDeniedHandler 로 등록
권한 없는 url 접속 시 PC Web은 errorPage로 redirect하고 모바일 앱은 에러 메시지를 Json으로 리턴
FORM_LOGIN_FILTER 커스텀 필터로 MobileUsernamePasswordAuthenticationFilter 등록
Bean 설정에서 프로젝트에서 만든 로그인 성공/실패 Handler등록
PC Web은 기존과 같이 form-data 형식의 요청 데이터 중 id, password를 getParamter로 획득
모바일 앱은 application-json형식의 요청 데이터에서 id, password 획득, 앱이 암호화 기능 사용할 경우 body 데이터 복호화, 로그인 로그(CM_LOGIN_LOG) 테이블에 적재, 사용자 id에 등록된 기기인지 체크
LOGOUT_FILTER 커스텀 필터로 security 제공 LogoutFilter bean 등록
커스텀 필터 등록 시 직접 등록이 필요한 securityContextLogoutHandler, cookieClearingLogoutHandler bean등록
Bean설정에서 logoutSuccessHandler로 MobileLogoutSuccessHandler bean 등록(PC Web인 경우 logoutSuccessUrl로 redirect, 모바일 앱은 로그아웃 성공 메시지를 Json으로 리턴)
중복 로그인 방지를 위한 CONCURRENT_SESSION_FILTER 필터
동시성 제어 체크를 위한 Sessionregistry로 spring 제공 SessionRegistryImpl bean등록
동시 세션 전략을 위한 spring제공 CompositeSessionAuthenticationStrategy bean 등록
중복 로그인 발생 시 에러 처리를 위한 MobileSessionInformationExpiredStrategy bean등록
PC Web인 경우 web javascript에 alert으로 에러 메시지 띄움
모바일 앱인 경우 Json으로 에러 메시지 리턴
chamomile-mobile-{버전}.jar
모바일 앱 실행 시 앱 초기화, 버전체크, 업데이트 파일 다운로드, 모바일 실행 환경 공통 기능등이 구현된 라이브러리 파일이다.
context-servlet.xml
아래와 같은 항목들이 추가 되었다.
모바일 앱의 요청을 처리하기 위한 모바일 용 Controller Scan 추가 (net.lotte.chamomile.mobile 패키지 스캔)
MobileCommonInterceptor 인터셉터 추가.
서버로 요청이 들어왔을 때 preHandle에서 선처리.
PC Web요청일 경우 아무런 처리를 하지 않으며 모바일 앱 요청일 경우 아래의 기능 수행
- mHeader, mBody 형태의 json 데이터 중 실제 업무 서비스 Controller의 ReqeustMapping될 mBody 데이터만 추출하여 Controller에 전달
- 앱이 암호화 기능을 사용할 경우 요청 json 데이터의 암호화된 body값을 복호화
- 통신 로그 테이블(CM_HIST_LOG) 에 데이터 적재
서버에서 Controller 수행 후 클라이언트로 응답 시 postHandle에서 후처리
PC Web일 경우 아무런 처리를 하지 않으며 모바일 앱으로 응답할 경우 아래 기능 수행
– 통신 로그 테이블에 데이터 적재
– Controller에서 리턴한 업무 서비스 응답 데이터를 mHeader, mBody 형식으로 변환
- 앱이 암호화 기능을 사용할 경우 응답 mBody 데이터를 암호화
모바일 실행환경에서 사용하는 비동기 호출 @async, 스케쥴링 @Scheduled를 처리 하기 위한 executor, scheduler 설정
web.xml
아래와 같은 항목들이 추가 되었다.
MobileCorsFilter 추가
Cross domain 해소를 위한 cors Filter 추가
반드시 Security filter 전에 필터 선언해야 함
MobileFilter 가 XSS필터 다음에 추가.
PC Web에서 호출할 경우 아무런 처리를 하지 않음
모바일 앱에서 호출할 경우 HttpServletRequest 객체를 MobileRequestWrapper로 Wrapping
- Spring 내 MessageConverter가 Reuqest 안의 데이터(InputStream)를 읽기 전MobileInterceptor에서 먼저 데이터를 읽기 때문에 Request객체를 Wrapping하여 InputStream으로 읽어 들인 데이터 byte를 내부적으로 저장 후 재사용 하도록 함.
모바일 앱 데이터 구조
온라인(PC Web) 과 모바일 앱에서의 데이터 송/수신 구조와 방법이 차이가 있지만 결론적으로서버업무개발자및 web개발자는상이한구조에신경쓸필요없이온라인개발가이드에적용된방식대로개발을하면된다.
모바일 실행 환경에서 모바일 앱이 서버와 데이터 통신 시에는 무조건 application/json 타입으로 http body안에 json 문자열을 포함 시켜 데이터 송/수신 한다. Chamomile 모바일 실행 환경에서 제공 하는 공통 javascript에서 제공하는 서버 통신 함수 사용 시 동일한 Web 파일이지만 PC Web에서 실행 시에는
javascript에서 ajax로 서버로 통신하고 앱에서 실행 시에는 android/iOS native 영역에서 application/json으로 http 통신을 한다.
모바일 앱 실행 환경에서는 비즈니스 데이터 외에 모바일 실행 환경에서 필요한 공통 header 데이터가 아래와 같이 정의되어 있다.
appId: 앱 ID (Chamobile Admin에서 관리
appVer: 앱 버전 (Chamobile Admin에서 관리)
deviceId: 모바일 기기 ID (Android/iOS native에서 앱별 고유 ID를 생성하여 서버에서 관리)
osVer: 기기 OS 버전
osType: 기기 타입(android|iOS)
appYn: 앱에서 호출 유무 (앱에서 호출 시 Y로 set)
모바일 실행 환경이 Chamomile Admin을 통해 앱 관리, 기기 관리, 앱 파일 및 Web 파일 버전 관리를 통한 자동 업데이트, 모바일 사용 통계 기능을 제공하며 위와 같은 데이터를 기반으로 동작하게 되어 있다.
실제 모바일 환경에서 서비스에 대한 요청/응답 데이터 포맷은 아래와 같이 구성되어 있다.
{
"mHeader": { //공통 헤더 데이터 영역
"appId": "", //요청시 필요
"appVer": "", //요청시 필요
"deviceId": "", //요청시 필요
"osType": "", //요청시 필요
"appYn": "", //요청시 필요
"sucYn": "", //응답시 필요
"msg": "", //응답시 필요
"msgCd": "" //응답시 필요
},
"mBody": { // 비즈니스 서비스 데이터 영역
~~
}
}
온라인과 모바일 공통으로 사용하는 Web source내에서는 서버로 서비스 호출 시 위와 같은 공통 header 데이터를 신경 쓸 필요가 없이 온라인 환경에서 개발하는 방식과 같이 비즈니스 데이터만 요청 데이터로 전송하면 된다. 해당 web source가 앱에서 실행 시에는 모바일 실행 환경에서 제공하는 native 영역에서 mHeader 데이터를 생성하고 web에서 전달한 요청 데이터를 mBody 에 담아서 application/json타입의 json string으로 서버에 전달하게 된다.
클라이언트의 서비스 요청을 처리하는 업무 Controller역시 공통 header 데이터를 신경 쓸 필요 없이
온라인 환경에서 개발하는 방식과 같이 비즈니스 데이터만 RequestMapping으로 가지고 오면 된다.
모바일 실행 환경에서 적용된 Interceptor인 MobileCommonInterceptor의 preHandle에서 앱에서 보낸 요청인 경우에는 mBody 데이터만 꺼내서 Controller에 전달하기 때문이다.
요청 데이터 Example
아래는 요청 데이터의 json 의 한 예이다.
{
"mHeader" : { //공통 헤더 데이터 영역
"appId" : "ID1", //요청시 필요
"appVer" : "1.0", //요청시 필요
"deviceId" : "deviceid1", //요청시 필요
"osType" : "android", //요청시 필요
"appYn" : "Y", //요청시 필요
"sucYn" : "", //응답시 필요
"msg" : "”, //응답시 필요
"msgCd" : "" //응답시 필요
},
“mBody”: { // 비즈니스 서비스 요청 데이터 영역
"name" : "Hong",
"age" : "14",
"phonNo" : “01011112222”,
"deviceName" : "aa"
}
}
응답 데이터 Example
서버의 비즈니스 로직 수행 완료 후 컨트롤러에서 모바일 앱으로 응답 데이터 리턴 시에 아래와 같은 공통적으로 필요한 응답 데이터를 리턴한다.
sucYn: 정상처리 유무(Y|N)
msg: 메시지
msgCd: 메시지코드
아래는 응답 데이터의 한 예이다.
{
"mHeader" : { //공통 헤더 데이터 영역
"appId" : "ID1", //요청시 필요
"appVer" : "1.0", //요청시 필요
"deviceId" : "deviceid1", //요청시 필요
"osType" : "android", //요청시 필요
“osVer” : “4.2”, //요청시 필요
“appYn” : “N”, //요청시 필요
"sucYn" : "N", //응답시 필요
"msg" : "위변조 오류입니다.", //응답시 필요
"msgCd" : "app.hash.invalid" //응답시 필요
},
“mBody” : { //비즈니스 서비스 응답 데이터 영역
"deviceType" : "PHONE",
"deviceName" : "aa"
}
}
로그인 서비스
로그인 서비스는 기존 온라인 개발 시 Spring Seucurity로 처리하는 방법과 동일하며 다른점은 Security 관련 처리 시 (인증, 인가, 중복로그인, 세션 타임아웃 또는 로그아웃) 모바일 앱 환경에서는 기존 온라인 서비스 처럼 페이지 redirect로 처리하지 않고 json 형태의 메시지를 클라이언트에 응답하도록 하기 위한 Custom Security Filter들이 시큐리티 설정 파일에 많이 추가되었다. 또한 프로젝트 환경에 따라 바꿔줘야 할 설정 값들을 global 변수로 분리 했다.
마지막으로 다른 점은 로그인 성공 또는 실패 시 기존 온라인 개발 가이드에서는 Spring Security 제공 AuthenticationSuccessHandler 또는 AuthenticationFailureHandler 을 구현 했으나 모바일 실행환경에서는 MobileLoginSuccessHandler 또는 MobileLoginFailureHandler를 상속해야 한다.
본장에서는 모바일 실행환경에서 기존 온라인 서비스 로그인 개발과 다르게 설정 및 개발해야 되는 부분에 대해 설명한다.
시큐리티 설정 파일 작성
어플리케이션의 URL 패턴은 “{ContextRoot}/**”로 가정한다.
샘플 프로젝트의 환경 설정 파일(application.properties) 에서 변수 값을 프로젝트 환경에 맞게 변경한다. (각 환경설정 값은 [Web개발가이드/프로젝트설정/시큐리티 설정] 을 참고한다.)
<http> 엘리먼트 설정 부분이 기존 온라인 개발가이드 다른 부분이다. 다른 부분에 대한 내용은 아래와 같다.
온라인실행환경
모바일실행환경
auto-config=false
auto-config=true
N/A
entry-point-ref 속성 지정
<form-login>, <logout> 엘리먼트 설정
<form-login>, <logout> 추가 안하고 LOGIN_FILTER, LOGOUT_FILTER custom filter로 등록
N/A
CONCURRENT_SESSION_FILTER custom filter 등록, <session-management> 엘리먼트 설정
auto-config 속성값을 모바일 실행환경에서는 false로 설정
<http pattern="${chmm.security.loginUrl}" security="none" />
<http pattern="/**" auto-config="false" disable-url-rewriting="true"
entry-point-ref="loginUrlAuthenticationEntryPoint" use-expressions="true" access-decision-manager-ref="accessDecisionManager">
<csrf disabled="true" />
<!-- access-denied-handler 별도 등록. 권한 없는 url 접속 시 에러 처리를 위해 -->
<access-denied-handler ref="mobileAccessDeniedHandler" />
<expression-handler ref="webSecurityExpressionHandler"/>
<!-- for authorization -->
<custom-filter before="FILTER_SECURITY_INTERCEPTOR" ref="filterSecurityInterceptor"/>
<custom-filter after="FILTER_SECURITY_INTERCEPTOR" ref="internalResourceUrlFilter"/>
<!-- key=value형태의 form 방식이 아닌 json 방식의 로그인 처리시 필요한 설정 -->
<custom-filter position="FORM_LOGIN_FILTER" ref="mobileUsernamePasswordAuthenticationFilter" />
<!-- 로그아웃 필터 -->
<custom-filter ref="logoutFilter" position="LOGOUT_FILTER" />
<!-- auto-config=false일 경우 중복로그인 기능 위한 concurrency-control 필터와 session-management에 session-authentication-strategy-ref 설정 필요 -->
<custom-filter position="CONCURRENT_SESSION_FILTER" ref="concurrentSessionFilter" />
<!-- session-management strategy 빈 참조. -->
<session-management session-authentication-strategy-ref="sas" />
</http>
로그인 인증 성공 시 호출할 핸들러 bean ref, bean 및 실패 시 호출할 핸들러 bean ref, bean을 등록한다. Bean ref는 mobileUsernamePasswordAuthenticationFilter bean의 property에 선언한다.
<!-- key=value형태의 form 방식이 아닌 json 방식의 로그인 처리시 필요한 설정(모바일 앱을 사용할 경우 앱에서는 json으로 header+body를 담아서 보내주므로 반드시 등록해야 함) -->
<beans:bean id="mobileUsernamePasswordAuthenticationFilter" class="net.lotte.chamomile.mobile.security.MobileUsernamePasswordAuthenticationFilter">
<beans:property name="authenticationManager" ref="org.springframework.security.authenticationManager" />
<beans:property name="sessionAuthenticationStrategy" ref="sas" /> <!-- 동시 접속 제어를 위해 필요 -->
<beans:property name="filterProcessesUrl" value="${chmm.security.loginProcessingUrl}"/>
<beans:property name="usernameParameter" value="${chmm.security.usernameParameter}"/>
<beans:property name="passwordParameter" value="${chmm.security.passwordParameter}"/>
<beans:property name="authenticationSuccessHandler" ref="sampleLoginSuccessHandler"/>
<beans:property name="authenticationFailureHandler" ref="sampleLoginFailureHandler"/>
</beans:bean>
<!-- login success handler -->
<beans:bean id="sampleLoginSuccessHandler" class="net.lotte.sample.handler.SampleLoginSuccessHandler" />
<!-- login fail handler -->
<beans:bean id="sampleLoginFailureHandler" class="net.lotte.sample.handler.SampleLoginFailureHandler" />
AuthenticationSuccessHanlder 구현
앞서 등록한 sampleLoginSuccessHandler Bean을 만든다. 온라인 개발 가이드에서는 Security 제공 AuthenticationSuccessHandler인터페이스를 implements하여 onAuthenticationSuccess 메소드를 구현 했으나 모바일 실행환경에서는 MobileLoginSuccessHandler추상 클래스를 상속받아 postLoginSuccessProcess 메소드를 구현 하면 된다. MobileLoginSuccessHanlder를 상속하더라도 AuthenticationSuccessHandler를 상속하여 개발한 것과 동일하게 동작한다.
즉 MobileLoginSuccessHandler는 온라인/모바일 실행환경을 동시 지원하는
AuthenticationSuccessHandler라고 보면 된다.
온라인실행환경
모바일실행환경
AuthenticationSuccessHandler 인터페이스 구현
MobileLoginSuccessHandler 추상클래스 상속
onAuthenticationSuccess 메소드 구현
postLoginSuccessProcess 메소드 구현
postLoginSuccessProcess 메소드에서 인증에 성공시 필요한 후처리 로직을 작성한다.
기존과 다르게 추가된 인자에 대해 설명한다.
mHeaderVO: 앱에서 호출 시 mHeader 영역에 있는 header 데이터가 담겨져 있다.
mHeader의 appYn 값에 따라 모바일 실행환경에서 후처리 해야 할 기능을 추가 구현할 수 있다.
mReqBody: 로그인 시 클라이언트가 보내준 요청 데이터가 들어 있다.
mResBody: 로그인 성공 시 클라이언트로 보내줄 응답 데이터를 담아둘 객체이다.
응답 데이터를 담은 후 별도로 HttpServletResponse를 통해 write하지 않아도 된다.
/**
* 로그인 인증 성공 시 업무마다 구현될 로그인 성공 후처리 로직
*/
@Override
protected void postLoginSuccessProcess(HttpServletRequest request,
HttpServletResponse response, Authentication authentication,
MobileHeaderVO mHeaderVO, Map<String, Object> mReqBody,
Map<String, Object> mResBody)
throws IOException, ServletException {
//인증 성공 후처리 로직 개발
//1. 세션에 사용자 정보 저장
//2. 로그인에 성공하였으므로 락카운트 초기화
//3. 기타 등등...
//인증 결과를 성공으로 json return
//계정 아이디
String userID = authentication.getName();
//String userID = mReqBody.get("serviceid");
LOGGER.info("login id : {}", userID);
LOGGER.info("login id : {}", mReqBody.get("serviceid"));
/** 업무영역의 응답 body 데이터 set 예제 */
mResBody.put("success", true);
mResBody.put("username", “hong”);
try {
//로그인에 성공했으므로 계정 락카운트 초기화
loginService.resetLockCnt(userID);
} catch (FrameworkException e) {
LOGGER.error("ResetLockCount Exception : {} " , e.getMessage());
}
//앱에서 실행한 경우
if(mHeaderVO.getAppYn().equals(MobileConstants.Y_VAL)) {
mResBody.put("mobile_response", "Y");
}
}
AuthenticationFailureHanlder 구현
앞서 등록한 sampleLoginFailureHandler Bean을 만든다. 온라인 개발 가이드에서는 Security 제공 AuthenticationFailureHandler인터페이스를 implements하여 onAuthenticationFailure 메소드를 구현 했으나 모바일 실행환경에서는 MobileLoginFailureHandler추상 클래스를 상속받아 postLoginFailProcess 메소드를 구현 하면 된다. MobileLoginFailureHanlder를 상속하더라도 AuthenticationFailureHandler를 상속하여 개발한 것과 동일하게 동작한다.
즉 MobileLoginFailureHandler는 온라인/모바일 실행환경을 동시 지원하는
AuthenticationFailureHandler라고 보면 된다.
온라인실행환경
모바일실행환경
AuthenticationFailureHandler 인터페이스 구현
MobileLoginFailureHandler 추상클래스 상속
onAuthenticationFailure 메소드 구현
postLoginFailProcess 메소드 구현
postLoginFailProcess 메소드에서 인증에 실패시 필요한 후처리 로직을 작성한다.
기존과 다르게 추가된 인자에 대해 설명한다.
mHeaderVO는 앱에서 호출 시 mHeader 영역에 있는 header 데이터가 담겨져 있다.
mHeader의 appYn 값에 따라 모바일 실행환경에서 후처리 해야 할 기능을 추가 구현할 수 있다.
mReqBody는 로그인 시 클라이언트가 보내준 요청 데이터가 들어 있다.
mResBody는 로그인 실패 시 클라이언트로 보내줄 응답 데이터를 담아둘 객체이다.
응답 데이터를 담은 후 별도로 HttpServletResponse를 통해 write하지 않아도 된다.
/**
* 로그인 인증 실패 시 업무마다 구현될 로그인 실패 후처리 로직
*/
@Override
protected void postLoginFailProcess(HttpServletRequest request, HttpServletResponse
response, AuthenticationException exception
,MobileHeaderVO mHeaderVO, Map<String, Object> mReqBody,
Map<String, Object> mResBody)
throws IOException, ServletException {
//인증 실패 후처리 로직 개발
//1. 인증 실패 사용자에 대한 로깅
//2. 로그인 실패하였으므로 락카운트 증가
//3. 기타 등등...
//인증 결과를 실패로 json return
//계정 아이디
String userID = (String)mReqBody.get("serviceid");
LOGGER.debug("Authentication failure message : {} : ", exception.getMessage());
LOGGER.info("Account that failed authentication : {}", userID);
/** 업무영역의 응답 body 데이터 set 예제 */
mResBody.put("success", false);
mResBody.put("message", “로그인 실패”);
}
Android 개발
iOS 개발
운영 (어드민)
앱 관리
캐모마일-모바일을 통해 개발한 모바일 어플리케이션에 대한 정보를 관리할 수 있다.
앱 관리를 통해 개발할 모바일 어플리케이션의 사용여부, 기기자동승인 여부, 앱 배포 타입 등의 정보를 관리 할 수 있다.
앱 아이디
모바일 앱을 관리할 때 사용하는 키 값이다.
앱 등록 시, 앱 아이디는 중복되어서는 안되며 최대 길이는 15이내로 권고한다.
앱 활성화/비활성화
[사용 여부]가 사용인 앱만 캐모마일 앱스토어를 통해 다운받을 수 있다.
[사용 여부]가 미사용인 앱의 경우 캐모마일 앱스토어의 앱 다운로드 리스트에서 노출되지 않는다.
모바일 기기 자동승인
[앱배포타입]이 B2B이면서, [기기자동승인 여부]를 미사용으로 설정하게 되면, 최초의 앱 실행 시 자동 실행되는 기기 등록 전문을 통해 기기가 등록되며, 이후 관리자가 모바일 기기관리 화면에서 승인처리를 하여야 한다.
[기기자동승인 여부]를 사용으로 설정하게 되면, 별도의 디바이스 인증을 거치지 않아도 사용이 가능하다. 기기 등록 시 자동으로 승인단계가 “승인”으로 등록된다.
앱 배포 타입
앱 배포 타입이 [B2B] 인 경우, 캐모마일-모바일에 등록된 인증된 사용자만 앱스토어를 통해 앱을 다운로드 할 수 있다. 또한 앱 배포를 앱 파일 관리화면에서 할 수 있다.
앱 배포 타입이 [B2C] 인 경우, 캐모마일-앱스토어가 아닌 다른 앱스토어에 앱을 등록 하여야 한다. (예: 애플 앱스토어, 안드로이드 플레이스토어)
안드로이드 패키지명 / iOS Identifier
OS가 안드로이드인 경우 [안드로이드 패키지명], iOS인 경우 [iOS Identifier] 에 패키지명을 등록하여 정보를 관리할 수 있다. (*등록의 예시는 com.lotte.lemp와 같이 패키지 명을 등록한다.)
암호화 키교환 인증 사용 설정
캐모마일-모바일 서버에서 제공하는 암호화 키 교환 전문(서버 키-클라이언트 키 교환)을 통해 인증을 거치게 설정하기 위해서는 [암호화 여부] 을 “사용”으로 선택하고, [해쉬값 체크 여부]를 “사용”으로 설정하여야 한다.
앱 파일 관리
앱 관리에 등록한 앱의 앱 파일 정보를 조회, 등록, 수정 삭제 관리 할 수 있다. .apk, plist, ipa 파일을 등록하고 수정, 배포 등의 관리를 할 수 있다.
앱 아이디
앱 파일 등록시 [앱 아이디]를 가장 먼저 선택하여야 한다. [앱 아이디]를 선택하지 않고, 다른 값을 설정 시 “선택된 앱 아이디가 없습니다” 라는 오류메시지가 노출된다.
[앱 아이디] 는 앱 관리에서 등록한 앱의 앱 아이디가 리스트에 노출된다. 앱 아이디는 노출되는 앱 리스트 중 선택이 가능하며, 앱 아이디 선택 시 [앱 이름] 은 자동으로 셋팅되어 진다.
앱 버전
앱 파일 등록 시 앱 파일 버전 정보를 등록하여 관리할 수 있다.
[앱 버전] 은 사용자가 입력한 텍스트 값이며, 하나의 앱에 여러 앱 파일을 버전 별로 등록하여 관리할 수 있으므로, 하나의 앱 아이디에 앱 버전이 중복되지 않도록 입력하여야 한다.
OS타입 및 OS버전정보
앱 파일 등록 시 [OS타입]을 선택한다. [OS타입]은 공통코드로 관리되기 때문에 자원관리->공통코드관리 화면에서 등록/수정/삭제 가능하다. 기본으로 등록되어 있는 [OS타입]은 ‘android’, ‘iOS’ 이다. 추가적인 [OS타입]을 등록하기 위해서는 3.3.1 “신규OS타입등록”을 참고하도록 한다.
[OS타입] 은 신규 등록 후, 수정이 불가능하다.
[OS타입] 를 선택함에 따라 [OS버전정보] 를 선택할 수 있다. [OS버전정보] 를 등록하게 되면, 해당 OS버전에서 앱을 다운받을 수 있게 된다. 지원 가능한 [OS버전정보]를 선택하고 등록한다. 신규 [OS버전정보]를 등록하기 위해서는 3.3.2 을 참고하도록 한다.
신규OS타입 등록
신규 OS버전정보 등록
자원관리-> 공통코드관리 화면에서 공통코드의 카테고리는 모바일공통코드(category00101)이고, 코드는 안드로이드 OS버전(code00005), IOS OS버전(code00006)의 아이템을 추가하면 된다.
아이템 추가 시, 실제값을 반드시 입력하도록 한다.
앱파일 업로드
앱 파일 등록 시 [OS타입]을 선택한다. [OS타입]은 공통코드로 관리되기 때문에 자원관리->공통코드관리 화면에서 등록/수정/삭제 가능하다. 기본으로 등록되어 있는 [OS타입]은 ‘android’, ‘iOS’ 이다.
[OS타입] 은 신규 등록 후, 수정이 불가능하다.
[OS타입] 를 선택함에 따라 [OS버전정보] 를 선택할 수 있다. [OS버전정보] 를 등록하게 되면, 해당 OS버전에서 앱을 다운받을 수 있게 된다. 지원 가능한 [OS버전정보]를 선택하고 등록한다. 신규 [OS버전정보]를 등록하기 위해서는 3.3.1 을 참고하도록 한다.
앱로고 및 앱 파일 설명
앱 파일 등록 시 앱 로고 파일을 함께 등록할 수 있다. 등록한 앱 로고는 캐모마일-모바일 앱스토어의 앱 리스트에서 보여지게 된다.
앱 로고는 필수는 아니며, 미등록시 기본 디폴트 이미지가 앱스토어 리스트에서 보여지게 된다.
앱 [파일설명]은 필수는 아니며, 캐모마일-모바일의 다운로드 어플리케이션의 설명으로 사용자에게 노출된다.
앱 배포 상태 변경하기
최초 앱 파일 등록 시에는 [배포단계]는 “대기”상태로 기본 설정되어 등록된다.
앱 파일 배포를 위해서는 앱 파일 리스트에서 배포할 앱 파일을 더블클릭하여 상세팝업으로 들어간 후, 위와 같은 팝업에서 [배포단계]를 “최종”으로 변경하여 저장한다. 캐모마일-모바일 앱스토어에서는 [배포단계]가 “최종”인 앱 파일만 노출된다.
모바일 기기관리
모바일 기기관리 화면에서는 앱 별로 등록된 모바일 기기를 관리할 수 있다. 앱 다운로드 후 최초 실행시 기기등록 전문을 거치게 되며, 이를 통해 기기 아이디(UUID 기기 식별번호) 정보와 OS버전 정보, 기기타입 정보등을 등록하고 원격에서 관리할 수 있다.
앱기기 정보 수정하기
[모바일기기관리] 화면에서 해당 기기를 선택하면, 위와 같은 상세정보 팝업을 확인할 수 있다.
수정버튼을 클릭하면, [폰번호], [기기명], [승인단계], [사용여부], [분실여부], [공용단말기여부] 정보를 변경할 수 있다.
[승인단계]는 최초 모바일 기기 등록 시, “대기” 상태이다. 해당 기기를 승인하기 위해서는 운영자가 캐모마일-어드민에서 “승인”상태로 변경하여야 한다. 단, 앱 정보에서 [앱배포타입]이 B2B이면서 [자동기기승인여부]를 Y 인 경우에는 별도의 승인처리 없이 자동으로 기기등록 시 “승인” 상태로 등록된다.
[사용여부]를 설정하여 해당 기기의 사용여부를 원격에서 관리할 수 있다. 사용자의 상태(예: 퇴사 등) 으로 인한 앱 접근을 제어할 수 있다.
[분실여부]를 설정하여 해당 기기에서 앱을 실행할 수 없도록 제어할 수 있다.
앱기기 정보 삭제하기
삭제할 모바일 기기정보를 선택한 후 우측하단의 삭제버튼을 클릭 시, 등록된
모바일 기기 정보를 삭제할 수 있다. 삭제하면 기기등록 과정을 다시 수행하여야 한다.
기기인증번호 관리
기기인증번호 관리화면에서는 기기인증에 필요한 인증번호를 생성할 수 있다.
인증번호 생성하기
우측하단의 인증번호 생성하기 버튼을 클릭하면, 기기인증번호 생성 팝업이 뜨게된다.
기기인증번호는 [앱전체생성]과 [사용자별생성]별로 할 수 있다.
[앱전체생성]은 앱리스트에서 기기인증번호를 생성할 앱을 선택하고, 원하는 인증번호길이를 숫자로 입력한다. 인증번호길이는 1~10자리까지 가능하며, 미입력시 4자리로 생성된다. [앱전체생성] 모드의 경우, 등록된 모든 사용자에 대해 기기인증번호를 생성하게 된다.
또한 [앱전체생성]의 경우 등록된 모든 사용자에 대한 생성된 기기인증번호를 전체 삭제하고, 생성하게 되므로 주의해야한다.
[사용자별생성]은 앱리스트에서 기기인증번호를 생성할 앱을 선택하고, 원하는 인증번호길이를 숫자로 입력하고, 사용자를 선택한다. 해당 앱에 등록되어 있는 사용자에게만 유효한 기기인증번호를 생성하게 된다.
공용기기 관리(설정/해지)
대상 기기인증에 대한 정보의 체크박스를 선택하고, 우측하단의 [공용기기번호설정] 버튼을 클릭하면, 해당 모바일 기기를 공용단말기로 설정할 수 있다.
[공용기기번호해지] 버튼 클릭 시, 공용단말기설정을 해지할 수 있다.
기기인증번호 정보 삭제
삭제할 대상 기기 인증에 대한 정보의 체크박스를 선택하고, 우측하단의 [삭제] 버튼을 클릭하면, 해당 모바일 기기의 인증번호 정보를 삭제할 수 있다.
B2C어플리케이션 버전 관리
B2B 어플리케이션의 경우 캐모마일-어드민의 [앱 파일관리] 화면에서 관리 가능하지만, B2C 어플리케이션의 경우 앱 파일을 캐모마일-모바일을 통해 배포하지 않기 때문에 앱 파일정보를 관리할 수 없다. B2C어플리케이션 버전 관리화면에서 배포된 앱 파일에 대한 정보를 별도로 등록하고 관리할 수 있다.
B2C앱버전 등록하기
우측하단의 등록버튼을 클릭하면, B2C앱버전 등록 팝업이 뜨게된다. 앱관리에 등록된 앱중에 [앱배포타입]이 B2C인 앱만 [앱아이디] 리스트에 보여진다.
URL은 B2C앱 다운로드 URL을 작성한다.
B2C앱버전 수정하기
B2C앱버전 관리화면 조회에서 등록되어 있는 B2C앱 정보를 선택하면 위와 같은 B2C앱 정보 상세팝업을 확인할 수 있다. [앱해쉬값], [URL] 정보 변경이
가능하다.
웹 리소스파일 관리
[웹 리소스파일 관리]에서 웹 리소스 파일을 배포하고 관리할 수 있다. 웹 리소스 파일은 앱에서 보여질 실제 컨텐츠 파일 (html, js, lemp core 소스 등) 의 압축파일 형태를 의미한다.
웹 리소스파일 등록하기
우측하단의 등록버튼을 클릭하면, 웹 리소스파일 등록 팝업이 뜨게된다. 앱 관리에 등록된 앱중에 [앱배포타입]이 B2C인 앱만 [앱아이디] 리스트에 보여진다.
가장 먼저 [앱 아이디]를 선택한다.
[전체배포여부]에는 [전체배포]와 [부분배포]가 있다. [전체배포]의 경우는 기존에 배포된 웹 리소스파일을 모두 삭제한 후 전체파일을 새로 배포하게 된다. [부분배포]의 경우 변경된 웹 리소스 파일만 머지하여 배포한다.
앱의 최초 웹 리소스 파일 배포인 경우, 기본으로 [전체배포] 모드로 배포하게 된다.
웹 리소스의 버전은 [전체배포여부]를 선택하면, 현재 등록된 웹 리소스 파일의 버전을 가져와 신규버전을 생성하게 된다. 웹리소스 파일의 버전은 Major.Minor 로 이루어져 있고, [전체배포]시에는 Major 버전이 변경되고, [부분배포]시에는 Minor버전이 변경된다.
[웹 파일명]은 사용자가 웹 리소스 파일 업로드시, 파일명+웹버전으로 자동으로 세팅된다. 사용자는 웹 리소스 파일 업로드시 반드시 * .zip 의 압축형태로 업로드해야 한다.
[배포단계]는 “대기”, “테스트”, “최종” 의 3단계가 있으며, 최초 웹 리소스 파일 등록시에는 “대기”상태이다. “최종”는 실제 사용자에게 배포되는 단계이다.
웹 리소스파일 배포하기
최초 웹리소스 파일 배포시에는 [배포단계]가 “대기” 상태이며, 상세팝업의 우측하단에 “수정버튼”을 클릭한후 “최종”단계로 변경한 후 저장버튼을 클릭한다.
[배포단계]가 “최종”인 경우, 사용자에게 이미 배포된 상태이기 때문에 해당 웹 리소스 파일을 변경하거나, 웹 리소스 파일 정보를 수정할 수 없다.
웹 리소스파일 삭제하기
웹 리소스 파일 삭제는 [배포단계]가 “최종”이고, 가장 최신 웹 리소스 파일 버전의 데이터인 경우는 삭제가 불가능하므로 파일 삭제시 주의해야한다.
웹 리소스 파일 삭제 시, 실제 서버에 업로드된 웹 리소스 파일도 함께 삭제된다.
앱 사용 로그 모니터링
[앱 사용 로그 모니터링]화면에서 사용자가 등록한 어플리케이션의 사용 로그를 확인할 수 있다. 기간별 조회, 앱별 조회, 사용자별/기기별 조회, 에러코드, OS타입별 검색 필터를 적용하여 조회할 수 있다.
앱 사용로그 상세조회
앱 사용로그 모니터링 화면에서 상세 데이터를 조회하는 경우에는 그리드의 데이터를 클릭하면 위와 같은 상세 데이터를 확인할 수 있다.
앱 정보, 사용자의 OS정보, 버전 정보 등을 확인하여 오류에 대응할 수 있다.
앱 사용로그 엑셀저장
우측하단의 [엑셀저장] 버튼을 클릭하여 조회되는 어플리케이션 사용로그를 엑셀로 export할 수 있다.
통계
통계에는 [서비스요청별 사용현황], [어플리케이션별 접속현황], [어플리케이션별 사용현황]에 대한 현황정보를 확인할 수 있다.
서비스요청별 사용현황
[서비스요청별 사용현황]에서는 요청경로에 따른 사용현황 정보를 확인할 수 있다.
총 성공수 : 일별로 요청경로의 통신 이력을 모두 카운트한 것을 의미한다.
총 접속수 : 하루에 한번 로그인을 성공한 경우를 모두 카운트한 것을 의미한다.
성공률 : 총 성공수 / 총 접속수
어플리케이션별 접속현황
[어플리케이션별 접속현황] 에서는 일자별로 앱 접속에 대한 데이터를 확인할 수 있다.
연결시도수 : 통계날짜에 해당 앱에 로그인 전문 요청 수를 모두 카운트 한 데이터를 의미한다.
어플리케이션별 사용현황
[어플리케이션별 사용현황] 에서는 통계일자에 해당 어플리케이션에 어떤 OS타입의 기기에서 얼마나 사용이 되었는지를 확인할 수 있다.