SlideShare une entreprise Scribd logo
1  sur  55
Télécharger pour lire hors ligne
목차
발표자 소개
프레임워크 필요성
PSR 표준과 의존성 관리자(Composer)
Laravel 소개 및 장/단점
Laravel 프로젝트 시연
QnA
발표자
 정광섭
 C/C++, Java, PHP,
 http://lesstif.com, http:/github.com/lesstif
 애자일, 협업 도구 및 프로세스, 이슈 및 지식 관리,
자동화를 통한 프로젝트 성공이 주 관심사.
 닭은 좋아하지만 튀기진 못 할 것 같아서
개발 관련 직무로 사회 생활 지속 소망
 “리눅스를 활용한 회사 인프라 구축의 모든 것” 저자
 현재 “쉽게 배우는 라라벨 5 프로그래밍(가칭)“ 저술중
 https://www.lesstif.com/x/i4C0AQ에 원고 공개중
프레임워크 정의
 "소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재
사용이 가능하게끔 일련의 협업화된 형태로 클래스들을 제공
하는 것“ – Ralph Johnson
 라이브러리와 달리 애플리케이션의 틀과 구조를 결정하고 그
위에 개발된 개발자의 코드를 제어
프레임워크 필요성 - #1
 서비스의 복잡도 증가, 보안, 대용량 처리, 외부 서비스 연계 등
고려 사항 많음
 단순/반복 작업 최소화, 코드 재사용, 팀원과 원활한 협업 가능
및 구현하려는 본질에 집중 가능
 하지만 의도된 제약 사항으로 인해 customizing 시 어려울 수
있음
 확장성, 안정성, 사용자층, 프레임워크가 제시하는 문제 해결
방식이 적절한지 고려 후 선정 필요
프레임워크 필요성 - #2
 복잡한 비즈니스와 변화에 대응하기 위해서는 프레임워크와
패턴, 개발 방법론 도입이 필요
PHP 패러다임 변화
 Class 키워드가 있는 무늬만 객체지향에서
진정한 객체지향 언어로 성장(5.x)
 동적 메소드/프로퍼티 생성(5.0 - Overloading)
 NameSpace (5.3)
 Trait (5.4)
 Closure(5.4) 등 새로운 기능 도입
PSR(PHP Standards Recommendations)
 PHP-FIG(Framework Interoperability Group) 에서 제정하는 표준
 표준화 부재로 인한 프레임워크/라이브러리간 호환 문제 발생
 PHP 언어와 프레임워크를 더욱 유연하고 상호 운용 가능하도록
사실상의 표준을 제정
 현재 5개의 표준이 통과
 PSR-0 Autoloading Standard => PSR-4 로 대치
 PSR-1, 2 Coding Style Guide
 PSR-3 Logger Interface
 PSR-4 Autoloader
 PSR-7 HTTP Message Interface
PSR-2 - Coding Style Guide
 탭 대신 SPACE 4
 닫는 태그(?>) 사용하지 말 것
 클래스 구문의 여는 괄호는 다음 줄에 사용하고 닫는 괄호는 본문 다음 줄
에 사용
=> Civil war 종료?
 else if 대신 elseif 사용
 기타 등등…
 PSR-1,2 검사 툴 - https://github.com/FriendsOfPHP/PHP-CS-Fixer
PSR-2 - Coding Style Guide
PSR-2 - 예제
패키지 관리 - Don’t Invent Wheel
 해결해야 하는 문제 자체에 집중
 도구가 필요할 경우 기존 개발 여부 확인
 자체 개발 라이브러리보다는 검증된 외부 라이브러
리 사용
 NIH(Not Invented Here) 신드롬 주의
패키지 관리 – 문제 #1
 라이브러리 설치/관리 문제
 ‘A’ Project 에서 사용하는 Hello 는 5개의
추가 lib 설치 필요
Project A
Hello 1.0
World 2.8Foo 2.1
Bar 4.1 Qux 2.3 Baz 1.3
패키지 관리 – 문제 #2
 의존성 지옥(Dependency Hell) – Hello 1.1 업그레이드후
Project A
Hello 1.1
World 3.0Foo 2.2
Bar 4.1 Qux
2.3
Baz 1.3
의존성 지옥
3.1
Composer
 기존의 pear 을 대체하는 PHP 용 패키지 관리자
 Npm(Node.js), Bundler(Rails), maven,gradle(java)와 동
일한 역할 수행
 간편하고 편리한 사용 제공
패키지 관리 – Composer의 해결책 #1
 손쉬운 패키지 설치/관리
composer require phpunit/phpunit “~4.8”
composer install
composer update
composer remove phpunit/phpunit
패키지 관리- Composer의 해결책 #2
 Semantic Versioning 에 따른 의존성 관리
이름 예제 의미
정확한 버전 1.0.1 버전 1.0.1과 일치하는 버전
범위 지정(Range) >=1.0 1.0 보다 크거나 같은 버전중 마지막 버전.
2.0, 3.1 도 포함
>=1.2 <2.0 1.2 보다 크거나 같고 2.0 보다 작은 버전중
마지막 버전
물결(~ Tilde) 연산자 ~1.2 바로 위(>=1.2 <2.0)와 동일한 의미
OR 연산자 1.2.3 | 1.3.4 1.2.3 또는 1.3.4
와일드카드 연산자 1.0.* 1.0.x 대중 가장 큰 버전으로 1.1 보다는
작은 버전. >= 1.0 < 1.1 과 동일
삽입 기호(^ Caret) 연산자 ^1.2.3 >=1.2.3 <2.0 와 동일
http://jubianchi.github.io/semver-check/
 Online Semantic Version check
패키지 관리- Composer의 해결책 #3
 방대한 온라인 저장소
 http://www.packagist.org
 http://packalyst.com/
Laravel 프레임워크
 Taylor Otwell 에 의해 개발
 2011 6월 최초 버전 발표, 2015년 10월 5.1.19 발표
 “Freeing you from spaghetti code” – V2 릴리스 후
 PHP 언어 의 최신 기능을 극한까지 활용한 Modern Framework
 Ruby on Rails 못지 않게 편리하고 우아한 코드 작성 가능
 PSR 표준 수용, Composer 적극 활용,
 Symphony 프레임워크의 검증된 컴포넌트 차용 등 PHP 커뮤니티와 생태계 적극
