
PHP 프레임워크 – CodeIgniter – 라우팅
안녕하세요 여러분 😊
이번 시간에는 CodeIgniter에서 웹 개발의 핵심 중 하나인 **라우팅(Routing)**에 대해 다뤄보겠습니다.
라우팅은 마치 “방문자가 어느 문으로 들어오든, 안내 데스크가 알맞은 방으로 데려다주는 역할”을 해요.
즉, URL 요청이 들어오면 어떤 컨트롤러의 어떤 메서드를 실행할지 정해주는 시스템이랍니다!
지금부터 하나하나 쉽게 따라오면서 CodeIgniter의 라우팅 개념을 확실하게 이해해볼게요!
1. 라우팅이란 무엇인가요?
라우팅은 브라우저에서 요청한 URL을 해석해서,
**어떤 컨트롤러(Controller)와 메서드(Method)**를 실행할지 결정하는 기능이에요.
예를 들어, 사용자가 브라우저에 다음과 같이 입력했을 때:
http://localhost:8080/news
👉 CodeIgniter는 내부적으로
app/Controllers/News.php
파일의 index()
메서드를 호출하게 할 수 있어요.
2. 기본 라우트 파일 위치
라우트 설정은 아래 파일에서 이루어져요:
app/Config/Routes.php
이 파일을 열어보면 다음과 같은 코드가 보입니다:
$routes->get('/', 'Home::index');
이건 “/” 경로로 접속하면 Home
컨트롤러의 index()
메서드를 실행하라는 뜻이에요.
3. 라우트 정의 방법
CodeIgniter는 다음과 같은 HTTP 메서드를 지원해요:
$routes->get()
→ GET 요청에 반응$routes->post()
→ POST 요청에 반응$routes->match(['get', 'post'], ...)
→ 둘 다 허용$routes->add()
→ 모든 메서드 허용
예시:
$routes->get('/about', 'Pages::about'); // GET /about → Pages 컨트롤러의 about() 메서드 호출
$routes->post('/contact', 'Form::submit'); // POST /contact → Form 컨트롤러의 submit() 메서드
4. URI에 파라미터 사용하기
라우트에서 URL에 포함된 값을 변수로 받아올 수 있어요!
숫자 파라미터 받기
$routes->get('blog/(:num)', 'Blog::view/$1');
/blog/3
→ Blog 컨트롤러의view(3)
호출
문자열 파라미터 받기
$routes->get('user/(:any)', 'User::profile/$1');
/user/john
→ User 컨트롤러의profile("john")
호출
5. 기본 컨트롤러와 메서드 설정
라우팅 설정 파일에서는 기본 컨트롤러도 설정할 수 있어요.
$routes->setDefaultController('Home');
$routes->setDefaultMethod('index');
- 사용자가
/
로 접속하면Home::index()
메서드 실행
6. 네임스페이스와 라우트
컨트롤러가 네임스페이스를 사용할 경우, 경로에 포함해줘야 해요.
$routes->get('admin', 'Admin\Dashboard::index');
/admin
요청 시App\Controllers\Admin\Dashboard
클래스의index()
실행
7. 클로저(익명함수) 라우트
간단한 요청은 컨트롤러 없이 직접 클로저를 작성할 수도 있어요.
$routes->get('/hello', function () {
return "안녕하세요, CodeIgniter!";
});
개발 초기에 테스트용 라우트 만들 때 아주 유용해요.
8. 리소스 라우팅 (RESTful API용)
CRUD 기반 API를 만들 때, 하나하나 라우트를 쓰는 건 번거롭죠?
$routes->resource('products');
이렇게 하면 아래와 같은 경로들이 자동으로 생성돼요:
HTTP 메서드 | 경로 | 메서드 |
---|---|---|
GET | /products | index() |
GET | /products/1 | show(\$id) |
POST | /products | create() |
PUT | /products/1 | update(\$id) |
DELETE | /products/1 | delete(\$id) |
9. 라우트 그룹 만들기
접두어가 같은 URL을 그룹으로 묶을 수 있어요.
$routes->group('admin', function ($routes) {
$routes->get('users', 'Admin\Users::index');
$routes->get('settings', 'Admin\Settings::index');
});
/admin/users
/admin/settings
위처럼 그룹핑하면 관리가 훨씬 쉬워요!
10. 필터(Filter)와 라우트 연동
인증이 필요한 페이지는 필터와 연결할 수 있어요.
$routes->get('dashboard', 'User::dashboard', ['filter' => 'auth']);
auth
라는 필터를 통과해야만 User::dashboard()
에 접근할 수 있도록 설정한 거예요.
11. 라우트 우선순위와 주의할 점 ✅
- 먼저 작성된 라우트가 우선적으로 적용됩니다.
- 동적 라우트(
(:any)
)는 마지막에 두는 것이 안전해요. - 라우트 미설정 시, 기본적으로
컨트롤러/메서드
방식이 동작합니다.
실전 예시 모음
$routes->get('/', 'Home::index'); // 홈페이지
$routes->get('blog', 'Blog::index'); // 블로그 리스트
$routes->get('blog/(:segment)', 'Blog::detail/$1'); // 특정 블로그 글
$routes->post('comment', 'Comment::store'); // 댓글 등록
$routes->group('admin', function($routes) {
$routes->get('dashboard', 'Admin\Dashboard::index');
});
마무리하며 😊
라우팅은 웹 프레임워크의 뼈대이자 중심이에요.
CodeIgniter는 라우팅이 정말 간단하면서도 유연하게 구성되어 있어서
초보자도 쉽게 다룰 수 있고, 중급 이상 개발자도 정교하게 설정할 수 있어요.
지금까지 배운 라우팅 설정만 잘 다뤄도,
여러분은 CodeIgniter 앱의 흐름을 자유롭게 디자인할 수 있게 된 거예요! 👏👏
다음 글에서는 **컨트롤러와 뷰(View)**를 함께 연결해서
실제 웹페이지가 어떻게 구성되는지 살펴볼게요!
오늘도 즐거운 코딩 되세요~ 😊👨💻✨