SlideShare une entreprise Scribd logo
1  sur  13
PHP Slim Framework &
AngularJS Framework
함께 써보기
2015.10.07
@XeHub
정진태, wePlanet
ModernPHP User Group 10월 정기모임
부제: 두 개를 어떻게 섞어서 사용하였는가?
Webframeworks.kr 의 홍보
2015 wePlanet 2
WHY – 어떤 프로젝트?
2015 wePlanet 3
(내부망)(외부망)
모바일
어플리케이션
서버
관리자
웹콘솔
• 서버는2대로 구성해주세요
1. Mobile Application Server - 외부망
2. Web Console Server + Database – 내부망
• 개발 언어는 PHP 나 ASP로 해주세요.
• php로는 api만, angular로는 프론트만 구성
• KISA SEED 암호화 사용 (PHP, JSP, ASP 지원)
WHY – 왜 이프레임워크를?
2015 wePlanet 4
• 개발 생산성 높은 웹 프론트 프레임워크가 필요.
• by Google.
• 웹 개발자가 쓰고싶데요!
• 고객사 및 우리 팀에 익숙했던 언어 => PHP 선택.
• 모바일 어플리케이션을 지원하기 위해 REST API 개발이 필요하지만,
보안관련 솔류션으로 생각보다 개발 범위가 좁았기에 Micro framework으로 결정
=> Slim.
• 모던한 느낌의 웹 디자인이 필요.
• 내부 관리자용 웹콘솔이기 때문에, 콤포넌트에 대한 수정요구는 적음.
• by Twitter.
Slim Framework : micro framework for PHP
2015 wePlanet 5
Angular JS Framework : HTML Enhanced for web apps!
• 템플릿
• 양방향 데이터 바인딩
• MVC 구조
• 지시자 Directive를 이용한 HTML 확장
• 의존관계 주입 Dependency Injection
• 단일 페이지 웹 어플리케이션(SPA)을 위한 Router
• $q를 이용한 자바스크립트 비동기 프로그래밍 지원
• 자바스크립트 테스팅 지원
• CSS3 Animation 처리 지원
• 모바일 터치 이벤트 지원
2015 wePlanet 6
출처 http://webframeworks.kr/getstarted/angularjs/
설치 및 구성 - 설치
• Slim 설치 - composer 이용
• $composer require slim/slim 혹은 composer.json 에 slim 추가
• $ php composer.phar install
• index.php 에서 호출
<?php
require ‘vendoer/autoload.php’;
• Angular 설치
• npm 이용시
• $ npm install angular
• index.html에 <script> 추가
<script src=“/node_modules/angular/angular.js”></script>
• bower 이용시
• $ bower install angular
• index.html에 <script> 추가
<script src=“/bower_components/angular/angular.js”></script>
2015 wePlanet 7
설치 및 구성 - 구성
+ app
+ backend // php파일들 위치
+ images
+ scripts // angular 파일들 위치
+ assets
+ controllers
+ directives
+ filters
+ services
- app.js
+ styles
+ vendor // composer를 통한 설치
- autoload.php
+ views // html 파일
- composer.json
- index.html
- index.php
- .htaccess
+ bower_components
+ node_modules
+ test
+ dist
- bower.json
- package.json
2015 wePlanet 8
설치 및 구성 – index.php
• <?php
require 'vendor/autoload.php';
session_cache_limiter(false);
session_cache_expire(15);
session_start();
$app = new SlimSlim();
/**
* API routing
*/
$app->group('/api', function() use ($app) {
$app->response->headers->set('Content-Type', 'application/json');
$app->response->headers->set('Access-Control-Allow-Origin', '*');
/**
* REST /api/user
*/
$app->group(’/user', function() use ($app) {
$app->get('/xxxx', function () use ($app) {
include './backend/xxxx.php';
});
});
});
/**
* Rendering page
*/
$app->get('/', function () use ($app) {
$app->response->headers->set('Content-Type', 'text/html');
readfile('index.html');
});
$app->notFound(function () use ($app) {
$app->response->headers->set('Content-Type', 'text/html');
readfile('404.html');
});
$app->run();
2015 wePlanet 9
설치 및 구성 – index.html
• <body ng-app=“angularApp”>
<script src="scripts/app.js"></script>
2015 wePlanet 10
설치 및 구성 – app.js
• 'use strict';
angular
.module(‘angularApp', [
'ngResource',
'ngRoute',
...
'angular-loading-bar'
])
.config(['$routeProvider', function ($routeProvider) {
$routeProvider
.when('/login', {
templateUrl: 'views/login.html',
controller: 'LoginCtrl',
access: {
isFree: true
}
})
.when('/', {
templateUrl: 'views/main.html',
controller: 'MainCtrl',
resolve: ensureAuth()
})
.when('/users', {
templateUrl: 'views/users.html',
controller: 'UsersCtrl',
resolve: ensureAuth()
})
.otherwise({
redirectTo: '/'
});
//$locationProvider.html5Mode(false);
function ensureAuth() {
return {
isAuth: ['$http', '$location', ‘SampleAuth ', function ($http, $location, SampleAuth) {
return SampleAuth.get().then(function() {
// success
}, function() {
$location.path('/login');
});
}]
};
}
}]);
2015 wePlanet 11
설치 및 구성 – Angular
+ scripts // angular 파일들 위치
+ assets // 앵귤러 프레임워크에서 공통으로 사용하려는 자원들 (라이브러리 등)
+ controllers // Controller 파일들 위치
+ directives // Extended HTML. view단에서 태그와 같이 사용
+ filters // Controller에서 데이터 값을 변형하기 위해 사용
+ services // api 호출을 위한 로직을 담당(DAO 역활)
- app.js
2015 wePlanet 12
후기
• 발표자료를 만들기 위해 Slim에 대한 내용을 다시 검색 중 이런
글을 발견
“슬림은 ‘PHP: The Right Way’라는 글로 유명한 조쉬 록하트(Josh Lockhart)가 개발한
마이크로 프레임워크다. 조쉬 록하트가 라라벨(Laravel)을 보고 슬림 개발을 중단 할까
고민했지만 다행이도 계속 소소하게 개발이 이뤄지고 있다. 여담이지만 그만큼 라라벨은
대단한 프레임워크다. 루비에 루비 온 레일즈(Ruby on Rails), 파이썬에 장고(Django)가
있다면 PHP에는 라라벨이 있다고 할 수 있다. ”
– 출처 http://bookworm.pe.kr/wordpress/2014/02/06/2873
• 다음 번 발표는 라라벨로 도전!
2015 wePlanet 13