활용 (http://symfony.com/projects/laravel)
 “PHP 로 개발하면 관리가 불가능한 코드가 양산된다”는 선입관을 날릴 수 있는
잘 만든 프레임워크
github star 비교 – PHP Framework
github star 비교 – 타 언어
Laravel 단점 #1
 최신 버전의 PHP 요구(Laravel 5.1 은 PHP >= 5.5.9 이상 필요)
 국내 웹 호스팅은 PHP 버전 제약 있음
 학습 곡선이 길다.
 함수 매뉴얼 보고 코딩하는 기존 개발 방법에 비해 어려움
 PHP 5, 객체 지향, 디자인 패턴(일부)에 대한 이해 필요
 실행 속도가 느리다.
 타 PHP 프레임워크(CI, phalcon) 에 비해 느림
 실행속도보다 개발 생산성이 증가하고 변화에 탄력적이므로 용도에 맞게 선정
 Ex: 사용자 증가로 DB 분산 처리(읽기/쓰기 분리), 파일 저장을 AWS S3로, 세션 처리
를 Redis 로 할 경우 app 변경이 고통스럽지 않음
Laravel 단점 - #2
 한글 자료 부족
 젊은 프레임워크(4년)라 사용자 층이 얇음, 현재 국내 출판 도서 1권(번역본)
 XE 3 발표 및 레퍼런스가 늘어나고, 사용자 증가하면 해결 가능
 너무 빠른 버전업 및 하위 호환성 부족
 새 버전 출시 주기가 빠르고 기존 버전 지원 기간이 짧음
 5.1 LTS(Long Term Support - 2년 지원, 3년 보안 패치) 버전 출시로 어느 정도
해소 예정
특징 – MVC #1
디자이너 개발자
코드 + 디자인
변경이
어려움
기능을
수정해야
하는데..
디자인을
수정해야
하는데..
특징 – MVC #2
사용자
Controller
View
Model
웹 애플리케이션
①요청
②호출
③결과반환
④ 호출 및 모델 전달
⑤ 참조
⑥응답
특징 – MVC #3
M
C
V
특징 – 쉽고 가벼운 템플릿 엔진(blade)
name : jason
email: jason@abc.com
Age : 20
………………
Model View Template
Blade Engine
특징 – 우아하고 미려한 문법
특징 – URL 라우팅
/
/hello
/book
Route
(Front Controller)
R
e
q
u
e
s
t
homeIndex()
helloAction()
bookAction()
 /user/register 처리 소스가 /var/www/myserver/user/register.php 가 아님
 파일 시스템과 매칭되지 않고 전체 app 의 동작을 제어
특징 – 쉬운 DB 코딩 #1 – Query Builder
특징 – 쉬운 DB 코딩 #2 – ORM
특징 – 쉬운 DB 코딩 #3 – ORM
특징 – 미들웨어(MiddleWare) #1
 라라벨 4 => 필터(filters), 5 에서 미들웨어로 변경
 보통 App 보다 먼저 실행
 매번 실행되므로 전체적인 서비스 속도 저하 => 단점
 매번 실행되므로 app 실행전/후에 필요한 공통 기능 추가 쉬움 => 장점
AppAppRequest ResponseApp
Authentication
VerifyCsrfToken
EncryptCookies
특징 – 미들웨어(MiddleWare) #2
특징 – 손쉬운 개발 환경 구축 #1
 개발 환경 구축시 벌어지는 야크 털 깍기(Yak Shaving)는 그만!
 어떤 APM(EasyPHP, WAMP, XAMPP, Apm_setup, AutoSet….) 설치?
 Apache http 에 새로운 가상 호스트를 추가하는 방법은?
 운영 환경은 nginx 를 사용하는데 ?
 PHP 의 mbstring extension 을 활성화하려면?
 디자이너와 퍼블리셔도 개발 환경을 꾸미려면?
특징 – 손쉬운 개발 환경 구축 #2 Homestead
Guest OS(Ubuntu)
홈스테드
가상 하드웨어
(CPU, Memory, Disk)
Hypervisor(VirtualBox)
 VirtualBox + Vagrant
 가상 머신 기반하의 개발 환경 패키지
 개발에 필요한 모든 환경(Linux, nginx,
PHP, DBMS, Redis)가 자동 설치
vagrant box add
laravel/homestead
vagrant up
vagrant halt
특징 – 보안성
 최근 P사의 사태 - 보안은 자사의 비즈니스를 보호하기 위한 핵심 요소
 직군과 상관없이 보안의 중요성 인식 필요
 개발자는 시큐어 코딩(Secure Coding) 으로 안전하고 견고한 app 개발 필요
 89년 국내 모 잡지
특징 – 보안성(XSS; Cross Site Script)
 사용자의 입력(게시판등)을 화면에 출력할 경우 새너타이징 필요
 Blade 의 기본 출력 메소드 : {{ $var }} 에서 자동 새너타이징
&lt;
<
ㅅ
&gt;
>
alert( &quot;
‘
Welcome &quot;
‘
); &lt;
<
script script &gt;
>
새너타이징
특징 – 보안성(SQL Injection) - #1
특징 – 보안성(SQL Injection) - #2
 모든 쿼리는 PDO를 사용하며 Prepared Statement 와 Bound Parameter를 통해
안전하게 처리 – 기본 동작
aaa' or '1' = '1 를 입력해도 password 컬럼 값이 aaa' or '1'='1' 인 레코드를 찾게 됨
특징 – 보안성(CSRF 공격 방지)
 데이터를 변경하는 HTTP 요청(POST/PUT/PATCH/DELETE)는 CSRF(Cross-Site
Request Forgery) 토큰 적용(기본 동작)
 CSRF 에 대한 이해가 없을 경우 app 미동작으로 인한 두통을 유발할 수 있음
 개발자의 두통은 시큐어 코딩 습득 및 보안 강화로 인한 비즈니스 보호로 승화
특징 – Artisan Command
 라라벨 app 를 다루기 위한 명령행 유틸리티
 Ruby on Rails 의 rails 명령어와 같은 기능 수행
 스캐폴딩(Model, View, Controller, 기타 프레임워크 기능) 제공
 DB 마이그레이션 생성 및 적용/롤백
 App 정비 상태로 전환등
특징 – DB Migration #1
 DB 스키마 파일은 버전 관리 가능(Ex: myschema.sql)
 DBMS 가 현재 어떤 버전의 스키마가 적용되었는지는 관리 불가
 변경시 DB 스키마 관련 실수는 자주 발생하며 잦은 변경 전략의 주요 장애물
특징 – DB Migration #2
 DB 수정시 스키마 파일을 건마다 생성
 변경 내역은 DBMS 의 명령어가 아닌 라라벨의 별도 명령어 사용
 스키마 변경 이력은 DBMS 의 메타 테이블(migrations) 를 통해 관리
php artisan make:migration add_phone_column_on_users --
table=users
php artisan migrate
특징 – Model Factory
 App 개발/테스트시(sql 검색문, paging, view 개발등) 테스트 데이터 필요
 테스트 데이터는 어느 정도 의미 있어야 하지만 이런 데이터 생성에 시간을 투
입할 수는 없음
 factory 를 통해 적당히 의미 있는 데이터를 쉽게 생성
특징 – 설정보다 관례 패러다임
 Coc; Convention over Configuration
 유연한 App 를 위해서는 설정을 통한 동작 제어 필요
 복잡한 설정대신 거의 모든 설정은 관례에 의거하여 생략
특징 – 설정보다 관례 #2
관례를 알아야 하는 문제 발생!
테이블 모델 클래스 기본키 컬럼 생성일 컬럼 갱신일
Users User id created_at updated_at
Article_Categories ArticleCategory id created_at updated_at
login URL 로그인후 이동 URL
/auth/login /dashboards
특징 – 설정보다 관례 #3
특징 – IoC Container
 클래스의 의존성을 관리하는 강력한 도구
 DI(Dependency Injection) 을 통해 클래스들의 의존성 제거
 필요한 의존성은 IoC Container 에 의해 런타임에 주입
 라라벨은 IoC 대신 Service Container라 부름
특징 – IoC Container #2
특징 – IoC Container #3
특징 – 파사드(Façade)
 Service Container(IoC) 에 대해 Proxy 접근
 Static 메소드(Cache::get)처럼 사용 가능하므로 new 로 생성할 필요 없음
 사용이 쉬우면서 Static 의 단점인 mock 객체를 만들기 어려운 문제 해결
Todo Service 만들기
cd ~/Code
composer create-project laravel/laravel mytodo.app
cd mytodo.app
sudo serve mytodo.app /home/vagrant/Code/mytodo.app/public
vagrant up
ssh vagrant@192.168.10.10
참고 자료 & QNA
 Laravel 홈 페이지 - https://laravel.com
 라라벨 한국어 매뉴얼 - http://xpressengine.github.io/laravel-korean-docs/
 Laracast 온라인 강의 - https://laracasts.com/
 Laravel 한국 사용자 모임 - http://laravel.co.kr
 컴포저 한국어 매뉴얼 - http://xpressengine.github.io/Composer-korean-docs/
 Laravel 자료 모음 - https://github.com/chiraggude/awesome-laravel
 발표자 블로그의 도서 공개 - https://www.lesstif.com/x/i4C0AQ 참고
 Q&A
감사합니다.

Contenu connexe

Tendances

Laravel 로 배우는 서버사이드 #1
Laravel 로 배우는 서버사이드 #1Laravel 로 배우는 서버사이드 #1
Laravel 로 배우는 서버사이드 #1성일 한
 
XECon2015 :: [1-1] 안정수 - XE3 구조 및 기본기
XECon2015 :: [1-1] 안정수 - XE3 구조 및 기본기XECon2015 :: [1-1] 안정수 - XE3 구조 및 기본기
XECon2015 :: [1-1] 안정수 - XE3 구조 및 기본기XpressEngine
 
XECon2015 :: [3-1] 용영환 - HHVM 서비스 적용기
XECon2015 :: [3-1] 용영환 - HHVM 서비스 적용기XECon2015 :: [3-1] 용영환 - HHVM 서비스 적용기
XECon2015 :: [3-1] 용영환 - HHVM 서비스 적용기XpressEngine
 
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHub
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHubXECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHub
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHubXpressEngine
 
[네이버오픈소스세미나] Next Generation Spring Security OAuth2.0 - 이명현
[네이버오픈소스세미나] Next Generation Spring Security OAuth2.0 - 이명현[네이버오픈소스세미나] Next Generation Spring Security OAuth2.0 - 이명현
[네이버오픈소스세미나] Next Generation Spring Security OAuth2.0 - 이명현NAVER Engineering
 
Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기KwangSeob Jeong
 
Jenkins를 활용한 javascript 개발
Jenkins를 활용한 javascript 개발Jenkins를 활용한 javascript 개발
Jenkins를 활용한 javascript 개발지수 윤
 
파이어베이스 스터디
파이어베이스 스터디파이어베이스 스터디
파이어베이스 스터디성일 한
 
[2017 Incognito] Code Clone 기법을 통한 모바일 브라우저 취약점 분석
[2017 Incognito] Code Clone 기법을 통한 모바일 브라우저 취약점 분석[2017 Incognito] Code Clone 기법을 통한 모바일 브라우저 취약점 분석
[2017 Incognito] Code Clone 기법을 통한 모바일 브라우저 취약점 분석NAVER D2
 
Valet 으로 windows php 개발 환경 구성하기
Valet 으로 windows php 개발 환경 구성하기Valet 으로 windows php 개발 환경 구성하기
Valet 으로 windows php 개발 환경 구성하기KwangSeob Jeong
 
워드프레스 기초 (ABCD) #1
워드프레스 기초 (ABCD) #1워드프레스 기초 (ABCD) #1
워드프레스 기초 (ABCD) #1성일 한
 
Tech Update - The Future of .NET Framework (김명신 부장)
Tech Update - The Future of .NET Framework (김명신 부장)Tech Update - The Future of .NET Framework (김명신 부장)
Tech Update - The Future of .NET Framework (김명신 부장)Eunbee Song
 
웹 Front-End 실무 이야기
웹 Front-End 실무 이야기웹 Front-End 실무 이야기
웹 Front-End 실무 이야기JinKwon Lee
 
Front-end Development with Ruby on Rails
Front-end Development with Ruby on RailsFront-end Development with Ruby on Rails
Front-end Development with Ruby on Rails추근 문
 
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기NAVER D2
 
[145]5년간의네이버웹엔진개발삽질기그리고 김효
[145]5년간의네이버웹엔진개발삽질기그리고 김효[145]5년간의네이버웹엔진개발삽질기그리고 김효
[145]5년간의네이버웹엔진개발삽질기그리고 김효NAVER D2
 
유연하게 확장할 수 있는 PHP 웹 개발 이야기
유연하게 확장할 수 있는 PHP 웹 개발 이야기유연하게 확장할 수 있는 PHP 웹 개발 이야기
유연하게 확장할 수 있는 PHP 웹 개발 이야기Young D
 
[PHPFest 2013] PHP 성능 향상 방법
[PHPFest 2013] PHP 성능 향상 방법[PHPFest 2013] PHP 성능 향상 방법
[PHPFest 2013] PHP 성능 향상 방법phpkorea
 

Tendances (20)

Laravel 로 배우는 서버사이드 #1
Laravel 로 배우는 서버사이드 #1Laravel 로 배우는 서버사이드 #1
Laravel 로 배우는 서버사이드 #1
 
XECon2015 :: [1-1] 안정수 - XE3 구조 및 기본기
XECon2015 :: [1-1] 안정수 - XE3 구조 및 기본기XECon2015 :: [1-1] 안정수 - XE3 구조 및 기본기
XECon2015 :: [1-1] 안정수 - XE3 구조 및 기본기
 
Composer
ComposerComposer
Composer
 
Modern PHP
Modern PHPModern PHP
Modern PHP
 
XECon2015 :: [3-1] 용영환 - HHVM 서비스 적용기
XECon2015 :: [3-1] 용영환 - HHVM 서비스 적용기XECon2015 :: [3-1] 용영환 - HHVM 서비스 적용기
XECon2015 :: [3-1] 용영환 - HHVM 서비스 적용기
 
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHub
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHubXECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHub
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHub
 
[네이버오픈소스세미나] Next Generation Spring Security OAuth2.0 - 이명현
[네이버오픈소스세미나] Next Generation Spring Security OAuth2.0 - 이명현[네이버오픈소스세미나] Next Generation Spring Security OAuth2.0 - 이명현
[네이버오픈소스세미나] Next Generation Spring Security OAuth2.0 - 이명현
 
Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기
 
Jenkins를 활용한 javascript 개발
Jenkins를 활용한 javascript 개발Jenkins를 활용한 javascript 개발
Jenkins를 활용한 javascript 개발
 
파이어베이스 스터디
파이어베이스 스터디파이어베이스 스터디
파이어베이스 스터디
 
[2017 Incognito] Code Clone 기법을 통한 모바일 브라우저 취약점 분석
[2017 Incognito] Code Clone 기법을 통한 모바일 브라우저 취약점 분석[2017 Incognito] Code Clone 기법을 통한 모바일 브라우저 취약점 분석
[2017 Incognito] Code Clone 기법을 통한 모바일 브라우저 취약점 분석
 
Valet 으로 windows php 개발 환경 구성하기
Valet 으로 windows php 개발 환경 구성하기Valet 으로 windows php 개발 환경 구성하기
Valet 으로 windows php 개발 환경 구성하기
 
워드프레스 기초 (ABCD) #1
워드프레스 기초 (ABCD) #1워드프레스 기초 (ABCD) #1
워드프레스 기초 (ABCD) #1
 
Tech Update - The Future of .NET Framework (김명신 부장)
Tech Update - The Future of .NET Framework (김명신 부장)Tech Update - The Future of .NET Framework (김명신 부장)
Tech Update - The Future of .NET Framework (김명신 부장)
 
웹 Front-End 실무 이야기
웹 Front-End 실무 이야기웹 Front-End 실무 이야기
웹 Front-End 실무 이야기
 
Front-end Development with Ruby on Rails
Front-end Development with Ruby on RailsFront-end Development with Ruby on Rails
Front-end Development with Ruby on Rails
 
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
 
[145]5년간의네이버웹엔진개발삽질기그리고 김효
[145]5년간의네이버웹엔진개발삽질기그리고 김효[145]5년간의네이버웹엔진개발삽질기그리고 김효
[145]5년간의네이버웹엔진개발삽질기그리고 김효
 
유연하게 확장할 수 있는 PHP 웹 개발 이야기
유연하게 확장할 수 있는 PHP 웹 개발 이야기유연하게 확장할 수 있는 PHP 웹 개발 이야기
유연하게 확장할 수 있는 PHP 웹 개발 이야기
 
[PHPFest 2013] PHP 성능 향상 방법
[PHPFest 2013] PHP 성능 향상 방법[PHPFest 2013] PHP 성능 향상 방법
[PHPFest 2013] PHP 성능 향상 방법
 

En vedette

Php faker 를 활용한 의미있는 테스트 데이타 생성
Php faker 를 활용한 의미있는 테스트 데이타 생성Php faker 를 활용한 의미있는 테스트 데이타 생성
Php faker 를 활용한 의미있는 테스트 데이타 생성KwangSeob Jeong
 
Atlassian confluence WIKI를 활용한 공유와 협업 환경 구성
Atlassian confluence WIKI를 활용한 공유와 협업 환경 구성Atlassian confluence WIKI를 활용한 공유와 협업 환경 구성
Atlassian confluence WIKI를 활용한 공유와 협업 환경 구성KwangSeob Jeong
 
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravelXECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravelXpressEngine
 
세상의 모든 것이 서로 연결 될 때 @윤종수 CC korea 대표
세상의 모든 것이 서로 연결 될 때 @윤종수 CC korea 대표세상의 모든 것이 서로 연결 될 때 @윤종수 CC korea 대표
세상의 모든 것이 서로 연결 될 때 @윤종수 CC korea 대표cbs15min
 
[XECon2016] B-2 정광섭 Laravel로 스타트업 기술 스택 구성하기
[XECon2016] B-2 정광섭 Laravel로 스타트업 기술 스택 구성하기[XECon2016] B-2 정광섭 Laravel로 스타트업 기술 스택 구성하기
[XECon2016] B-2 정광섭 Laravel로 스타트업 기술 스택 구성하기XpressEngine
 
LAPP/SELinux - A secure web application stack powered by SELinux
LAPP/SELinux - A secure web application stack powered by SELinuxLAPP/SELinux - A secure web application stack powered by SELinux
LAPP/SELinux - A secure web application stack powered by SELinuxKohei KaiGai
 
서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드KwangSeob Jeong
 
LaravelとMVCの先へ
LaravelとMVCの先へLaravelとMVCの先へ
LaravelとMVCの先へYuuki Takezawa
 
2016317 파이썬기초_파이썬_다중설치부터_Jupyter를이용한프로그래밍_이태영
2016317 파이썬기초_파이썬_다중설치부터_Jupyter를이용한프로그래밍_이태영2016317 파이썬기초_파이썬_다중설치부터_Jupyter를이용한프로그래밍_이태영
2016317 파이썬기초_파이썬_다중설치부터_Jupyter를이용한프로그래밍_이태영Tae Young Lee
 
서비스중인 게임 DB 설계 (쿠키런 편)
서비스중인 게임 DB 설계 (쿠키런 편)서비스중인 게임 DB 설계 (쿠키런 편)
서비스중인 게임 DB 설계 (쿠키런 편)_ce
 
RESTful API 제대로 만들기
RESTful API 제대로 만들기RESTful API 제대로 만들기
RESTful API 제대로 만들기Juwon Kim
 

En vedette (11)

Php faker 를 활용한 의미있는 테스트 데이타 생성
Php faker 를 활용한 의미있는 테스트 데이타 생성Php faker 를 활용한 의미있는 테스트 데이타 생성
Php faker 를 활용한 의미있는 테스트 데이타 생성
 
Atlassian confluence WIKI를 활용한 공유와 협업 환경 구성
Atlassian confluence WIKI를 활용한 공유와 협업 환경 구성Atlassian confluence WIKI를 활용한 공유와 협업 환경 구성
Atlassian confluence WIKI를 활용한 공유와 협업 환경 구성
 
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravelXECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
 
세상의 모든 것이 서로 연결 될 때 @윤종수 CC korea 대표
세상의 모든 것이 서로 연결 될 때 @윤종수 CC korea 대표세상의 모든 것이 서로 연결 될 때 @윤종수 CC korea 대표
세상의 모든 것이 서로 연결 될 때 @윤종수 CC korea 대표
 
[XECon2016] B-2 정광섭 Laravel로 스타트업 기술 스택 구성하기
[XECon2016] B-2 정광섭 Laravel로 스타트업 기술 스택 구성하기[XECon2016] B-2 정광섭 Laravel로 스타트업 기술 스택 구성하기
[XECon2016] B-2 정광섭 Laravel로 스타트업 기술 스택 구성하기
 
LAPP/SELinux - A secure web application stack powered by SELinux
LAPP/SELinux - A secure web application stack powered by SELinuxLAPP/SELinux - A secure web application stack powered by SELinux
LAPP/SELinux - A secure web application stack powered by SELinux
 
서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드
 
LaravelとMVCの先へ
LaravelとMVCの先へLaravelとMVCの先へ
LaravelとMVCの先へ
 
2016317 파이썬기초_파이썬_다중설치부터_Jupyter를이용한프로그래밍_이태영
2016317 파이썬기초_파이썬_다중설치부터_Jupyter를이용한프로그래밍_이태영2016317 파이썬기초_파이썬_다중설치부터_Jupyter를이용한프로그래밍_이태영
2016317 파이썬기초_파이썬_다중설치부터_Jupyter를이용한프로그래밍_이태영
 
서비스중인 게임 DB 설계 (쿠키런 편)
서비스중인 게임 DB 설계 (쿠키런 편)서비스중인 게임 DB 설계 (쿠키런 편)
서비스중인 게임 DB 설계 (쿠키런 편)
 
RESTful API 제대로 만들기
RESTful API 제대로 만들기RESTful API 제대로 만들기
RESTful API 제대로 만들기
 

Similaire à 처음 시작하는 라라벨

Spring vs. spring boot
Spring vs. spring bootSpring vs. spring boot
Spring vs. spring bootChloeChoi23
 
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해Terry Cho
 
VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리Gyuwon Yi
 
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)중선 곽
 
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석Tommy Lee
 
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발Jinuk Kim
 
