프레임 워크에서 프레임 워크 없음으로 전환 [닫힘]


89

취미로 약 8 년 동안 PHP로 개발해 왔습니다. 2009 년에 저는 codeigniter를 선택했고 그 이후로 단일 프로젝트를 개발하지 못했습니다.

순수한 PHP로 작업하는 경우 알고 있거나 빠르게 스 니펫을 찾을 수있을 때 원하는 방식으로 작동하도록 수정하는 방법을 찾는 속도가 느려집니다.

CodeIgniter, Kohana 및 Symfony를 사용해 보았습니다. 저는 사용의 용이함을 좋아합니다 (그리고 데이터베이스 작업 속도를 크게 높여주는 ORM으로 교리를 사용하기 시작했습니다).하지만 프로젝트가 순수 PHP에서 소요 된 시간보다 3 ~ 4 배 더 걸리는 시간을 발견했습니다. 이전에 순수 PHP에서 해결 한 문제에 대한 해결책을 찾을 수 없을 때 지루하고 좌절합니다.

프레임 워크 사용에서 프레임 워크없는 접근 방식으로 되돌아 간 사람이 있습니까? 기본 보안 프레임 워크와 같은 것이 있습니까 (XSS 방지, 게시 된 데이터 필터링, 데이터베이스 사용을위한 정리 기능 제공)? 그런 것이 풀 스케일 프레임 워크보다 훨씬 더 많은 혜택을 줄 것이라고 생각합니다. 프레임 워크로 작업하는 법을 배워서 많은 것을 배웠다고 생각하지만, 제 자신의 코드로 작업하는 것이 더 행복 할 것입니다.


5
프레임 워크가없는 것에 비해 프레임 워크 사용에 대해 3 ~ 4 배의 시간이 걸린다고 말씀하신 이유에 대해 더 듣고 싶습니다. 더 자세히 말씀해 주시겠습니까?
Lukman

7
CI 또는 모든 프레임 워크의 이점 중 하나는 특정 개발 스타일에 익숙하지 않은 개발자가 유지 관리하기 더 쉬운 디자인 패턴으로 강제한다는 것입니다. 또한 더 큰 환경에서는 CSS 전문가가 개발자의 발을 밟지 않고 작업을 수행 할 수 있도록 뷰를 로직에서 분리하는 것이 필수적입니다.
Kyle Noland

1
좋은 질문입니다. 선택권이 있다면 순수 PHP를 사용합니다. 하지만 대부분의 경우, 내가 일하는 사람들은 내가 프레임 워크를 사용하기를 원하기 때문에 추가 시간 만 청구합니다. 재난이 발생하고 모든 코드가 "아무도 읽을 수없는 사용자 정의 프레임 워크"상태에있는 경우 사용자를 계속 유지해야하는 것을 두려워 할 수 있습니다.
SSH이

답변:


101

현재 버전의 PHP5에는 표준 라이브러리의 일부로 찾고있는 많은 보안 프레임 워크가 포함되어 있습니다.

  • filter_input_array 를 사용 하여 외부에서 들어오는 항목 을 선언적으로 삭제합니다.
  • SQL 주입 공격을 방지하기 위해 매개 변수화 된 SQLPDO 를 통해 데이터베이스에 액세스합니다 .
  • 다음 PHP 설정을 사용하여 사이트가 세션 고정 및 쿠키 도난에 대해 더 내성을 갖도록하십시오.
  • 새로운 HTTP 및 HTML5 기능에는 기본 템플릿 및 헤더 설정 보다 더 멋진 것이 필요하지 않습니다.

HTML을 입력으로 받아들이는 경우 HTML Purifier를 잡고 filter_input_array 설정에서 FILTER_CALLBACK 줄을 통해 호출하는 것이 좋습니다 . 입력 보안에 대한 화이트리스트 기반 접근 방식은 XSS에 대한 강력하고 강력한 첫 번째 방어선을 만듭니다.

내가 말할 수있는 한, PHP는 교차 사이트 요청 위조 로부터 보호하기위한 메커니즘을 제공하지 않지만 Google이 당신을 도울 수 있다고 확신합니다. OWASP 보안 cheatsheet를은 당신이 당신의 자신의 보호를 구현하려는 경우에 대한 섹션을 포함한다.

호기심 때문에 독립 실행 형 구성 요소도 살펴보기로 결정했으며 지금까지 찾은 내용은 다음과 같습니다.

