XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel

55

Transcript of XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel

Page 1: XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
Page 2: XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel

목차발표자 소개프레임워크 필요성PSR 표준과 의존성 관리자 (Composer)Laravel 소개 및 장 / 단점Laravel 프로젝트 시연QnA

Page 3: XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel

발표자 정광섭 C/C++, Java, PHP, http://lesstif.com, http:/github.com/lesstif 애자일 , 협업 도구 및 프로세스 , 이슈 및 지식 관리 ,자동화를 통한 프로젝트 성공이 주 관심사 . 닭은 좋아하지만 튀기진 못 할 것 같아서 개발 관련 직무로 사회 생활 지속 소망 “리눅스를 활용한 회사 인프라 구축의 모든 것” 저자 현재 “쉽게 배우는 라라벨 5 프로그래밍 ( 가칭 )“ 저술중

https://www.lesstif.com/x/i4C0AQ에 원고 공개중

Page 4: XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel

프레임워크 정의  " 소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하게끔 일련의 협업화된 형태로 클래스들을 제공하는 것“ – Ralph Johnson 라이브러리와 달리 애플리케이션의 틀과 구조를 결정하고 그 위에 개발된 개발자의 코드를 제어

Page 5: XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel

프레임워크 필요성 - #1 서비스의 복잡도 증가 , 보안 , 대용량 처리 , 외부 서비스 연계 등 고려 사항 많음 단순 / 반복 작업 최소화 , 코드 재사용 , 팀원과 원활한 협업 가능 및 구현하려는 본질에 집중 가능 하지만 의도된 제약 사항으로 인해 customizing 시 어려울 수 있음 확장성 , 안정성 , 사용자층 , 프레임워크가 제시하는 문제 해결방식이 적절한지 고려 후 선정 필요

Page 6: XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel

프레임워크 필요성 - #2 복잡한 비즈니스와 변화에 대응하기 위해서는 프레임워크와 패턴 , 개발 방법론 도입이 필요

Page 7: XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel

PHP 패러다임 변화 Class 키워드가 있는 무늬만 객체지향에서 진정한 객체지향 언어로 성장 (5.x) 동적 메소드 / 프로퍼티 생성 (5.0 - Overloading) NameSpace (5.3) Trait (5.4) Closure(5.4) 등 새로운 기능 도입

Page 8: XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel

PSR(PHP Standards Recommenda-tions)

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

Page 9: XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel

PSR-2 - Coding Style Guide

Page 10: XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel

탭 대신 SPACE 4 닫는 태그 (?>) 사용하지 말 것 클래스 구문의 여는 괄호는 다음 줄에 사용하고 닫는 괄호는 본문 다음 줄에 사용

=> Civil war 종료 ? else if 대신 elseif 사용 기타 등등… PSR-1,2 검사 툴 - https://github.com/FriendsOfPHP/PHP-CS-Fixer

PSR-2 - Coding Style Guide

Page 11: XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel

PSR-2 - 예제

Page 12: XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel

패키지 관리 - Don’t Invent Wheel 해결해야 하는 문제 자체에 집중 도구가 필요할 경우 기존 개발 여부 확인 자체 개발 라이브러리보다는 검증된 외부 라이브러리 사용 NIH(Not Invented Here) 신드롬 주의

Page 13: XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel

패키지 관리 – 문제 #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

Page 14: XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel

패키지 관리 – 문제 #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

Page 15: XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel

Composer 기존의 pear 을 대체하는 PHP 용 패키지 관리자 Npm(Node.js), Bundler(Rails),

maven,gradle(java) 와 동일한 역할 수행 간편하고 편리한 사용 제공

Page 16: XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel

패키지 관리 – Composer 의 해결책 #1 손쉬운 패키지 설치 / 관리

composer require phpunit/phpunit “~4.8”composer installcomposer updatecomposer remove phpunit/phpunit

Page 17: XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel

패키지 관리 - 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

Page 18: XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel

패키지 관리 - Composer 의 해결책 #3 방대한 온라인 저장소 http://www.packagist.org http://packalyst.com/

Page 19: XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel

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 로 개발하면 관리가 불가능한 코드가 양산된다”는 선입관을 날릴 수 있는 잘 만든 프레임워크

Page 20: XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel

github star 비교 – PHP Framework

Page 21: XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel

github star 비교 – 타 언어

Page 22: XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel

Laravel 단점 #1 최신 버전의 PHP 요구 (Laravel 5.1 은 PHP >= 5.5.9 이상 필요 )