개발 방식을 바꾸는 15가지 기술
개발 방식을 바꾸는 15가지 기술개발 방식을 바꾸는 15가지 기술
개발 방식을 바꾸는 15가지 기술중선 곽
 
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)SangIn Choung
 
Spring one참석기 ksug
Spring one참석기 ksugSpring one참석기 ksug
Spring one참석기 ksugSanghyuk Jung
 
01.개발환경 교육교재
01.개발환경 교육교재01.개발환경 교육교재
01.개발환경 교육교재Hankyo
 
소프트웨어 개발자 로드맵
소프트웨어 개발자 로드맵소프트웨어 개발자 로드맵
소프트웨어 개발자 로드맵중선 곽
 
Big Data platform을 위한 Sencha Ext JS 사례.
Big Data platform을 위한 Sencha Ext JS 사례.Big Data platform을 위한 Sencha Ext JS 사례.
Big Data platform을 위한 Sencha Ext JS 사례.효근 박
 
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규ChangKyu Song
 
Opensource APM SCOUTER in practice
Opensource APM SCOUTER in practiceOpensource APM SCOUTER in practice
Opensource APM SCOUTER in practiceGunHee Lee
 

Similaire à 처음 시작하는 라라벨 (20)

ecdevday4
ecdevday4ecdevday4
ecdevday4
 
