C 스토어 SDK Document 작성년월일 : 작성자및소속팀 : 정현 / SDK 개발팀

Size: px
Start display at page:

Download "C 스토어 SDK Document 작성년월일 : 작성자및소속팀 : 정현 / SDK 개발팀"

Transcription

1 C 스토어 SDK Document 작성년월일 : 작성자및소속팀 : 정현 / SDK 개발팀

2 목차 1 개요 CAFE24 APPLICATION SDK 란? 약어및용어정리 시스템구조 SDK 구조 APPLICATION 구조 개발가이드 개발흐름 개발준비 앱개발 ( 페이스북추천 - BOX ) 앱개발 ( 배너관리 ) 추가정보 UI 가이드 SDK CLASS 상속관계 FUNCTION LIBRARY API PRODUCT API CATEGORY API CATEGORY PRODUCT API PRODUCT OPTIONS API BASKET API CAFE24 OPEN API 개요 전체 ENDPOINT 리스트 ( 자세한내용은 6.5절참조 ) API CALL API RESPONSE ENDPOINT (MAJOR VERSION 1) UPDATE LOG

3 3

4 1 개요 1.1 Cafe24 Application SDK 란? Cafe24 Application( 이하, Application) 은 Cafe24 Application Store 시스템에서실행하는 PHP로작성된어플리케이션으로써, EC호스팅, 빌더호스팅등서비스호스팅을통해설치되며, 서비스호스팅을통해요청된어플리케이션이 Cafe24 Application Runtime 서버에서실행됩니다. Application 은간편하고쉽고, 빠른개발환경을지원하며, 매우쉽게어플리케이션을개발할수있습니다. Application 은 Runtime 환경아래에서동작하며, PHP 기반으로작성되어있습니다. 1.2 약어및용어정리 약어 / 용어 설명 SDK Cafe24 Application SDK 앱 Cafe24 Application 컨트롤러 Controller_Type_View 를상속받는클래스 ( PHP ) 뷰 브러우저화면을구성하는 tpl, html Admin 앱의데이터관리부분 ( 관리자부분 ) Front 앱의실제기능부분 ( 사용자부분 ) Seq 앱의데이터의 Sequence 번호 표 시스템구조 2.1 SDK 구조 Application Runtime 은크게 Server 영역과 Application 환경 / 구동, Application 실행영역으로구분되며, 여러분은 Application 실행영역에서동작하는 PHP 어플리케이션을개발할수있습니다. Application Library 는상기 Application 실행영역에서동작하는 PHP 어플리케이션을구현하기위한기본적인인터페이스라이브러리를제공합니다. 인터페이스라이브러리는컨트롤러를포함하고, 컨트롤러는서비스인터페이스 ($this- >Service), REDIS 인터페이스 ($this->redis), Storage 인터페이스 ($this->storage) 및파일업로드인터페이스 ($this->upload) 등을지원합니다. 또한다양한컨트롤러는다양한타입클래스라이브러리 (Controller_Admin, Controller_Api, Controller_Front 등 ) 를지원합니다. 4

5 2.2 Application 구조 디렉토리및파일구조 class admin api front test install public_html public_html resource assist css img js tpl application.xml Application PHP 영역관리자페이지를구성하는 Controller_Admin, Controller_AdminExec 기반인터페이스클래스 (4 SDK CLASS 참고 ) REST API 를지원하는 Controller_Api 기반인터페이스클래스사용자페이지를구성하는 Controller_Front, Controller_FrontExec 기반인터페이스클래스 Unittest_Testcase 기반단위테스트클래스 Application 설치영역설치 : EC호스팅 / 빌더호스팅스마트디자인영역개발자용스마트디자인영역 Resource 영역호스팅서비스 Code Assist 지원 Application CSS Application Image Application Java Script Application Template ( Controller_Type_View 상속클래스에서사용 ) Application Configuration File Cafe24 Application 호출구조와호출방법 호출방법 ( URL, 스마트디자인 ) 호출위치 ( Class Name ) Class Resource ( ContextType ) URL /admin/index /admin/adminindex.php ( adminindex ) Controller_Admin ( Request ) /admin/indexexec /admin/adminindexexec.php ( adminindexexec ) Controller_AdminExec ( Request ) /front/sampleexec /front/frontsampleexec.php ( frontsampleexec ) Controller_FrontExec ( Request ) /app-css/ /resource/css CSS ( Resource ) /app-img/ /resource/img Image ( Resource ) /app-js/ /resource/js Javascript ( Resource ) SDE <div module="appid_sample"> /front/frontsample.php $Sample </div> 표 2-1 5

6 3 개발가이드 3.1 개발흐름 앱설계 앱의종류및기능을구상하고설계합니다. 앱생성 DEV CENTER 에계정을생성하여로그인한뒤앱을생성합니 다. Admin 구현 앱의 Admin 부분을구현합니다. Front 구현 앱의 Front 부분을구현합니다. 개발서버등록 앱을개발서버에등록합니다. ( Version 등록 ) 쇼핑몰테스트 쇼핑몰 ( 개발서버 ) 에앱을설치하여테스트합니다. 검증 마지막으로앱을검증합니다. C-Store 등록 검증된앱이 C-Store 에등록됩니다. 6

7 3.2 개발준비 환경설정 Eclipse Setting 1) 에서운영체제에맞는 Eclipse를설치합니다. 그림 3-1 그림 3-2 2) Help 탭의 Install New Software 로 PHP Developer Tools (PDT) SDK Feature 를설치합니다 7

8 그림 3-3 3) 설치후 Eclipse 재시작뒤 Window 탭의 Open Perspective 로 PHP 를활성화합 니다. 그림 3-4 4) Window 탭의 Preference 를열어 General -> Workspace -> Text file encording 을 UTF-8 로변경합니다. 8

9 그림 3-5 5) Window 탭의 Preference를열어 Genera->Content Types->Text->%contenttype.name.0 의 File associations 에 *.html 과 *.tpl 을추가하고 General- >Content Types->Text->HTML 의 File associations 에 *.tpl 을추가합니다 Putty 에서 SSH, Telnet 서버접속프로그램인 Putty 를설치하여 Git ( 형상관리 ) 를운용합니다. 한글사용을위해 Putty 설정의 Window -> Translation의 Remote character set 을 UTF-8로설정합니다 앱생성 그림 3-6 9

10 에로그인한뒤 + New Application 버튼을누릅니다. 그림 3-7 앱 ID 와 Type 등정보를설정한뒤저장합니다. 10

11 3.2.3 Remote System 그림 3-8 Eclipse 의 Window 탭의 Show View -> Other 를열어 Remote System 을활성화합 니다. 그림

12 그림 3-10 생성한앱을연결합니다. Hostname 은 " 앱아이디.app-sdk-xxx.cafe24.com" 입니다. 그림

13 그림 3-12 연결된앱의 Sftp Files->My Home 을열어 host 를인증및등록한뒤앱아이디.source 를 Create Remote Project 를합니다. User ID 는앱의 ID 입니다 Hello World! 이제앱을개발하기위한환경설정이모두완료되었습니다. 개발자의첫걸음인 Hello World! 를출력해봅시다. 먼저 class/admin 에 adminhello.php 파일을만들고 Controller_Admin 인터페이스기반의클래스를생성합니다. 데이터출력을위해 SDK에서제공하는 view 함수와 assign 함수를사용합니다. 그림 3-13 파일이름과 class 명을맞춰주어야제대로동작합니다. Ex) adminhello.php, class adminhello생성이완료되었다면 resource/tpl 에 hello.tpl 파일을생성하고코드를입력합니다. 13

14 그림 3-14 두가지파일을생성하였다면 앱아이디.app-sdk-xxx.cafe24.com/admin/hello 을확 인하여 "Hello World!" 가정확히출력되었는지확인합니다. 그림 3-15 브라우저에컨트롤러의 Hello World! 가 assign되어출력된것을볼수있습니다. assign 함수는 view 함수전에사용되어야정상적으로동작합니다. $this->view( "hello" ) : resource/tpl/hello.tpl 의코드를뷰로구성합니다. $this->assign( "key", "value" ) : <?php echo $key;?> 로뷰 (tpl) 에서 value를출력합니다. 14

15 3.2.5 JS, CSS 그림 3-16 SDK 에서제공하는 importjs 함수와 importcss 함수로자바스크립트코드와 CSS 코드를 포함시킵니다. 그림 3-17 sample.css 의코드와 sample.js 코드가제대로등록된것을볼수있습니다. $this- >importjs("sample") : resource/js/sample.js 의코드를최적화하여등록합니다. $this->importcss("sample") : resource/css/sample.css 의코드를최적화하여등록합 니다. 15

16 3.2.6 writejs, writecss class/admin/adminhello.php class adminhello extends Controller_Admin protected function run($args) $this->importjs('sample'); $this->importcss('sample'); $this->writejs('alert("writejs 테스트입니다.")'); $this->writecss('#sample background-color : blue; '); $this->assign('hello','hello World!'); $bview = $this->view('hello'); if ( $bview!== false ) $this->setstatuscode('200'); js와 css파일을 import 시키지않고 SDK의 writejs 함수와 writecss 함수로컨트롤러부분에서직접사용가능합니다. 그림 3-18 writejs 와 writecss 가제대로동작한것을볼수있습니다 Redis 데이터관리를위한 Redis를사용하여값을저장하고불러오겠습니다. class/admin 에 adminset.php 파일과 adminget.php 파일을생성하고 SDK의 Redis 객체와 get, set 함수를사용합니다. 참고사이트 : 16

17 class/admin/adminset.php class adminset extends Controller_Admin protected function run($args) $this->redis->set('sample', 'redis 데이터저장테스트입니다.'); $this->writejs('alert(" 저장이완료되었습니다.")'); SDK 의 Redis 객체함수인 set을사용하여 'redis 데이터저장테스트입니다 ' 라는문자열값을 'sample' 이라는키로저장합니다. 그림 3-19 동작을알림창으로확인합니다. class/admin/adminget.php class adminget extends Controller_Admin protected function run($args) $sdata = $this->redis->get('sample'); $this->assign('sampledata',$sdata); $bview = $this->view('get'); if ( $bview!== false ) $this->setstatuscode('200'); resource/tpl/get.tpl <?php echo $sampledata;?> SDK 의 Redis 객체함수인 get을사용하여 'sample' 키로값을불러와출력합니다. 17

18 그림 3-20 정상적으로출력되는것을확인할수있습니다 스마트디자인 ( Front ) 사용자가실제로확인하는부분인 Front 부분은스마트디자인을기반으로동작합니다. 스마트디자인에데이터를출력하는방법을간단히알아보겠습니다. public_files/demo.html <div module="sampleapphgd_hello"> $hello </div> class/front/fronthello.php class fronthello extends Controller_Front protected function run($args) $this->setstatuscode('200'); $this->assign('hello', 'Hello World! - Base'); SDK에서는 div태그에 module 속성을읽어 Front를호출합니다. module= 앱아이디 _ClassName 으로작성합니다. ( Cafe24 Application 호출구조와호출방법참고 ) SDK의 assign 함수를사용하여데이터를출력합니다. public_files/demo.html <div module="sampleapphgd_hello"> $hello </div> <div module="sampleapphgd_hello_3"> $hello </div> class/front/fronthello.php class fronthello extends Controller_Front protected function run($args) 18

19 $this->setstatuscode('200'); $iseq = $this->getsequence(); if ( $iseq!= null ) $this->assign('hello', 'Hello World! - Seq :'.$iseq); else $this->assign('hello', 'Hello World! - Base'); 스마트디자인에서 Front를호출할시 module="sampleapphgd_hello_3" 처럼모듈마지막에숫자를기입할수있습니다. 이숫자는 SDK의 getsequence 함수를사용하여값을얻을수있으며앱의데이터출력을 Seq를기준으로할경우유용하게사용됩니다. 그림 3-21 기본출력과 Seq 출력의구분을확인할수있습니다. public_files/demo.html 생략 <ul module="sampleapphgd_loop"> <li>$loop</li> <li>$loop</li> <li>$loop</li> </ul> class/front/frontloop.php class frontloop extends Controller_Front protected function run($args) $this->setstatuscode('200'); $icount = 10; for( $i = 1; $i <= $icount; $i++ ) $adata[]['loop'] = "loop-".$i; $this->loopfetch($adata); 19

20 SDK 의 loopfetch 함수를사용하면 2 차원배열로구성된반복적데이터를 front 에서출력 할수있습니다. demo.html 에 <li>$loop</li> 를반복적으로사용하여 loopfetch 함수가 정상적으로동작하게합니다. 그림 3-22 class/front/frontloop.php class frontloop extends Controller_Front protected function run($args) $this->setstatuscode('200'); $icount = $this->getloop(); for( $i = 1; $i <= $icount; $i++ ) $adata[]['loop'] = "loop-".$i; $this->loopfetch($adata); SDK 의 getloop 함수를사용하여반복적인구문 ( <li>$loop</li> ) 의개수를얻어올수있어반복적인데이터를출력시선택적으로사용이가능합니다. 그림

21 반복적구문이 3개이므로 3번의출력을확인할수있습니다. public_files/demo.html <div module="sampleapphgd_hello"> $hello </div> 생략 public_files/hello.css.xans-sampleapphgd-hello color : blue;.xans-sampleapphgd-hello font-size : 20px; public_files/hello.js $(document).ready(function() $('.xans-sampleapphgd-hello').click(function() alert(' js import 테스트입니다.') ); ) <!--@css( 경로 )-->, <!--@js( 경로 )--> 문법을사용하여 js 와 css 를 import 할수있습니다. 모듈이호출되면해당 div는 xans-element, xans-앱아이디, xans-앱아이디-classname 세개의클래스가추가되어해당모듈의 unique 한클래스를가지게됩니다. 이러한 unique 한클래스를 Selector로사용하면다른모듈간의 css, js 충돌을미연에방지할수있습니다. 그림 3-24 정상적으로동작한것을확인할수있습니다. 스마트디자인의좀더자세한설명은링크를참고바랍니다. 참고 : 21