국내 웹 호스팅은 PHP 버전 제약 있음 학습 곡선이 길다 .

함수 매뉴얼 보고 코딩하는 기존 개발 방법에 비해 어려움 PHP 5, 객체 지향 , 디자인 패턴 ( 일부 ) 에 대한 이해 필요

실행 속도가 느리다 . 타 PHP 프레임워크 (CI, phalcon) 에 비해 느림 실행속도보다 개발 생산성이 증가하고 변화에 탄력적이므로 용도에 맞게 선정 Ex: 사용자 증가로 DB 분산 처리 (읽기 /쓰기 분리 ), 파일 저장을 AWS S3 로 , 세션 처리를 Redis 로 할 경우 app 변경이 고통스럽지 않음

Page 23: XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel

Laravel 단점 - #2 한글 자료 부족

젊은 프레임워크 (4 년 ) 라 사용자 층이 얇음 , 현재 국내 출판 도서 1권 (번역본 ) XE 3 발표 및 레퍼런스가 늘어나고 , 사용자 증가하면 해결 가능

너무 빠른 버전업 및 하위 호환성 부족 새 버전 출시 주기가 빠르고 기존 버전 지원 기간이 짧음 5.1 LTS(Long Term Support - 2 년 지원 , 3 년 보안 패치 ) 버전 출시로 어느 정도 해소 예정

Page 24: XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel

특징 – MVC #1

디자이너 개발자

코드 + 디자인

변경이 어려움

기능을 수정해야 하는데..

디자인을 수정해야 하는데..

Page 25: XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel

특징 – MVC #2

사용자

Controller

View

Model

웹 애플리케이션①요청

②호출

③결과반환④ 호출 및 모델 전달

⑤ 참조

⑥응답

Page 26: XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel

특징 – MVC #3

M

C

V

Page 27: XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel

특징 – 쉽고 가벼운 템플릿 엔진 (blade)

name : jasonemail: [email protected] : 20………………

Model View Template

Blade Engine

Page 28: XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel

특징 – 우아하고 미려한 문법

Page 29: XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel

특징 – URL 라우팅

/

/hello

/book

Route(Front Controller)

Request

homeIndex()

helloAction()

bookAction()

/user/register 처리 소스가 /var/www/myserver/user/register.php 가 아님 파일 시스템과 매칭되지 않고 전체 app 의 동작을 제어

Page 30: XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel

특징 – 쉬운 DB 코딩 #1 – Query Builder

Page 31: XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel

특징 – 쉬운 DB 코딩 #2 – ORM

Page 32: XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel

특징 – 쉬운 DB 코딩 #3 – ORM

Page 33: XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel

특징 – 미들웨어 (MiddleWare) #1 라라벨 4 => 필터 (filters), 5 에서 미들웨어로 변경 보통 App 보다 먼저 실행 매번 실행되므로 전체적인 서비스 속도 저하 => 단점 매번 실행되므로 app 실행전 / 후에 필요한 공통 기능 추가 쉬움 => 장점

AppAppRequest ResponseApp

Authentication

VerifyCsrfToken

EncryptCookies

Page 34: XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel

특징 – 미들웨어 (MiddleWare) #2

Page 35: XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel

특징 – 손쉬운 개발 환경 구축 #1 개발 환경 구축시 벌어지는 야크 털 깍기 (Yak Shaving) 는 그만 !

어떤 APM(EasyPHP, WAMP, XAMPP, Apm_setup, AutoSet….) 설치 ?Apache http 에 새로운 가상 호스트를 추가하는 방법은 ?운영 환경은 nginx 를 사용하는데 ?PHP 의 mbstring extension 을 활성화하려면 ?디자이너와 퍼블리셔도 개발 환경을 꾸미려면 ?

Page 36: XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel

특징 – 손쉬운 개발 환경 구축 #2 Homestead

Guest OS(Ubuntu)

홈스테드

가상 하드웨어(CPU, Memory, Disk)

Hypervisor(VirtualBox)

VirtualBox + Vagrant 가상 머신 기반하의 개발 환경 패키지 개발에 필요한 모든 환경 (Linux, nginx,

PHP, DBMS, Redis) 가 자동 설치vagrant box add laravel/homesteadvagrant upvagrant halt

Page 37: XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel

특징 – 보안성 최근 P 사의 사태 - 보안은 자사의 비즈니스를 보호하기 위한 핵심 요소 직군과 상관없이 보안의 중요성 인식 필요 개발자는 시큐어 코딩 (Secure Coding) 으로 안전하고 견고한 app 개발 필요

89 년 국내 모 잡지

