'백엔드/CodeIgniter'에 해당되는 글 4건

  1. 2017.11.17 CI. 4_라이브러리 1
  2. 2017.11.17 CI. 3_컨트롤러 사용법과 유효 범위
  3. 2017.11.15 CI. 2_설정과 명명 규칙
  4. 2017.11.13 CI. 1_입문
posted by JakeYeom 2017. 11. 17. 16:33

4장. 라이브러리


라이브러리 사용시의 장점

  • 효율성 : 최소한의 리소스만을 로딩한다 ( 실행시간의 오버헤드 최소화 )
  • 코드 재사용성 : 프로젝트전반에 걸쳐 재사용이 가능 
  • 코드 분리 : 프로젝트의 다른장소에서 우연히 이름이 겹치는 현상을 방지
  • 코드 단순화 : 코드자체의 분량을 최소화하여 이해하기쉽고 유지가 용이함 ( 코드의 확장하는 작업이 간단해진다 )
CI 라이브러리의 유효 범위와 사용법
CI 라이브러리에서 컨트롤러 리소스에 접근할수 있는 방법  ( CI라이브러리는 컨트롤러 리소스에 접근할 수 있는 권한이 없음 )
 =>$ci = &get_intance(); 와 같이 실행한 후 $ci객체를 $this대신 사용해 리소스에 접근할 수 있다.
  • apllication/libraries폴더에 라이브러리 코드를 추가한다.
  • config.php를 통한 자동로딩 혹은 컨트롤러를 이용해 직접 객체를 생성한다 ( 전체 : $autoload['libraries'] = array('database', 'my_library'), 특정소스 : $this->load->library('my_library');
  • 라이브러리 메소드를 사용한다 $result = $this->my_library->called_method($param1, $param2);
  • 라이브러리의 유효범위를 제한한다


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

CI. 3_컨트롤러 사용법과 유효 범위  (0) 2017.11.17
CI. 2_설정과 명명 규칙  (0) 2017.11.15
CI. 1_입문  (0) 2017.11.13
posted by JakeYeom 2017. 11. 17. 13:26

3장. 컨트롤러 사용법과 유효 범위


컨트롤러 


=> 기능 : 애플리케이션의 전면에서 의사를 결정하는 주체 ( 요청처리, 라우팅, 브라우저에 렌더링 뷰 전송, 데이터베이스 업데이트 등등 )

     컨트롤러는 자신을 호출하는 주체에게 결과를 리턴한다 ( 모델, 헬퍼, 라이브러리 ,뷰를 통해 호출자에게 결과를 리턴 )

     

     사용시 지켜야할 것 : 사용자의 컨트롤러는 내장 CI컨트롤러를 반드시 상속하여 사용해야 한다.

      

     동작의 예시 : 1. 브라우저를 통해 URL을 참조, 2. AJAX 비동기요청을 처리




CI 컨트롤러의 유효 범위





사용자 정의 CI 컨트롤러


[컨트롤러의 작성]

  • 모든 컨트롤러는 프로젝트 디렉토리의 application/controller 에 위치힌다.
  • 컨트롤러가 사용할 수 있는 리소스 : application/helper ( 내장헬퍼, 사용자 정의헬퍼, 제3자 정의 헬퍼 ), application/models ( 테이블을 위해 작성한 사용자 정의 모델 ), application/libraries ( 내장, 사용자, 제3자 라이브러리 )
[컨트롤러 확장]
  • 헬퍼, 모델, 라이브러리 같은 리소스 로딩 : 모든 리소스에서 로딩할 수 있음. 성능 최적화를 위한 리소스로딩을 생각해야한다. ( 리소스로딩 예시 : $this->load->model('example_model');, $this->load->library('example_library', $example_array);, $this->load->helper('example_helper'); )
  • public과 private 메소드 추가 : PHP OOP의 원칙을 지키기 위해 사용
  • 컨트롤러 호출 : 컨트롤러는 CI 코어가 자동으로 생성한다. 메소드는  HTTP URL을 통해 호출한다. ( 호출방법 4가지 : index, 매개변수없음, 매개변수있음, AJAX)
[CI 컨트롤러의 용도]
  • 뷰 렌더링 : 데이터와 함께 뷰를 생성한 후 웹 어플리케이션에서 현재 세션에서 다음페이지 옮겨갈 수 있도록 뷰를 보여준다. ( 앵커태그를 이용해 다른 페이지로 이동 )
  • 브라우저의 AJAX 요청을 처리하는 컨트롤러 
  • 리눅스 크론 스케쥴러 서버의 요청을 처리하는 컨트롤러 ( 크론탭으로 원하는 반복작업을 설정할 수 있음 )


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

CI. 4_라이브러리  (1) 2017.11.17
CI. 2_설정과 명명 규칙  (0) 2017.11.15
CI. 1_입문  (0) 2017.11.13
posted by JakeYeom 2017. 11. 15. 11:11

2장. 설정과 명명 규칙


CI 설정

CI의 설정

=> CI를 설치한후 처음해야할일 : 프로젝트 요구사항에 맞게 데이터베이스, 세션, 자동 로딩이 필요한 헬퍼, 라이브러리 등을 설정하는 작업

=> 주요설정파일 : config.php, database.php, autoload.php


CI 디렉터리구조


새로운 프로그인이나 리소스를 추가하기위해 새로운 디렉토리를 추가하는 경우

=> CI의 BASEPATH에 상대적인 위치로 참조한다. ex) CI/application/bootstrap의 경로는 $path = BASEPATH. "application/bootstrap/" 이다.