22 3.2.9 환경변수 내용 참조방법 허가 호스팅서비스의 HTTP 정 $this->request->gethttpserver($sname=null); 읽기 보 앱세션 $_SESSION 읽기 / 쓰기 $this->request->getsession(); 읽기 요청파라미터 (Argments) $_REQUEST 읽기 $this->request->getargs(); 읽기 어플리케이션 ID APP_ID 읽기 $this->request->getappid(); 읽기 파일업로드 [SDKJS] 읽기 앱만료시간 APP_EXPIRE_TIME 읽기 앱만료상태 APP_EXPIRE_STATUS 읽기 표 3-1 위의표 3-1 과같이관련기능을구현할수있습니다. 세션을사용하고자한다면 PHP 문법과동일하게 $_SESSION 변수를사용하여참조하거나설정할수있으며, 클라이언트 IP 를참고하고자한다면 $this->request->gethttpserver(); 를호출하여확인할수있습니다. 파일을업로드할시 [SDKJS] 라는 SDK 고유스크립트를사용하고 Cafe24_SDK_Upload() 함수와 Cafe24_SDK_Upload_Submit() 함수를통해업로드기능을구현합니다. 파일업로드참고 : 3.4 앱개발 ( 배너관리 ), Front ( 파일업로드 ) 단축경로 SDK 에서단축경로를제공하여사용자의편의를돕습니다. Type 실제경로 단축경로 URL 앱아이디.app-sdkxxx.cafe24.com/InterfaceType/ControllerNam [link=interfacetype/controllername] ( InterfaceType 은 admin, api, front ) e Image resource/img/ [img] File 서버 /Storage/ 파일경로 / 파일이름 [file= 파일경로 / 파일이름 ] Public 서버 /Storage/public_files/ 파일경로 / 파일이름 [pfile= 파일경로 / 파일이름 ] File 표 3-2 길고복잡한전체경로를표 3-2 와같이간략하게사용가능합니다. File 의경우 Runtime 서버를통해 Storage에접근하게되고 Public File 의경우 Storage에직접접근하는차이 점이있습니다. 파일다운로드같은경우에 "[file= 파일 ]" 을사용하고 Storage 내이미지 파일의경우는 "[pfile= 파일 ]" 의단축경로를사용합니다. File이나 Public File 타입의경우는 앱생성시 Storage 를지원으로선택해야정상적으로동작합니다. 다음과같이사용될 수있습니다. 22

23 Tpl ( Template HTML ) <img src="[img]/move.jpg"> <img src="[pfile=sample/sample.jpg]"> <a href="[file=samplefile.txt]"> 문서다운로드 </a> <a href="[link=admin/index]"> 관리자시작페이지이동 </a> Controller $this->assign('link', '[link=admin/index]'); $this->writejs('location.href = "[link=admin/index]";'); Javascript var linkaddr = '[link=admin/index]'; location.href = linkaddr; 단축경로는스마트디자인의 <!--@css( 경로 )-->, <!--@js( 경로 )--> 문법으로파일을 import 하는경우에는동작하지않습니다. ( 스마트디자인 import 이미지경로 : 개발자용스마트디자인영역 ( public_html ) 에서사용할시 /app-img/ 이미지.jpg, EC호스팅 / 빌더호스팅스마트디자인영역 ( install/public_html ) 에서사용할시 /cstore-img/ 앱아이디 / 이미지.jpg ) 개발준비단계가모두마무리되었습니다. 이제본격적으로앱을개발하며 SDK에대해좀더자세히알아보도록하겠습니다. 23

24 3.3 앱개발 ( 페이스북추천 - Box ) 앱설계및생성 어떤종류와기능의앱을만들것인지설계합니다. 일반적으로종류는마케팅, 정보 / 편의기능으로나눌수있습니다. 종류와기능을설계하고 Admin과 Front를구분하여 UI 설계, DB 설계를하게됩니다. 페이스북플러그인을이용한앱을설계합니다. 앱설계앱이름종류기능 Admin Front DB Storage 페이스북추천 - Box 마케팅페이스북추천 - Box 는좋아요, 추천버튼이등록된페이지를리스트형식으로출력합니다. 쇼핑몰사용자간의페이스북추천을공유하여상품선택의방향을제시합니다. index 페이지에서도메인, 크기, 등플러그인에필요한값을저장하는 UI 페이스북플러그인 UI를사용 Redis 사용미사용표 3-3 앱설계가끝나면 에서앱을생성하고 Eclipse 에서 Remote System 을사용해 Remote Project 를생성합니다. (3.2.2 앱생성, Remote System 참고 ) Admin ( 관리자 ) 데이터를저장하고앱을관리하는 Admin 부분을구현합니다. class/admin/adminindex.php class adminindex extends Controller_Admin protected function run($aargs) $this->inittemplate(); $this->setview(); private function inittemplate() $this->importjs('admin'); $this->importcss('admin'); private function setview() $bview = $this->view('index'); 24

25 if ($bview!==false) $this->setstatuscode('200'); resource/tpl/index.tpl <form name="fbrecommendbox" method="post" action="[link=admin/saveexec]"> <div class="section"> <div class="mtitle"> <h2> 페이스북추천 - Box 설정 </h2> </div> <div class="mboard type2 gsmall gflow"> <table border="1" summary="" id="recommendboxtable"> <caption> 페이스북추천 - Box</caption> <tbody> <tr> <th> 대표도메인 </th> <td> <input type="text" name="fb_host" class="ftext" value="" /> </td> </tr> 중략 </tbody> </table> </div> </div> <div class="mbutton"> <p> <a class="btnsubmit" href="javascript:;" id="btnsave"><span> 저장 </span> </a> </p> </div> </form> 데이터를입력하여저장할수있는컨트롤러와뷰를구현합니다. 25

26 그림 3-25 간단한관리자 UI가완성되었습니다. 이제입력된값을 form submit 으로데이터를전송하고전송된데이터를 Redis를사용하여저장하는코드를구현합니다. class/admin/adminsaveexec.php class adminsaveexec extends Controller_AdminExec protected function run($aargs) $bresult = $this->setfbrecommendboxdata($aargs); if ( $bresult!== true ) $this->writejs('alert(" 오류가발생했습니다.");'); $this->writejs('location.href="[link=admin/index]";'); else $this->writejs('alert(" 저장되었습니다.");'); $this->writejs('location.href="[link=admin/index]";'); private function setfbrecommendboxdata($aargs) foreach ( $aargs as $key => $value ) $bresult = $this->redis->set($key,$value); if ( $bresult!== true ) return false; return true; run함수를통해 php 코드가실행됩니다. 이때 run함수의첫번째파라미터 ( $aargs ) 에페이지로요청된데이터 ( $_REQUEST ) 가연관배열방식으로넘어옵니다. 넘어온데이터를 Redis 의 set 함수로저장합니다. index를 key로사용합니다. 26

27 class/admin/adminindex.php class adminindex extends Controller_Admin protected function run($aargs) // JS, CSS setting $this->inittemplate(); // Get Data $adata = $this->getdata(); $this->assign('afbdata',$adata); // view Setting $this->setview(); private function getdata() $adata = array( 'fb_host'=>'', 'fb_width'=>'', 'fb_height'=>'', 'fb_header'=>'', 'fb_target'=>'' ); foreach ( $adata as $key => $value ) $mvalue = $this->redis->get($key); // $this->redis->get('fb_host'); if ( $mvalue!== false ) $adata[$key] = $mvalue; return $adata; private function inittemplate() 생략 private function setview() 생략 Index에서저장된데이터를확인하는코드를구현합니다. Redis 객체의 get 함수로데이터를불러온뒤 assign 해줍니다. 'afbdata' 라는키로데이터를assign 하면 view 함수로호출된뷰에서 <?php $afbdata;?> 로사용할수있습니다. assign함수는 view 함수전에호출되어야정상적으로동작합니다. 27

28 resource/tpl/index.tpl 생략 <tr> <th> 대표도메인 </th> <td> <input type="text" name="fb_host" class="ftext" value="<?php echo $afbdata['fb_host']?>" /> </td> </tr> <tr> <th> 가로크기 </th> <td> <input type="text" name="fb_width" value="<?php echo $afbdata['fb_width']?>"/> px </td> </tr> <tr> <th> 세로크기 </th> <td> <input type="text" name="fb_height" value="<?php echo $afbdata['fb_height']?>"/> px </td> </tr> <tr> <th> 박스헤더 </th> <td> <?php $sselectfirst = $afbdata['fb_header'] === 'true'? 'checked="checked"' : ''; $sselectsecond = $afbdata['fb_header'] === 'false'? 'checked="checked"' : '';?> <label class="fchk"><input <?php echo $sselectfirst;?> type="radio" name="fb_header" value="true"> 유 </label> <label class="fchk"><input <?php echo $sselectsecond;?> type="radio" name="fb_header" value="false"> 무 </label> </td> </tr> 생략뷰로 assign 된데이터를사용하여저장과저장된데이터를출력하는 Admin 코드를구현해보았습니다 REST API SDK에서제공하는 Controller_Api, Controller_Type_Rest 클래스로 REST API 를설계할수있습니다. 데이터를저장하는코드를 api로구현하면서간단히알아보도록하겠습니다. 28

29 class/api/apisave.php class apisave extends Controller_Api protected function get($args) return 'get'; protected function post($args) $bresult = $this->setfbrecommendboxdata($args['adata']); return $bresult; private function setfbrecommendboxdata($aargs) foreach ( $aargs as $key => $value ) $bresult = $this->redis->set($key,$value); if ( $bresult!== true ) return false; return true; protected function put($args) return 'put'; protected function delete($args) return 'delete'; POST 방식으로데이터를받아 Redis 에값을저장합니다. 첫번째파라미터로데이터를받아옵니다. ( $args ) resource/js/admin.js $(document).ready(function() var adminmethod = getadminmethod(); var adminevent = getadminevent(adminmethod); adminevent.load(); ); function getadminevent(adminmethod) return load : function() var self = this; self.submit(); 29

