세상의 모든 지식

Laravel을 6개월 정도 써본 후기 본문

Web/PHP & Laravel

Laravel을 6개월 정도 써본 후기

JuniorEinstein 2018. 2. 26. 16:43
728x90


0) 도입


라라벨로 개발을 시작한지 6개월 정도 되었다. 그전에는 CodeIgniter를 사용해서 개발을 하다가 라라벨로 넘어 오면서 느낀 점들을 간략하게 정리해보고자 한다.


우선은 PHP 프레임워크들에 대한 소개다.


https://www.hongkiat.com/blog/best-php-frameworks/


대략 정리를 해보자면,

  • Laravel
  • Symfony
  • CodeIgniter
  • Yii 2
  • Phalcon
  • CakePHP
  • Zend Framework
  • Slim
  • FuelPHP
  • PHPixie
정도가 있다.

나는 이중에서 'Laravel', 'CodeIgniter', 'Slim' 정도를 사용해 봤다.

우선 PHP 개발은 순수 PHP로 개발하는 것보다 프레임워크로 개발하는게 개발 속도가 훨씬 빠르다. 물론 웹사이트의 퍼포먼스 속도는 순수 PHP 개발이 빠르겠지만, 개발 속도라든지, 보안 등의 다양한 문제로 미루어 보았을 때 프레임워크로 개발하는게 유리하다는게 나의 생각이다.

제일 먼저 써본 프레임워크는 'CodeIgniter'이다.

1) CodeIgniter


CodeIgniter는 2006년에 개발된 프레임워크이다. 그리고 베타 버전과 1, 2, 버전을 거쳐서 지금 3.1.7버전까지 다다랐다.


CodeIgniter는 기본적으로 MVC 패턴을 기반으로 하고 있다. 웹 어플리케이션의 구조를 Model, View, Controller의 세 부분으로 나눠서 각각

  • Model : 데이터베이스에서 값을 불러 오는 등의 역할을 수행함.
  • View : 웹 프런트와 관련된 작업을 처리함.
  • Controller : Model과 View를 연결해 주는 역할을 수행한다.
의 역할을 수행한다.

순수 PHP 개발을 하다가 처음으로 접한 다자인 패턴이지만 쉽게 적응하고 사용할 수 있었다. 순수 PHP 개발을 MVC 패턴으로 구축할 수도 있지만 개발하는데 시간이 많이 걸리기 때문에 보통의 순수 PHP 개발은 폴더 단위의 라우팅이 이루어진다. 반복적으로 사용하는 변수, 뷰는 따로 파일로 만들어서 include 하는 경우가 일반적이다. 하지만 이런 개발 방식은 서비스가 커지고 복잡해지면 관리하기 어려워진다.

아래는 CodeIgniter의 Application Flow이다. 쉽게 말해 CodeIgniter가 작동되는 과정이라고 생각하면 된다.

  1. index.php는 CodeIgniter을 시동하기 위한 기본적인 리소스들을 초기화 하는 Front Controller로서의 역할을 수행함.
  2. Router은 각각의 HTTP 요청이 어디로 연결되는지, 어떤 역할을 수행해야 하는지 알려줌.
  3. 만약 캐시 파일이 있으면, 기존의 시스템 실행 과정을 건너뛰고 브라우저에 캐시를 바로 보낸다.
  4. 보안. Application Controller가 로드되기 전에 HTTP 요청의 값들을 필터링한다.
  5. Controller가 특정 요청을 처리하기 위한 Model, Core Libraries, Helpers, 그리고 그 외 리소스들을 로드한다.
  6. 데이터 등이 모두 처리된 View가 최종적으로 브라우저에 띄워진다. 만약 캐싱이 켜져 있다면, View는 바로 다음 요청에 응답될 수 있도록 일단 먼저 캐시에 저장된다.
CodeIgniter의 장점)

1. PHP 프레임워크 중에서 쉬운 편에 속한다.

처음 프레임워크 개발을 시도하는 사람들에게 추천하는 프레임워크이다. 내가 CodeIgniter를 첫 프레임워크로 사용하게 된 것도 계기가 될 수 있지만, 웹 개발 혹은 프로그래밍에 익숙하지 않은 사람들도 쉽게 쓸 수 있는 프레임워크라는 생각이 들었다.

2. CI Board    http://www.ciboard.co.kr/