[config.php]

$config['base_url']

=> CI의 최상위 디렉토리를 기본 URL로 계산한다. 

     코드사용예시 $base_url = base_url(); // base_url()함수는 URL헬퍼에 정의되어있다.


$config['index_page']

=> CI컨트롤러나 메소드에 대한 URI 경로 문자열에 인덱스 페이지를 포함시키고 싶다면 $config=['index_page'] 에 'index.php' 값을 할당한다.

     index.php는 모든 URI 요청을 처리하는 CI의 최상위 서비스다. URI처리에서 index.php를 제거하고 싶다면 다음과 같은 설정 작업을 해야한다.


1. phpinfo()메소드를 통해 mod_rewrite 모듈이 로드되어있는지 확인하고 (안되어있으면 mod_rewrite부터 해결)

   APACHE서버내의 conf/httpd.conf파일의 <Directory> 태그를 찾아 AllowOverride None을 AllowOverride All로 변경한다.

2. $config['index_page'] = 'index.php'의 값을 $config['index_page'] = '' 로 변경한다.

3. BASEPATH 하위에 .htaccess파일을 작성하고 

<IfModule mod_rewrite.c>

  RewriteEngine On

  RewriteBase /

  RewriteCond $1 !^(index\.php|images|captcha|data|include|uploads|robots\.txt)

  RewriteCond %{REQUEST_FILENAME} !-f

  RewriteCond %{REQUEST_FILENAME} !-d

  RewriteRule ^(.*)$ /index.php/$1 [L]

</IfModule>

위와 같이 입력시켜준다.


위의 3가지를 만족하게 되면 http://localhost:8080/example2/more/1/2/3 과 같이 index.php가 URI에 포함되어있지 않아도 원하는 페이지출력결과를 얻을수 있다.

[ URI에서 index.php를 없앤 결과 ]



손대지 않기를 추천하는 설정변수들 

$config['language'] = 'english'; // 언어설정

$config['charset'] = 'UTF-8' // 문자인코딩, HTML파일 metatag에도 추가를하기를 추천한다.

$config['enable_hooks'] = FALSE // 후크설정

$config['subclass_prefix'] = 'MY_' // 사용자라이브러리의 프리픽스

$config['permitted_uri_class']  = 'a-z 0-9~$.:_\-' //  URI로 CI리소스를 호출할 때 사용할 수 있는 문자

$config['allow_get_array'] = TRUE // 컨트롤러 클래스의 메소드를 매개변수와 함께 호출가능하게 설정

$config['enable_query_strings'] = FALSE // GET방식의 URL 질의 문자열을 사용할 수 있는지 설정

$config['log_path'] // 로그경로설정