30 , submit : function() $('.btnsubmit').click(function() var sform = ('form[name=fbrecommendbox]'); // $(sform).submit(); adminmethod.ajaxsave(sform); ); function getadminmethod() return ajaxsave : function(sform) var adata = $(sform).serializearray(); var ajaxdata = ; for ( var i in adata ) var skey = adata[i]['name']; ajaxdata[skey] = adata[i]['value']; var surl = "[link=api/save]"; $.ajax( type: "post", async: true, url: surl, data: 'adata' : ajaxdata, success:function( result ) if( result.data == true ) alert( ' 저장되었습니다.'); else alert( ' 저장을실패하였습니다.'); ); API에값을 Ajax로전달하는스크립트를작성합니다. Form 데이터를 serializearray() 함수를사용하여배열화하고배열을데이터처리에맞게재구성합니다. 재구성된데이터를 jquery Ajax ( ) 함수를사용하여 API에전송합니다. 30

31 그림 3-25 알림창으로 Api, Ajax 의정상적인동작을확인할수있습니다 Front ( 사용자 ) 앱을출력하여사용자에게보여주는 Front 부분을구현합니다. class/front/frontdisplay.php class frontdisplay extends Controller_Front protected function run($args) $this->inittemplate(); $this->setstatuscode('200'); $adata = $this->getfbrecommendbox(); $sfbrecommendbox = $this->makedata( $adata ); $this->assign('fbrecommendbox', $sfbrecommendbox ); private function inittemplate() $this->importjs('front'); private function getfbrecommendbox() $adata = array( 'fb_host'=>'','fb_width'=>'','fb_height'=>'', 'fb_header'=>'','fb_target'=>'' ); foreach ( $adata as $key => $value ) $mvalue = $this->redis->get($key); if ( $mvalue!== false ) $adata[$key] = $mvalue; return $adata; 31

32 private function makedata( $adata ) if ( $adata['fb_host'] == '' ) $sdata = ''; else $shost = $adata['fb_host']; $sdata = '<div id="fb-root"></div>'; $sdata.= '<div class="fb-recommendations fb_iframe_widget" data-site="'.$shost.'" data-width="'.$adata['fb_width'].'" data-height="'.$adata['fb_height'].'" data-header="'.$adata['fb_header'].'" data-linktarget="'.$adata['fb_target'].'" ></div>'; return $sdata; Redis 에저장된값을불러옵니다. 불러온데이터를사용해 Html 문자열을작성하여 'fbrecommendbox' 키로 assign 해주었습니다. resource/js/front.js $(document).ready(function() (function(d, s, id) var js, fjs = d.getelementsbytagname(s)[0]; if (d.getelementbyid(id)) return; js = d.createelement(s); js.id = id; js.src = "//connect.facebook.net/ko_kr/all.js#xfbml=1&appid="; fjs.parentnode.insertbefore(js, fjs); (document, "script", "facebook-jssdk")); ); 페이스북플러그인을사용하기위한스크립트코드를구현합니다. $this->importjs('front'); 로적용되며페이스북플러그인을동작시킵니다. public_html/demo.html <div module="devfbbox_display"> $fbrecommendbox </div> 스마트디자인으로 Front를호출하는 demo.html 을구현합니다. 32

33 그림 3-26 페이스북추천 - box 앱의사용자출력이제대로동작합니다. 페이스북플러그인이기때문 에추가적인 UI 설계가불필요합니다 C-Store 올리기 설치파일생성 C-Store에등록되어앱사용자에게노출되는파일을생성합니다. install/public_files/skin1/skin1.html <!--@layout(/layout/basic/layout.html)--> <div module="devfbbox_display"> $fbrecommendbox </div> install/public_files/skin1/skin1_detail.html <div module="devfbbox_display"> $fbrecommendbox </div> 사용자에게노출되는설치파일은 install/public_files 경로에위치합니다. skin1.html 은실제쇼핑몰에설치되었을경우를표현하기위해 문법으로 import 합니다. skin1_detail.html 에는실제앱을출력하는모듈을작성합니다 샘플소스보기설정 C-Store는앱의 Application.xml과 resource/assist 데이터를사용하여샘플소스보기기능을제공합니다. 앱의정보에맞게 Application.xml을설정합니다. 33

34 그림 3-27 xml파일은 Design 탭을 Source탭으로변경하여수정합니다. Application.xml <?xml version="1.0" encoding="utf-8"?> <application> <langs support="ko" default="ko"></langs> <api use="off"> <ifs> </ifs> </api> <admin use="on" index="adminindex"> <ifs> <if class="adminindex" permission="off" desc=" 페이스북추천 - Box"></if> </ifs> <menus> </menus> </admin> <front use="on"> <ifs> <if name=" 페이스북추천 - Box" class="frontdisplay" permission="off" code-assist="on" desc=" 페이스북추천 - Box"> </if> </ifs> <review index="/[apps]/skin1/skin1.html"></review> </front> </application> 34

35 앱의설명이나 front class 이름, review 페이지경로등자신의앱의정보로 xml 코드를 수정해줍니다. <front><ifs><if> 의 code-assist 를 on 으로설정해야정상적으로동작 합니다. resource/assist/codehint/frontdisplay.xml <?xml version="1.0" encoding="utf-8"?> <codehint> <var value="fbrecommendbox" name=" 페이스북추천 - Box 출력 "></var> </codehint> resource/assist/sample/frontdisplay.html <div module="devfbbox_display"> $fbrecommendbox </div> resource/assist 를설정합니다. 앱을 C-Store 에올리기위한준비가끝났습니다. 이제소스를서버에커밋하여 C- Store에본격적으로등록합니다 Git Commit SDK는버전관리 ( 형상관리 ) 시스템으로 Git를사용합니다. 간단한 Git 명령어를알아보고 Putty로서버연결을하여 Git 저장소에소스를커밋하겠습니다. Commands git add 파일 / 폴더명 Git에파일또는폴더를추가합니다. git commit 추가되거나변경된내용을확정합니다. git push 원격저장소를변경내용으로갱신합니다. git pull 로컬저장소를원격저장소에맞춰갱신합니다. 표 3-4 SDK 에서개발한앱을등록할때기본적으로알아야할간단한 Git 명령어입니다. 1인이앱개발을할시 add, commit, push 명령어만사용하면됩니다. 이제 Putty를연결하여 Git 저장소에 commit 합니다. 35

36 그림 3-28 Host Name 을입력하고연결타입을 SSH 로설정한뒤 Open 버튼을누릅니다. Save 버 튼으로저장을해놓으면좀더편하게사용할수있습니다. Host 정보를 registry 에등록합니다. 그림 3-29 아이디와패스워드를입력하여접속합니다. 위치를앱아이디.source 로변경합니다. 36

37 git add * 명령어로소스를추가하고 git commit -a 명령어로전체내용을커밋합니다. 커밋이명령어가정상적으로동작하였다면 vim 편집창이활성화됩니다. 첫번째라인에커밋한소스의 comment를입력하고저장후 vim 편집창을종료합니다. ( i로입력활성화, :wq 로저장및종료 ) Vim 참고 커밋이실행되고정보가출력됩니다. 커밋된정보를 push 명령어를사용하여원격저 장소를갱신합니다. push 명령어로원격저장소가갱신되어버전등록을할준비가끝났습니다. 37

38 Dev Center 버전등록 Dev Center 에서버전을등록합니다. 그림 Version 버튼을눌러버전등록팝업을띄웁니다. 그림 3-31 버전의정보를입력한뒤 Regist 버튼을눌러등록을완료합니다. 그림 3-32 버전등록이완료되었습니다. 이제실제몰 ( 테스트서버 ) 에스마트디자인을사용하여앱 을설치합니다. 38

39 3.3.6 실제몰에적용 앱설치및설정 실제몰 ( 테스트서버 ) 관리자접속후앱을설치합니다. 그림 3-33 전체앱목록에서앱을확인할수있습니다.( 최신순 ) 설치하기버튼을눌러설치합니 다. 그림 3-34 C 스토어 - 마이앱탭에서앱을관리합니다. 샘플소스보기버튼을누릅니다. 39

40 그림 3-35 Application.xml 와 resource/assit 데이터가잘작성되었는지확인합니다. 그림 3-36 전체소스복사를눌러소스를복사합니다. Install/public_files 경로의파일을복사및갱신하는부분입니다. Front 부분이수정되었을시꼭소스복사를하여갱신을해야합니다. 40

41 그림 3-37 앱데이터를입력하고저장합니다. 이제 front 에앱을등록합니다. 그림 스마트디자인을이용한 Front 등록디자인편집하기버튼을눌러스마트디자인에디터를실행시킵니다. 해당부분은 SDE 참고를부탁드립니다. 41

42 그림 3-39 그림 3-40 스마트디자인의앱폴더에설치된앱을찾아모듈코드를복사합니다. 이제쇼핑몰의 원하는위치에앱을배치합니다. 42

43 그림 3-41 그림 3-42 상품검색위에앱의소스를복사하고저장하였습니다. 이제실제페이지를확인합니다. 그림 3-43 페이스북추천 - Box 앱의설치가완료되었습니다. 다음은앱을업그레이드하는방법 에대해알아보겠습니다. 43

44 3.3.7 앱업그레이드 앱의기능을추가하거나수정할때앱의소스를변경 / 추가하게되고새로운버전을등록하여업그레이드를합니다. 소스를변경한뒤 Git Commit 과정과 Dev Center 버전등록과정을실행합니다. 그림 3-44 버전등록이정상적으로이루어지고쇼핑몰관리자의마이앱탭에서 Upgrade 버튼이활성 화된것을확인할수있습니다. 그림 3-45 Upgrade 버튼을누른후최대 1 분내에소스가적용됩니다. 44

45 3.4 앱개발 ( 배너관리 ) 앱설계및생성 배너이미지를업로드하여관리하는배너관리앱을설계합니다. 앱설계앱이름배너관리종류마케팅기능배너관리앱은배너이미지를등록하여쇼핑몰에배너서비스를편리하게등록, 사용할수있게해줍니다. Admin index 페이지에서등록된배너를리스트형식으로보여줍니다. 배너를등록하는 register 페이지와수정하는 modify 페이지를제공합니다. Front 이미지를정해진크기로출력 DB Redis 사용 Storage 사용 앱생성, Remote System 과정을실행합니다. 앱생성시 Storage Support 와 Redis Support 값을꼭지원으로선택하여야합니다 Admin ( 파일업로드 ) 배너를리스트형식으로보여주는 index의컨트롤러와뷰를생성합니다. class/admin/adminindex.php class adminindex extends Controller_Admin protected function run($args) $this->inittemplate(); $this->setview(); private function inittemplate() $this->importjs('index'); $this->importcss('index'); $this- >externalcss(' $this- >externalcss(' private function setview() $bview = $this->view(); if ($bview!==false) $this->setstatuscode('200'); 45

46 SDK 의 externalcss 함수를사용하여외부 CSS 를로드하였습니다. SDK 의 View 함수는파 라미터가없으면 class 이름으로 tpl 을호출합니다. Resource/tpl/index.tpl <div class="section"> <div class="mtitle"> <h2> 배너목록 </h2> </div> <div class="mctrl typeboard"> <p class="gctrlleft"> <strong class="ctrltxt"> 선택한항목을 </strong> <a href="javascript:;" class="btnctrl ebtndelete"><span> <em class="icodel"></em> 삭제 </span></a> </p> <p class="gctrlright"> <a href="[link=register]" class="btnctrlem"><span> 배너등록 </span></a> </p> </div> <div class="mboard type1"> <table border="1" summary="" class="etr"> <caption> 배너목록 </caption> <colgroup> <col class="chk" /> <col class="no" /> <col style="width:12%;" /> <col class="subject" /> <col style="width:25%;" /> <col style="width:10%;" /> </colgroup> <thead> <tr> <th scope="col" class="chk"> <input type="checkbox" name="chkall" class="chkall" /> </th> <th scope="col"> 번호 </th> <th scope="col"> 배너이미지 </th> <th scope="col"> 배너명 </th> <th scope="col"> 링크 URL</th> 46

47 </td> <th scope="col"> 사용여부설정 </th> </tr> </thead> <tbody class="center"> <tr> <td class="chk"> <input type="checkbox" class="chk_lists" value="" /> <td class="no"> </td> <td></td> <td class="subject"></td> <td class="left"></td> <td class="gbtn"> </td> </tr> <tr> <td colspan="6" class="nodata"> 등록내역이없습니다.</td> </tr> </tbody> </table> </div> <div class="mctrl typeboard"> <p class="gctrlleft"> <strong class="ctrltxt"> 선택한항목을 </strong> <a href="javascript:;" class="btnctrl ebtndelete"><span><em class="icodel"></em> 삭제 </span></a> </p> <p class="gctrlright"> <a href="[link=register]" class="btnctrlem"><span> 배너등록 </span></a> </div> </div> </p> 그림

48 등록된배너의리스트를출력하는 index UI 가완성되었습니다. 배너등록을위한 Register 페이지를구현합니다. class/admin/register.php class adminregister extends Controller_Admin protected function run($args) $this->inittemplate(); $this->setview(); private function inittemplate() $this->importjs('register'); $this->importcss('register'); $this->externalcss (' $this->externalcss (' private function setview() $bview = $this->view(); if ($bview!==false) $this->setstatuscode('200'); resource/tpl/register.tpl <form name="bannermanageform" id="bannermanageform" method="post" action="[link=registerexec]" enctype="multipart/form-data" > <div class="section"> <div class="mtitle"> <h2> 배너등록 </h2> </div> <p class="mrequired"><strong class="txtmust">*</strong> 필수입력사항 </p> <div class="mboard type2 gsmall"> <table border="1" summary=""> <caption> 배너등록 </caption> <tbody> <tr> <th scope="row"> 제목 <strong class="txtmust">*</strong></th> <td><input type="text" name="ba_name" maxlength="90" class="ftext" 48

49 style="width:50%;" /></td> </tr> <tr> <th scope="row"> 배너이미지 <strong class="txtmust">*</strong></th> <td> <p> <input type="file" size="55" name="ba_img" class="ffile" style="width:480px;" /> </p> <!-- <p class="gforminfo"> 선택된파일없음 </p> --> </td> </tr> <tr> <th scope="row"> 가로 <strong class="txtmust">*</strong></th> <td><input type="text" name="ba_width" class="ftext" style="width:50%;" /></td> </tr> <tr> <th scope="row"> 세로 <strong class="txtmust">*</strong></th> <td><input type="text" name="ba_height" class="ftext" style="width:50%;" /></td> </tr> <tr> <th scope="row"> 링크 URL <strong class="txtmust">*</strong></th> <td> <input type="text" name="ba_link" maxlength="250" class="ftext" style="width:90%;" /></td> </tr> <tr> <th scope="row"> 링크타겟 <strong class="txtmust">*</strong></th> <td> <label class="fchk"><input type="radio" name="ba_target" id="ba_target_c" value="c" /> 새창 </label> <label class="fchk"><input type="radio" name="ba_target" id="ba_target_n" value="n" checked="checked" /> 현재창 </label> </td> </tr> </tbody> </table> </div> </div> <div class="mbutton"> <p> <a href="javascript:;" onclick="bannersubmit('bannermanageform');" 49

50 class="btnsubmit"><span> 저장 </span></a> <a href="[link=index]" class="btncancel"><span> 취소 </span></a> </p> </div> </form> 이제입력한값을저장페이지로전송하는스크립트를구현합니다. resource/js/register.js $(document).ready(function() var registermethod = getregistermethod(); var registerevent = getregisterevent(registermethod); registerevent.load(); ); function getregisterevent(registermethod) return load : function() var self = this; self.submit();, submit : function() $('.btnsubmit').click(function() var fname = ('bannermanageform'); registermethod.uploadsubmit(fname); ); function getregistermethod() return upload : function(fname) [SDKJS] var fcallback = function(); Cafe24_SDK_Upload( $(document.getelementbyid(fname)), 'callback':fcallback );, uploadsubmit : function(fname) var self = this; if ( self.formcheck(fname) ) [SDKJS] var fcallback = function(); Cafe24_SDK_Upload_Submit( $(document.getelementbyid(fname)), 50

51 'callback':fcallback ); return false;, formcheck : function ( fname ) var self = this; var form = document.getelementbyid(fname); if ( form.ba_name.value === "" ) alert( ' 제목을입력하세요.' ); form.ba_name.focus(); return false; if ( form.ba_img.value === "" ) alert( ' 이미지를선택하세요.' ); form.ba_img.focus(); return false; if ( form.ba_width.value === "" ) alert( ' 가로를입력하세요.' ); form.ba_width.focus(); return false; if ( self.numcheck(form.ba_width.value) ) alert( ' 값을정확히입력하세요.' ); form.ba_width.focus(); form.ba_width.select(); return false; if ( form.ba_height.value === "" ) alert( ' 세로를입력하세요.' ); form.ba_height.focus(); return false; if ( self.numcheck(form.ba_height.value) ) alert( ' 값을정확히입력하세요.' ); form.ba_height.focus(); form.ba_height.select(); return false; if ( form.ba_link.value === "" ) alert( ' 링크 URL을입력하세요.' ); form.ba_link.focus(); return false; return true; 51

52 , numcheck : function ( value ) return!/^(\- \+)?\d+(\.\d+)?$/.test($.trim( value )); SDK에서파일업로드를할때 SDK의고유문법을사용합니다. [SDKJS] 스크립트를기입후 submit 의경우에 Cafe24_SDK_Upload_Submit() 함수를사용하고그밖의이벤트의경우 ( a 태그이동 ) Cafe24_SDK_Upload() 함수를사용하여파일을업로드합니다. 배너관리앱에서는 form submit 시이미지를업로드하며 Cafe24_SDK_Upload_Submit() 함수가사용됩니다. 그림 3-47 값을입력하여데이터를전송하는 Register 페이지가완성되었습니다. 이제전송된데이터로배너를등록하는 RegisterExec 페이지를구현합니다. class/lib/libkey.php class libkey const BA_KEY = 'bannerdata'; const BA_KEY_SEQ = 'bannerdata:seq'; class/admin/adminregisterexec.php class adminregisterexec extends Controller_AdminExec protected function run($aargs) $aimginfo = $this->doupload(); $bresult = $this->addbanner($aargs, $aimginfo); if ( $bresult!== true ) $this->writejs('alert(" 오류가발생했습니다.");'); $this->writejs('location.href="[link=admin/index]";'); else $this->writejs('alert(" 등록되었습니다.");'); $this->writejs('location.href="[link=admin/index]";'); 52

53 private function doupload() // 업로드된파일얻음 $afile = $this->upload->uploadedfiles(); if ( empty($afile['ba_img']) == false ) $aimage = $afile['ba_img']; $ainfo = pathinfo( $aimage['filename'] ); // 업로드가능확장자지정 $simgextension = strtolower($ainfo['extension']); if (!in_array($simgextension, array('gif', 'jpg', 'jpeg', 'png', 'bmp')) ) return false; // 이미지이름암호화 $aimage['upload_name'] = md5(uniqid(rand(), true)). '.'. $simgextension; $aimage['upload_path'] = $this->getuploadpath().'image/'; $this->makeuploaddir( $aimage['upload_path'] ); // 업로드 $mresult = $this->upload- >moveuploadedfile($aimage['tmpname'], $aimage['upload_path'], $aimage['upload_name'] ); $buploadremove = $this->upload->removeuploadedfiles(); if ( $mresult == false) return false; else return $aimage; return false; private function makeuploaddir( $spath ) if ( $this->storage->is_dir( $spath) ) $this->storage->mkdir( $spath, true ); private function getuploadpath() return "public_files/". date('y'). "/".date('m'). "/". date('d'). "/"; private function addbanner($aargs, $aimginfo) 53

54 $adata = array(); $adata['ba_seq'] = $this->redis->incr( libkey::ba_key_seq ); $adata['ba_name'] = $aargs['ba_name']; $adata['ba_link'] = ( substr( $aargs['ba_link'], 0, 4 )!= "http" )? " : $aargs['ba_link']; $adata['ba_target'] = $aargs['ba_target']; $adata['ba_width'] = $aargs['ba_width']; $adata['ba_height'] = $aargs['ba_height']; $adata['ba_status'] = 'N'; $adata['ba_img_path'] = $aimginfo['upload_path']; $adata['ba_img_name'] = $aimginfo['upload_name']; $sdataserial = serialize($adata); $iresult = $this->redis->rpush( libkey::ba_key, $sdataserial ); if ( $iresult > 0 ) return true; else return false; SDK에서제공하는 Upload 객체와 Storage 객체를사용하여이미지업로드를구현하고 Redis 객체를사용하여정보를저장합니다. Upload->uploadedFiles() 함수로업로드된이미지의정보를얻습니다. 얻어진정보를바탕으로이미지확장자검사를합니다. 이미지경로, 이미지이름을새롭게생성하고 Storage->is_dir() 함수로 Storage에같은경로의디렉토리가있는지확인, 없을경우 Stroage->mkdir() 함수로디렉토리를생성합니다. 디렉토리를생성한후 Upload->moveUploadedFile() 함수를사용하여 Storage 에업로드된이미지를저장합니다. 이미지업로드가완료되면업로드시생성한경로, 이름을포함하여배열을생성하고배열을 serialize 하여 Redis->rPush() 함수를사용하여 libkey::ba_key 로등록 ( 저장 ) 합니다. 54

55 그림 3-48 저장된배너를 index 페이지에서출력합니다. class/admin/adminindex.php class adminindex extends Controller_Admin protected function run($args) $this->inittemplate(); $abannerlist = $this->getalllist(); $this->assign('abannerlist',$abannerlist); $this->setview(); private function getalllist() $abannerlist = $this->redis->lrange(libkey::ba_key,0,-1); foreach( $abannerlist as $key=>$value) $abannerlist[$key] = unserialize($value); return array_reverse($abannerlist); SDK 의 Redis 객체함수인 lrange를사용하여해당키의저장된모든값을가져옵니다. serialize 되어저장되었기때문에 unserialize 해줍니다. array_reverse 함수를사용하여새로등록한값을최상위로출력합니다. resource/tpl/index.tpl <tbody class="center"> <?php if( count($abannerlist) > 0 ) foreach( $abannerlist as $row )?> <tr> <td class="chk"><input type="checkbox" class="chk_lists" value="<?php echo $row['ba_seq']?>" /> </td> <td class="no"><?php echo $row['ba_seq']?> </td> <td> <span class="frame"> <?php if (stripos($row['ba_img_path'], 'public_files/')===0) $row['ba_img_path'] = str_ireplace('public_files/', '', $row['ba_img_path']);?> <img src="[pfile=<?php echo 55

56 $row['ba_img_path'].$row['ba_img_name'];?>]" border="0" width="<?php echo $row['ba_width']?>" height="<?php echo $row['ba_height']?>" alt="<?php echo $row['ba_name']?> " /> </span> </td> <td class="subject"><a href="[link=modify]?seq=<?php echo $row['ba_seq']?>"> <?php echo $row['ba_name']?></a></td> <td class="left"><?php echo $row['ba_link']?> </td> <td class="gbtn"> <?php if ( $row['ba_status'] === 'N' )?> <a href="[link=stautsexec]?seq=<?php echo $row['ba_seq']?>&status=y" class="btnem"> <span><strong> 사용안함 </strong></span> </a> <?php else if ( $row['ba_status'] === 'Y' )?> <a href="[link=stautsexec]?seq=<?php echo $row['ba_seq']?>&status=n" class="btnem"> <span><strong> 사용함 </strong></span> </a> <?php?> </td> </tr> <?php else?> <tr> <td colspan="6" class="nodata"> 등록내역이없습니다.</td> </tr> <?php?> </tbody> assign 된데이터를테이블에입력합니다. "[pfile= 파일명 ]" 사용을위해 ba_img_path 데이터의 Public_files/ 를 str_ireplace() 함수로제거합니다. ( 단축경로참고 ) 56

57 그림 3-49 등록된배너가 index 페이지에출력되는되었습니다. 배너정보를수정하는 Modify 페이지를구현합니다. admin/class/adminmodify.php class adminmodify extends Controller_Admin protected function run($aargs) $this->inittemplate(); $abanner = $this->getbanner($aargs['seq']); list($avalue,$iindex) = $this->getvalueindex($abanner); $this->assign('abanner',$avalue); $this->setview(); private function getbanner($iseq) $aalllist = $this->redis->lrange( libkey::ba_key, 0, -1 ); $adata = array(); $icount = count($aalllist); for ( $i = 0; $i < $icount; $i++ ) $value = unserialize( $aalllist[$i] ); if ( is_array($value) ) $asect = array_intersect($value, array('ba_seq',$iseq)); if ( $iseq == $asect['ba_seq'] ) $adata[$i] = $value; break; return $adata; 57

58 private function getvalueindex( $arow ) if ( count( $arow ) > 0 ) $avalue = array_values($arow); $iindex = array_keys($arow); return array( $avalue[0], $iindex[0] ); return false; Redis->lRange() 함수를사용하여전체배너데이터를가져온뒤 Seq 값을기준으로수정하고자하는배너데이터를검색합니다. 검색하여얻어진데이터를 assign 하여출력합니다. resource/js/modify.js 생략 formcheck : function ( fname ) var self = this; var form = document.getelementbyid(fname); if ( form.ba_name.value === "" ) alert( ' 제목을입력하세요.' ); form.ba_name.focus(); return false; if ( form.ba_width.value === "" ) alert( ' 가로를입력하세요.' ); form.ba_width.focus(); return false; if ( self.numcheck(form.ba_width.value) ) alert( ' 값을정확히입력하세요.' ); form.ba_width.focus(); form.ba_width.select(); return false; if ( form.ba_height.value === "" ) alert( ' 세로를입력하세요.' ); form.ba_height.focus(); return false; if ( self.numcheck(form.ba_height.value) ) alert( ' 값을정확히입력하세요.' ); form.ba_height.focus(); form.ba_height.select(); return false; if ( form.ba_link.value === "" ) 58

59 alert( ' 링크 URL을입력하세요.' ); form.ba_link.focus(); return false; return true;, 생략 register.js 와 formcheck 함수만차이가있습니다. ( image 검사제외 ) resource/tpl/modify.tpl <form name="bannermanageform" id="bannermanageform" method="post" action="[link=modifyexec]" enctype="multipart/form-data" > <input type="hidden" name="seq" value="<?php echo $abanner['ba_seq']?>" /> <div class="section"> <div class="mtitle"> <h2> 배너수정 </h2> </div> <p class="mrequired"><strong class="txtmust">*</strong> 필수입력사항 </p> <div class="mboard type2 gsmall"> <table border="1" summary=""> <caption> 배너수정 </caption> <tbody> <tr> <th scope="row"> 제목 <strong class="txtmust">*</strong></th> <td> <input type="text" name="ba_name" maxlength="90" class="ftext" style="width:50%;" value="<?php echo $abanner['ba_name'];?>"/> </td> </tr> <tr> <th scope="row"> 배너이미지 <strong class="txtmust">*</strong></th> <td> <p> <input type="file" size="55" name="ba_img" class="ffile" style="width:480px;" /> </p> <p> <?php if (stripos($abanner['ba_img_path'], 'public_files/')===0) 59

60 $abanner['ba_img_path'] = str_ireplace('public_files/', '', $abanner['ba_img_path']);?> <img src="[pfile=<?php echo $abanner['ba_img_path'].$abanner['ba_img_name'];?>]" border="0" width="<?php echo $abanner['ba_width']?>" height="<?php echo $abanner['ba_height']?>" alt="<?php echo $abanner['ba_name']?> " /> </p> <!-- <p class="gforminfo"> 선택된파일없음 </p> --> </td> </tr> <tr> <th scope="row"> 가로 <strong class="txtmust">*</strong></th> <td><input type="text" name="ba_width" class="ftext" style="width:50%;" value="<?php echo $abanner['ba_width']?>"/></td> </tr> <tr> <th scope="row"> 세로 <strong class="txtmust">*</strong></th> <td><input type="text" name="ba_height" class="ftext" style="width:50%;" value="<?php echo $abanner['ba_height']?>"/> </tr> <tr> <th scope="row"> 링크 URL <strong class="txtmust">*</strong></th> <td> <input type="text" name="ba_link" maxlength="250" class="ftext" style="width:90%;" value="<?php echo str_replace(" "", $abanner['ba_link']);?>"/> </tr> <tr> <th scope="row"> 링크타겟 <strong class="txtmust">*</strong></th> <td> <label class="fchk"><input type="radio" name="ba_target" id="ba_target_c" value="c" <?php if( $abanner['ba_target'] == 'C' ):?> checked="checked" <?php endif;?> /> 새창 </label> <label class="fchk"><input type="radio" name="ba_target" id="ba_target_n" value="n" <?php if( $abanner['ba_target'] == 'N' ):?> checked="checked" <?php endif;?> /> <label for="ba_target_n" /> 현재창 </label> </td> </tr> </tbody> 60

61 </div> </div> </table> <div class="mbutton"> <p> <a href="javascript:;" class="btnsubmit"><span> 수정 </span></a> <a href="[link=index]" class="btncancel"><span> 취소 </span></a> </p> </div> </form> 수정할배너의데이터를뷰에출력합니다. 값을수정하고수정된데이터를 ModifyExec에전송합니다. ModifyExec 페이지에서 Redis 에데이터를갱신합니다. admin/class/modifyexec.php class adminmodifyexec extends Controller_AdminExec protected function run($aargs) $abanner = $this->getbanner($aargs['seq']); list($avalue,$iindex) = $this->getvalueindex($abanner); $aimginfo = $this->doupload(); if( $aimginfo!== false ) $this->unlinkimg($avalue); $bresult = $this->setbanner($aargs, $aimginfo, $avalue, $iindex); if ( $bresult!== true ) $this->writejs('alert(" 오류가발생했습니다.");'); $this->writejs('location.href="[link=admin/index]";'); else $this->writejs('alert(" 수정되었습니다.");'); $this->writejs('location.href="[link=admin/modify]?seq= '.$aargs['seq'].'";'); private function setbanner($aargs, $aimginfo, $avalue, $iindex) $adata = array(); $adata = $avalue; $adata['ba_name'] = $aargs['ba_name']; $adata['ba_link'] = ( substr( $aargs['ba_link'], 0, 4 )!= "http" )? " : $aargs['ba_link']; $adata['ba_target'] = $aargs['ba_target']; 61

62 $adata['ba_width'] = $aargs['ba_width']; $adata['ba_height'] = $aargs['ba_height']; if ( $aimginfo!== false ) $adata['ba_img_path'] = $aimginfo['upload_path']; $adata['ba_img_name'] = $aimginfo['upload_name']; $sdataserial = serialize($adata); $bresult = $this->redis->lset( libkey::ba_key, $iindex, $sdataserial ); if ( $bresult!== false ) return true; else return false; private function unlinkimg( $avalue ) $this->storage->unlink( $avalue['ba_img_path']. $avalue['ba_img_name'] ); private function doupload() 생략 private function getbanner($iseq) 생략 private function getvalueindex( $arow ) 생략 private function makeuploaddir( $spath ) 생략 private function getuploadpath() 생략 수정할배너의데이터를얻어와기본값을설정합니다. 업로드된이미지가있을시이미지를업로드한뒤 Storage->unlink 함수를사용하여원래있던이미지를삭제합니다. 수정된배너정보로 Redis->lSet() 함수를사용하여 Redis에갱신합니다. 62

63 그림 3-50 배너의사용여부를설정하는 StatusExec 페이지를구현합니다. admin/class/statusexec.php class adminstautsexec extends Controller_AdminExec protected function run($aargs) if ( isset($aargs['seq']) ) $abanner = $this->getbanner($aargs['seq']); list($avalue,$iindex) = $this->getvalueindex($abanner); $avalue['ba_status'] = $aargs['status']; $iindex, $sdataserial ); if ( isset($iindex) ) $sdataserial = serialize($avalue); $bresult = $this->redis->lset( libkey::ba_key, ; if ( $bresult ) $this->writejs('location.href="[link=admin/index]"'); return true; $this->writejs('history.back(-1)'); return false; private function getbanner($iseq) 생략 private function getvalueindex( $arow ) 생략 63

64 Seq 값과 Status 값을전송받아 Redis->lSet 함수로사용여부값을갱신합니다. 갱신한뒤 [link=admin/index] 페이지로돌아갑니다. 설정된사용여부값은 Front에출력시기준으로사용됩니다. 마지막으로등록된배너를삭제하는 DeleteExec 페이지를구현합니다. resource/js/index.js $(document).ready(function() var indexmethod = getindexmethod(); var indexevent = getindexevent(indexmethod); indexevent.load(); ); function getindexevent(indexmethod) return load : function() var self = this; self.bannerdelete();, bannerdelete : function() $(".chkall").click(function() if ( this.checked ) $(".chk_lists").attr("checked", "checked"); else $(".chk_lists").removeattr("checked"); ); $(".ebtndelete").click(function() indexmethod.dodelete(); ); function getindexmethod() return dodelete : function() var seqs = []; $(".chk_lists").each(function() if ( this.checked ) seqs.push( this.value ); ); if ( seqs.length < 1 ) alert( ' 삭제하실배너을선택하셔야합니다.'); 64

65 return; if ( confirm(' 선택된배너를삭제합니다 ' ) ) location.href = "[link=admin/deleteexec]?seqs=" + seqs.join(","); 체크된배너들을검사합니다. 하나이상의체크를판단한후체크된배너의 Seq를 DeleteExec 페이지에전송합니다. join(",") 함수를사용하여배열값을 ", " 구분의문자열로변환합니다. Admin/class/adminDeleteExec.php class admindeleteexec extends Controller_AdminExec protected function run($aargs) $iseqs = $aargs['seqs']; if ( $iseqs ) $aseq = explode( ",", $iseqs ); foreach ( $aseq as $iseq ) $abanner = $this->getbanner($iseq); if ( count( $abanner ) > 0 ) list($avalue,$iindex) = $this- >getvalueindex($abanner); $this->storage- >unlink( $avalue['ba_img_path']. $avalue['ba_img_name'] ); if ( count( $avalue ) > 0 && isset($iindex) ) $sdataserial = serialize($avalue); $bresult = $this->redis- >lrem( libkey::ba_key, $sdataserial, 0 ); if ( $bresult ) $this->writejs("location.href='[link=admin/index]'"); return; $this->writejs('history.back(-1)'); return false; private function getbanner($iseq) 생략 65

66 private function getvalueindex( $arow ) 생략 삭제할배너가두개이상일때 Seq값이 ", " 구분으로전송됩니다. 전송된문자열을 explode 함수로배열화한뒤 foreach 루프문을사용합니다. storage->unlink() 함수를사용하여 Storage 에서저장된이미지를삭제합니다. Redis->lRem() 함수를사용하여해당배너를 Redis 에서삭제합니다. 세번째인자값을 0으로하면해당데이터하나만삭제합니다. 0이외의값의설명은링크를참고바랍니다. ( lrem 참고 : ) 배너를관리하는 Admin 페이지가완성되었습니다. 이제등록된배너를출력하는 Front 를구현합니다 Front ( Loopfetch ) 배너들을출력합니다. 배너전체출력과 Seq 번호로개별적인출력을구현합니다. public_html/demo.css.xans-devbanner li padding: 0 0 5px; list-style-type: none; public_html/demo.html <ul module="devbanner_display"> <!--@css(./demo.css)--> <li>$banner</li> <li>$banner</li> </ul> <ul module="devbanner_display_1"> <!--@css(./demo.css)--> <li>$banner</li> </ul> 위의코드처럼 <li>$banner</li> 를두번이상똑같이반복하여코드를구현하게되면반복된데이터를 SDK의 loopfetch 함수를사용하여 front에서사용할수있습니다. 스마트디자인에서 css를설정할수있도록 html 코드에서 <!--@css(./demo.css)--> 처럼 css를추가합니다. module="devbanner_display_x" 는 X를 SDK의 getsequence 함수를사용하여값을얻습니다. 배너의 Seq 를기입하여개별적인출력을구현합니다. admin/front/frontdisplay.php class frontdisplay extends Controller_Front public function run( $aargs ) $iseq = $this->getsequence(); if (!empty( $iseq ) ) 66

67 $this->bannerassign( $iseq ); else $this->loopassign(); $this->setstatuscode('200'); private function bannerassign($iseq) $arow = $this->getbanner($iseq); list($avalue,$iindex) = $this->getvalueindex($arow); $alist[] = $avalue; $shtml = ""; if ( isset( $alist[0] ) ) $shtml = $this->makehtml( $alist[0] ); $this->assign('banner', $shtml); private function loopassign() $alist = array(); $iloop = $this->getloop(); $aalllist = $this->redis->lrange( libkey::ba_key, 0, -1 ); $abannerall = array(); $icount = count($aalllist); for ( $i = 0; $i < $icount; $i++ ) $abannerall[] = unserialize( $aalllist[$i] ); foreach ( $abannerall as $k => $v ) if ( $v['ba_status'] == 'N') $alist[] = $v; $adata = $this->makeloopfetchdata( $alist ); if ($adata) if ( $iloop > 1 ) $this->loopfetch($adata); else $this->loopfetch( 'banner', $adata[0]['banner'] ); else $this->assign('banner', "<div class='bannermanage-none-info'> 등록된배너가없습니다.</div>"); public function makeloopfetchdata( $abanner ) 67

68 $adata = array(); if ( is_array($abanner) ) foreach( $abanner as $arow ) $adata[]['banner'] = $this->makehtml($arow); return $adata; private function makehtml( $arow ) $shtml = ""; $shtml.= '<div>'; $slink = ( substr( $arow['ba_link'], 0, 4 )!= "http" )? " : $arow['ba_link']; $starget = ( $arow['ba_target'] == 'N' )? "" : " target='_blank' " ; $shtml.= '<a class="banner_link" href="'. $slink.'" '. $starget. ' rel="'. $arow['seq']. '" >'; if (stripos($arow['ba_img_path'], 'public_files/')===0) $arow['ba_img_path'] = str_ireplace('public_files/', '', $arow['ba_img_path']); $shtml.= '<img src="[pfile='. $arow['ba_img_path']. $arow['ba_img_name'].']" alt="'. $arow['ba_name']. '" '; $shtml.= 'width="'.$arow['ba_width'].'" height="'.$arow['ba_height'].'"/>'; $shtml.= "</a>\n"; $shtml.= "</div>\n"; return $shtml; private function getbanner($iseq) 생략 private function getvalueindex( $arow ) 생략 SDK의 getsequence 함수를사용하여 module=" 앱아이디 _ClassName_X" 의 X 값을얻어옵니다. X값의유무를판단하여배너전체를출력할지해당 Seq에배너만출력할지구분합니다. 해당 Seq의배너만출력할경우 Seq로배너데이터를 Redis 에서얻습니다. 얻은데이터를 makehtml 함수를사용하여 Html을문자열로재구성한뒤 assign 합니다. 전체를출력할경우전체배너데이터를 makehtml 함수로재구성한뒤 68

69 makeloopfetchdata 함수를사용하여 2차원배열로만듭니다. 배너 HTML을값으로 'banner' 를 index로구성된 2차원배열데이터는 SDK의 loopfetch 함수의인자로사용됩니다. SDK의 getloop 함수로얻은 $iloop 값은반복된 Html 코드 ( <li>$banner</li> ) 의개수를반환합니다. 이값이 1보다클때전체배너의데이터를 loopfetch 하고그렇지않을경우배너하나의데이터만 loopfetch( $this->loopfetch( 'banner', $adata[0]['banner'] ); ) 합니다. 그림 3-51 위의붉은박스가전체배너를출력한 Front 이고아래붉은박스가 1번배너를출력한모습입니다. 이제 C-Store 올리기, 실제몰에적용과정을통해앱을완성합니다. 3.5 추가정보 Redis 설명 Redis 는 "Remote Dictionary System" 의약자로메모리기반의 Key / Value Store 입니다. No-Sql 데이터베이스이며 In memory 데이터베이스로분류하기도합니다. 다양한데이터구조체를지원하며인스턴트그램, LINE메신져, StackOverFlow, 등여러서비스에사용되고있습니다. 모든데이터를메모리에저장하여매우빠른 Read, Write 속도가장점입니다. 69

70 기본명령어 In Redis In SDK SET key value $this->redis-> 키에값를저장합니다. set( "key", "value" ); GET key get( "key" ); 키에값를불러옵니다. INCR key incr( "key" ); 키에저장된정수값에 1을더해줍니다. DEL key del( "key" ); 키를삭제합니다. RPUSH key value rpush( "key", 키에값을추가합니다. "value"); LRANGE key i j lrange( "key", i, j ); 키에저장된값을구간별로불러옵니다. LINDEX key i lindex( "key", i ); 키에저장된값을인덱스별로불러옵니다. LSET key i value lset( "key", i, 키에저장된값을인덱스별로수정합 "value" ); 니다. LLEN key llen( "key" ); 키에저장된값의전체개수를불러옵니다. LREM key i value lrem( "key","value", 키에저장된값을인덱스를기준으로 i ); 삭제합니다. 표 3-5 참고사이트 : Git 설명 Git 는프로그램등의소스코드관리를위한분산버전관리시스템입니다. 빠른수행속도에중점을두고있는것이특징입니다. 최초에는 Linus Benedict Torvalds 가리눅스커널개발에이용하려고개발하였으나, 현재는널리사용되고있습니다. Git의작업폴더는모두, 전체기록과각기록을추적할수있는정보를포함하고있으며, 완전한형태의저장소입니다. 네트워크에접근하거나중앙서버에의존하지않습니다 기본명령어 Commands git --version 현재 git의버전을확인합니다. git init 현재디렉토리에 git 저장소를생성합니다. git add 파일명 git에파일또는폴더를추가합니다. git commit 추가되거나변경된내용을확정합니다. git push 원격저장소를변경내용으로갱신합니다. git pull 로컬저장소를원격저장소에맞춰갱신합니다. Git status 커밋되지않은변경사항을조사합니다. Git diff 원격저장소와현재작업트리의차이점을보여줍니다. Git mv 파일명새파일명 기존의존재하는파일을새파일로이동합니다. 70

71 Git checkout --파일명 커밋하지않은파일의변경내용을취소하고이전상태로돌립 니다. svn에서 revert와동일합니다. Git branch 현재존재하는브랜치를조회합니다. Git branch 브랜치명 브랜치명의새로운브랜치를만듭니다. Git log 커밋로그들을볼수있습니다. Git revert 커밋명 기존의커밋에서변경한내용을취소해서새커밋을만듭니 다. Git clone 저장소주소 원격저장소를복제하여저장소를생성합니다. Git fetch 원격저장소에서변경사항으로원격브랜치를생성합니다. 참고사이트 : UI 가이드 표준 UI 가이드 카페24는쇼핑몰운영자들의편의를의해크로스브라우징및내부의표준을준수하고있습니다. 또한개발자분들의편의를위해따로 UI에대한고민을덜어드리기위해표준 UI/UX 가이드를제공해드리고있습니다. ( 바로가기 : 71

72 4 SDK Class 4.1 상속관계 Is-a 관계 Controller_Type_ Parent_Base Controller_Type_ Rest Controller_Type_ Parent_Template Controller_ Api Controller_Type_ View Controller_Type_ Xans Controller_ Admin Controller_Type_ Exec Controller_ Front Controller_ AdminExec Controller_ FrontExec Has-a 관계 ApplicationInterface Request ApplicationInterface Response Service Controller_Type_ Parent_Base Storage RedisSdk Language Upload 72

73 Controller_Type_ Parent_Template C_T_P_T Fetcher C_T_P_T UIPackage 4.2 Function Library class Controller_Type_Parent_Base getargs mixed getargs( $sname ) URL 매개변수값을반환합니다. Parameter string $sname 반환할매개변수의값의키를입력합니다. Example [ URL ] $ino = $this->getargs('no'); $ino -> 3 setstatuscode object setstatuscode( $istatuscode ) 현재페이지의상태값을설정합니다. Parameter integer $istatuscode 설정할상태값을입력합니다. Example $this->setstatuscode(200); StatusCode -> 200 getstatuscode 73

74 int getstatuscode() 현재페이지의상태값을인트형으로반환합니다. Example $istatuscode = $this->getstatuscode(); $istatuscode -> 200 setmessage object setmessage( $smessage ) HTTP 메시지를설정합니다. Parameter string $smessage 설정할 HTTP 메시지를입력합니다. Example $this->setmessage('interface Error!'); Message -> Interface Error! getmessage string getmessage() HTTP 메시지를가져옵니다. Example $this->setmessage('ok.'); $smessage = $this->getmessage(); $smessage -> 'Ok.' getinterface string getinterface() 현재페이지의 Interface 를반환합니다. Example $sinterface = $this->getinterface(); $sinterface -> 'Index' 74

75 getlangcode string getlangcode() 현재페이지의 Language Code 를반환합니다. Example $slangcode = $this->getlangcode(); $slangcode -> 'ko' class Controller_Type_Rest get get( $args ) Rest Api 의 GET Method Parameter array $args URL 매개변수 post post( $args ) Rest Api 의 POST Method Parameter array $args URL 매개변수 put put( $args ) Rest Api 의 PUT Method Parameter array $args URL 매개변수 delete 75

76 delete( $args ) Rest Api 의 DELETe Method Parameter array $args URL 매개변수 class Controller_Type_Parent_Template assign object assign( $sassign, $mdata ) php 데이터를뷰로 fetch 합니다. Parameter string $sassign 설정할키를입력합니다. mixed $mdata fetch 할데이터를입력합니다. Example [ tpl ] <div><?php echo $title?></div> $this->assign( 'title', 'Assign Func' ); Output -> 'Assign Func' writejs object writejs( $scontent ) JavaScript 를 php 에서직접사용합니다. Parameter string $scontent 사용할 JavaScript를문자열로입력합니다. Example $this->writejs( 'alert("sdk writejs")' ); JS -> alert('sdk writejs'); writecss object writecss( $scontent ) CSS 를 php 에서직접사용합니다. 76

1 개요 1.1 Cafe24 Application SDK 란? Cafe24 Application( 이하, Application) 은 Cafe24 Application Store 시스템에서실행하는 PHP로작성된어플리케이션으로써, EC호스팅, 빌더호스팅등서비스호스팅을통해설

1 개요 1.1 Cafe24 Application SDK 란? Cafe24 Application( 이하, Application) 은 Cafe24 Application Store 시스템에서실행하는 PHP로작성된어플리케이션으로써, EC호스팅, 빌더호스팅등서비스호스팅을통해설 1 개요 1.1 Cafe24 Application SDK 란? Cafe24 Application( 이하, Application) 은 Cafe24 Application Store 시스템에서실행하는 PHP로작성된어플리케이션으로써, EC호스팅, 빌더호스팅등서비스호스팅을통해설치되며, 서비스호스팅을통해요청된어플리케이션이 Cafe24 Application Runtime

More information

C스토어 사용자 매뉴얼

C스토어 사용자 매뉴얼 쪽지 APP 디자인적용가이드 I. 쪽지 APP 소개 2 I. 쪽지 APP 소개 쪽지 APP 을통해쇼핑몰의특정회원또는특정등급의회원그룹에게 알림메시지나마케팅을위한쪽지를발송하실수있습니다. 쪽지 APP의주요기능 1. 전체회원, 특정ID, 특정회원그룹별로쪽지발송가능 2. 발송예약기능 3. 발송한쪽지에대해수신및열람내역조회가능 4. 쇼핑몰페이지에서쪽지함과쪽지알림창제공 3

More information

API STORE 키발급및 API 사용가이드 Document Information 문서명 : API STORE 언어별 Client 사용가이드작성자 : 작성일 : 업무영역 : 버전 : 1 st Draft. 서브시스템 : 문서번호 : 단계 : Docum

API STORE 키발급및 API 사용가이드 Document Information 문서명 : API STORE 언어별 Client 사용가이드작성자 : 작성일 : 업무영역 : 버전 : 1 st Draft. 서브시스템 : 문서번호 : 단계 : Docum API STORE 키발급및 API 사용가이드 Document Information 문서명 : API STORE 언어별 Client 사용가이드작성자 : 작성일 : 2012.11.23 업무영역 : 버전 : 1 st Draft. 서브시스템 : 문서번호 : 단계 : Document Distribution Copy Number Name(Role, Title) Date

More information

PowerPoint Template

PowerPoint Template JavaScript 회원정보 입력양식만들기 HTML & JavaScript Contents 1. Form 객체 2. 일반적인입력양식 3. 선택입력양식 4. 회원정보입력양식만들기 2 Form 객체 Form 객체 입력양식의틀이되는 태그에접근할수있도록지원 Document 객체의하위에위치 속성들은모두 태그의속성들의정보에관련된것

More information

var answer = confirm(" 확인이나취소를누르세요."); // 확인창은사용자의의사를묻는데사용합니다. if(answer == true){ document.write(" 확인을눌렀습니다."); else { document.write(" 취소를눌렀습니다.");

var answer = confirm( 확인이나취소를누르세요.); // 확인창은사용자의의사를묻는데사용합니다. if(answer == true){ document.write( 확인을눌렀습니다.); else { document.write( 취소를눌렀습니다.); 자바스크립트 (JavaScript) - HTML 은사용자에게인터페이스 (interface) 를제공하는언어 - 자바스크립트는서버로데이터를전송하지않고서할수있는데이터처리를수행한다. - 자바스크립트는 HTML 나 JSP 에서작성할수있고 ( 내부스크립트 ), 별도의파일로도작성이가능하다 ( 외 부스크립트 ). - 내부스크립트 - 외부스크립트

More information

Eclipse 와 Firefox 를이용한 Javascript 개발 발표자 : 문경대 11 년 10 월 26 일수요일

Eclipse 와 Firefox 를이용한 Javascript 개발 발표자 : 문경대 11 년 10 월 26 일수요일 Eclipse 와 Firefox 를이용한 Javascript 개발 발표자 : 문경대 Introduce Me!!! Job Jeju National University Student Ubuntu Korean Jeju Community Owner E-Mail: ned3y2k@hanmail.net Blog: http://ned3y2k.wo.tc Facebook: http://www.facebook.com/gyeongdae

More information

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher( 실행할페이지.jsp); 다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp"); dispatcher.forward(request, response); - 위의예에서와같이 RequestDispatcher

More information

Microsoft Word - windows server 2003 수동설치_non pro support_.doc

Microsoft Word - windows server 2003 수동설치_non pro support_.doc Windows Server 2003 수동 설치 가이드 INDEX 운영체제 설치 준비과정 1 드라이버를 위한 플로피 디스크 작성 2 드라이버를 위한 USB 메모리 작성 7 운영체제 설치 과정 14 Boot Sequence 변경 14 컨트롤러 드라이버 수동 설치 15 운영체제 설치 17 운영체제 설치 준비 과정 Windows Server 2003 에는 기본적으로

More information

- 목차 - - ios 개발환경및유의사항. - 플랫폼 ios Project. - Native Controller와플랫폼화면연동. - 플랫폼 Web(js)-Native 간데이터공유. - 플랫폼확장 WN Interface 함수개발. - Network Manager clas

- 목차 - - ios 개발환경및유의사항. - 플랫폼 ios Project. - Native Controller와플랫폼화면연동. - 플랫폼 Web(js)-Native 간데이터공유. - 플랫폼확장 WN Interface 함수개발. - Network Manager clas 플랫폼사용을위한 ios Native Guide - 목차 - - ios 개발환경및유의사항. - 플랫폼 ios Project. - Native Controller와플랫폼화면연동. - 플랫폼 Web(js)-Native 간데이터공유. - 플랫폼확장 WN Interface 함수개발. - Network Manager class 개발. - Native Controller에서

More information

제이쿼리 (JQuery) 정의 자바스크립트함수를쉽게사용하기위해만든자바스크립트라이브러리. 웹페이지를즉석에서변경하는기능에특화된자바스크립트라이브러리. 사용법 $( 제이쿼리객체 ) 혹은 $( 엘리먼트 ) 참고 ) $() 이기호를제이쿼리래퍼라고한다. 즉, 제이쿼리를호출하는기호

제이쿼리 (JQuery) 정의 자바스크립트함수를쉽게사용하기위해만든자바스크립트라이브러리. 웹페이지를즉석에서변경하는기능에특화된자바스크립트라이브러리. 사용법 $( 제이쿼리객체 ) 혹은 $( 엘리먼트 ) 참고 ) $() 이기호를제이쿼리래퍼라고한다. 즉, 제이쿼리를호출하는기호 제이쿼리 () 정의 자바스크립트함수를쉽게사용하기위해만든자바스크립트라이브러리. 웹페이지를즉석에서변경하는기능에특화된자바스크립트라이브러리. 사용법 $( 제이쿼리객체 ) 혹은 $( 엘리먼트 ) 참고 ) $() 이기호를제이쿼리래퍼라고한다. 즉, 제이쿼리를호출하는기호 CSS와마찬가지로, 문서에존재하는여러엘리먼트를접근할수있다. 엘리먼트접근방법 $( 엘리먼트 ) : 일반적인접근방법

