너는 ㄷㄷㅊ 무엇이냐

이름이 참 예쁜 그대

 


"장단점 정리는 중간부터! 급하신 분은 스크롤 다운하세요!"

 

 생활코딩 PHP수업을 졸업하고 제 첫 프로젝트는 프레임워크 없이 진행되었습니다. 로그인, 이메일 비번 찾기, 데이터베이스 등 제 손으로 한 땀 한 땀 코딩을 했습니다. 1개월 정도 그 프로젝트에 빠져 살았던 것 같아요. 그때는 그게 맞는지 틀렸는지 모르고 막 코딩을 했습니다. 구현이 되면 성공한거고, 안되면 실패하는 단순하지만 강력한 피드백이 있었죠.

 

 그런데 그런데 그 이후 다른 프로젝트를 진행할 일이 생겼습니다. 그 프로젝트가 개인정보를 다뤄야 하는 프로젝트라서 두려움이 앞섰습니다. 코딩은 하면 됐지만 초보인 저에게는 "직접 코딩했다가 누군가에게 해킹을 당할지도 몰라!"라는 막연한 두려움이 가장 컸습니다. 

 

 그래서 알아보았습니다. 물론 초보이긴하지만 가장 자신 있는 PHP 언어로 만든 안전한 프레임워크를 검색해보았습니다. 그래서 찾은 것이 라라벨(Laravel)이었죠.

 

우오옷!

 제가 하려고 하는 모든 기능이 다 들어있었습니다. 없는 게 없는, 말 그대로 종합 선물 패키지!

 처음 라라벨을 실행하고 그 화면을 보는 순간 그 경이로움은 이로 말할 수 없었습니다. 그제서야 제가 왜 그 이전 프로젝트를 직접 코딩했는지 이해할 수 있었습니다. 그렇습니다. 그 날의 그 환희를 느끼기 위해서 1개월을 고생한 것이었습니다.

 

 맨땅에 헤딩을 해 본 자만 느낄 수 있는 도구의 경이로움!

 

 그렇게 시작된 저의 프레임워크 입문기는 시작되었습니다.

 

 처음 공식문서를 읽을 때 욕이 나왔습니다. 초보들은 이해하지 못할 말들의 향연이었죠. 지금은 그게 당연하다고 생각되지만 초보의 눈에 전체를 보는 눈 따위 개나 줘버렸..

 

 오픈 채팅방에 들어가서 너무 초보 같은 질문이었는지(지금은 생각나지 않지만) 질문을 올리면 하면 공식문서 정독하고 오라는데... 서비스 컨테이너 읽다가 포기한 게 몇 번인지 기억도 나지 않습니다. 그렇게 포기를 반복하다가 안 되겠다 싶어서 그냥 무작정 프로젝트를 시작했습니다. 어떻게든 되겠지라는 생각으로요. 그리고 프로젝트는 성공했습니다. 물론 메이저급의  서비스가 아니라 프로토타입 정도니까 가능했겠죠.

 

 써보니까 좀 알겠더군요. 그리고 생각했습니다.

내가 시작부터 너무 큰 놈을 만났구나. 

 프로그래밍 도구를 사용하는데 순서가 있다면 끝판왕을 만난 것이었어요. 도구치고는 너무 큰 도구를 만나버렸달까. 아기에게 전동드릴을 쥐어준 것 같은 상황이었던 것입니다.

 