$config['log_threshold'] // 로그기준점 설정 0 : 로그기능 비활성, 1 : 에러 메시지, 2 : 디버그 메시지, 3 : 정보성 메시지, 4 : 모든 메시지

$config['log_date_format'] // 기본 날짜 시간 포맷

$config['cache_path'] // 캐시 파일 경로

$config['encryption_key'] // 세션 클래서의 서비스를 이용할때 설정


사이트 신뢰를 높일 수 있는 설정들

$config['global_xxs_filtering'] // XSS필터링 활성화, 악의적인 XSS필터링  타입 공격으로부터 URI요청을 보호

$config['csrf_protection'] // 사이트간 위조 공격을 막음( 위조된 폼을 전송했을때 위험하다, AJAX요청시에는 별도의 추가적인 코드가 필요함 )



[database.php]

database는 2차원 배열의 형식으로 설정변수를 할당하고 있으며 다음과 같이 이용할 수 있다.

$db['default'] = array(
    'dsn'   => '',
    'hostname' => 'localhost',
    'username' => 'root',
    'password' => 'adminpw',
    'database' => 'aliendatabase',
    'dbdriver' => 'mysqli',
    'dbprefix' => '',
    'pconnect' => FALSE,
    'db_debug' => (ENVIRONMENT !== 'production'),
    'cache_on' => FALSE,
    'cachedir' => '',
    'char_set' => 'utf8',
    'dbcollat' => 'utf8_general_ci',
    'swap_pre' => '',
    'encrypt' => FALSE,
    'compress' => FALSE,
    'stricton' => FALSE,
    'failover' => array(),
    'save_queries' => TRUE
);

위처럼 한개의 DB이외에 다른 DB의 설정을 하고 싶다면

$db['anotherdb'] = array( 설정값 ); 과 같이 다른 설정값을 입력하면 된다.


연결할 데이터베이스를 직접 지정해 로딩하고 싶을때

=> $this->load->database('default');


기본이 아닌 다른 데이터베이스를 직접 지정해 로딩하고 싶을때

=> $this->load->database('anotherdb', TRUE);


기본 database연결시 쿼리문작성 방법

=>  $query = $this->db->query("select * from users");


기본이 아닌 database연결시 쿼리문작성 방법

=>  $query = $this-> anotherdb->db->query("select * from users");



[routes.php]

이 파일은 프로젝트의 기본 URI를 요청하면 실행항 기본 컨트롤러를 정의한다

$route['default_controller'] = 'welcome';

위와같이 default_controller를 설정하게 되면 서버의 최상위 디렉토리에 진입하게 될때 http://도메인/welcome을 호출하는것처럼 컨트롤러를 실행한다.


$route['404_override'] = 'notfound';

URI에 알지못하는 경로값을 입력하였을때에는 위에 해당하는 컨트롤러를 실행한다.


[사용자설정파일.php]

예를들어 나만의 설정정의를 사용하기위해 설정파일을 my_config.php라는 파일을 만들었다고 하자

해당 파일에는 아래와 같은 값이 정의되어 있다.

$userparam = 'value1';


다른파일에서 my_config.php 파일의 모든 변수를 배열에 로딩하여 손쉽게 접근할 수 있다.


해당파일에 작성 

$array = $this->config->load('my_config' ,TRUE);


사용

$userparam = $this->config->item('userparam', 'my_config'); 

$userparam = $array('my_config', 'userparam');


CI 명명 규칙의 이해와 사용

http://codeigniter.com/user_guide/general/styleguide.html에서 살펴볼 수 있다.


주요 리소스 명명규칙

CI는 하나의 클래스마다 하나의 파일이라는 규칙을 정해 모든 CI컨트롤러나 모델은 각자 한 파일에 담도록 규정한다. ( 헬퍼도 이와 같다 )


컨트롤러 사용

1. 컨트롤러의 index 메소드 호출

2. 매개변수 없이 컨트롤러의 calc 메소드 호출

3. 매개변수와 함께 컨트롤러 메소드 호출

4. AJAX를 통해 AJAX처리 메소드를 매개변수와 함꼐 호출하기


라이브러리, 모델, 헬퍼 로딩

