phalcon을 대체하기 위해서 이런저런 프레임워크를 급하게 찾아봤는데

그나마 phalcon을 제외하곤 빠른 축에 속하고 대중적인 Slim 프레임워크로 최종 낙착봤습니다.

CI도 고민하긴 했는데 CI는 내용도 충실하고 속도도 빠르긴 한데 너무 이질적이더라구요.

디렉토리 구조도 쓸데없이 복잡하고 코드도 무조건 app->db-> 이런 식으로 들어가야

하는 것도 그렇고.. 참고삼아 CIBoard 소스를 좀 봤는데 정말 눈에 안들어오더군요.

그냥 평범한 게시판이 왜 이리 복잡해져야 하는건지...

이거 공부하려면 너무 익숙해지기 힘들거 같아서 포기했습니다.

그외에 Yii라던가 FatFree라던가 Siler라던가 라라벨이라던가 이것저것 들춰봤는데

Slim이 가장 나은 것 같더군요. 사실 phalcon이 제일 좋아요.

그냥 오직 속도때문에 선택한 프레임워크인데 phalcon만큼 코드가 깔끔하게 나오는게 없더란..

DB 제어하는 코드도 그렇고 라우팅 코드도 그렇고 정말 깔끔하고 가독성이 높습니다.

phalcon이 진짜 TS 버그나 메모리릭 버그만 없으면 진짜진짜 계속 쓰고 싶은데 말이죠..

Slim의 REST API 만들기 위해 필요한 코드들은 phalcon하고 거의 모양이 비슷하게 나옵니다.

그래서 소스를 많이 안수정해도 되었어요. Slim은 분량도 적고 파악하기 쉽게 되어있어서

소스를 고치느니 Slim 프레임워크를 막 수정해버렸죠 ㅎㅎ...

근데 Slim은 내용이 너무 부실하더군요. PHP 프레임워크로서 보통 제공하는 기본들이 막

빠져있어서.. 템플릿엔진, db, log, escape, cache등등 하나도 없어요.

진짜 딱 라우팅하고 request, response 조작, 거기에 파일 업로드 처리 정도만 지원함.

나머진 다 다른거 가져다 써야해요. 뭐 그게 장점일수도 있겠지만 뭘 가져다써야할지

모르겠더라구요. 그래서 log, escape, cache등 유틸리티 클래스들은

아직도 phalcon 쓰고 있고 DB만큼은 phalcon껄 쓸 수가 없어서 dbal 가져다 써볼까 했는데

그것도 코드 스타일이 썩 맘에 안들더라구요. phalcon 너무 좋아...

걍 mysqli 함수 생으로 호출할까 하다가 그건 또 너무 노가다가 많아져서

그래서 기존 코드 최대한 안고치게 phalcon 스타일로 sql bind하게 적당히 하나 만들었습니다.

 

근데 Slim을 본격적으로 써보니까 아쉬운 점이 좀 있네요..

1) Response의 기본 http status 코드가 200이다.

이거 좀 치명적입니다. 보통 사용자 코드에서 에러가 나서 제대로 http status를 못돌려보내면

500을 돌려보내야 될텐데 이놈은 200을 돌려보네요. 이것때문에 한참 헤맸네요.

200 떨어졌는데 왜 안돌지? 했는데 알고 보니까 200이 200이 아니더란... 

2) Response에서 바디 설정하는 함수가 너무 적다.

이건 뭐.. 함수 호출로 간단하게 처리할 수 있는건 Json하고 Stream 하고 딱 2개만 지원해요.

text/plain이나 text/html로 바로 보낼 방법도 없고.. 그외엔 상당히 복잡한 조작으로 write해야함.

이런 말도 안되는.. 이거 불편해서 도대체 어떻게 쓰죠?

뭐 프레임워크 소스에다가 이것저것 함수를 추가해서 쓰긴 하고 있는데 이렇게 간단하게

추가할 수 있는걸 왜 이렇게 부실하게 지원해주는지 이해가 안되네요. 

제가 수정해서 써봤자 버젼업하면 다 날라가잖아요... 

하여튼 전반적으로 함수가 좀 적음.. 간단하게 한번 호출로 해결하는게 어렵다고나 할까요..

Response를 immutable로 한다고 뭐 하나 호출할때마다 Response를 clone 해대는 것도

좀 이해하기가 힘들구.. clone 한번만 하면 될걸 3번 4번씩 하고 있는거 보면 좀...

라라벨이 1등이고 Slim하고 CI가 각각 한 14% 정도 점유하고 있는거 같던데...

Slim은 라라벨이나 CI에 비기기엔 좀 부실한 것 같다는 느낌이네요.

무거운 프레임워크는 싫고 딱 REST API 만드는데만 필요한 수요(저같은)가

여기에 다 몰린 느낌입니다.

 

아 딱 하나 Slim에서 감탄한거 있어요. Middleware라는 이름으로 req 들어와서

본처리 들어가기 전처리나 후처리를 굉장히 자유롭게 제어할 수 있더라구요.

undertow하고 거의 비슷하던데.. 하여튼 이걸로 반복되는 코드를 엄청 줄일 수 있습니다.

코드도 굉장히 직관적이 됩니다.

  • profile
    프레임워크를 한번도 안써봤는데요...
    (남이 만든거 수정하느라 머리싸매며 파일 위치를 찾아보기는 했었어요.)
    프레임워크를 쓰면 더 좋은가요?
    전 날코딩으로 시작해서 그런지 날코딩은 직관적으로 보여서 선호하거든요.
    대규모 작업을 하면 아무래도 더 좋을려나요?
  • profile ?
    복잡해질 수록 좋지요....
    진짜 페이지나 하나 달랑 만들때는 뭐 날코딩이 빠르고
  • ? profile
    뭔가 크고 복잡한 것을 굳이 만들일이 별로 없어서 관심밖이었나봐요.