그렇게 3년이 지난 지금도 공부 중입니다...

 

 그래도 성과라면 성과랄까. 어느 정도 어떻게 돌아가는지 알게되니 다른 프레임워크(예를 들어 express같은)를 쓰는데 보는 눈이 생겼습니다. 어떤 기능이 부족하고, 어떤 기능이 편리한지. 어찌보면 힘들었지만 좋은 공부가 되었던 것이었죠. 그래서 앞으로 라라벨에 입문할 사람들을 위해 무엇인가를 알려드리고 싶습니다.

 

 어느정도 어려운 것은 동기부여가 되지만 포기할 정도로 어렵지 않았으면 좋겠습니다. 그래서 제가 이해한 내용을 앞으로도 시리즈 형식으로 포스팅하려고 합니다. 짧게 짧게 이해하기 좋게 간단하게요. 어차피 전문적인 내용을 이해가 되게 설명할 정도로 내공이 깊지 않아요.


 그래서 그 첫 번째, 제가 느낀 라라벨이라는 프레임워크의 장단점을 나열해보려고 합니다.

 

1. 장점

① 폭넓은 커뮤니티

 커뮤니티가 좁거나 정보가 적으면 처음 시작하는 사람들은 프레임워크가 아무리 좋아도 시작하기가 어렵습니다. 공부가 어려운 정도가 아니라 불가능해지죠. 놀랍게도 라라벨은 깃헙스타가 2020년 11월 2일 기준 62000개가 넘습니다. 백엔드 프레임워크 중에는 탑급입니다. 프로그래머들 사이에서 인정받고 있다는 근거입니다. 인기가 있는 만큼 커뮤니티도 잘 구성되어있습니다. 라라캐스트라라벨IO 같은데서 필요한 정보들을 잘 알려주고 있습니다. 대부분의 정보들을 얻을 수 있지만 영어인 탓에 접근이 어려운 분들을 위해 한국인 라라벨러들이 모여있는 카카오톡 오픈 채팅방도 있으니 참고하세요.

 

빠른 생산성

 라라벨을 이용하면 빠르게 어플리케이션을 시작할 수 있습니다. 기본적으로 로그인이나 이메일 인증, 레이아웃 등이 지원되기 때문입니다. artisan 이라는 CLI(command line interface)를 이용하면 더 빠르게 적용할 수 있죠. 최근에는 라라벨 Jetstream이라고 불리는 스캐폴딩 기능까지 제공하면서 SPA(single page application)를 빠르게 만들 수 있습니다. 제가 좋아하는 tailwindcss도 자동으로 더해지다니 놀랍지 않을 수가 없어요.

 

2. 단점

① 비동기 처리

 아쉽게도 많은 양의 정보를 동시에 처리하는 기능이 조금 떨어집니다. 제가 앞에서 포스팅했던 Nodejs로 크롤링하기 같은 비동기적인 처리가 아쉽게도 구현이 어렵습니다. 불가능하진 않아요. 찾아보면 방법은 있습니다. 하지만 비교해보면 비동기적인 처리를 하기에 PHP가 불편해요.

 

② 느린 속도

 라라벨이 많은 기능을 포함하고 있어서 그런지는 몰라도 요청을 처리하는데 다른 프레임워크에 비해 느린 속도를 보입니다.

출처: https://decorus.postype.com/post/3538443

 위는 초당 요청 개수를 나타내는데 라라벨은 정말 느린 속도를 보입니다. 장단점이 확실한 프레임워크라는 것이죠.

 

3. 그 외

 제가 라라벨을 사용하면서 구글링을 하면 좀 이상했습니다. PHP를 평가하는 글에는 항상 부정적인 댓글들이 있었거든요. PHP를 옹호하는 사람들과 비판하는 사람들의 의견이 제 눈에는 어려워서 평가를 못하겠지만, 시작한 지 얼마 안 되는 저의 눈에 PHP는 뭔가 아쉬운 언어고, 라라벨은 대단한 프레임워크 같아요. 

 

 그래서 저는 장단점이 확실해서 빠르게 뭔가를 만들어봐야 하는 프로젝트나 홈페이지 같은 가벼운 애플리케이션 같은 경우에는 라라벨을 쓸 것 같아요. 그 외에 많은 데이터를 요청하거나 처리해야하는 프로젝트에는 라라벨을 쓰지 않을 것 같아요. NodeJS, express를 사용할 거고, 연습 프로젝트는 NodeJS, express로 진행하고 있어요.

 

 모든 것을 만족하는 프레임워크를 찾기보다 여러 가지를 익혀서 본인의 목적에 맞게 쓰는 게 답인 것 같습니다. 다음 라라벨 포스팅부터는 심플한 사용기를 포스팅할게요.

 

 