사용자의 컨트롤러에서 라이브러리나 모델, 헬퍼 등의 기능을 사용하려면 컨트롤러나 모델 클래스에서 로딩해야 한다.

자동로딩을 하기 위해서는 application/config에 위치한 autoload.php 파일에 지정할 수 있다.


그 밖의 코딩 명명 규칙

  • 사용자의 클래스, 함수, 매개변수는 짧은 이름을 이용해야 한다. 여러 단어로 이를 정의할 경우에는 _(언더스코어, ex: source_code)를 이용한다.
  • 문자열 내에 변수가 들어있다면 큰 따옴표를 사용한다 ex: $my_str = "This is $clause";
  • 불리언 값은 대문자로 쓴다.




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

CI. 4_라이브러리  (1) 2017.11.17
CI. 3_컨트롤러 사용법과 유효 범위  (0) 2017.11.17
CI. 1_입문  (0) 2017.11.13
posted by JakeYeom 2017. 11. 13. 15:28

코드이그나이터 MVC 프로그래밍


CI(코드이그나이터)란?

=> Ellis 랩에서 개발한 PHP기반의 객체지향적 MVC(모델-뷰-컨트롤러) 개발 플랫폼


이 강좌의 목표

=> CI로 프로그래밍 된 웹사이트의 유지보수를 할 수 있다.


강좌수강조건

=> PHP 객체지향프로그래밍, MySQL의 기본지식정도는 알아야 함




MVC의 개념

정보의 표현과 이 정보와 상호작용하는 사용자를 분리하는 사용자 인터페이스를 지원하는 개발패턴


M(Model) : 애플리케이션 데이터로 구성, 이를 조작하는 서비스를 제공

V(View) : 최종적으로 처리된 결과를 브라우저에 출력, 사용자 입력 로직과 표현할 대상을 정의

C(Controller) : 웹브라우저를 이용하는 사용자로부터 받아들이는 입력을 처리, 비즈니스 관련 계산을 수행, 모델, 데이터베이스 업데이트


CI의 폴더 살펴보기

  • application/config : CI 어플리케이션에 관한 모든 설정파일
  • application/controllers : CI 어플리케이션에 있는 모든 컨트롤러 파일 ( 사용자의 요청을 처리하고 사용자에게 보여줄 데이터를 제공, 클래스의 메소드는 URI를 통해 실행 또는 호출 가능 )
  • application/views : 모든 뷰 파일을 갖고 있다. ( 뷰의 형식 : 웹페이지, RSS )
  • application/models : 모든 모델파일 ( 데이터베이스에 담긴 데이터를 처리한다 )
  • application/helpers: CI 내장 헬퍼를 제외한 모든 추가적인 헬퍼 파일을 포함 ( 각 함수는 특정작업을 위해 작성한 독립적인 함수의 집합이며 다른 함수와 의존성이 없다)
  • application/libraries : CI 어플리케이션 프로젝트상에서 개발자가 생성한 모든 라이브러리를 포함한다
  • system : CI 코어의 최상위 디렉토리, 하위에는 시스템 핵심 요소들 core, database, embedded helper, embedded library등을 포함한다 


위의 내용은 CI버전에 따라 다를 수 있습니다.



1장. CI 기본 다루기


1-1 HelloWorld


컨트롤러 : application/controllers/hello.php



뷰 : application/views/helloview.php


예제 확인 URI : http://localhost:8080/index.php/hello



1-2 GET방식으로 View에 매개변수 전달하기


컨트롤러 : application/controllers/example2.php



뷰 : application/views/example2more.php


예제 확인 URI : http://localhost:8080/index.php/example2/more/1/2/3


1-3 모델을 이용해 데이터베이스에 질의한 후 결과값 뷰에 렌더링하기


config 설정 : application/config/database.php에 데이터베이스 설정정보를 입력해야 한다.


컨트롤러 : application/controllers/user.php


모델 : application/model/usermodel.php


뷰 : application/views/userview.php


예제 확인 URI :http://localhost:8080/index.php/user/users




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

CI. 4_라이브러리  (1) 2017.11.17
CI. 3_컨트롤러 사용법과 유효 범위  (0) 2017.11.17
CI. 2_설정과 명명 규칙  (0) 2017.11.15