템플릿 :

  • PHP 템플릿 상속 (일반 PHP와 템플릿 상속)
  • TWIG (Django / Jinja2 / 자동 이스케이프 및 샌드 박싱을 포함한 Liquid 스타일 구문. 속도를 위해 캐시 된 PHP로 컴파일됩니다.)
  • Dwoo는 (A 빠르게, 더 풍부한 기능, PHP5 틱 후계자 스마티 . 기존 스마티 템플릿에 대한 호환성 시스템을 포함합니다.)

내가 아직 제대로 조사하지 않은 것 :


감사합니다. 모든 좋은 조언을 지금부터 살펴 보겠습니다!
Alex C

4
템플릿 엔진이 필요한 경우 Smarty를 Dwoo로 교체하세요. 특징적으로 Smarty와 거의 동일하지만 CPU를 녹이지 않습니다.
Phil Sturgeon

pear.php.net/package/Net_URL_Mapper 는 경로 디스패처입니다.
cweiske 2011 년

4
프레임 워크가 속도를 늦추면 특히 전염병과 같은 Smarty와 같은 템플릿 엔진을 피하십시오. 의미는 좋지만 PHP가 이미 수행하는 작업을 수행하는 새롭고 직관적이지 않은 방법을 만듭니다.
Night Owl

달성하려는 작업과 프레임 워크가 속도를 늦추는 이유에 따라 다릅니다.
ssokolow 2011-08-03

10

저는 프레임 워크를 믿지 않습니다. 많은 프레임 워크에서 일했습니다.

MVC 프레임 워크를 싫어하는 이유 :

1) 코드 부풀림, 개발을 지원하는 프리미엄 클래스를 구입합니다. 양식 클래스 또는 SQL 클래스와 같은.

2) MVC 프레임 워크는 특히 종속성 관리자를 사용할 때 쉽게 이식 할 수 없다고 생각합니다.

3) 인증 등을 처리하는 유용한 클래스가 많은 상용구를 사용해야한다면 실제로 MVC 프레임 워크로 더 많은 코드를 작성한다고 생각합니다.

4) 대부분의 프레임 워크는 기본적으로 하나 또는 두 개의 데이터베이스 만 지원합니다.

인증 및 텍스트 편집기가있는 양식 프레임 워크 및 madoo + 이메일 클래스와 같은 SQL 프레임 워크를 찾는 것이 좋습니다.

애플리케이션의 90 %는 항상 form, sql 및 ajax CLASSES이며 나머지는 필요할 때만 획득 할 수 있습니다.

나는 미니멀리스트이고 아무것도하지 않는 내 애플리케이션에 코드가 있다는 생각에 어려움을 겪습니다.


"프리미엄 클래스를 구매합니다"라는 문구와 관련하여 : 해당 클래스를 어디서 구입하고 어떤 목적으로 사용합니까? 감사.
dotancohen 2015

나는 동의한다. 또한 많은 프레임 워크에서 상당한 성능 저하가 있습니다.
developerbmw

8

많은 경험을 바탕으로 자신 만의 즐겨 찾는 라이브러리 세트를 가지고 직접 선택하고 자신 만의 간단한 프레임 워크를 만들어야합니다. 프레임 워크 또는 프레임 워크 없음 (그리고 그 중 하나)은 현재 진행중인 프로젝트의 종류에 따라 다르며 모든 것에 적합한 장갑은 없습니다. 따라서 기존 프레임 워크로 인해 속도가 느려진다 고 느낀다면 시간을내어 필요에 따라 작동하는 프레임 워크를 생각해 보시기 바랍니다.


8

PHP를 취미로 사용하고 있다는 귀하의 진술과 "천천히 도달하기"라는 프로필 진술에 따르면 이것은 학습 곡선 문제로 보입니다. a) 프레임 워크가 부과하는 구조 내에서 작업하는 방법을 이해하고 b) 프레임 워크가 제공하는 효율성의 혜택을받을 수없는 깊이와 폭의 경험이없는 것 같습니다.

나는 당신이 그것에 충실 할 것을 촉구합니다. 비디오 자습서로 처음으로 돌아가십시오. 이해할 때까지 다른 사람들의 코드를 찾아서 읽으십시오. 아래에서 위로 프로젝트를 빌드하고 간단하게 시작하고 기능을 추가하십시오. 답글을 읽기 전에 직접 질문에 답하면서 포럼을 따르십시오.

저는 거의 20 년 동안 다양한 플랫폼에서 전문적으로 프로그래밍 해 왔으며 CI에 익숙해지는 데는 여전히 시간이 걸렸습니다. 그러나 지금은 정량화 할 수있는 성능 문제를 노출 할 수있는 충분한 규모의 사이트가 없다면 (트위터를 생각하면) 순수한 PHP로 돌아 가지 않을 것입니다.