More information

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc NTAS and FRAME BUILDER Install Guide NTAS and FRAME BUILDER Version 2.5 Copyright 2003 Ari System, Inc. All Rights reserved. NTAS and FRAME BUILDER are trademarks or registered trademarks of Ari System,

More information

Microsoft Word - src.doc

Microsoft Word - src.doc IPTV 서비스탐색및콘텐츠가이드 RI 시스템운용매뉴얼 목차 1. 서버설정방법... 5 1.1. 서비스탐색서버설정... 5 1.2. 컨텐츠가이드서버설정... 6 2. 서버운용방법... 7 2.1. 서비스탐색서버운용... 7 2.1.1. 서비스가이드서버실행... 7 2.1.2. 서비스가이드정보확인... 8 2.1.3. 서비스가이드정보추가... 9 2.1.4. 서비스가이드정보삭제...

More information

DocsPin_Korean.pages

DocsPin_Korean.pages Unity Localize Script Service, Page 1 Unity Localize Script Service Introduction Application Game. Unity. Google Drive Unity.. Application Game. -? ( ) -? -?.. 준비사항 Google Drive. Google Drive.,.. - Google

More information

Week13

Week13 Week 13 Social Data Mining 02 Joonhwan Lee human-computer interaction + design lab. Crawling Twitter Data OAuth Crawling Data using OpenAPI Advanced Web Crawling 1. Crawling Twitter Data Twitter API API