CodeIgniter를 이용한 게시판이다. 과거에는 독자적으로 운영되던 반면, 지금은 그누보드에 인수인계 되어서 관리되고 있다. 그누보드에 들어가 있는 커뮤니티와 관리자 기능이 모두 들어 있어서 활용성이 매우 높다. 특히 외주를 받는다든지, 빠른 개발이 필요할 때 유용하게 쓰일 수 있다. 물론 라라벨에도 라온 보드(Laon Board)가 있어서 사용할 수 있지만, CodeIgniter에 쓸 수 있는 이런 훌륭한 게시판 모듈이 있다는건 굉장히 좋은 일이다.

3. 속도가 빠르다.

다른 프레임워크에 비해 빠른 편에 속한다. 특히 라라벨과 비교해 봤을 때, 정말 많은 의존성 패키지를 사용하는 라라벨에 비해, 필요한 기능들을 갖추고 있으면서 빠른 속도를 내는 프레임워크라고 할 수 있다.

CodeIgniter의 단점)

1. Namespace를 지원하지 않는다.

PHP가 수년만에 버전 5에서 버전 7이 출시되면서, 현대의 프로그래밍 언어적인 요소인 Namespace를 지원한다. Namespace는 말 그래도 이름의 공간을 말하는데, Namespace를 이용한 프로그램을 하나 짜보면 쉽게 이해할 수 있다. 나는 아래의 블로그에서 도움을 받았다.


간단하게 정리를 하면, 동일한 클래스 이름을 사용하더라도 다른 Namespace를 가지고 있으면 다른 클래스로 인식된다. 그렇게 되면 더 많은 클래스들을 사용할 수 있고, 다른 클래스에 Namespace를 통해 쉽게 접근할 수 있다.

CodeIgniter는 PHP 7대에서 지원하는 Namespace를 지원하지 않는다. 물론 앞으로 출시될 CodeIgniter 4는 Namespace와 PHP 7을 지원한다고 한다.

2. 그 외

그 외에는 라이브러리나 헬퍼의 단점이다. CodeIgniter에 기본적으로 탑재되어 있는 파일 업로드 라이브러리는 단일 업로드 밖에 지원하지 않는다. 물론 그걸 해결해주는 외부 라이브러리들이 있지만.

(파일 업로드 외에는 크게 불편함을 느끼진 못했다.)


그리고 나는 최근 PHP 프레임워크 중에서 제일 유명하고 사랑받고 널리 쓰이는 라라벨로 넘어 왔다.


2) Laravel


Laravel은 위의 CodeIgniter에서 지원하지 않던 Namespace를 지원하고 PHP 패키지 매니저인 composer와 node 패키지 매니저인 npm을 활용하여 개발에 엄청난 편의를 준다. 뿐만 아니라 거대한 커뮤니티를 바탕으로 다양한 도움을 받을 수 있는 것 또한 장점이다.


Laravel Requirement (5.6)

  • PHP >= 7.1.3
  • OpenSSL PHP Extension
  • PDO PHP Extension
  • Mbstring PHP Extension
  • Tokenizer PHP Extension
  • XML PHP Extension
  • Ctype PHP Extension
  • JSON PHP Extension
라라벨을 기본적으로 지원하는 기능들이 많기 때문에 나도 아직 못 써본 기능들도 많다.

일단 라라벨 또한 코드이그나이터랑 같은 MVC 패턴이다. 모델, 뷰, 컨트롤러로 나누어져 있고, 각각의 독립적인 기능 수행을 통해 최종적으로 웹 어플리케이션이 완성된다.


Laravel의 장점)


0. Artisan


https://laravel.com/docs/5.6/artisan


자세하게 설명하기는 복잡하지만 라라벨의 Artisan이라는 CLI(Command Line Interface) 정말 많은 기능을 제공한다. 파일을 일일이 생성하는 코드이크나이터와 다르게 php artisan make: 라는 명령어를 통해서 모델, 컨트롤러, 데이터베이스 마이그레이션 등 다양한 파일들을 자동으로 생성할 수 있다.


Artisan이 있기 때문에 라라벨의 개발 효율성이 높은 것 같다. 확실히 코드이그나이터를 이용해서 파일을 만들고 이전 파일에 내용을 복사해 와서 클래스를 바꾸는 작업을 하지 않아도 된다는게 얼마나 편한일인지 모른다.


1. Namespace를 지원한다.