laravel/laravel

A PHP framework for web artisans. Contribute to laravel/laravel development by creating an account on GitHub.

github.com

 


그림 출처 : Human, All Too Human https://decorus.postype.com/post/3538443

홈페이지 정도는 뚝딱 만들어요. 신세계!
이 글은 PHP 공식 문서 사이트에서 함수를 보는 방법을 담고 있습니다.

 


PHP 단어가 코끼리 모양을 닮았서..

 

 생활코딩을 통해 웹페이지 만들기 코스를 졸업한 사람이라면 한 번쯤은 PHP공식문서 사이트에 접속해 본 일이 있을 겁니다. 혹시 한 번도 공식 문서 사이트에 접속한 적이 없는 분이 있을까 봐 링크를 아래에 남겨드릴게요.

 

 

PHP: PHP Manual - Manual

 

www.php.net

 

 코딩을 하다 보면 막히는 구간도 많고 커뮤니티에 질문을 올리면 공식 문서 링크를 남겨주시는 분들이 많습니다. 처음 공식 접하는 분들께서는 보자마자 가슴이 답답해지는 것을 느껴보셨을 거예요. 그 답답함을 지금부터 하나씩 같이 해결해보죠.

 

 사실 저 같은 경우에는 공식 문서에 들어가서 함수를 검색하는 일은 거의 없었습니다. 당연하게도 구글 검색을 하는 게 더 간단하니까요. 구글은 위대합니다. 혹시나 네이버나 다음에서 궁금한걸 자주 물어보는 습관을 가지셨다면 코딩에 관해서는 그냥 구글 이용하세요. 두 번 추천드립니다.


 그럼 배열 안에 값이 존재하는지 확인하고 싶을 때 어떻게 하는지 한번 볼까요? "PHP 언어에서 배열 안에 값을 찾고 싶다!"라고 구글에 입력하면 여러 가지 결과가 나옵니다. array_search, in_array 정도가 나오는데 저희는 공식문서를 보면서 배울 거니까 Manual - PHP라고 쓰인 웹페이지를 클릭하세요. 그럼 in_array부터 살펴보겠습니다.

 

Manual - PHP가 공식문서를 나타냅니다.

 

 이제 들어가면 처음 보는 분들은 네 번째 줄부터 처음 보는 형식이 신기할 것이고, 익숙하신 분들은 바로 사용 방법과 리턴 형식을 파악했을 겁니다. (참고로 in_array, array_search와의 차이점을 간단하게 설명드리면 in_array는 boolean(true, false)을 리턴하고, array_search는 찾고자 하는 value의 key값을 리턴합니다.)

 

 