Spring vs. spring boot
Spring vs. spring bootSpring vs. spring boot
Spring vs. spring boot
 
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
 
피니엔진
피니엔진피니엔진
피니엔진
 
VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리
 
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
 
Sencha ExtJS를 활용한 Big Data Platform 개발 사례
Sencha ExtJS를 활용한 Big Data Platform 개발 사례 Sencha ExtJS를 활용한 Big Data Platform 개발 사례
Sencha ExtJS를 활용한 Big Data Platform 개발 사례
 
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
 
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
 
개발 방식을 바꾸는 15가지 기술
개발 방식을 바꾸는 15가지 기술개발 방식을 바꾸는 15가지 기술
개발 방식을 바꾸는 15가지 기술
 
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
 
Spring one참석기 ksug
Spring one참석기 ksugSpring one참석기 ksug
Spring one참석기 ksug
 
01.개발환경 교육교재
01.개발환경 교육교재01.개발환경 교육교재
01.개발환경 교육교재
 
소프트웨어 개발자 로드맵
소프트웨어 개발자 로드맵소프트웨어 개발자 로드맵
소프트웨어 개발자 로드맵
 
2015 oce specification
2015 oce specification2015 oce specification
2015 oce specification
 
Big Data platform을 위한 Sencha Ext JS 사례.
Big Data platform을 위한 Sencha Ext JS 사례.Big Data platform을 위한 Sencha Ext JS 사례.
Big Data platform을 위한 Sencha Ext JS 사례.
 
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
 
