Programming-[Backend]/php, codeigniter

생활코딩 codeigniter - 3. Config, 로깅, 파일 업로드, CKEditor

컴퓨터 탐험가 찰리 2024. 4. 6. 08:04
728x90
반응형

1. Config

기본적인 설정값 외에 설정값들을 변경하기 위해 사용한다. root_path/config/ 디렉토리에 위치하여 처리한다. 자주 사용되고 중요한 설정 파일들은 아래와 같다.

  • config.php: 전체적인 설정을 조정한다.
  • database.php: 데이터베이스 관련 설정을 한다.
  • autoload.php: 라이브러리들을 전역으로 로드해준다.
  • hooks.php: CI의 기본적인 동작을 할 수 있는 system 디렉토리에 있는 기능등을 override할 수 있다.
  • routes.php: url 라우팅을 위한 설정을 할 수 있다.

 

git으로 주요 설정 파일 관리하기

config.php, database.php 파일은 DB 접속 정보 등 비밀 정보가 들어가기 때문에 여기서 해당 파일들은 중요 정보를 삭제한채로 config/template 디렉토리를 생성해서 복사해놓는다.

 

그리고 원본 파일인 template 디렉토리 바깥의 config.php, database.php 파일은 git에 추가되지 않도록 .gitignore 처리해준다.

 

실제 config.php, database.php 정보는 로컬로만 사용할 수 있게 된다. 여기에 .env 등의 환경변수 관리를 통해 비밀 정보들을 관리하면 된다.

 

Environment

개발 환경을 뜻한다. root_path/index.php 에 아래처럼 환경이 정의되어 있다. 원래는 단순하게 'development'로 되어있는데, 이미지 파일은 $_SERVER['CI_ENV']를 참조하도록 코딩되어 있다.

define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'development');

 

config 디렉토리 아래에 development라는 디렉토리를 만들고, config.php 파일을 develop 환경에 맞게 설정해주면 애플리케이션이 실행될 때 development/config.php 파일의 설정 정보를 참고하여 앱을 실행시킨다. 다만 이렇게 처리할 경우 index.php 파일의 'development' 부분을 매번 변경해주어야 하므로, index.php 파일을 복사하여 dev.php 파일을 만든다. 그리고 url로 접속할 때, '{host}/dev.php/path'로 접속하여 development 환경에 맞는 테스트를 할 수 있도록 설정해준다.

 

이러한 dev.php, index.php 라는 prefix를 처리하는 부분을 base_url() 헬퍼를 사용해서 처리하면 더 편하다.

$_SERVER['CI_ENV'] 값은 apache 서버의 경우 httpd-vhosts.conf 파일에서 SetEnv CI_ENV 라는 값을 수정해주면 된다.

 

 

Config.php 기본 설정값들 해설

  • $config['language'] = 'english' : 다국어 설정을 할 수 있도록 애플리케이션의 언어들 설정
  • $config['enable_hooks'] = FALSE : 위에서 살펴본 hooks를 사용할 수 있는지 여부 설정
  • $config['subclass_prefix'] = 'MY_' : Core 클래스를 상속받아서 커스터마이징할 때 약속된 접두사 명칭 설정
  • $config['log_threshold'] = 0 : 로그 출력 레벨 설정. 0은 로깅을 안하는 설정값
  • $config['log_path'] ='' : 로그 저장 위치
  • $config['cache_path']='' : 캐시 파일 저장 위치 지정
  • $config['sess_*']= .. : 세션과 관련된 설정 값들이다. sess_use_database 값은 FALSE가 default로, 기본적으로 파일을 이용해서 세션을 처리하는 방식인데, TRUE로 지정할 경우 데이터베이스를 통해 세션을 지정할 수 있게 된다.

 

설정값 사용

아래 방식으로 호출하면 된다.

$this->config->item['config로 설정한 속성값 이름']

 

값이 존재하지 않으면 false를 리턴한다.

 

 

 

2. 로그

기본적으로 로그는 root_path/logs 라는 디렉토리에 파일로 저장된다. 리눅스나 OSX인 경우 tail 명령어를 통해 CLI로 접근 가능하다. 