프레임 워크를 좋아하든 싫어하든 여전히 경계선에 있습니다. 나는 분명히 OP의 요점을 알고 있지만 당신도 마찬가지입니다. 프레임 워크를 배우는 것은 완전히 새로운 언어를 배우는 것과 같습니다. 당신은 프레임 워크의 일을하는 방식으로 들어가야합니다. 그러나 내가 고민하는 또 다른 문제는 어떻게해야하는지에 대한 나의 철학이 프레임 워크의 철학과 다른 경우입니다. 나는 여전히 나에게 맞는 것을 찾으려고 노력하고 있습니다. (.NET MVC3를 기다릴 수 없음)
mpen

아직은 다른 프레임 워크를 알지 못하기 때문에 일반적으로 말할 수 없습니다. 그러나 프레임 워크를 사용하는 것이 전부 또는 전무가 아닙니다. 예를 들어, CI의 캐싱 라이브러리 (페이지, 데이터베이스)가 불충분하고 쉽게 확장 할 수 없습니다. 그래서 저는 제 3 자 캐시 라이브러리 (Phil Sturgeon 's)를 사용하는데 매우 만족합니다.
coolgeek

이를 고수하는 또 다른 중요한 이점은 이후에 다른 프레임 워크를 비교적 쉽게 배울 수 있다는 것입니다. 그렇기 때문에 특정 프레임 워크 (예 : CI)를 지정하는 구인 목록을 자주 볼 수 있지만 유사한 프레임 워크 (예 : Zend 또는 Symfony)에 대한 경험을 고려할 것입니다.
coolgeek

2

Zend Framework는 정말 대단합니다. 원하는만큼 사용할 수 있습니다. 모두 PHP로 코딩되고 오픈 소스이므로 해킹하여 자신의 것으로 만들 수 있습니다. 다른 구성 요소는 다른 프레임 워크에서만큼 서로 의존하지 않습니다.

문제없이 Zend의 일부 구성 요소를 사용하여 간단한 프레임 워크를 구축 할 수 있습니다.

확인해 보세요!


3
그는 틀에서 벗어나려고 노력하고 있습니다.
WarmWaffles

1
@WarmWaffles. Wich는 ZF의 일부 사용에 대해 이야기 한 이유입니다. Surelly 당신은 그 사람이 모든 것을 위해 바퀴를 재발 명하기를 기대하지 않습니다.
Iznogood

2
Iznogood은 아주 좋은 점을 가지고 있습니다. ZF는 단순한 프레임 워크 이상입니다. 나는 패키지가 많은 일반적인 작업을 수행하는 데 매우 유용하다는 것을 발견했으며 MVC 패턴이나 DB 액세스 방법 등을 사용하도록 강요하는 것은 없습니다. 물론 Pear 모듈도 사용할 수 있습니다.
Bob Baddeley

2
프레임 워크도 자랑하는 도서관입니다. 그러나 그는 사용하기 쉬운 것을 찾고 있으며, 지난번에 Zend의 네임 스페이스를 확인했을 때 복잡하고 타이핑하는 데 어려움이 있습니다. @Bob_Baddeley PEAR는 좋은 제안입니다
WarmWaffles

@WarmWaffles 잘 각자 자신의 것 같아요. Zend를 지금 1.10.x에서 다시 확인하고 1.8이라고 말할 수 있습니다.
Iznogood

2

나는 당신이 느끼는 방식을 정확히 알고 있습니다. 4 ~ 5 년 전 PHP (델파이 출신)로 시작했고 순수 PHP로 시작했습니다. 내가 그들에게 되돌려 준 것은 모든 테이블 필드를 읽고 양식을 만드는 "CMS Panel like"였습니다. 얼마 후 PHP 프레임 워크에 대한 지식에 도달 한 후 처음으로 CakePHP를 사용해 보았고, Yii에 들어가는 것이 마음에 들지 않았습니다. 제 생각에는 꽤 직관적이고 사용하기 쉽습니다 (Gii 생성기를 사용하면 상당히 흔합니다). 저는 Symfony, ZF2, Laravel, Yii2-Beta 및 RAD 용 프레임 워크를 사용해 보았지만 여전히 프레임 워크 이전처럼 충분히 빠르지 않았습니다.

내 자신의 프레임 워크를 개발 한 적이 있습니다 (언젠가 일어나서 "새 프레임 워크를 만들 것입니다"라고 말한 것은 당연한 것이 아니라 시간과 함께 발생했습니다). 나는 그것이 나쁜 나쁜 습관이고 "바퀴 재창조"움직임이라는 것을 알고 있지만, 이제는 내 프로젝트를 훨씬 빠르게 개발합니다 (PHP 이상).

코드가 전체 MESS이기 때문에 약 한 달 전에 프레임 워크를 재구성하기 시작했으며 이제는 composer를 사용하고 PHP 프레임 워크 사이에 존재하는 공통 규칙을 따르며 MVC입니다.

내가 왜 재구성 하는가? 누군가 내 프로젝트를 수리해야한다면 그것은 다른 세상이 아닐 것이기 때문입니다.

그래서 나는 당신을 이해합니다.

내 조언은 도구를 준비하고 (프레임 워크, 사전 설정 앱 또는 사람들이 이름을 지정하는 모든 이름) 기분이 좋아지는 방식으로 사용하되, 여전히 몇 가지 일반적인 규칙을 따르라는 것입니다 (MVC와 같이 "모듈화하기 쉬운"것 고장난 경우 교체 할 수 있습니다.


1

기본 보안을 위해 내 superglobals래핑 하는 사용자 지정 필터 메서드를 사용합니다 . 구문은 익숙해 져야하지만 PHP filter_var () API보다 간단하며 완전 삭제를 허용하지 않습니다.

 $_GET->text("inputvar") or $_POST->name["field"]

또한 인라인 $ _REQUEST-> sql () 이스케이프를 허용했습니다. 그러나 데이터베이스 작업의 경우 매개 변수화 된 SQL 또는 선택한 DAL / ORM을 계속 사용하십시오.


이것은 확실히 영리한 솔루션이지만 필터 API가 번거 롭다고 생각하는 이유를 잘 모르겠습니다. 어쨌든 filter_input_array ()가 훌륭하다고 생각합니다. (주로 주어진 요청 유형에 대한 모든 입력을 합리적으로 선언적인 방식으로 한 곳에서 간단하게 정의 할 수 있기 때문입니다. 그런 종류의 이점을 결코 과소 평가하지 마십시오.)
ssokolow

@ssokolow : 사실, filter_input_array ()는 한 번에 할 수있어 멋집니다. 그러나 filter_ * 함수에는 이미 너무 많은 유연성이 있으며 너무 많은 매개 변수가 적합하지 않습니다. 그것이 기술적으로는 좋은 해결책이지만 사람들이 그것을 피하고 있다고 생각하는 이유입니다.
마리오

혹시. 문제의 일부는 많은 사람들이 여전히 PHP4 책을 선반에 가지고있는 세상에 최근에 도착한 것 외에도 광고가 부족하고 공식 문서가 명확하지 않으며 W3Schools 문서가 있다는 것입니다. Google의 최고 결과를 공유하는 경향이있는 것은 충분히 포괄적이지 않습니다.
ssokolow

1

ToroPHP에 대해 하루 동안 연구 한 결과 매우 좋았습니다. RESTful 애플리케이션을 대상으로하는 미니멀 한 프레임 워크입니다. 이를 통해 프레임 워크의 부풀림을 처리 할 필요없이 서버 측 코드를 모듈 식으로 유지할 수 있습니다.


1

무엇이 문제인지 모르겠지만 codeigniter는 훌륭한 프레임 워크입니다. 좋은 문서가 있고 많은 사람들이 codeigniter를 사용하기 때문에 문서, 포럼 또는 stackoverflow에서 모든 도움말을 찾을 수 있습니다. Codeigniter, CakePHP, Zend, Spring 3.0, Ruby on Rails),하지만 codeigniter가 최고의 문서를 가지고 있다고 말해야합니다. codeigniter에는 자동으로 처리되는 많은 것들이 있으며 보안에 대해 걱정할 필요가 없습니다. 핵심 PHP에서 작업하는 것은 바퀴를 재창조하는 것과 같습니다. 가장 중요한 것은 코어에서 프레임 워크로 이동하는 데 익숙해지면 많은 노력이 필요하다는 것입니다. 또한 Ruby on rails는 또한 당신이 할 수있는 모든 것을 안다면 훌륭한 프레임 워크입니다. 배속이 있습니다.


2
이 글을 게시 한 지 2 년이 조금 넘었고 실제로 한동안 순수 PHP로 작업했지만 그 이후로 PHP로 다시 전환했습니다. 정확히 맞습니다. 사용하기 매우 쉽습니다. 현재 선호하는 설정은 CI, 데이터베이스 용 phpActiveRecord 및 템플릿 용 Twig입니다.
Alex C

예, phpActiveRecord가 멋져 보입니다. 그래도 Laravel을 사용해 본 적이 있습니까? ( laravel.com ) CI, phpActiveRecord 및 Twig가 모두 기본적으로 내장되어 있다는 것을 알게 될 것입니다. 저는 CakePHP 개발자 였지만 최근에는 Laravel을 예리하게 살펴보고 있습니다.
Simon East
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.