CodeIgniter 4로 블로그 만들기 #01 — 프로젝트 생성과 개발 환경 세팅
이 시리즈는 CodeIgniter 4(이하 CI4)로 블로그를 처음부터 만들어 봅니다. 정적 페이지·라우팅에서 시작해 글 CRUD, 인증(Shield), 댓글, 카테고리·검색, 마크다운·이미지 업로드, 그리고 마지막엔 실제 배포까지 한 흐름으로 이어집니다.
첫 회차인 이번 글의 목표는 단순합니다. 프로젝트를 만들고, 개발 환경으로 전환하고, 브라우저에서 확인하는 것까지입니다. 사소해 보이지만 여기서 CI4의 중요한 습관 하나(환경 개념)를 짚고 갑니다.
준비물
- PHP 8.2 이상 — 이 강좌의 appstarter는
php: ^8.2를 요구합니다.intl,mbstring등 CI4 권장 확장도 함께 켜 두세요. - Composer — PHP 의존성 관리 도구.
- 아무 코드 에디터.
버전은 터미널에서 먼저 확인하고 넘어갑니다.
php -v # PHP 8.2.x 이상인지
composer -V # Composer 설치 확인
1. appstarter로 프로젝트 생성
CI4는 "appstarter"라는 시작용 템플릿을 제공합니다. 프레임워크 본체는 vendor/에 의존성으로 들어오고, 우리가 코드를 쓰는 곳은 app/입니다. Composer로 한 번에 받습니다.
composer create-project codeigniter4/appstarter ci4blog
cd ci4blog
설치가 끝나면 composer.json의 핵심은 이렇게 잡혀 있습니다.
{
"require": {
"php": "^8.2",
"codeigniter4/framework": "^4.7"
}
}
프레임워크는 codeigniter4/framework로 들어오고, 우리의 앱 코드와는 분리돼 있다는 점만 기억하면 됩니다. 프레임워크를 업그레이드해도 우리가 짠 app/ 코드는 그대로입니다.
2. 디렉터리 구조 훑어보기
처음 열면 폴더가 많아 보이지만, 실제로 자주 만지는 곳은 몇 군데뿐입니다.
ci4blog/
├─ app/ ← 우리가 코드를 쓰는 곳 (Controllers, Models, Views, Config ...)
├─ public/ ← 웹 루트. 브라우저가 실제로 바라보는 진입점(index.php)
├─ tests/ ← 테스트
├─ writable/ ← 캐시·로그·세션 등 앱이 "쓰기" 하는 폴더
├─ vendor/ ← Composer가 받은 프레임워크/라이브러리 (건드리지 않음)
├─ env ← 환경 설정 템플릿 (이걸 복사해서 .env 로 씀)
└─ spark ← CI4의 커맨드라인 도구
여기서 두 가지만 확실히 해 둡시다. 웹 서버가 바라봐야 하는 곳은 프로젝트 루트가 아니라 public/ 이고, 앱이 파일을 쓰는 곳은 writable/ 입니다. 이 구분은 나중에 배포(마지막 회차)에서 다시 중요해집니다.
3. 개발 서버 띄우기
CI4는 spark라는 CLI 도구를 제공합니다. 내장 개발 서버를 이걸로 띄웁니다.
php spark serve
터미널에 http://localhost:8080 주소가 뜹니다. 브라우저로 접속하면 CI4 기본 환영 페이지가 보입니다. 여기까지 오면 설치는 성공입니다.
참고:
spark는 앞으로도 계속 씁니다. 마이그레이션(php spark migrate), 시더(php spark db:seed) 등 거의 모든 백엔드 작업의 입구입니다.
4. 이번 회차의 핵심 — 환경(Environment) 개념
여기서부터가 진짜 배울 내용입니다.
CI4는 실행 환경(environment) 이라는 개념을 갖고 있고, 아무 설정도 안 하면 기본값이 production(운영) 입니다. 운영 환경에서는 보안을 위해 상세한 에러와 디버그 도구가 꺼져 있습니다. 개발 중엔 반대로 이것들이 켜져 있어야 편합니다.
환경과 각종 설정은 프로젝트 루트의 .env 파일로 주입합니다. 그런데 .env는 비밀값이 들어갈 수 있어 저장소에 커밋하지 않습니다(그래서 .gitignore에 들어 있습니다). 대신 커밋되는 것은 템플릿인 env 파일입니다. 이걸 복사해서 내 .env를 만듭니다.
cp env .env
이제 .env를 열면, 대부분의 줄이 #으로 주석 처리돼 있습니다. 우리가 켤 것은 두 줄입니다.
env 템플릿에는 기본적으로 이렇게 주석 상태로 들어 있습니다.
# CI_ENVIRONMENT = production
...
# app.baseURL = ''
주석(#)을 풀고 값을 개발용으로 바꿉니다.
CI_ENVIRONMENT = development
app.baseURL = 'http://localhost:8080/'
CI_ENVIRONMENT = development— 개발 환경으로 전환. 상세 에러 페이지와 디버그 툴바가 켜집니다.app.baseURL— 앱이 URL을 만들 때 쓰는 기준 주소. 개발 서버 주소로 맞춰 둡니다. 끝에 슬래시(/)를 붙이는 것에 주의하세요.
5. 디버그 툴바 확인
.env를 저장하고 다시 http://localhost:8080을 새로고침하면, 이번엔 화면 오른쪽 아래에 디버그 툴바가 나타납니다. 여기서 실행된 SQL 쿼리 수, 메모리, 실행 시간, 로드된 파일 등을 볼 수 있습니다.
이 툴바는 뒤에서 매우 요긴하게 씁니다. 예를 들어 목록 페이지를 최적화하는 회차(ep08)에서는, 이 툴바의 쿼리 개수를 최적화 전/후로 비교하면서 N+1 문제를 눈으로 확인합니다. 지금은 "개발 환경에서만 이게 보인다"는 것만 기억하면 됩니다.
만약 툴바가 안 보인다면 십중팔구 CI_ENVIRONMENT가 아직 development가 아니거나, .env 저장이 안 된 경우입니다.
6. 테스트 명령 확인
appstarter에는 PHPUnit이 이미 들어 있고, composer.json에 짧은 스크립트가 등록돼 있습니다.
"scripts": {
"test": "phpunit"
}
덕분에 앞으로 테스트는 이 한 줄로 돌립니다.
composer test
아직 우리가 짠 테스트는 없지만, 명령이 동작하는지만 확인하고 넘어갑니다. 테스트는 4회차(ep04)부터 본격적으로 다룹니다.
마무리
이번 회차에서 한 일을 정리하면:
- appstarter로 프로젝트 생성
- 디렉터리 구조 파악(
public/이 웹 루트,writable/이 쓰기 폴더) php spark serve로 개발 서버 확인env→.env복사 후CI_ENVIRONMENT = development,app.baseURL설정- 디버그 툴바 확인
다음 회차
다음 글에서는 정적 페이지와 기본 라우팅을 만듭니다. Routes.php에 주소를 등록하고 → 컨트롤러가 받고 → 뷰를 그리는, CI4의 가장 기본적인 요청 흐름을 직접 손으로 이어 봅니다.
이번 회차 요약
- 다루는 파일:
.env(생성·수정) /composer.json(생성됨)- 핵심: CI4의 기본 환경은
production. 개발 시.env에서CI_ENVIRONMENT = development로 바꿔야 디버그 툴바가 보인다.
다음: 정적 페이지와 기본 라우팅
댓글 0
아직 댓글이 없습니다.