가장 처음 보이는 내용은 in_array 함수의 정의입니다. 배열 안에 값이 존재하는지 체크하는 함수라고 적혀있군요.

 

 

 두 번째는 함수의 구성입니다. 익숙해지면 이 구성만 보고도 함수의 역할을 확실하게 알 수가 있습니다. 하나하나 살펴볼까요?

  • in_array : 함수의 이름입니다.
  • mixed $needle: $needle은 찾고자 하는 내용입니다. 앞에 mixed는 이 $needle이라는 값이 "혼합형", 쉽게 말해서 자료형이 문자열, 숫자 등을 가리지 않는다는 뜻입니다.
  • array $haystack : 값을 찾고자 하는 대상 배열을 말합니다. 이 값은 array여야 한다고 명시가 되어 있으니 배열만 가능합니다.
  • bool $strict = FALSE : strict는 엄격하다는 의미입니다. 이 값이 참일 경우 값을 찾을 때 값의 type(자료형)까지 확인한다는 내용일 것 같습니다. 아래 parameters(매개변수)에서 확인해보도록 할게요. 이 strict의 경우 중괄호([])로 감싸져 있는데 생략이 가능하다는 표현이에요. 생략할 경우 기본값은 FALSE로 설정되어 있군요.
  • : bool : 마지막에 콜론 이후에 bool이라는 말은 이 함수의 결과 값이 boolean, 참 또는 거짓으로 나온다는 뜻입니다.

 대부분의 경우 구성 설명을 보고 바로 함수를 사용해보면 됩니다. 이후에 나오는 Parameters, 매개 변수에 대한 설명은 대략적으로 훑고 넘어가면 됩니다. 그리고 Note는 꼭 챙겨보세요. 놓치기 쉬운 내용을 알려주거든요.

 

 

 needle parameter에 Note가 있군요. needle이 문자열일 경우에는 대소문자를 구분한다고 합니다. 영문으로 된 문자열을 찾을 때는 주의를 해야겠네요. haystack은 배열이라는 내용이고, strict가 TRUE일 경우 haystrck, 즉 검사 대상이 되는 배열에 들어있는 값을 찾을 때 types(자료형)까지 확실하게 비교해준다고 하네요. 그럼 또 궁금해집니다. 이 strict라는 값이 FALSE일 때와 TRUE일 때 값이 어떻게 달라지는지 알고 싶어서 스크롤을 밑으로 내리다 보니 아래 이런 내용이 나오네요.

 

// Example array

$array = array(
    'egg' => true,
    'cheese' => false,
    'hair' => 765,
    'goblins' => null,
    'ogres' => 'no ogres allowed in this array'
);

// Loose checking -- return values are in comments

// First three make sense, last four do not

in_array(null, $array); // true
in_array(false, $array); // true
in_array(765, $array); // true
in_array(763, $array); // true
in_array('egg', $array); // true
in_array('hhh', $array); // true
in_array(array(), $array); // true

// Strict checking

in_array(null, $array, true); // true
in_array(false, $array, true); // true
in_array(765, $array, true); // true
in_array(763, $array, true); // false
in_array('egg', $array, true); // false
in_array('hhh', $array, true); // false
in_array(array(), $array, true); // false

 

 쭉 보니 충격적인 내용이군요. strict값을 설정하지 않고 기본값인 FALSE일 때 예제의 경우 모두 true를 리턴하는 것을 확인할 수 있습니다. TRUE로 설정해야 key값이 아닌 해당하는 value값이 있을 때만 리턴 값이 true로 나오네요. in_array함수를 사용할 때는 가능하면 Strict를 TRUE로 체크하는 습관을 들이도록 해야겠네요.


 여기까지가 알고 보니 간단한 PHP 공식 문서에서 함수 보는 방법이었습니다. 여러 함수 중에 이 함수를 선택한 이유는 개인적으로 자주 쓰기도 하고, 간단하고, 주의사항도 있어서 공식 문서의 필요성에 대해 생각해볼 수 있을 것 같아서입니다. 이 예제를 통해 공식 문서 보는 방법이 이해가 잘 되었으면 좋겠네요. 그리고 함수를 설명하다 보니 type(자료형)에 대한 내용과 함수의 구조에 대한 내용에 대한 글도 필요하다는 생각이 들었습니다. 다음 글은 좀 더 기본적인 자료형과 함수의 구조에 관해 글을 써봐야겠어요.

 

 더 자세한 내용은 생활코딩 이고잉님이 만들어주신 영상에서 확인하세요. 2012년 버전이라 조금 다르지만 큰 내용은 크게 다르지 않으니 도움이 될거에요.

 

PHP - 문서보는법 by 생활코딩

 

 이해가 되지 않거나 잘못된 내용은 댓글로 알려주세요. 그럼 안녕히!

+ Recent posts