Namespace를 지원하는 것은 위에서 언급했듯이 엄청난 장점이다. Namespace를 통해 컨트롤러나 모델의 이름을 명명하는데 있어서 엄청난 자유도를 확보할 수 있다.


예를 들어서 컨트롤러를 만드는데, 같은 게시판 기능에 대해 관리자에서 사용된 컨트롤러와 사용자들이 사용할 컨트롤러를 따로 만들어야 하는 상황을 떠올려 보자


기존의 PHP같은 경우 클래스 이름을

    • AdminBoardController
    • BoardController
로 명명해야 하겠지만, Namespace를 사용하면
    • Admin\BoardController
    • User\BoardController
와 같이 같은 클래스 이름을 사용할 수 있다.

같은 클래스 이름을 사용할 수 있다는건 개발 과정에 있어서 많은 편의를 제공한다. 가령 Admin 다섯 글자를 더 치지 않아도 된다는 등 말이다.

2. 패키지 매니저 composer를 사용할 수 있다.

패키지 매니저를 사용할 수 있다는건 엄청난 혜택이다. Node.js를 사용해본 사람들은 쉽게 알 수 있을 것이다. npm(Node Package Manager)을 이용해 다른 사람들이 만들어 놓은 패키지를 불러오는 것 만으로 서비스 하나를 완성할 수 있기 때문이다.

라라벨도 이와 마찬가지로 PHP 패키지 매니저인 composer를 지원한다. 다른 사람들이 만들어 놓은 모듈을 쉽게 가져와서 사용할 수 있다.

3. 거대한 커뮤니티

https://laravel.io/    -    라라벨 포럼

라라벨을 거대한 커뮤니티를 바탕으로 다양한 지원을 받을 수 있다는게 또 다른 엄청난 장점 중 하나이다. 오류의 수정은 물론 라라캐스트 같은 경우는 라라벨의 강좌 등을 제공함으로써 다양한 배움의 기회를 가질 수 있다. (물론 유료다.)


나는 laravel.io에서 오류와 관련된 다양한 도움을 받고 있다. 라라벨은 사용자층이 두텁기 때문에 다양한 지원을 받을 수 있다는게 다른 프레임워크에 비해 장점인 것 같다.


4. git에 대한 지원


라라벨은 프레임워크 구조를 체계적으로 잘 구성해 놓았다. 다른 서버에 대한 이식성도 좋고 git을 통해서 다른 사람과 협업하기도 굉장히 좋은 구조이다. 특히 파일을 일일이 올리고 config.php 파일을 수정해 주어야 했던 코드이그나이터와 다르게, 파일을 올리고 .env 파일을 통해 디비 등의 설정을 변경할 수 있다는 점이 굉장히 좋은 것 같다.


그리고 데이터베이스 마이그레이션 기능도 쓸만하다. 테이블에 column을 추가하고 빼는 등 서비스 버전 관리에 많은 편리함이 있다.


Laravel의 단점)


1. 낮은 접근성


내가 코드이그나이터만 사용해 봐서 인지는 모르겠지만, 라라벨을 처음 시작하는데 고생을 많이 했다. 하지만 익숙해 지고 나니까 라라벨만큼 편리한 프레임워크도 또 없다는 생각이 들만큼 좋긴 하다.


2. 느리다.


이제껏 내가 개발한 서비스들은 그닥 크지 않기 때문에 많이 느끼지는 못했지만, 다른 개발자들의 의견을 들어보면 다른 프레임워크들에 비해 많이 느린 편이라고 한다. 특히 위의 코드이그나이터와 비교하면 많이 느린 편이다.


하긴 라라벨을 처음 설치하는 과정에서도 알 수 있겠지만 엄청난 량의 패키지들을 로드하기 때문에 느릴만도 하다. 하지만 개발 속도 만큼은 보장한다. 엄청 빠르다.



3) 마치며


라라벨과 코드이그나이터의 차이에 대해서 아아아ㅏㅏㅏ주 주관적인 관점에서 분석해 보았다.


개발을 하는 과정에서 느낀 주관적인 생각이고, 아직 프레임워크의 모든 기능을 다 다뤄본 것이 아니기 때문에 생각의 차이는 있을 수 있다.


궁금한 점이나 다른 의견은 댓글을 통해서 문의하고 나누면 개발을 하는 나도, 글을 읽는 독자들도 도움이 될것 같다.

728x90
Comments