More information

Facebook API

Facebook API Facebook API 2조 20071069 임덕규 20070452 류호건 20071299 최석주 20100167 김민영 목차 Facebook API 설명 Android App 생성 Facebook developers App 등록 Android App Facebook SDK 추가 예제 Error 사항정리 Facebook API Social Plugin Facebook

More information

Controller_Type_ Parent_Template C_T_P_T Fetcher C_T_P_T UIPackage 1.2 Function Library class Controller_Type_Parent_Base getargs mixed getargs(

Controller_Type_ Parent_Template C_T_P_T Fetcher C_T_P_T UIPackage 1.2 Function Library class Controller_Type_Parent_Base getargs mixed getargs( 1 SDK Class 1.1 상속관계 1.1.1 Is-a 관계 Controller_Type_ Parent_Base Controller_Type_ Rest Controller_Type_ Parent_Template Controller_ Api Controller_Type_ View Controller_Type_ Xans Controller_ Admin Controller_Type_

More information

메뉴얼41페이지-2

메뉴얼41페이지-2 데이터 기반 맞춤형 성장관리 솔루션 스마트빌 플러스 은행계좌등록 은행계좌를 조회하여 등록합니다. 신용카드등록 신용카드를 조회하여 등록합니다. 금융정보 자동수집을 위하여 인증서이름, 아이디, 비밀번호를 등록합니다. 통합 자동 수집 금융정보 통합 자동수집을 실행합니다 은행계좌등록 은행계좌를 조회하여 등록합니다. 신용카드등록 신용카드를 조회하여

More information

2파트-07

2파트-07 CHAPTER 07 Ajax ( ) (Silverlight) Ajax RIA(Rich Internet Application) Firefox 4 Ajax MVC Ajax ActionResult Ajax jquery Ajax HTML (Partial View) 7 3 GetOrganized Ajax GetOrganized Ajax HTTP POST 154 CHAPTER

More information

구축환경 OS : Windows 7 그외 OS 의경우교재 p26-40 참조 Windows 의다른버전은조금다르게나타날수있음 Browser : Google Chrome 다른브라우저를사용해도별차이없으나추후수업의모든과정은크롬사용 한

구축환경 OS : Windows 7 그외 OS 의경우교재 p26-40 참조 Windows 의다른버전은조금다르게나타날수있음 Browser : Google Chrome 다른브라우저를사용해도별차이없으나추후수업의모든과정은크롬사용   한 수업환경구축 웹데이터베이스구축및실습 구축환경 OS : Windows 7 그외 OS 의경우교재 p26-40 참조 Windows 의다른버전은조금다르게나타날수있음 Browser : Google Chrome 다른브라우저를사용해도별차이없으나추후수업의모든과정은크롬사용 http://chrome.google.com 한림대학교웹데이터베이스 - 이윤환 APM 설치 : AUTOSET6

More information

슬라이드 1

슬라이드 1 쇼핑몰, 딥줌그리고 Azure Doubleguy 이철성 Forbiz 싞훈식 Overview 기존서비스들의고민 클라우드의장점 Windows.Azure.com 의사용방법 PHP Azure SDK 사용방법 ( 이클립스를이용한 ) PHP Azure Command Prompt 를이용한패키징 상호연동데모 DeepZoom Composing Services 실버라이트딥줌타일이미지생성서버혹은서비스

More information

Spring Boot/JDBC JdbcTemplate/CRUD 예제

Spring Boot/JDBC JdbcTemplate/CRUD 예제 Spring Boot/JDBC JdbcTemplate/CRUD 예제 오라클자바커뮤니티 (ojc.asia, ojcedu.com) Spring Boot, Gradle 과오픈소스인 MariaDB 를이용해서 EMP 테이블을만들고 JdbcTemplate, SimpleJdbcTemplate 을이용하여 CRUD 기능을구현해보자. 마리아 DB 설치는다음 URL 에서확인하자.

More information

Windows 8에서 BioStar 1 설치하기

Windows 8에서 BioStar 1 설치하기 / 콘텐츠 테이블... PC에 BioStar 1 설치 방법... Microsoft SQL Server 2012 Express 설치하기... Running SQL 2012 Express Studio... DBSetup.exe 설정하기... BioStar 서버와 클라이언트 시작하기... 1 1 2 2 6 7 1/11 BioStar 1, Windows 8 BioStar

More information

Javascript.pages

Javascript.pages JQuery jquery part1 JavaScript : e-mail:leseraphina@naver.com http://www.webhard.co.kr I.? 2 ......,,. : : html5 ; ; .

More information

Microsoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx

Microsoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx To be an Android Expert 문양세강원대학교 IT 대학컴퓨터학부 Eclipse (IDE) JDK Android SDK with ADT IDE: Integrated Development Environment JDK: Java Development Kit (Java SDK) ADT: Android Development Tools 2 JDK 설치 Eclipse

More information

I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r

I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r Jakarta is a Project of the Apache

More information

Office 365 사용자 가이드

Office 365 사용자 가이드 [ 여기에입력 ] Office 365 사용자가이드 OFFICE 365 모바일설정 목차 1. 모바일에메일계정추가하기... 2 2. Lync 2013 App 설치하기... 7 3. Office Mobile App 설치하기... 10 4. Office for ipad 설치하기... 16-1 - 모바일기기에 Office 365 를설정해보세요. 모바일기기에 Office

More information

rmi_박준용_final.PDF

rmi_박준용_final.PDF (RMI) - JSTORM http://wwwjstormpekr (RMI)- Document title: Document file name: Revision number: Issued by: Document Information (RMI)- rmi finaldoc Issue Date: Status:

More information

ActFax 4.31 Local Privilege Escalation Exploit

ActFax 4.31 Local Privilege Escalation Exploit NSHC 2013. 05. 23 악성코드 분석 보고서 [ Ransomware 악성코드 ] 사용자의 컴퓨터를 강제로 잠그고 돈을 요구하는 형태의 공격이 기승을 부리고 있 습니다. 이러한 형태의 공격에 이용되는 악성코드는 Ransomware로 불리는 악성코 드 입니다. 한번 감염 시 치료절차가 복잡하며, 보고서 작성 시점을 기준으로 지속 적인 피해자가 발생되고

More information

<C0CCBCBCBFB52DC1A4B4EBBFF82DBCAEBBE7B3EDB9AE2D313939392D382E687770>

<C0CCBCBCBFB52DC1A4B4EBBFF82DBCAEBBE7B3EDB9AE2D313939392D382E687770> i ii iii iv v vi 1 2 3 4 가상대학 시스템의 국내외 현황 조사 가상대학 플랫폼 개발 이상적인 가상대학시스템의 미래상 제안 5 웹-기반 가상대학 시스템 전통적인 교수 방법 시간/공간 제약을 극복한 학습동기 부여 교수의 일방적인 내용전달 교수와 학생간의 상호작용 동료 학생들 간의 상호작용 가상대학 운영 공지사항,강의록 자료실, 메모 질의응답,

More information

어댑터뷰

어댑터뷰 04 커스텀어댑터뷰 (Custom Adapter View) 커스텀어댑터뷰 (Custom Adapter View) 커스텀어댑터뷰 (Custom Adatper View) 란? u 어댑터뷰의항목하나는단순한문자열이나이미지뿐만아니라, 임의의뷰가될수 있음 이미지뷰 u 커스텀어댑터뷰설정절차 1 2 항목을위한 XML 레이아웃정의 어댑터정의 3 어댑터를생성하고어댑터뷰객체에연결

More information

Microsoft PowerPoint - web-part03-ch19-node.js기본.pptx

Microsoft PowerPoint - web-part03-ch19-node.js기본.pptx 과목명: 웹프로그래밍응용 교재: 모던웹을 위한 JavaScript Jquery 입문, 한빛미디어 Part3. Ajax Ch19. node.js 기본 2014년 1학기 Professor Seung-Hoon Choi 19 node.js 기본 이 책에서는 서버 구현 시 node.js 를 사용함 자바스크립트로 서버를 개발 다른서버구현기술 ASP.NET, ASP.NET

More information

제8장 자바 GUI 프로그래밍 II

제8장 자바 GUI 프로그래밍 II 제8장 MVC Model 8.1 MVC 모델 (1/7) MVC (Model, View, Controller) 모델 스윙은 MVC 모델에기초를두고있다. MVC란 Xerox의연구소에서 Smalltalk 언어를바탕으로사용자인터페이스를개발하기위한방법 MVC는 3개의구성요소로구성 Model : 응용프로그램의자료를표현하기위한모델 View : 자료를시각적으로 (GUI 방식으로

More information

Install stm32cubemx and st-link utility

Install stm32cubemx and st-link utility STM32CubeMX and ST-LINK Utility for STM32 Development 본문서는 ST Microelectronics 의 ARM Cortex-M 시리즈 Microcontroller 개발을위해제공되는 STM32CubeMX 와 STM32 ST-LINK Utility 프로그램의설치과정을설명합니다. 본문서는 Microsoft Windows 7

More information

untitled

untitled Push... 2 Push... 4 Push... 5 Push... 13 Push... 15 1 FORCS Co., LTD A Leader of Enterprise e-business Solution Push (Daemon ), Push Push Observer. Push., Observer. Session. Thread Thread. Observer ID.

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 System Software Experiment 1 Lecture 5 - Array Spring 2019 Hwansoo Han (hhan@skku.edu) Advanced Research on Compilers and Systems, ARCS LAB Sungkyunkwan University http://arcs.skku.edu/ 1 배열 (Array) 동일한타입의데이터가여러개저장되어있는저장장소

More information

Microsoft PowerPoint - Java7.pptx

Microsoft PowerPoint - Java7.pptx HPC & OT Lab. 1 HPC & OT Lab. 2 실습 7 주차 Jin-Ho, Jang M.S. Hanyang Univ. HPC&OT Lab. jinhoyo@nate.com HPC & OT Lab. 3 Component Structure 객체 (object) 생성개념을이해한다. 외부클래스에대한접근방법을이해한다. 접근제어자 (public & private)

More information

PathEye 공식 블로그 다운로드 받으세요!! 지속적으로 업그래이드 됩니다. 여러분의 의견을 주시면 개발에 반영하겠 습니다.

PathEye 공식 블로그 다운로드 받으세요!!   지속적으로 업그래이드 됩니다. 여러분의 의견을 주시면 개발에 반영하겠 습니다. PathEye Mobile Ver. 0.71b 2009. 3. 17 By PathEye 공식 블로그 다운로드 받으세요!! http://blog.patheye.com 지속적으로 업그래이드 됩니다. 여러분의 의견을 주시면 개발에 반영하겠 습니다. PathEye 설치 1/3 최종 배포 버전을 다 운로드 받습니다. 다운로드된 파일은 CAB 파일입니다. CAB 파일에는

More information

Microsoft PowerPoint - 04-UDP Programming.ppt

Microsoft PowerPoint - 04-UDP Programming.ppt Chapter 4. UDP Dongwon Jeong djeong@kunsan.ac.kr http://ist.kunsan.ac.kr/ Dept. of Informatics & Statistics 목차 UDP 1 1 UDP 개념 자바 UDP 프로그램작성 클라이언트와서버모두 DatagramSocket 클래스로생성 상호간통신은 DatagramPacket 클래스를이용하여

More information

Microsoft PowerPoint 세션.ppt

Microsoft PowerPoint 세션.ppt 웹프로그래밍 () 2006 년봄학기 문양세강원대학교컴퓨터과학과 세션변수 (Session Variable) (1/2) 쇼핑몰장바구니 장바구니에서는사용자가페이지를이동하더라도장바구니의구매물품리스트의내용을유지하고있어야함 PHP 에서사용하는일반적인변수는스크립트의수행이끝나면모두없어지기때문에페이지이동시변수의값을유지할수없음 이러한문제점을해결하기위해서 PHP 에서는세션 (session)

More information

UNIST_교원 홈페이지 관리자_Manual_V1.0

UNIST_교원 홈페이지 관리자_Manual_V1.0 Manual created by metapresso V 1.0 3Fl, Dongin Bldg, 246-3 Nonhyun-dong, Kangnam-gu, Seoul, Korea, 135-889 Tel: (02)518-7770 / Fax: (02)547-7739 / Mail: contact@metabrain.com / http://www.metabrain.com

More information

INDEX 들어가기 고민하기 HTML(TABLE/FORM) CSS JS

INDEX 들어가기 고민하기 HTML(TABLE/FORM) CSS JS 개발자에게넘겨주기편한 TABLE&FORM 마크업 김남용 INDEX 들어가기 고민하기 HTML(TABLE/FORM) CSS JS 들어가기 이제는 ~ 서로간의이슈웹표준 & 웹접근성왜웹표준으로해야할까요? 모든웹페이지는 ~ 퍼블리싱순서 이제는 ~ 디자이너 디자이너 퍼블리셔 Front-end (UI 개발자 ) 퍼블리셔 Front-end (UI 개발자 ) 서버개발자 서버개발자

More information

SBR-100S User Manual

SBR-100S User Manual ( 1 / 13 ) SBR-100S 모델에 대한 사용자 펌웨어 업그레이드 방법을 안내해 드립니다. SBR-100S 는 신규 펌웨어가 있을시 FOTA(자동업데이트) 기능을 통하여 자동 업그레이드가 되며, 필요시 사용자가 신규 펌웨어를 다운받아 수동으로 업그레이드 할 수 있습니다. 1. 준비하기 1.1 연결 장치 준비 펌웨어 업그레이드를 위해서는 SBR-100S

More information

하둡을이용한파일분산시스템 보안관리체제구현

하둡을이용한파일분산시스템 보안관리체제구현 하둡을이용한파일분산시스템 보안관리체제구현 목 차 - 1 - - 2 - - 3 - - 4 - - 5 - - 6 - - 7 - - 8 - 1. 사용자가웹서버에로그인하여다양한서비스 ( 파일업 / 다운로드, 폴더생성 / 삭제 ) 를활용 2. 웹서버와연동된하둡서버에서업 / 다운로드된파일을분산저장. ( 자료송수신은 SSH 활용 ) - 9 - - 10 - - 11 -

More information

Web Scraper in 30 Minutes 강철

Web Scraper in 30 Minutes 강철 Web Scraper in 30 Minutes 강철 발표자 소개 KAIST 전산학과 2015년부터 G사에서 일합니다. 에서 대한민국 정치의 모든 것을 개발하고 있습니다. 목표 웹 스크래퍼를 프레임웍 없이 처음부터 작성해 본다. 목표 웹 스크래퍼를 프레임웍 없이 처음부터 작성해 본다. 스크래퍼/크롤러의 작동 원리를 이해한다. 목표

More information

리눅스설치가이드 3. 3Rabbitz Book 을리눅스에서설치하기위한절차는다음과같습니다. 설치에대한예시는우분투서버 기준으로진행됩니다. 1. Java Development Kit (JDK) 또는 Java Runtime Environment (JRE) 를설치합니다. 2.

리눅스설치가이드 3. 3Rabbitz Book 을리눅스에서설치하기위한절차는다음과같습니다. 설치에대한예시는우분투서버 기준으로진행됩니다. 1. Java Development Kit (JDK) 또는 Java Runtime Environment (JRE) 를설치합니다. 2. 3. 3Rabbitz Book 을리눅스에서설치하기위한절차는다음과같습니다. 설치에대한예시는우분투서버 기준으로진행됩니다. 1. Java Development Kit (JDK) 또는 Java Runtime Environment (JRE) 를설치합니다. 2. 3Rabbitz Book 애플리케이션파일다운로드하여압축파일을풀고복사합니다. 3. 3Rabbitz Book 실행합니다.

More information

Data Sync Manager(DSM) Example Guide Data Sync Manager (DSM) Example Guide DSM Copyright 2003 Ari System, Inc. All Rights reserved. Data Sync Manager

Data Sync Manager(DSM) Example Guide Data Sync Manager (DSM) Example Guide DSM Copyright 2003 Ari System, Inc. All Rights reserved. Data Sync Manager Data Sync Manager (DSM) Example Guide DSM Copyright 2003 Ari System, Inc. All Rights reserved. Data Sync Manager are trademarks or registered trademarks of Ari System, Inc. 1 Table of Contents Chapter1

More information

ORANGE FOR ORACLE V4.0 INSTALLATION GUIDE (Online Upgrade) ORANGE CONFIGURATION ADMIN O

ORANGE FOR ORACLE V4.0 INSTALLATION GUIDE (Online Upgrade) ORANGE CONFIGURATION ADMIN O Orange for ORACLE V4.0 Installation Guide ORANGE FOR ORACLE V4.0 INSTALLATION GUIDE...1 1....2 1.1...2 1.2...2 1.2.1...2 1.2.2 (Online Upgrade)...11 1.3 ORANGE CONFIGURATION ADMIN...12 1.3.1 Orange Configuration

More information

리눅스기초

리눅스기초 1 목차 Github 개요 Github 계정만들기 Github 저장소만들기 Github 저장소를이용한작업하기 팀구성하여공동작업하기 2 System Security Lab@Myongji Univ. GitHub github.com git 기반의공개 SW 호스팅사이트 웹사이트를통해팀프로젝트에필요한유용한기능을제공 소스코드, 커밋히스토리, 브랜치등을확인 이슈추적하기

More information

1. Windows 설치 (Client 설치 ) 원하는위치에다운받은발송클라이언트압축파일을해제합니다. Step 2. /conf/config.xml 파일수정 conf 폴더에서 config.xml 파일을텍스트에디터를이용하여 Open 합니다. config.xml 파일에서, 아

1. Windows 설치 (Client 설치 ) 원하는위치에다운받은발송클라이언트압축파일을해제합니다. Step 2. /conf/config.xml 파일수정 conf 폴더에서 config.xml 파일을텍스트에디터를이용하여 Open 합니다. config.xml 파일에서, 아 LG U+ SMS/MMS 통합클라이언트 LG U+ SMS/MMS Client Simple Install Manual LG U+ SMS/MMS 통합클라이언트 - 1 - 간단설치매뉴얼 1. Windows 설치 (Client 설치 ) 원하는위치에다운받은발송클라이언트압축파일을해제합니다. Step 2. /conf/config.xml 파일수정 conf 폴더에서 config.xml

More information

Analytics > Log & Crash Search > Unity ios SDK [Deprecated] Log & Crash Unity ios SDK. TOAST SDK. Log & Crash Unity SDK Log & Crash Search. Log & Cras

Analytics > Log & Crash Search > Unity ios SDK [Deprecated] Log & Crash Unity ios SDK. TOAST SDK. Log & Crash Unity SDK Log & Crash Search. Log & Cras Analytics > Log & Crash Search > Unity ios SDK [Deprecated] Log & Crash Unity ios SDK. TOAST SDK. Log & Crash Unity SDK Log & Crash Search. Log & Crash Unity SDK... Log & Crash Search. - Unity3D v4.0 ios

More information

RHEV 2.2 인증서 만료 확인 및 갱신

RHEV 2.2 인증서 만료 확인 및 갱신 2018/09/28 03:56 1/2 목차... 1 인증서 확인... 1 인증서 종류와 확인... 4 RHEVM CA... 5 FQDN 개인 인증서... 5 레드햇 인증서 - 코드 서명 인증서... 6 호스트 인증... 7 참고사항... 8 관련링크... 8 AllThatLinux! - http://allthatlinux.com/dokuwiki/ rhev_2.2_

More information

목차 BUG 문법에맞지않는질의문수행시, 에러메시지에질의문의일부만보여주는문제를수정합니다... 3 BUG ROUND, TRUNC 함수에서 DATE 포맷 IW 를추가지원합니다... 5 BUG ROLLUP/CUBE 절을포함하는질의는 SUBQUE

목차 BUG 문법에맞지않는질의문수행시, 에러메시지에질의문의일부만보여주는문제를수정합니다... 3 BUG ROUND, TRUNC 함수에서 DATE 포맷 IW 를추가지원합니다... 5 BUG ROLLUP/CUBE 절을포함하는질의는 SUBQUE ALTIBASE HDB 6.3.1.10.1 Patch Notes 목차 BUG-45710 문법에맞지않는질의문수행시, 에러메시지에질의문의일부만보여주는문제를수정합니다... 3 BUG-45730 ROUND, TRUNC 함수에서 DATE 포맷 IW 를추가지원합니다... 5 BUG-45760 ROLLUP/CUBE 절을포함하는질의는 SUBQUERY REMOVAL 변환을수행하지않도록수정합니다....

More information

Mobile Service > IAP > Android SDK [ ] IAP SDK TOAST SDK. IAP SDK. Android Studio IDE Android SDK Version (API Level 10). Name Reference V

Mobile Service > IAP > Android SDK [ ] IAP SDK TOAST SDK. IAP SDK. Android Studio IDE Android SDK Version (API Level 10). Name Reference V Mobile Service > IAP > Android SDK IAP SDK TOAST SDK. IAP SDK. Android Studio IDE 2.3.3 Android SDK Version 2.3.3 (API Level 10). Name Reference Version License okhttp http://square.github.io/okhttp/ 1.5.4

More information

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과 1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과 학습내용 1. Java Development Kit(JDK) 2. Java API 3. 자바프로그래밍개발도구 (Eclipse) 4. 자바프로그래밍기초 2 자바를사용하려면무엇이필요한가? 자바프로그래밍개발도구 JDK (Java Development Kit) 다운로드위치 : http://www.oracle.com/technetwork/java/javas

More information

SK IoT IoT SK IoT onem2m OIC IoT onem2m LG IoT SK IoT KAIST NCSoft Yo Studio tidev kr 5 SK IoT DMB SK IoT A M LG SDS 6 OS API 7 ios API API BaaS Backend as a Service IoT IoT ThingPlug SK IoT SK M2M M2M

More information

슬라이드 1

슬라이드 1 Pairwise Tool & Pairwise Test NuSRS 200511305 김성규 200511306 김성훈 200614164 김효석 200611124 유성배 200518036 곡진화 2 PICT Pairwise Tool - PICT Microsoft 의 Command-line 기반의 Free Software www.pairwise.org 에서다운로드후설치

More information

4S 1차년도 평가 발표자료

4S 1차년도 평가 발표자료 모바일 S/W 프로그래밍 안드로이드개발환경설치 2012.09.05. 오병우 모바일공학과 JDK (Java Development Kit) SE (Standard Edition) 설치순서 Eclipse ADT (Android Development Tool) Plug-in Android SDK (Software Development Kit) SDK Components

More information

Orcad Capture 9.x

Orcad Capture 9.x OrCAD Capture Workbook (Ver 10.xx) 0 Capture 1 2 3 Capture for window 4.opj ( OrCAD Project file) Design file Programe link file..dsn (OrCAD Design file) Design file..olb (OrCAD Library file) file..upd

More information

슬라이드 1

슬라이드 1 Subclipse 1. 도구개요 2. 설치및실행 3. 주요기능 4. 활용예제 1. 도구개요 도구명 Subclipse (http://subclipse.tigris.org/) 라이선스 Eclipse Public License v1.0 소개 Subversion( 이하 svn) 용 Eclipse 플러그인 SVN 을만든 Tigris.org 에서만든클라이언트툴 Java

More information

<4D F736F F F696E74202D C61645FB3EDB8AEC7D5BCBA20B9D720C5F8BBE7BFEBB9FD2E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D C61645FB3EDB8AEC7D5BCBA20B9D720C5F8BBE7BFEBB9FD2E BC8A3C8AF20B8F0B5E55D> VHDL 프로그래밍 D. 논리합성및 Xilinx ISE 툴사용법 학습목표 Xilinx ISE Tool 을이용하여 Xilinx 사에서지원하는해당 FPGA Board 에맞는논리합성과정을숙지 논리합성이가능한코드와그렇지않은코드를구분 Xilinx Block Memory Generator를이용한 RAM/ ROM 생성하는과정을숙지 2/31 Content Xilinx ISE

More information

The Pocket Guide to TCP/IP Sockets: C Version

The Pocket Guide to  TCP/IP Sockets: C Version 인터넷프로토콜 5 장 데이터송수신 (3) 1 파일전송메시지구성예제 ( 고정크기메시지 ) 전송방식 : 고정크기 ( 바이너리전송 ) 필요한전송정보 파일이름 ( 최대 255 자 => 255byte 의메모리공간필요 ) 파일크기 (4byte 의경우최대 4GB 크기의파일처리가능 ) 파일내용 ( 가변길이, 0~4GB 크기 ) 메시지구성 FileName (255bytes)

More information

목차 BUG DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4

목차 BUG DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4 ALTIBASE HDB 6.5.1.5.10 Patch Notes 목차 BUG-46183 DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG-46249 [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4 BUG-46266 [sm]

More information

3장

3장 C H A P T E R 03 CHAPTER 03 03-01 03-01-01 Win m1 f1 e4 e5 e6 o8 Mac m1 f1 s1.2 o8 Linux m1 f1 k3 o8 AJAX

More information

git CLI 로간단하게조작하기! by 윤선지

git CLI 로간단하게조작하기! by 윤선지 git CLI 로간단하게조작하기! by 윤선지 CLI? 명령어인터페이스 Command Line interface 텍스트터미널을통해사용자와컴퓨터가상호작용하는방식 편한 GUI 프로그램대신사용하는이유? 1. GUI프로그램보다가볍다. CJO경우보안프로그램이설치되어있어소스트리 GUI 실행을버거워한다. 2. CLI를사용할수있으면 GUI를사용하는것은쉽지만그반대는힘들다.

More information

Modern Javascript

Modern Javascript ES6 - Arrow Function Class Template String Destructuring Default, Rest, Spread let, const for..of Promises Module System Map, Set * Generator * Symbol * * https://babeljs.io/ Babel is a JavaScript compiler.

More information

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 System call table and linkage v Ref. http://www.ibm.com/developerworks/linux/library/l-system-calls/ - 2 - Young-Jin Kim SYSCALL_DEFINE 함수

More information

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다. Eclipse 개발환경에서 WindowBuilder 를이용한 Java 프로그램개발 이예는 Java 프로그램의기초를이해하고있는사람을대상으로 Embedded Microcomputer 를이용한제어시스템을 PC 에서 Serial 통신으로제어 (Graphical User Interface (GUI) 환경에서 ) 하는프로그램개발예를설명한다. WindowBuilder:

More information

< 목차 > Ⅰ. 개요 3 Ⅱ. 실시간스팸차단리스트 (RBL) ( 간편설정 ) 4 1. 메일서버 (Exchange Server 2007) 설정변경 4 2. 스팸차단테스트 10

< 목차 > Ⅰ. 개요 3 Ⅱ. 실시간스팸차단리스트 (RBL) ( 간편설정 ) 4 1. 메일서버 (Exchange Server 2007) 설정변경 4 2. 스팸차단테스트 10 (https://www.kisarbl.or.kr) < 목차 > Ⅰ. 개요 3 Ⅱ. 실시간스팸차단리스트 (RBL) ( 간편설정 ) 4 1. 메일서버 (Exchange Server 2007) 설정변경 4 2. 스팸차단테스트 10 Ⅰ. 개요 실시간스팸차단리스트 (RBL) 는메일서버를운영하는누구나손쉽게효과적으로스팸수신을차단하는데이용할수있도록한국인터넷진흥원 (KISA)

More information

슬라이드 1

슬라이드 1 QR 코드를통한간편로그인 2018. 11. 7 지도교수 : 이병천교수님 4 조 Security-M 지승우이승용박종범백진이 목 차 조원편성 주제선정 비밀번호가뭐였지? 이런일없이조금더쉽게로그인할수있는방법은없을까? 주제선정 ID와패스워드에의한로그인방식의획기적인변화필요 문자형 ID와패스워드 QR Code 등활용 간편한타겟인식및암기식보안체계의불편극복 인증방식의간소화로다양한분야에서활용가능

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 CHAPTER 7. HTML 와 CSS 로웹사이트만들 기 웹사이트작성 웹사이트구축과정 내비게이션구조도 홈페이지레이아웃 헤더 web Shop 내비게이션메뉴

More information

슬라이드 1

슬라이드 1 NeoDeveloper 설치가이드 차례 1. 환경 3 2. 설치 3 2.1 웹서버설치 3 Tomcat 7 3 JDK 1.6 3 2.2 NeoDeveloper 설치 3 Neo Developer 서버구성 3 Demo용 User Application 구성 4 Neo Developer 서버 Data File 4 Client 개발 Tool 설치 4 3. 설정 5 3.1

More information

Interstage5 SOAP서비스 설정 가이드

Interstage5 SOAP서비스 설정 가이드 Interstage 5 Application Server ( Solaris ) SOAP Service Internet Sample Test SOAP Server Application SOAP Client Application CORBA/SOAP Server Gateway CORBA/SOAP Gateway Client INTERSTAGE SOAP Service

More information

Ver 1.0 마감하루전 Category Partitioning Testing Tool Project Team T1 Date Team Information 김강욱 김진욱 김동권

Ver 1.0 마감하루전 Category Partitioning Testing Tool Project Team T1 Date Team Information 김강욱 김진욱 김동권 마감하루전 Category Partitioning Testing Tool Project Team T1 Date 2017-05-12 Team Information 201111334 김강욱 201211339 김진욱 201312243 김동권 201510411 이소영 [ 마감하루전 ] T1 1 INDEX Activity 2041. Design Real Use Cases

More information

제목을 입력하세요.

제목을 입력하세요. 1. 4 1.1. SQLGate for Oracle? 4 1.2. 4 1.3. 5 1.4. 7 2. SQLGate for Oracle 9 2.1. 9 2.2. 10 2.3. 10 2.4. 13 3. SQLGate for Oracle 15 3.1. Connection 15 Connect 15 Multi Connect 17 Disconnect 18 3.2. Query

More information

Microsoft PowerPoint - web-part03-ch20-XMLHttpRequest기본.pptx

Microsoft PowerPoint - web-part03-ch20-XMLHttpRequest기본.pptx 과목명 : 웹프로그래밍응용교재 : 모던웹을위한 JavaScript Jquery 입문, 한빛미디어 Part3. Ajax Ch20. XMLHttpRequest 2014년 1학기 Professor Seung-Hoon Choi 20 XMLHttpRequest XMLHttpRequest 객체 자바스크립트로 Ajax를이용할때사용하는객체 간단하게 xhr 이라고도부름 서버

More information

Ext JS À¥¾ÖÇø®ÄÉÀ̼ǰ³¹ß-³¹Àå.PDF

Ext JS À¥¾ÖÇø®ÄÉÀ̼ǰ³¹ß-³¹Àå.PDF CHAPTER 2 (interaction) Ext JS., HTML, onready, MessageBox get.. Ext JS HTML CSS Ext JS.1. Ext JS. Ext.Msg: : Ext Ext.get: DOM 22 CHAPTER 2 (config). Ext JS.... var test = new TestFunction( 'three', 'fixed',

More information

ISP and CodeVisionAVR C Compiler.hwp

ISP and CodeVisionAVR C Compiler.hwp USBISP V3.0 & P-AVRISP V1.0 with CodeVisionAVR C Compiler http://www.avrmall.com/ November 12, 2007 Copyright (c) 2003-2008 All Rights Reserved. USBISP V3.0 & P-AVRISP V1.0 with CodeVisionAVR C Compiler

More information

gcloud storage 사용자가이드 1 / 17

gcloud storage 사용자가이드 1 / 17 gcloud storage 사용자가이드 1 / 17 문서버전및이력 버전 일자 이력사항 1.0 2016.12.30 신규작성 1.1 2017.01.19 gcloud storage 소개업데이트 1.2 2017.03.17 Container 공개설정업데이트 1.3 2017.06.28 CDN 서비스연동추가 2 / 17 목차 1. GCLOUD STORAGE 소개... 4

More information

게시판 스팸 실시간 차단 시스템

게시판 스팸 실시간 차단 시스템 오픈 API 2014. 11-1 - 목 차 1. 스팸지수측정요청프로토콜 3 1.1 스팸지수측정요청프로토콜개요 3 1.2 스팸지수측정요청방법 3 2. 게시판스팸차단도구오픈 API 활용 5 2.1 PHP 5 2.1.1 차단도구오픈 API 적용방법 5 2.1.2 차단도구오픈 API 스팸지수측정요청 5 2.1.3 차단도구오픈 API 스팸지수측정결과값 5 2.2 JSP

More information

Microsoft PowerPoint SDK설치.HelloAndroid(1.5h).pptx

Microsoft PowerPoint SDK설치.HelloAndroid(1.5h).pptx To be an Android Expert 문양세강원대학교 IT 대학컴퓨터학부 개발환경구조및설치순서 JDK 설치 Eclipse 설치 안드로이드 SDK 설치 ADT(Androd Development Tools) 설치 AVD(Android Virtual Device) 생성 Hello Android! 2 Eclipse (IDE) JDK Android SDK with

More information

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074> SIMATIC S7 Siemens AG 2004. All rights reserved. Date: 22.03.2006 File: PRO1_17E.1 차례... 2 심벌리스트... 3 Ch3 Ex2: 프로젝트생성...... 4 Ch3 Ex3: S7 프로그램삽입... 5 Ch3 Ex4: 표준라이브러리에서블록복사... 6 Ch4 Ex1: 실제구성을 PG 로업로드하고이름변경......

More information

Tcl의 문법

Tcl의 문법 월, 01/28/2008-20:50 admin 은 상당히 단순하고, 커맨드의 인자를 스페이스(공백)로 단락을 짓고 나열하는 정도입니다. command arg1 arg2 arg3... 한행에 여러개의 커맨드를 나열할때는, 세미콜론( ; )으로 구분을 짓습니다. command arg1 arg2 arg3... ; command arg1 arg2 arg3... 한행이

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 @ Lesson 2... ( ). ( ). @ vs. logic data method variable behavior attribute method field Flow (Type), ( ) member @ () : C program Method A ( ) Method B ( ) Method C () program : Java, C++, C# data @ Program

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Deep Learning 작업환경조성 & 사용법 ISL 안재원 Ubuntu 설치 작업환경조성 접속방법 사용예시 2 - ISO file Download www.ubuntu.com Ubuntu 설치 3 - Make Booting USB Ubuntu 설치 http://www.pendrivelinux.com/universal-usb-installer-easy-as-1-2-3/

More information

Chapter 1

Chapter 1 3 Oracle 설치 Objectives Download Oracle 11g Release 2 Install Oracle 11g Release 2 Download Oracle SQL Developer 4.0.3 Install Oracle SQL Developer 4.0.3 Create a database connection 2 Download Oracle 11g

More information

1

1 7차시. 이즐리와 택시도를 활용한 인포그래픽 제작 1. 이즐리 사이트에 대해 알아보고 사용자 메뉴 익히기 01. 이즐리(www.easel.ly) 사이트 접속하기 인포그래픽 제작을 위한 이즐리 사이트는 무료로 제공되는 템플릿을 이용하여 간편하게 인포그래 픽을 만들 수 있는 사이트입니 이즐리는 유료, 무료 구분이 없는 장점이 있으며 다른 인포그래픽 제작 사이트보다

More information

C# Programming Guide - Types

C# Programming Guide - Types C# Programming Guide - Types 최도경 lifeisforu@wemade.com 이문서는 MSDN 의 Types 를요약하고보충한것입니다. http://msdn.microsoft.com/enus/library/ms173104(v=vs.100).aspx Types, Variables, and Values C# 은 type 에민감한언어이다. 모든

More information

@OneToOne(cascade = = "addr_id") private Addr addr; public Emp(String ename, Addr addr) { this.ename = ename; this.a

@OneToOne(cascade = = addr_id) private Addr addr; public Emp(String ename, Addr addr) { this.ename = ename; this.a 1 대 1 단방향, 주테이블에외래키실습 http://ojcedu.com, http://ojc.asia STS -> Spring Stater Project name : onetoone-1 SQL : JPA, MySQL 선택 http://ojc.asia/bbs/board.php?bo_table=lecspring&wr_id=524 ( 마리아 DB 설치는위 URL

More information

JUNIT 실습및발표

JUNIT 실습및발표 JUNIT 실습및발표 JUNIT 접속 www.junit.org DownLoad JUnit JavaDoc API Document 를참조 JUNIT 4.8.1 다운로드 설치파일 (jar 파일 ) 을다운로드 CLASSPATH 를설정 환경변수에서설정 실행할클래스에서 import JUnit 설치하기 테스트실행주석 @Test Test 를실행할 method 앞에붙임 expected

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 HTML5 웹프로그래밍입문 부록. 웹서버구축하기 1 목차 A.1 웹서버시스템 A.2 PHP 사용하기 A.3 데이터베이스연결하기 2 A.1 웹서버시스템 3 웹서버의구축 웹서버컴퓨터구축 웹서버소프트웨어설치및실행 아파치 (Apache) 웹서버가대표적 서버실행프로그램 HTML5 폼을전달받아처리 PHP, JSP, Python 등 데이터베이스시스템 서버측에데이터를저장및효율적관리

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 실습 1 배효철 th1g@nate.com 1 목차 조건문 반복문 System.out 구구단 모양만들기 Up & Down 2 조건문 조건문의종류 If, switch If 문 조건식결과따라중괄호 { 블록을실행할지여부결정할때사용 조건식 true 또는 false값을산출할수있는연산식 boolean 변수 조건식이 true이면블록실행하고 false 이면블록실행하지않음 3

More information

ibmdw_rest_v1.0.ppt

ibmdw_rest_v1.0.ppt REST in Enterprise 박찬욱 1-1- MISSING PIECE OF ENTERPRISE Table of Contents 1. 2. REST 3. REST 4. REST 5. 2-2 - Wise chanwook.tistory.com / cwpark@itwise.co.kr / chanwook.god@gmail.com ARM WOA S&C AP ENI

More information

View Licenses and Services (customer)

View Licenses and Services (customer) 빠른 빠른 시작: 시작: 라이선스, 라이선스, 서비스 서비스 및 주문 주문 이력 이력 보기 보기 고객 가이드 Microsoft 비즈니스 센터의 라이선스, 서비스 및 혜택 섹션을 통해 라이선스, 온라인 서비스, 구매 기록 (주문 기록)을 볼 수 있습니다. 시작하려면, 비즈니스 센터에 로그인하여 상단 메뉴에서 재고를 선택한 후 내 재고 관리를 선택하십시오. 목차

More information

Microsoft PowerPoint 웹 연동 기술.pptx

Microsoft PowerPoint 웹 연동 기술.pptx 웹프로그래밍및실습 ( g & Practice) 문양세강원대학교 IT 대학컴퓨터과학전공 URL 분석 (1/2) URL (Uniform Resource Locator) 프로토콜, 호스트, 포트, 경로, 비밀번호, User 등의정보를포함 예. http://kim:3759@www.hostname.com:80/doc/index.html URL 을속성별로분리하고자할경우

More information

서현수

서현수 Introduction to TIZEN SDK UI Builder S-Core 서현수 2015.10.28 CONTENTS TIZEN APP 이란? TIZEN SDK UI Builder 소개 TIZEN APP 개발방법 UI Builder 기능 UI Builder 사용방법 실전, TIZEN APP 개발시작하기 마침 TIZEN APP? TIZEN APP 이란? Mobile,

More information

DBMS & SQL Server Installation Database Laboratory

DBMS & SQL Server Installation Database Laboratory DBMS & 조교 _ 최윤영 } 데이터베이스연구실 (1314 호 ) } 문의사항은 cyy@hallym.ac.kr } 과제제출은 dbcyy1@gmail.com } 수업공지사항및자료는모두홈페이지에서확인 } dblab.hallym.ac.kr } 홈페이지 ID: 학번 } 홈페이지 PW:s123 2 차례 } } 설치전점검사항 } 설치단계별설명 3 Hallym Univ.

More information

Secure Programming Lecture1 : Introduction

Secure Programming Lecture1 : Introduction Malware and Vulnerability Analysis Lecture3-2 Malware Analysis #3-2 Agenda 안드로이드악성코드분석 악성코드분석 안드로이드악성코드정적분석 APK 추출 #1 adb 명령 안드로이드에설치된패키지리스트추출 adb shell pm list packages v0nui-macbook-pro-2:lecture3 v0n$

More information

[Brochure] KOR_TunA

[Brochure] KOR_TunA LG CNS LG CNS APM (TunA) LG CNS APM (TunA) 어플리케이션의 성능 개선을 위한 직관적이고 심플한 APM 솔루션 APM 이란? Application Performance Management 란? 사용자 관점 그리고 비즈니스 관점에서 실제 서비스되고 있는 어플리케이션의 성능 관리 체계입니다. 이를 위해서는 신속한 장애 지점 파악 /

More information

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 클래스, 객체, 메소드 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr 예제 1. 필드만있는클래스 텔레비젼 2 예제 1. 필드만있는클래스 3 예제 2. 여러개의객체생성하기 4 5 예제 3. 메소드가추가된클래스 public class Television { int channel; // 채널번호 int volume; // 볼륨 boolean

More information