본문으로 바로가기

Codeigniter 4에서 바뀐 것들

category 개발/백엔드 2020. 11. 16. 01:50

내가 주로 사용하는 백엔드 프레임워크인 Codeignite가 최근에 3에서 4버전으로 버전업이 이루어졌다. 대표적인 변경점으로는 CLI기능 지원, 폴더구조 간략화, MVC 패턴 구조에서 모델의 기능 축소, TDD기능 포함등의 개선이 이루어졌다. 프레임워크의 버전업이 이루어짐에 따라 문서또한 새롭게 작성되었는데 이를 보고 개발함에 있어 내가 겪었던 이슈들을 공유해보고자 한다.

모델의 기능 축소

이번 버전에서는 기존의 3에서와는 달리 모델이 아닌 컨트롤러에서 쿼리를 요청하도록 변경되었다. 이전에는 모든 쿼리를 model폴더에 있는 queryModel.php등의 파일에서 인자 넘겨받아 모델 함수에서 결과값을 return하는 방식이였지만 이번 버전에서는 모델 파일에서는 쿼리에 대한 필터링이나 일부 설정만 지원하고 대부분의 쿼리문을 컨트롤러에서 사용하도록 변경되었다. 원래 코드이그나이터는 MVC패턴을 사용하는 프레임워크이다. MVC패턴이란 프레임워크의 구조가 Model(모델), View(뷰), Controller(컨트롤러)로 나누어져 있다는 의미인데 이번 버전에서는 모델과 컨트롤러의 경계가 모호한 형태로 바뀌었다.

 

또 다른 변경점은 쿼리 생성 함수가 다양하게 생겨났다는 점 이다. 아래는 쿼리 빌더 클래스의 기능중 WHERE절을 사용할 수 있는 함수이다.

<?php
$db      = \Config\Database::connect();
$builder = $db->table('users');
$name = '100mountain';
$builder->where('name', $name); // 쿼리 생성 : WHERE name = '100mountain'

$db->table()로 연결할 테이블을 선택한 후 $builder->where()함수로 WHERE절을 적용한 결과값을 반환받는다. 반환된 결과값은 배열형태로 foreach()으로 변수에 바인딩시킬 수 있다. 아래는 4버전에서 사용가능한 모델의 형태이다.

<?php namespace App\Models;

use CodeIgniter\Model;

class Article extends Model
{
    protected $table            = 'article'; // 테이블
    // protected $primaryKey       = 'id'; // 프라이머리 키
    // protected $useAutoIncrement = true; // 자동 값 추가
    protected $useSoftDeletes   = true; // 휴지통 기능
    protected $allowedFields    = []; // 호출 가능한 필드 선정
    protected $skipValidation   = false; // 유효성 검사
    protected $useTimestamps    = false; // 현재날짜 Insert, Update에 추가여부
}

이와같이 테이블에 대한 필터링과 부가적인 기능을 지원하는것을 알 수 있다. 이와같이 컨트롤러에서 쿼리를 사용하고, 필드값을 반환받고, 데이터 함수를 사용하는 형태로 변경되었다. 그로인해 rest api를 개발하는 경우에는 컨트롤러에 상당한 비중이 실리게 되었다. 애초에 

rest api에서는 배열을 json형태로 반환하는것이 최종 목적이기때문에 뷰 파일은 특별히 사용하고 있지 않았고, 컨트롤러와 모델, 헬퍼만 사용하고 있었는데 이번 버전에서의 변화로 인해 거의 모든 중요 코드들이 컨트롤러에 위치하게 되었다. 심지어는 라우팅 함수까지 지원하기 때문에 특별히 여러 파일을 건들 필요 없이 컨트롤러에서 대부분의 작업을 처리할 수 있게 된것이다. 이런 변화가 좋은것인지, 나쁜것인지 알기 위해서는 실무에서 4버전 프레임워크를 사용해봐야만 알 수 있을것 같다.

TDD 기능 포함

4버전에서는 phpUnit기능에 대한 지원이 내장되어 있으며 Composer를 사용해 쉽게 설치할 수 있다. 이를 이용해 모델 테스트, 컨트롤러 테스트, HTTP 테스트, 벤치마킹등의 자체 테스트를 진행할 수 있도록 기능이 추가되었다.

... 앞으로 작성

총평

대략적으로 느낀 바로는 전체적으로 간단해졌다는 느낌이다. 폴더명이나 함수명등이 직관적이고 간략하게 변경되었고 개발을 진행함에 따라서 비활성화된 모듈들을 활성화시켜 사용하기때문에 처음부터 모든게 갖춰져 있다기보다는 가장 필수적인것만 세팅되어있고, 나중으로 갈수록 기능을 활성화시켜 사용한다는 느낌이였다. 아쉬운점이 있다면 한국어 가이드문서가 존재하기는 하지만 코드 예제등의 자료가 절대적으로 부족하고, 이로인해 이슈 발생시 대응하기가 어려울것 같다는 생각이 들었다. 아직 실 서비스에 도입하기에는 시기상조인 버전이라는 생각과 함께 기존버전에 비해 개선된점이 정말 많아서 자료부분만 해결된다면 언제라도 도입하고 싶은 프레임워크라고 생각된다.

'개발 > 백엔드' 카테고리의 다른 글

Codeigniter를 사용한 파일 업로드 예제  (0) 2020.12.04
PHP&Codeigniter 게시판 예제  (0) 2020.01.31