Page 38: XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel

특징 – 보안성 (XSS; Cross Site Script)

사용자의 입력 ( 게시판등 ) 을 화면에 출력할 경우 새너타이징 필요 Blade 의 기본 출력 메소드 : {{ $var }} 에서 자동 새너타이징&lt;

< ㅅ

&gt;

>

alert( &quot;

Welcome &quot;

); &lt;

<

script script &gt;

>

새너타이징

Page 39: XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel

특징 – 보안성 (SQL Injection) - #1

Page 40: XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel

특징 – 보안성 (SQL Injection) - #2 모든 쿼리는 PDO 를 사용하며 Prepared Statement 와 Bound Parameter를 통해 안전하게 처리 – 기본 동작

aaa' or '1' = '1  를 입력해도 password 컬럼 값이 aaa' or '1'='1' 인 레코드를 찾게 됨

Page 41: XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel

특징 – 보안성 (CSRF 공격 방지 ) 데이터를 변경하는 HTTP 요청 (POST/PUT/PATCH/DELETE) 는 CSRF(Cross-

Site Request Forgery) 토큰 적용 ( 기본 동작 ) CSRF 에 대한 이해가 없을 경우 app 미동작으로 인한 두통을 유발할 수 있음 개발자의 두통은 시큐어 코딩 습득 및 보안 강화로 인한 비즈니스 보호로 승화

Page 42: XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel

특징 – Artisan Command 라라벨 app 를 다루기 위한 명령행 유틸리티 Ruby on Rails 의 rails 명령어와 같은 기능 수행 스캐폴딩 (Model, View, Controller, 기타 프레임워크 기능 ) 제공 DB 마이그레이션 생성 및 적용 /롤백 App 정비 상태로 전환등

Page 43: XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel

특징 – DB Migration #1 DB 스키마 파일은 버전 관리 가능 (Ex: myschema.sql) DBMS 가 현재 어떤 버전의 스키마가 적용되었는지는 관리 불가 변경시 DB 스키마 관련 실수는 자주 발생하며 잦은 변경 전략의 주요 장애물

Page 44: XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel

특징 – DB Migration #2 DB 수정시 스키마 파일을 건마다 생성

변경 내역은 DBMS 의 명령어가 아닌 라라벨의 별도 명령어 사용 스키마 변경 이력은 DBMS 의 메타 테이블 (migrations) 를 통해 관리

php artisan make:migration add_phone_column_on_users --table=users

php artisan migrate

Page 45: XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel

특징 – Model Factory App 개발 /테스트시 (sql 검색문 , paging, view 개발등 ) 테스트 데이터 필요 테스트 데이터는 어느 정도 의미 있어야 하지만 이런 데이터 생성에 시간을 투입할 수는 없음 factory 를 통해 적당히 의미 있는 데이터를 쉽게 생성

Page 46: XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel

특징 – 설정보다 관례 패러다임 Coc; Convention over Configuration 유연한 App 를 위해서는 설정을 통한 동작 제어 필요 복잡한 설정대신 거의 모든 설정은 관례에 의거하여 생략

Page 47: XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel

특징 – 설정보다 관례 #2

관례를 알아야 하는 문제 발생 !

테이블 모델 클래스 기본키 컬럼 생성일 컬럼 갱신일Users User id created_at updated_atArticle_Categories ArticleCategory id created_at updated_at

login URL 로그인후 이동 URL/auth/login /dashboards

Page 48: XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel

특징 – 설정보다 관례 #3

Page 49: XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel

특징 – IoC Container 클래스의 의존성을 관리하는 강력한 도구 DI(Dependency Injection) 을 통해 클래스들의 의존성 제거 필요한 의존성은 IoC Container 에 의해 런타임에 주입 라라벨은 IoC 대신 Service Container 라 부름

Page 50: XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel

특징 – IoC Container #2

Page 51: XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel

특징 – IoC Container #3

Page 52: XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel

특징 – 파사드 (Façade) Service Container(IoC) 에 대해 Proxy 접근 Static 메소드 (Cache::get) 처럼 사용 가능하므로 new 로 생성할 필요 없음 사용이 쉬우면서 Static 의 단점인 mock 객체를 만들기 어려운 문제 해결

Page 53: XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel

Todo Service 만들기cd ~/Codecomposer create-project laravel/laravel mytodo.appcd mytodo.appsudo serve mytodo.app /home/vagrant/Code/mytodo.app/public

vagrant upssh [email protected]

Page 54: XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel

참고 자료 & 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

Page 55: XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel

감사합니다 .