Contenu connexe

Tendances

PHP로 웹개발을 해보자
PHP로 웹개발을 해보자PHP로 웹개발을 해보자
PHP로 웹개발을 해보자Young Min Shin
 
Webframeworks.kr의 소개
Webframeworks.kr의 소개Webframeworks.kr의 소개
Webframeworks.kr의 소개WebFrameworks
 
Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유
Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유
Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유Sang Seok Lim
 
[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문
[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문
[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문종훈 박
 
구글 인박스 히드라 프로그래밍
구글 인박스 히드라 프로그래밍구글 인박스 히드라 프로그래밍
구글 인박스 히드라 프로그래밍Lee Ji Eun
 
목적에 맞게 Angular, React, Vue
목적에 맞게 Angular, React, Vue목적에 맞게 Angular, React, Vue
목적에 맞게 Angular, React, VueGunhee Lee
 
[125]react로개발자2명이플랫폼4개를서비스하는이야기 심상민
[125]react로개발자2명이플랫폼4개를서비스하는이야기 심상민[125]react로개발자2명이플랫폼4개를서비스하는이야기 심상민
[125]react로개발자2명이플랫폼4개를서비스하는이야기 심상민NAVER D2
 
컴포넌트 관점에서 개발하기
컴포넌트 관점에서 개발하기컴포넌트 관점에서 개발하기
컴포넌트 관점에서 개발하기우영 주
 
웹 Front-End 실무 이야기
웹 Front-End 실무 이야기웹 Front-End 실무 이야기
웹 Front-End 실무 이야기JinKwon Lee
 
웹 디자이너의 도전: Vue.js 따라하기
웹 디자이너의 도전: Vue.js 따라하기웹 디자이너의 도전: Vue.js 따라하기
웹 디자이너의 도전: Vue.js 따라하기Seungmin Lee
 
오늘 당장 시작하는 HTML5
오늘 당장 시작하는 HTML5오늘 당장 시작하는 HTML5
오늘 당장 시작하는 HTML5Taegon Kim
 
개발자를 위한 웹표준 & 웹접근성이야기
개발자를 위한 웹표준 & 웹접근성이야기개발자를 위한 웹표준 & 웹접근성이야기
개발자를 위한 웹표준 & 웹접근성이야기NAVER D2
 
NAVER 오픈세미나 대구 (2014.08.01) - 오픈소스 라이브러리를 활용한 네이티브 어플리케이션의 데이터 저장과 통신
NAVER 오픈세미나 대구 (2014.08.01) - 오픈소스 라이브러리를 활용한 네이티브 어플리케이션의 데이터 저장과 통신NAVER 오픈세미나 대구 (2014.08.01) - 오픈소스 라이브러리를 활용한 네이티브 어플리케이션의 데이터 저장과 통신
NAVER 오픈세미나 대구 (2014.08.01) - 오픈소스 라이브러리를 활용한 네이티브 어플리케이션의 데이터 저장과 통신Sungwoo Choo
 
Angularjs 도입 선택 가이드
Angularjs 도입 선택 가이드Angularjs 도입 선택 가이드
Angularjs 도입 선택 가이드NAVER D2
 
vuetiful korea 발표자료
vuetiful korea 발표자료vuetiful korea 발표자료
vuetiful korea 발표자료치웅 이
 
하이브리드앱 성능 극복
하이브리드앱 성능 극복하이브리드앱 성능 극복
하이브리드앱 성능 극복sung hwan Park
 
최전방 생존법 - 프론트엔드 개발자로 살아가기
최전방 생존법 - 프론트엔드 개발자로 살아가기최전방 생존법 - 프론트엔드 개발자로 살아가기
최전방 생존법 - 프론트엔드 개발자로 살아가기Hyeonjin Cho
 
Data-binding AngularJS
Data-binding AngularJSData-binding AngularJS
Data-binding AngularJSEunYoung Kim
 

Tendances (20)

PHP로 웹개발을 해보자
PHP로 웹개발을 해보자PHP로 웹개발을 해보자
PHP로 웹개발을 해보자
 
Webframeworks.kr의 소개
Webframeworks.kr의 소개Webframeworks.kr의 소개
Webframeworks.kr의 소개
 
Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유
Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유
Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유
 
[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문
[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문
[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문
 
구글 인박스 히드라 프로그래밍
구글 인박스 히드라 프로그래밍구글 인박스 히드라 프로그래밍
구글 인박스 히드라 프로그래밍
 
목적에 맞게 Angular, React, Vue
목적에 맞게 Angular, React, Vue목적에 맞게 Angular, React, Vue
목적에 맞게 Angular, React, Vue
 
[125]react로개발자2명이플랫폼4개를서비스하는이야기 심상민
[125]react로개발자2명이플랫폼4개를서비스하는이야기 심상민[125]react로개발자2명이플랫폼4개를서비스하는이야기 심상민
[125]react로개발자2명이플랫폼4개를서비스하는이야기 심상민
 
컴포넌트 관점에서 개발하기
컴포넌트 관점에서 개발하기컴포넌트 관점에서 개발하기
컴포넌트 관점에서 개발하기
 
웹 Front-End 실무 이야기
웹 Front-End 실무 이야기웹 Front-End 실무 이야기
웹 Front-End 실무 이야기
 
웹 디자이너의 도전: Vue.js 따라하기
웹 디자이너의 도전: Vue.js 따라하기웹 디자이너의 도전: Vue.js 따라하기
웹 디자이너의 도전: Vue.js 따라하기
 
오늘 당장 시작하는 HTML5
오늘 당장 시작하는 HTML5오늘 당장 시작하는 HTML5
오늘 당장 시작하는 HTML5
 
개발자를 위한 웹표준 & 웹접근성이야기
개발자를 위한 웹표준 & 웹접근성이야기개발자를 위한 웹표준 & 웹접근성이야기
개발자를 위한 웹표준 & 웹접근성이야기
 
NAVER 오픈세미나 대구 (2014.08.01) - 오픈소스 라이브러리를 활용한 네이티브 어플리케이션의 데이터 저장과 통신
NAVER 오픈세미나 대구 (2014.08.01) - 오픈소스 라이브러리를 활용한 네이티브 어플리케이션의 데이터 저장과 통신NAVER 오픈세미나 대구 (2014.08.01) - 오픈소스 라이브러리를 활용한 네이티브 어플리케이션의 데이터 저장과 통신
NAVER 오픈세미나 대구 (2014.08.01) - 오픈소스 라이브러리를 활용한 네이티브 어플리케이션의 데이터 저장과 통신
 
Maven
MavenMaven
Maven
 
Angularjs 도입 선택 가이드
Angularjs 도입 선택 가이드Angularjs 도입 선택 가이드
Angularjs 도입 선택 가이드
 
Vue.js와 Firebase활용기
Vue.js와 Firebase활용기Vue.js와 Firebase활용기
Vue.js와 Firebase활용기
 
vuetiful korea 발표자료
vuetiful korea 발표자료vuetiful korea 발표자료
vuetiful korea 발표자료
 
하이브리드앱 성능 극복
하이브리드앱 성능 극복하이브리드앱 성능 극복
하이브리드앱 성능 극복
 
최전방 생존법 - 프론트엔드 개발자로 살아가기
최전방 생존법 - 프론트엔드 개발자로 살아가기최전방 생존법 - 프론트엔드 개발자로 살아가기
최전방 생존법 - 프론트엔드 개발자로 살아가기
 
Data-binding AngularJS
Data-binding AngularJSData-binding AngularJS
Data-binding AngularJS
 

En vedette

Php faker 를 활용한 의미있는 테스트 데이타 생성
Php faker 를 활용한 의미있는 테스트 데이타 생성Php faker 를 활용한 의미있는 테스트 데이타 생성
Php faker 를 활용한 의미있는 테스트 데이타 생성KwangSeob Jeong
 
XECON2014 Laravel 프레임워크 소개
XECON2014 Laravel 프레임워크 소개XECON2014 Laravel 프레임워크 소개
XECON2014 Laravel 프레임워크 소개Jung soo Ahn
 
빠른 프로토타이핑을 위한 웹앱 자동화 툴 - YEOMAN
빠른 프로토타이핑을 위한 웹앱 자동화 툴 - YEOMAN빠른 프로토타이핑을 위한 웹앱 자동화 툴 - YEOMAN
빠른 프로토타이핑을 위한 웹앱 자동화 툴 - YEOMAN정호 전
 
AngularJS의 개발방식에 대하여
AngularJS의 개발방식에 대하여AngularJS의 개발방식에 대하여
AngularJS의 개발방식에 대하여Jin wook
 
Introduce lumen php micro framework
Introduce lumen php micro frameworkIntroduce lumen php micro framework
Introduce lumen php micro frameworkJung soo Ahn
 
jQuery angular, React.js 로 댓글달아보기 공부했던 기록
jQuery angular, React.js 로 댓글달아보기 공부했던 기록jQuery angular, React.js 로 댓글달아보기 공부했던 기록
jQuery angular, React.js 로 댓글달아보기 공부했던 기록라한사 아
 
엔터프라이즈 웹 동향 및 적용사례
엔터프라이즈 웹 동향 및 적용사례엔터프라이즈 웹 동향 및 적용사례
엔터프라이즈 웹 동향 및 적용사례욱래 김
 
응답하라 반응형웹 - 4. angular
응답하라 반응형웹 - 4. angular응답하라 반응형웹 - 4. angular
응답하라 반응형웹 - 4. angularredribbon1307
 
LG fashion's new SPA brand launching
LG fashion's new SPA brand launchingLG fashion's new SPA brand launching
LG fashion's new SPA brand launchingnceo
 
Mysql old password 깨기
Mysql old password 깨기Mysql old password 깨기
Mysql old password 깨기HyunSeung Kim
 
H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬
H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬
H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬KTH, 케이티하이텔
 
More effective c++ 1
More effective c++ 1More effective c++ 1
More effective c++ 1현찬 양
 
쿠키를 통해 구현해보는 간단한 로그인 과정
쿠키를 통해 구현해보는 간단한 로그인 과정쿠키를 통해 구현해보는 간단한 로그인 과정
쿠키를 통해 구현해보는 간단한 로그인 과정Yoonwhan Lee
 
PHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDT
PHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDTPHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDT
PHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDTYoung D
 
[2015:1] phpdocumentor 설치와 사용법
[2015:1] phpdocumentor 설치와 사용법[2015:1] phpdocumentor 설치와 사용법
[2015:1] phpdocumentor 설치와 사용법Amy Kim
 
Effective c++ 4
Effective c++ 4Effective c++ 4
Effective c++ 4현찬 양
 

En vedette (20)

Php faker 를 활용한 의미있는 테스트 데이타 생성
Php faker 를 활용한 의미있는 테스트 데이타 생성Php faker 를 활용한 의미있는 테스트 데이타 생성
Php faker 를 활용한 의미있는 테스트 데이타 생성
 
XECON2014 Laravel 프레임워크 소개
XECON2014 Laravel 프레임워크 소개XECON2014 Laravel 프레임워크 소개
XECON2014 Laravel 프레임워크 소개
 
빠른 프로토타이핑을 위한 웹앱 자동화 툴 - YEOMAN
빠른 프로토타이핑을 위한 웹앱 자동화 툴 - YEOMAN빠른 프로토타이핑을 위한 웹앱 자동화 툴 - YEOMAN
빠른 프로토타이핑을 위한 웹앱 자동화 툴 - YEOMAN
 
AngularJs Crash Course
AngularJs Crash CourseAngularJs Crash Course
AngularJs Crash Course
 
AngularJS의 개발방식에 대하여
AngularJS의 개발방식에 대하여AngularJS의 개발방식에 대하여
AngularJS의 개발방식에 대하여
 
Introduce lumen php micro framework
Introduce lumen php micro frameworkIntroduce lumen php micro framework
Introduce lumen php micro framework
 
jQuery angular, React.js 로 댓글달아보기 공부했던 기록
jQuery angular, React.js 로 댓글달아보기 공부했던 기록jQuery angular, React.js 로 댓글달아보기 공부했던 기록
jQuery angular, React.js 로 댓글달아보기 공부했던 기록
 
엔터프라이즈 웹 동향 및 적용사례
엔터프라이즈 웹 동향 및 적용사례엔터프라이즈 웹 동향 및 적용사례
엔터프라이즈 웹 동향 및 적용사례
 
응답하라 반응형웹 - 4. angular
응답하라 반응형웹 - 4. angular응답하라 반응형웹 - 4. angular
응답하라 반응형웹 - 4. angular
 
LG fashion's new SPA brand launching
LG fashion's new SPA brand launchingLG fashion's new SPA brand launching
LG fashion's new SPA brand launching
 
Benefits of developing single page web applications using angular js
Benefits of developing single page web applications using angular jsBenefits of developing single page web applications using angular js
Benefits of developing single page web applications using angular js
 
Mysql old password 깨기
Mysql old password 깨기Mysql old password 깨기
Mysql old password 깨기
 
H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬
H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬
H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬
 
More effective c++ 1
More effective c++ 1More effective c++ 1
More effective c++ 1
 
쿠키를 통해 구현해보는 간단한 로그인 과정
쿠키를 통해 구현해보는 간단한 로그인 과정쿠키를 통해 구현해보는 간단한 로그인 과정
쿠키를 통해 구현해보는 간단한 로그인 과정
 
PHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDT
PHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDTPHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDT
PHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDT
 
Exception&log
Exception&logException&log
Exception&log
 
PHP Profiling
PHP ProfilingPHP Profiling
PHP Profiling
 
[2015:1] phpdocumentor 설치와 사용법
[2015:1] phpdocumentor 설치와 사용법[2015:1] phpdocumentor 설치와 사용법
[2015:1] phpdocumentor 설치와 사용법
 
Effective c++ 4
Effective c++ 4Effective c++ 4
Effective c++ 4
 

Similaire à PHP Slim Framework with Angular

2Naver Open Android API Translation At DCamp
2Naver Open Android API Translation At DCamp2Naver Open Android API Translation At DCamp
2Naver Open Android API Translation At DCampJeikei Park
 
N02 app engineseminar
N02 app engineseminarN02 app engineseminar
N02 app engineseminarSun-Jin Jang
 
01.모바일 프레임워크 이론
01.모바일 프레임워크 이론01.모바일 프레임워크 이론
01.모바일 프레임워크 이론Hankyo
 
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석Tommy Lee
 
Spring-Boot (springcamp2014)
Spring-Boot (springcamp2014)Spring-Boot (springcamp2014)
Spring-Boot (springcamp2014)sung yong jung
 
[Azure bootcamp2017] Azure App Service로 서비스 탄탄하게 관리하기
[Azure bootcamp2017] Azure App Service로 서비스 탄탄하게 관리하기[Azure bootcamp2017] Azure App Service로 서비스 탄탄하게 관리하기
[Azure bootcamp2017] Azure App Service로 서비스 탄탄하게 관리하기Youngjae Kim
 
[OpenInfra Days Korea 2018] K8s workshop: Kubernetes for Beginner
[OpenInfra Days Korea 2018] K8s workshop: Kubernetes for Beginner[OpenInfra Days Korea 2018] K8s workshop: Kubernetes for Beginner
[OpenInfra Days Korea 2018] K8s workshop: Kubernetes for BeginnerOpenStack Korea Community
 
ASP.NET Web API를 활용한 RESTful 서비스 개발
ASP.NET Web API를 활용한 RESTful 서비스 개발ASP.NET Web API를 활용한 RESTful 서비스 개발
ASP.NET Web API를 활용한 RESTful 서비스 개발SangHoon Han
 
RESTful API 설계
RESTful API 설계RESTful API 설계
RESTful API 설계Jinho Yoo
 
처음 시작하는 라라벨
처음 시작하는 라라벨처음 시작하는 라라벨
처음 시작하는 라라벨KwangSeob Jeong
 
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravelXECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravelXpressEngine
 
FCGI, C++로 Restful 서버 개발
FCGI, C++로 Restful 서버 개발FCGI, C++로 Restful 서버 개발
FCGI, C++로 Restful 서버 개발현승 배
 
F3 네이버오픈api만드는매쉬업
F3 네이버오픈api만드는매쉬업F3 네이버오픈api만드는매쉬업
F3 네이버오픈api만드는매쉬업NAVER D2
 
도구를 활용한 더 나은 웹 개발: Yeoman
도구를 활용한 더 나은 웹 개발: Yeoman도구를 활용한 더 나은 웹 개발: Yeoman
도구를 활용한 더 나은 웹 개발: YeomanJae Sung Park
 
Progressive Web Apps
Progressive Web AppsProgressive Web Apps
Progressive Web Appsjungkees
 
Open standard open cloud engine (3)
Open standard open cloud engine (3)Open standard open cloud engine (3)
Open standard open cloud engine (3)uEngine Solutions
 

Similaire à PHP Slim Framework with Angular (20)

2Naver Open Android API Translation At DCamp
2Naver Open Android API Translation At DCamp2Naver Open Android API Translation At DCamp
2Naver Open Android API Translation At DCamp
 
Modern PHP
Modern PHPModern PHP
Modern PHP
 
N02 app engineseminar
N02 app engineseminarN02 app engineseminar
N02 app engineseminar
 
01.모바일 프레임워크 이론
01.모바일 프레임워크 이론01.모바일 프레임워크 이론
01.모바일 프레임워크 이론
 
One ASP.NET
One ASP.NETOne ASP.NET
One ASP.NET
 
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
 
Portfolio
PortfolioPortfolio
Portfolio
 
Spring-Boot (springcamp2014)
Spring-Boot (springcamp2014)Spring-Boot (springcamp2014)
Spring-Boot (springcamp2014)
 
[Azure bootcamp2017] Azure App Service로 서비스 탄탄하게 관리하기
[Azure bootcamp2017] Azure App Service로 서비스 탄탄하게 관리하기[Azure bootcamp2017] Azure App Service로 서비스 탄탄하게 관리하기
[Azure bootcamp2017] Azure App Service로 서비스 탄탄하게 관리하기
 
[OpenInfra Days Korea 2018] K8s workshop: Kubernetes for Beginner
[OpenInfra Days Korea 2018] K8s workshop: Kubernetes for Beginner[OpenInfra Days Korea 2018] K8s workshop: Kubernetes for Beginner
[OpenInfra Days Korea 2018] K8s workshop: Kubernetes for Beginner
 
ASP.NET Web API를 활용한 RESTful 서비스 개발
ASP.NET Web API를 활용한 RESTful 서비스 개발ASP.NET Web API를 활용한 RESTful 서비스 개발
ASP.NET Web API를 활용한 RESTful 서비스 개발
 
RESTful API 설계
RESTful API 설계RESTful API 설계
RESTful API 설계
 
처음 시작하는 라라벨
처음 시작하는 라라벨처음 시작하는 라라벨
처음 시작하는 라라벨
 
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravelXECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
 
FCGI, C++로 Restful 서버 개발
FCGI, C++로 Restful 서버 개발FCGI, C++로 Restful 서버 개발
FCGI, C++로 Restful 서버 개발
 
2015 oce garuda
2015 oce garuda2015 oce garuda
2015 oce garuda
 
F3 네이버오픈api만드는매쉬업
F3 네이버오픈api만드는매쉬업F3 네이버오픈api만드는매쉬업
F3 네이버오픈api만드는매쉬업
 
도구를 활용한 더 나은 웹 개발: Yeoman
도구를 활용한 더 나은 웹 개발: Yeoman도구를 활용한 더 나은 웹 개발: Yeoman
도구를 활용한 더 나은 웹 개발: Yeoman
 
Progressive Web Apps
Progressive Web AppsProgressive Web Apps
Progressive Web Apps
 
Open standard open cloud engine (3)
Open standard open cloud engine (3)Open standard open cloud engine (3)
Open standard open cloud engine (3)
 

PHP Slim Framework with Angular

  • 1. PHP Slim Framework & AngularJS Framework 함께 써보기 2015.10.07 @XeHub 정진태, wePlanet ModernPHP User Group 10월 정기모임 부제: 두 개를 어떻게 섞어서 사용하였는가?
  • 3. WHY – 어떤 프로젝트? 2015 wePlanet 3 (내부망)(외부망) 모바일 어플리케이션 서버 관리자 웹콘솔 • 서버는2대로 구성해주세요 1. Mobile Application Server - 외부망 2. Web Console Server + Database – 내부망 • 개발 언어는 PHP 나 ASP로 해주세요. • php로는 api만, angular로는 프론트만 구성 • KISA SEED 암호화 사용 (PHP, JSP, ASP 지원)
  • 4. WHY – 왜 이프레임워크를? 2015 wePlanet 4 • 개발 생산성 높은 웹 프론트 프레임워크가 필요. • by Google. • 웹 개발자가 쓰고싶데요! • 고객사 및 우리 팀에 익숙했던 언어 => PHP 선택. • 모바일 어플리케이션을 지원하기 위해 REST API 개발이 필요하지만, 보안관련 솔류션으로 생각보다 개발 범위가 좁았기에 Micro framework으로 결정 => Slim. • 모던한 느낌의 웹 디자인이 필요. • 내부 관리자용 웹콘솔이기 때문에, 콤포넌트에 대한 수정요구는 적음. • by Twitter.
  • 5. Slim Framework : micro framework for PHP 2015 wePlanet 5
  • 6. Angular JS Framework : HTML Enhanced for web apps! • 템플릿 • 양방향 데이터 바인딩 • MVC 구조 • 지시자 Directive를 이용한 HTML 확장 • 의존관계 주입 Dependency Injection • 단일 페이지 웹 어플리케이션(SPA)을 위한 Router • $q를 이용한 자바스크립트 비동기 프로그래밍 지원 • 자바스크립트 테스팅 지원 • CSS3 Animation 처리 지원 • 모바일 터치 이벤트 지원 2015 wePlanet 6 출처 http://webframeworks.kr/getstarted/angularjs/
  • 7. 설치 및 구성 - 설치 • Slim 설치 - composer 이용 • $composer require slim/slim 혹은 composer.json 에 slim 추가 • $ php composer.phar install • index.php 에서 호출 <?php require ‘vendoer/autoload.php’; • Angular 설치 • npm 이용시 • $ npm install angular • index.html에 <script> 추가 <script src=“/node_modules/angular/angular.js”></script> • bower 이용시 • $ bower install angular • index.html에 <script> 추가 <script src=“/bower_components/angular/angular.js”></script> 2015 wePlanet 7
  • 8. 설치 및 구성 - 구성 + app + backend // php파일들 위치 + images + scripts // angular 파일들 위치 + assets + controllers + directives + filters + services - app.js + styles + vendor // composer를 통한 설치 - autoload.php + views // html 파일 - composer.json - index.html - index.php - .htaccess + bower_components + node_modules + test + dist - bower.json - package.json 2015 wePlanet 8
  • 9. 설치 및 구성 – index.php • <?php require 'vendor/autoload.php'; session_cache_limiter(false); session_cache_expire(15); session_start(); $app = new SlimSlim(); /** * API routing */ $app->group('/api', function() use ($app) { $app->response->headers->set('Content-Type', 'application/json'); $app->response->headers->set('Access-Control-Allow-Origin', '*'); /** * REST /api/user */ $app->group(’/user', function() use ($app) { $app->get('/xxxx', function () use ($app) { include './backend/xxxx.php'; }); }); }); /** * Rendering page */ $app->get('/', function () use ($app) { $app->response->headers->set('Content-Type', 'text/html'); readfile('index.html'); }); $app->notFound(function () use ($app) { $app->response->headers->set('Content-Type', 'text/html'); readfile('404.html'); }); $app->run(); 2015 wePlanet 9
  • 10. 설치 및 구성 – index.html • <body ng-app=“angularApp”> <script src="scripts/app.js"></script> 2015 wePlanet 10
  • 11. 설치 및 구성 – app.js • 'use strict'; angular .module(‘angularApp', [ 'ngResource', 'ngRoute', ... 'angular-loading-bar' ]) .config(['$routeProvider', function ($routeProvider) { $routeProvider .when('/login', { templateUrl: 'views/login.html', controller: 'LoginCtrl', access: { isFree: true } }) .when('/', { templateUrl: 'views/main.html', controller: 'MainCtrl', resolve: ensureAuth() }) .when('/users', { templateUrl: 'views/users.html', controller: 'UsersCtrl', resolve: ensureAuth() }) .otherwise({ redirectTo: '/' }); //$locationProvider.html5Mode(false); function ensureAuth() { return { isAuth: ['$http', '$location', ‘SampleAuth ', function ($http, $location, SampleAuth) { return SampleAuth.get().then(function() { // success }, function() { $location.path('/login'); }); }] }; } }]); 2015 wePlanet 11
  • 12. 설치 및 구성 – Angular + scripts // angular 파일들 위치 + assets // 앵귤러 프레임워크에서 공통으로 사용하려는 자원들 (라이브러리 등) + controllers // Controller 파일들 위치 + directives // Extended HTML. view단에서 태그와 같이 사용 + filters // Controller에서 데이터 값을 변형하기 위해 사용 + services // api 호출을 위한 로직을 담당(DAO 역활) - app.js 2015 wePlanet 12
  • 13. 후기 • 발표자료를 만들기 위해 Slim에 대한 내용을 다시 검색 중 이런 글을 발견 “슬림은 ‘PHP: The Right Way’라는 글로 유명한 조쉬 록하트(Josh Lockhart)가 개발한 마이크로 프레임워크다. 조쉬 록하트가 라라벨(Laravel)을 보고 슬림 개발을 중단 할까 고민했지만 다행이도 계속 소소하게 개발이 이뤄지고 있다. 여담이지만 그만큼 라라벨은 대단한 프레임워크다. 루비에 루비 온 레일즈(Ruby on Rails), 파이썬에 장고(Django)가 있다면 PHP에는 라라벨이 있다고 할 수 있다. ” – 출처 http://bookworm.pe.kr/wordpress/2014/02/06/2873 • 다음 번 발표는 라라벨로 도전! 2015 wePlanet 13

Notes de l'éditeur

  1. AngularJS는 템플릿을 통하여 데이터를 어떻게 표현할지 기술합니다. 템플릿은 표현식과 ANgularJS가 제공하는 별도의 속성 혹은 태그들로 이루어지는데, HTML문서를 작성하는 것이 템플릿을 작성하는 것과 같음. 데이터바인딩이란 두 데이터 혹은 정보의 소스를 모두 일치시키는 기법으로, 화면에 보이는 데이터와 브라우저 메모리에 있는 데이터를 일치시키는 기법입니다. 대부분의 자바스크립트 프레임워크에서는 브라우저 메모리에 있는 데이터가 화면에 표출되도록하는 단방향 데이터 바인딩을 제공하는데, AngularJS는 양방향데이터바인딩을 제공함으로써, 화면에 표출된 데이터가 변경하면 자동으로 메모리에 있는 데이터까지 변경되게 합니다. MVC구조를 사용 비지니스로직을 구현하는 컨트롤러-> ng-Controller. 많은일을 하지 않고, 단 하나의 역할, 어플리케이션 로직을 담당하는데, 이는 모델의 상태를 정의 변경하는 일이다.
  2. scripts는 뒤에서 다시