라우트의 동작 - Laravel 라우팅 작동 원리
Laravel에서 라우팅이 실제로 어떻게 작동하는지, HTTP 메소드와 응답을 실습으로 학습
⚙️ 라우트의 동작 - Laravel 라우팅 작동 원리
목표: Laravel에서 라우팅이 어떻게 작동하는지 이해하고, 직접 만들어보기
🔄 Laravel 라우팅 작동 과정
🚚 택배 배송 시스템으로 이해하기
Laravel 라우팅은 택배 배송 시스템과 똑같아요:
📦 라우팅 = 택배 배송
1. 📤 주문 접수
사용자: "mysite.com/products/123 페이지 주세요!"
2. 📋 주소 확인
Laravel: "routes/web.php에서 /products/{id} 패턴 찾기"
3. 🚚 배달원 배정
Laravel: "ProductController의 show 메소드 실행"
4. 📦 상품 준비
Controller: "데이터베이스에서 123번 상품 정보 가져오기"
5. 🏠 배달 완료
Laravel: "HTML 페이지로 만들어서 사용자에게 전송"
🌐 실제 Laravel 처리 과정
🔄 Laravel 라우팅 단계별 처리
사용자 요청: GET /products/123
↓
1. 🔍 Route Matching
Laravel이 routes/web.php에서 매칭되는 패턴 찾기
↓
2. 🎯 Route 실행
Route::get('/products/{id}', function($id) { ... })
↓
3. ⚙️ 비즈니스 로직
데이터베이스 조회, 계산, 처리 등
↓
4. 📄 응답 생성
HTML, JSON, 리다이렉트 등
↓
5. 📤 응답 전송
브라우저에게 최종 결과 전달
📝 HTTP 메소드 이해하기
📚 HTTP 메소드 = 행동 명령어
HTTP 메소드는 서버에게 하는 명령어예요:
🗣️ HTTP 메소드 = 명령어
GET → "보여줘!" (조회)
POST → "저장해!" (생성)
PUT → "바꿔!" (전체 수정)
PATCH → "고쳐!" (부분 수정)
DELETE → "지워!" (삭제)
🏪 실생활 예시로 이해하기
카페에서 주문하기:
☕ 카페 방문 과정
GET → "메뉴판 보여주세요" (메뉴 조회)
POST → "아메리카노 하나 주문할게요" (주문 생성)
PUT → "주문을 카페라떼로 바꿔주세요" (주문 변경)
DELETE → "주문 취소할게요" (주문 삭제)
🌐 웹사이트에서의 HTTP 메소드
// GET: 데이터 가져오기 (페이지 보기)
Route::get('/products', function () {
return '상품 목록을 보여줍니다';
});
// POST: 데이터 저장하기 (폼 제출)
Route::post('/products', function () {
return '새 상품을 저장했습니다';
});
// PUT: 데이터 전체 수정
Route::put('/products/{id}', function ($id) {
return "{$id}번 상품을 수정했습니다";
});
// DELETE: 데이터 삭제
Route::delete('/products/{id}', function ($id) {
return "{$id}번 상품을 삭제했습니다";
});
🎨 다양한 응답 방식
1. 📝 텍스트 응답
// 간단한 텍스트 반환
Route::get('/text', function () {
return '안녕하세요! 간단한 텍스트입니다.';
});
결과: 브라우저에 단순 텍스트로 표시
2. 🎨 HTML 응답
// HTML 코드 반환
Route::get('/html', function () {
return '<h1>🎉 환영합니다!</h1>
<p>Laravel 라우팅 세계에 오신 것을 환영합니다!</p>
<button style="padding:10px; background:#007bff; color:white; border:none;">
다음 단계로!
</button>';
});
결과: 브라우저에 꾸며진 HTML 페이지로 표시
3. 📄 뷰 파일 응답
// Blade 템플릿 파일 반환
Route::get('/page', function () {
return view('welcome'); // resources/views/welcome.blade.php
});
// 데이터와 함께 뷰 반환
Route::get('/user/{name}', function ($name) {
return view('user.profile', ['name' => $name]);
});
4. 📊 JSON 응답 (API용)
// JSON 데이터 반환
Route::get('/api/user/{id}', function ($id) {
return response()->json([
'id' => $id,
'name' => '김철수',
'email' => 'kim@example.com',
'created_at' => '2023-12-25'
]);
});
결과: {"id":"123","name":"김철수",...}
5. 🔄 리다이렉트 응답
// 다른 페이지로 이동
Route::get('/old-page', function () {
return redirect('/new-page');
});
// 메시지와 함께 이동
Route::get('/success', function () {
return redirect('/dashboard')->with('message', '성공적으로 처리되었습니다!');
});
🎯 동적 라우트 파라미터
📦 URL에서 값 받아오기
// 기본 파라미터
Route::get('/user/{id}', function ($id) {
return "사용자 ID: {$id}";
});
// 여러 파라미터
Route::get('/posts/{postId}/comments/{commentId}', function ($postId, $commentId) {
return "포스트 {$postId}의 댓글 {$commentId}";
});
// 선택적 파라미터
Route::get('/products/{category?}', function ($category = 'all') {
return "카테고리: {$category}";
});
🔍 실제 사용 예시
📱 실제 URL 예시
/user/123 → "사용자 ID: 123"
/user/456 → "사용자 ID: 456"
/posts/15/comments/7 → "포스트 15의 댓글 7"
/posts/20/comments/3 → "포스트 20의 댓글 3"
/products → "카테고리: all" (기본값)
/products/smartphones → "카테고리: smartphones"
/products/laptops → "카테고리: laptops"
🛠️ 실습: 나만의 라우트 만들기
🎮 실습 미션 1: 자기소개 사이트
routes/web.php에 추가하세요:
// 홈페이지
Route::get('/', function () {
return '<h1>🏠 홈페이지에 오신 것을 환영합니다!</h1>
<p><a href="/about">소개</a> | <a href="/hobby">취미</a> | <a href="/contact">연락처</a></p>';
});
// 자기소개 페이지
Route::get('/about', function () {
return '<h2>👋 안녕하세요!</h2>
<p>저는 Laravel을 배우고 있는 개발자입니다.</p>
<p>프로그래밍을 통해 세상을 더 좋게 만들고 싶어요!</p>
<a href="/">홈으로 돌아가기</a>';
});
// 취미 페이지
Route::get('/hobby', function () {
return '<h2>🎮 제 취미는...</h2>
<ul>
<li>🎵 음악 듣기</li>
<li>📚 독서</li>
<li>💻 코딩</li>
<li>🎮 게임</li>
</ul>
<a href="/">홈으로 돌아가기</a>';
});
// 연락처 페이지
Route::get('/contact', function () {
return '<h2>📞 연락처</h2>
<p>이메일: myemail@example.com</p>
<p>전화: 010-1234-5678</p>
<a href="/">홈으로 돌아가기</a>';
});
🎮 실습 미션 2: 동적 메시지 시스템
// 개인 메시지 페이지
Route::get('/message/{name}', function ($name) {
$messages = [
'김철수' => '오늘도 화이팅! 💪',
'이영희' => '공부 열심히 하고 있어요! 📚',
'박민수' => '새로운 것을 배우는 중이에요! 🌟'
];
$message = $messages[$name] ?? '안녕하세요! 환영합니다! 👋';
return "<h2>안녕하세요, {$name}님!</h2>
<p>{$message}</p>
<p>현재 시간: " . date('Y-m-d H:i:s') . "</p>";
});
// 랜덤 명언 페이지
Route::get('/quote', function () {
$quotes = [
'포기하지 마세요. 시작이 반입니다!',
'오늘 배운 것은 내일의 힘이 됩니다!',
'실패는 성공의 어머니입니다!',
'꿈을 포기하지 마세요!'
];
$randomQuote = $quotes[array_rand($quotes)];
return "<h2>🌟 오늘의 명언</h2>
<blockquote style='font-size:18px; color:#007bff; font-style:italic;'>
\"{$randomQuote}\"
</blockquote>
<p><a href='/quote'>새로운 명언 보기</a></p>";
});
🎮 실습 미션 3: 간단한 계산기
// 더하기 계산
Route::get('/add/{a}/{b}', function ($a, $b) {
$result = $a + $b;
return "<h2>🔢 계산기</h2>
<p>{$a} + {$b} = <strong>{$result}</strong></p>
<p>다른 계산도 해보세요!</p>";
})->where(['a' => '[0-9]+', 'b' => '[0-9]+']);
// 현재 시간
Route::get('/time', function () {
return "<h2>⏰ 현재 시간</h2>
<p>지금은 " . date('Y년 m월 d일 H시 i분 s초') . " 입니다!</p>
<p><a href='/time'>시간 새로고침</a></p>";
});
🔍 실습 확인하기
브라우저에서 다음 URL들을 확인해보세요:
✅ 기본 페이지들
http://localhost:8000/→ 홈페이지http://localhost:8000/about→ 소개 페이지http://localhost:8000/hobby→ 취미 페이지http://localhost:8000/contact→ 연락처 페이지
✅ 동적 페이지들
http://localhost:8000/message/김철수→ 김철수 메시지http://localhost:8000/message/이영희→ 이영희 메시지http://localhost:8000/quote→ 랜덤 명언http://localhost:8000/add/10/20→ 계산 결과http://localhost:8000/time→ 현재 시간
🚀 라우트 파일 위치와 구조
📁 Laravel 라우트 구조
project/
├── routes/
│ ├── web.php ← 🌐 웹 페이지용 라우트 (우리가 주로 사용)
│ ├── api.php ← 📱 API용 라우트
│ ├── console.php ← 💻 콘솔 명령용
│ └── channels.php ← 📡 브로드캐스팅용
📝 web.php 기본 구조
<?php
use Illuminate\Support\Facades\Route;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| 여기에 웹 애플리케이션의 라우트를 등록합니다.
| 이 라우트들은 RouteServiceProvider에 의해 "web" 미들웨어 그룹에 할당됩니다.
|
*/
// 홈페이지
Route::get('/', function () {
return view('welcome');
});
// 여기에 여러분의 라우트를 추가하세요!
🎉 라우트 동작 원리 정리
⚙️ Laravel 라우팅의 핵심:
- 🔍 패턴 매칭: URL 패턴을 찾아서 매칭
- 📦 파라미터 추출: URL에서 동적 값들을 추출
- ⚙️ 로직 실행: 정의된 함수나 컨트롤러 실행
- 📤 응답 반환: HTML, JSON 등 다양한 형태로 응답
🌟 라우팅의 장점:
- 🎯 직관적: URL만 봐도 무슨 기능인지 알 수 있음
- 🔧 유연함: 동적 파라미터로 다양한 요청 처리
- 📱 다양한 응답: 텍스트, HTML, JSON, 리다이렉트 등
- 🛡️ 안전함: 라라벨이 자동으로 보안 처리
🚀 다음 단계: 이제 라우팅의 기본을 완전히 이해했으니, 컨트롤러와 뷰를 배워서 더 체계적인 웹 애플리케이션을 만들어보세요!
💡 축하합니다! 🎉 라우팅의 동작 원리를 완전히 마스터했습니다! 이제 초급 라우팅으로 더 깊이 배워보세요!