tail -f 로그파일명
tail -f 로그파일명 | grep {포함된 문자열}

 

로그 표시하기

log_message

CI에서 전역으로 사용할 수 있는 로깅용 메서드이다. 아래 방식으로 작성하면 로그를 커스터마이징하여 기록할 수 있다.

log_meesage(로그타입, 메시지);

 

특히 var_export를 통해 사람이 보기 편하도록 데이터를 serialize하여 표현할 수도 있다.

log_message('info', var_export($지정한 변수, 1));

 

 

show_error('message')

아래 템플릿을 이용해서 에러메시지를 표시한다.

root_path/errors/error_general.php

 

show_404('page' [, 'log_error'])라는 메서드도 있다. 아래 템플릿을 참고한다.

root_path/errors/error_404.php 

 

 

xdebug

애플리케이션의 흐름이나 문제점을 잘 파악할 수 있도록 해주는 디버깅 툴이다. 따로 공부한다.

 

 

3. 파일 업로드 & CK Editor

 

기본적으로 파일 업로드를 위해서 form을 만들고, input의 type은 file로 설정해줘야한다. 그리고 enctype은 multipart/form-data로 지정해줘야한다.

 

파일 upload

서버에서 처리하는 부분에서는 system/library/Upload.php 파일로 작성된 라이브러리를 사용한다. 아래처럼 환경 변수에 각종 값들을 지정하여 설정할 수 있고, 자세한 내용들은 CI 매뉴얼에 나와있다.

 

https://ciboard.co.kr/user_guide/kr/libraries/file_uploading.html

 

 

아래처럼 설정값들을 설정한 후, upload 라이브러리에서 do_upload() 메서드를 호출한다.

 

function upload_receive(){
  $config['upload_path'] = './static/user';
  $config['allowed_types'] = 'gif|jpg|png';
  $config['max_size'] = '100';
  $config['max_width'] = '1024';
  $config['max_height'] = '768';
  
  $this->load->library('upload', $config);

//"user_upload_file"은 사용자가 입력하는 input 태그의 name 속성값
//보통 이 값은 그냥 'upload'로 지정한다.
  if( ! $this->upload->do_upload("user_upload_file")) {
    $error = array('error' => $this->upload->display_errors());
    $this->load->view('upload_form', $error);
  } else {
    $data = array('upload_data' => $this->upload->data());
    $this->load->view('upload_success', $data);
  }
}

 

upload에 성공한 데이터 결과는 upload->data()로 불러와서 처리한다. 참고로 CI는 사용자가 업로드한 파일이 유실되는 경우를 방지하기 위해서 기본적으로 중복되는 이름의 파일이 업로드 되는 경우 이름 뒤에 suffix를 붙여서 처리한다.

 

 

CKEditor

파일 업로드나 작성하는 글 편집기 등을 위지윅(WYSIWYG, What You See Is What You Get) 방식으로 제공해주는 에디터이다. 원래는 블로그에 글을 쓸 때처럼 제목을 크게 강조하거나, 글머리표를 붙일려면 직접 <ul> <li> 등의 태그를 본문에 직접 포함시켜줘야한다. 하지만 위지윅이라는 말처럼 ckeditor를 사용하면 그런 기능들을 제공하여 보이는대로 입력 텍스트에 html 태그를 포함시켜 처리해주는 기능을 한다.

https://ckeditor.com/

 

GPL-2.0이라서 소스코드를 공개하며 재배포하는 경우에는 따로 저작권 처리가 필요하고, SaaS 형태로 제공하는 경우에는 특정 플러그인 외에는 무료로도 사용이 가능하다. 해당 소스를 다운로드 받고, 프로젝트의 static 파일에 포함시키면 CKEditor를 사용할 수 있다.

강의 화면 중 일부. ckeditor 소스를 프로젝트에 포함시킴

 

 

자세히 꼭 알아야할 필요는 없을 것 같아서 강의 내용 스크린샷만 남기고 넘어간다. script를 포함시키면 에디터가 달라붙는다. 

 

 

 

 


 

참조

생활코딩 유튜브 채널

https://www.youtube.com/@coohde

728x90
반응형