Opensource APM SCOUTER in practice
Opensource APM SCOUTER in practiceOpensource APM SCOUTER in practice
Opensource APM SCOUTER in practice
 
java_1장.pptx
java_1장.pptxjava_1장.pptx
java_1장.pptx
 
java_1장.pptx
java_1장.pptxjava_1장.pptx
java_1장.pptx
 

처음 시작하는 라라벨

  • 1.
  • 2. 목차 발표자 소개 프레임워크 필요성 PSR 표준과 의존성 관리자(Composer) Laravel 소개 및 장/단점 Laravel 프로젝트 시연 QnA
  • 3. 발표자  정광섭  C/C++, Java, PHP,  http://lesstif.com, http:/github.com/lesstif  애자일, 협업 도구 및 프로세스, 이슈 및 지식 관리, 자동화를 통한 프로젝트 성공이 주 관심사.  닭은 좋아하지만 튀기진 못 할 것 같아서 개발 관련 직무로 사회 생활 지속 소망  “리눅스를 활용한 회사 인프라 구축의 모든 것” 저자  현재 “쉽게 배우는 라라벨 5 프로그래밍(가칭)“ 저술중  https://www.lesstif.com/x/i4C0AQ에 원고 공개중
  • 4. 프레임워크 정의  "소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재 사용이 가능하게끔 일련의 협업화된 형태로 클래스들을 제공 하는 것“ – Ralph Johnson  라이브러리와 달리 애플리케이션의 틀과 구조를 결정하고 그 위에 개발된 개발자의 코드를 제어
  • 5. 프레임워크 필요성 - #1  서비스의 복잡도 증가, 보안, 대용량 처리, 외부 서비스 연계 등 고려 사항 많음  단순/반복 작업 최소화, 코드 재사용, 팀원과 원활한 협업 가능 및 구현하려는 본질에 집중 가능  하지만 의도된 제약 사항으로 인해 customizing 시 어려울 수 있음  확장성, 안정성, 사용자층, 프레임워크가 제시하는 문제 해결 방식이 적절한지 고려 후 선정 필요
  • 6. 프레임워크 필요성 - #2  복잡한 비즈니스와 변화에 대응하기 위해서는 프레임워크와 패턴, 개발 방법론 도입이 필요
  • 7. PHP 패러다임 변화  Class 키워드가 있는 무늬만 객체지향에서 진정한 객체지향 언어로 성장(5.x)  동적 메소드/프로퍼티 생성(5.0 - Overloading)  NameSpace (5.3)  Trait (5.4)  Closure(5.4) 등 새로운 기능 도입
  • 8. PSR(PHP Standards Recommendations)  PHP-FIG(Framework Interoperability Group) 에서 제정하는 표준  표준화 부재로 인한 프레임워크/라이브러리간 호환 문제 발생  PHP 언어와 프레임워크를 더욱 유연하고 상호 운용 가능하도록 사실상의 표준을 제정  현재 5개의 표준이 통과  PSR-0 Autoloading Standard => PSR-4 로 대치  PSR-1, 2 Coding Style Guide  PSR-3 Logger Interface  PSR-4 Autoloader  PSR-7 HTTP Message Interface
  • 9. PSR-2 - Coding Style Guide
  • 10.  탭 대신 SPACE 4  닫는 태그(?>) 사용하지 말 것  클래스 구문의 여는 괄호는 다음 줄에 사용하고 닫는 괄호는 본문 다음 줄 에 사용 => Civil war 종료?  else if 대신 elseif 사용  기타 등등…  PSR-1,2 검사 툴 - https://github.com/FriendsOfPHP/PHP-CS-Fixer PSR-2 - Coding Style Guide
  • 12. 패키지 관리 - Don’t Invent Wheel  해결해야 하는 문제 자체에 집중  도구가 필요할 경우 기존 개발 여부 확인  자체 개발 라이브러리보다는 검증된 외부 라이브러 리 사용  NIH(Not Invented Here) 신드롬 주의
  • 13. 패키지 관리 – 문제 #1  라이브러리 설치/관리 문제  ‘A’ Project 에서 사용하는 Hello 는 5개의 추가 lib 설치 필요 Project A Hello 1.0 World 2.8Foo 2.1 Bar 4.1 Qux 2.3 Baz 1.3
  • 14. 패키지 관리 – 문제 #2  의존성 지옥(Dependency Hell) – Hello 1.1 업그레이드후 Project A Hello 1.1 World 3.0Foo 2.2 Bar 4.1 Qux 2.3 Baz 1.3 의존성 지옥 3.1
  • 15. Composer  기존의 pear 을 대체하는 PHP 용 패키지 관리자  Npm(Node.js), Bundler(Rails), maven,gradle(java)와 동 일한 역할 수행  간편하고 편리한 사용 제공
  • 16. 패키지 관리 – Composer의 해결책 #1  손쉬운 패키지 설치/관리 composer require phpunit/phpunit “~4.8” composer install composer update composer remove phpunit/phpunit
  • 17. 패키지 관리- Composer의 해결책 #2  Semantic Versioning 에 따른 의존성 관리 이름 예제 의미 정확한 버전 1.0.1 버전 1.0.1과 일치하는 버전 범위 지정(Range) >=1.0 1.0 보다 크거나 같은 버전중 마지막 버전. 2.0, 3.1 도 포함 >=1.2 <2.0 1.2 보다 크거나 같고 2.0 보다 작은 버전중 마지막 버전 물결(~ Tilde) 연산자 ~1.2 바로 위(>=1.2 <2.0)와 동일한 의미 OR 연산자 1.2.3 | 1.3.4 1.2.3 또는 1.3.4 와일드카드 연산자 1.0.* 1.0.x 대중 가장 큰 버전으로 1.1 보다는 작은 버전. >= 1.0 < 1.1 과 동일 삽입 기호(^ Caret) 연산자 ^1.2.3 >=1.2.3 <2.0 와 동일 http://jubianchi.github.io/semver-check/  Online Semantic Version check
  • 18. 패키지 관리- Composer의 해결책 #3  방대한 온라인 저장소  http://www.packagist.org  http://packalyst.com/
  • 19. Laravel 프레임워크  Taylor Otwell 에 의해 개발  2011 6월 최초 버전 발표, 2015년 10월 5.1.19 발표  “Freeing you from spaghetti code” – V2 릴리스 후  PHP 언어 의 최신 기능을 극한까지 활용한 Modern Framework  Ruby on Rails 못지 않게 편리하고 우아한 코드 작성 가능  PSR 표준 수용, Composer 적극 활용,  Symphony 프레임워크의 검증된 컴포넌트 차용 등 PHP 커뮤니티와 생태계 적극 활용 (http://symfony.com/projects/laravel)  “PHP 로 개발하면 관리가 불가능한 코드가 양산된다”는 선입관을 날릴 수 있는 잘 만든 프레임워크
  • 20. github star 비교 – PHP Framework
  • 21. github star 비교 – 타 언어
  • 22. Laravel 단점 #1  최신 버전의 PHP 요구(Laravel 5.1 은 PHP >= 5.5.9 이상 필요)  국내 웹 호스팅은 PHP 버전 제약 있음  학습 곡선이 길다.  함수 매뉴얼 보고 코딩하는 기존 개발 방법에 비해 어려움  PHP 5, 객체 지향, 디자인 패턴(일부)에 대한 이해 필요  실행 속도가 느리다.  타 PHP 프레임워크(CI, phalcon) 에 비해 느림  실행속도보다 개발 생산성이 증가하고 변화에 탄력적이므로 용도에 맞게 선정  Ex: 사용자 증가로 DB 분산 처리(읽기/쓰기 분리), 파일 저장을 AWS S3로, 세션 처리 를 Redis 로 할 경우 app 변경이 고통스럽지 않음
  • 23. Laravel 단점 - #2  한글 자료 부족  젊은 프레임워크(4년)라 사용자 층이 얇음, 현재 국내 출판 도서 1권(번역본)  XE 3 발표 및 레퍼런스가 늘어나고, 사용자 증가하면 해결 가능  너무 빠른 버전업 및 하위 호환성 부족  새 버전 출시 주기가 빠르고 기존 버전 지원 기간이 짧음  5.1 LTS(Long Term Support - 2년 지원, 3년 보안 패치) 버전 출시로 어느 정도 해소 예정
  • 24. 특징 – MVC #1 디자이너 개발자 코드 + 디자인 변경이 어려움 기능을 수정해야 하는데.. 디자인을 수정해야 하는데..
  • 25. 특징 – MVC #2 사용자 Controller View Model 웹 애플리케이션 ①요청 ②호출 ③결과반환 ④ 호출 및 모델 전달 ⑤ 참조 ⑥응답
  • 26. 특징 – MVC #3 M C V
  • 27. 특징 – 쉽고 가벼운 템플릿 엔진(blade) name : jason email: jason@abc.com Age : 20 ……………… Model View Template Blade Engine
  • 28. 특징 – 우아하고 미려한 문법
  • 29. 특징 – URL 라우팅 / /hello /book Route (Front Controller) R e q u e s t homeIndex() helloAction() bookAction()  /user/register 처리 소스가 /var/www/myserver/user/register.php 가 아님  파일 시스템과 매칭되지 않고 전체 app 의 동작을 제어
  • 30. 특징 – 쉬운 DB 코딩 #1 – Query Builder
  • 31. 특징 – 쉬운 DB 코딩 #2 – ORM
  • 32. 특징 – 쉬운 DB 코딩 #3 – ORM
  • 33. 특징 – 미들웨어(MiddleWare) #1  라라벨 4 => 필터(filters), 5 에서 미들웨어로 변경  보통 App 보다 먼저 실행  매번 실행되므로 전체적인 서비스 속도 저하 => 단점  매번 실행되므로 app 실행전/후에 필요한 공통 기능 추가 쉬움 => 장점 AppAppRequest ResponseApp Authentication VerifyCsrfToken EncryptCookies
  • 35. 특징 – 손쉬운 개발 환경 구축 #1  개발 환경 구축시 벌어지는 야크 털 깍기(Yak Shaving)는 그만!  어떤 APM(EasyPHP, WAMP, XAMPP, Apm_setup, AutoSet….) 설치?  Apache http 에 새로운 가상 호스트를 추가하는 방법은?  운영 환경은 nginx 를 사용하는데 ?  PHP 의 mbstring extension 을 활성화하려면?  디자이너와 퍼블리셔도 개발 환경을 꾸미려면?
  • 36. 특징 – 손쉬운 개발 환경 구축 #2 Homestead Guest OS(Ubuntu) 홈스테드 가상 하드웨어 (CPU, Memory, Disk) Hypervisor(VirtualBox)  VirtualBox + Vagrant  가상 머신 기반하의 개발 환경 패키지  개발에 필요한 모든 환경(Linux, nginx, PHP, DBMS, Redis)가 자동 설치 vagrant box add laravel/homestead vagrant up vagrant halt
  • 37. 특징 – 보안성  최근 P사의 사태 - 보안은 자사의 비즈니스를 보호하기 위한 핵심 요소  직군과 상관없이 보안의 중요성 인식 필요  개발자는 시큐어 코딩(Secure Coding) 으로 안전하고 견고한 app 개발 필요  89년 국내 모 잡지
  • 38. 특징 – 보안성(XSS; Cross Site Script)  사용자의 입력(게시판등)을 화면에 출력할 경우 새너타이징 필요  Blade 의 기본 출력 메소드 : {{ $var }} 에서 자동 새너타이징 &lt; < ㅅ &gt; > alert( &quot; ‘ Welcome &quot; ‘ ); &lt; < script script &gt; > 새너타이징
  • 39. 특징 – 보안성(SQL Injection) - #1
  • 40. 특징 – 보안성(SQL Injection) - #2  모든 쿼리는 PDO를 사용하며 Prepared Statement 와 Bound Parameter를 통해 안전하게 처리 – 기본 동작 aaa' or '1' = '1 를 입력해도 password 컬럼 값이 aaa' or '1'='1' 인 레코드를 찾게 됨
  • 41. 특징 – 보안성(CSRF 공격 방지)  데이터를 변경하는 HTTP 요청(POST/PUT/PATCH/DELETE)는 CSRF(Cross-Site Request Forgery) 토큰 적용(기본 동작)  CSRF 에 대한 이해가 없을 경우 app 미동작으로 인한 두통을 유발할 수 있음  개발자의 두통은 시큐어 코딩 습득 및 보안 강화로 인한 비즈니스 보호로 승화
  • 42. 특징 – Artisan Command  라라벨 app 를 다루기 위한 명령행 유틸리티  Ruby on Rails 의 rails 명령어와 같은 기능 수행  스캐폴딩(Model, View, Controller, 기타 프레임워크 기능) 제공  DB 마이그레이션 생성 및 적용/롤백  App 정비 상태로 전환등
  • 43. 특징 – DB Migration #1  DB 스키마 파일은 버전 관리 가능(Ex: myschema.sql)  DBMS 가 현재 어떤 버전의 스키마가 적용되었는지는 관리 불가  변경시 DB 스키마 관련 실수는 자주 발생하며 잦은 변경 전략의 주요 장애물
  • 44. 특징 – DB Migration #2  DB 수정시 스키마 파일을 건마다 생성  변경 내역은 DBMS 의 명령어가 아닌 라라벨의 별도 명령어 사용  스키마 변경 이력은 DBMS 의 메타 테이블(migrations) 를 통해 관리 php artisan make:migration add_phone_column_on_users -- table=users php artisan migrate
  • 45. 특징 – Model Factory  App 개발/테스트시(sql 검색문, paging, view 개발등) 테스트 데이터 필요  테스트 데이터는 어느 정도 의미 있어야 하지만 이런 데이터 생성에 시간을 투 입할 수는 없음  factory 를 통해 적당히 의미 있는 데이터를 쉽게 생성
  • 46. 특징 – 설정보다 관례 패러다임  Coc; Convention over Configuration  유연한 App 를 위해서는 설정을 통한 동작 제어 필요  복잡한 설정대신 거의 모든 설정은 관례에 의거하여 생략
  • 47. 특징 – 설정보다 관례 #2 관례를 알아야 하는 문제 발생! 테이블 모델 클래스 기본키 컬럼 생성일 컬럼 갱신일 Users User id created_at updated_at Article_Categories ArticleCategory id created_at updated_at login URL 로그인후 이동 URL /auth/login /dashboards
  • 49. 특징 – IoC Container  클래스의 의존성을 관리하는 강력한 도구  DI(Dependency Injection) 을 통해 클래스들의 의존성 제거  필요한 의존성은 IoC Container 에 의해 런타임에 주입  라라벨은 IoC 대신 Service Container라 부름
  • 50. 특징 – IoC Container #2
  • 51. 특징 – IoC Container #3
  • 52. 특징 – 파사드(Façade)  Service Container(IoC) 에 대해 Proxy 접근  Static 메소드(Cache::get)처럼 사용 가능하므로 new 로 생성할 필요 없음  사용이 쉬우면서 Static 의 단점인 mock 객체를 만들기 어려운 문제 해결
  • 53. Todo Service 만들기 cd ~/Code composer create-project laravel/laravel mytodo.app cd mytodo.app sudo serve mytodo.app /home/vagrant/Code/mytodo.app/public vagrant up ssh vagrant@192.168.10.10
  • 54. 참고 자료 & QNA  Laravel 홈 페이지 - https://laravel.com  라라벨 한국어 매뉴얼 - http://xpressengine.github.io/laravel-korean-docs/  Laracast 온라인 강의 - https://laracasts.com/  Laravel 한국 사용자 모임 - http://laravel.co.kr  컴포저 한국어 매뉴얼 - http://xpressengine.github.io/Composer-korean-docs/  Laravel 자료 모음 - https://github.com/chiraggude/awesome-laravel  발표자 블로그의 도서 공개 - https://www.lesstif.com/x/i4C0AQ 참고  Q&A

Notes de l'éditeur

  1. 프레임워크 정의