
Who am I...
I started development in 2001.
I have been working as an independent freelancer since 2006.
Recently, starting in 2024, I developed business software for a global company called Deloitte for two years.
Currently, I am developing school systems (PHP, Laravel) and O2O platforms (Flutter).
PHP + Javascript ( Shopping malls, communities, web builders, etc )
Python Automation ( Public institution data registration, crawling, etc )
Flutter IOS, Android App ( Dictionaries, O2O services, etc )
Laravel 은?
Laravel is an open-source web framework based on the PHP language. Designed to enable the rapid and efficient development of modern web applications, it is one of the most popular PHP frameworks worldwide.
라라벨(Laravel)은 PHP 언어를 기반으로 하는 오픈 소스 웹 프레임워크입니다. 현대적인 웹 애플리케이션을 빠르고 효율적으로 개발할 수 있도록 설계되었으며, 전 세계적으로 가장 인기 있는 PHP 프레임워크 중 하나입니다.
Framework ?
It's like having the basic framework prepared in advance!
기본 뼈대를 미리 만들어 놓은 것!
건축공사를 할때 공통적으로 미리 꼭 해놔야 하는 기초공사, 전기, 수도.하수등 배관 등을 기본으로 제공을 해주는 것.
집, 사무실, 상가등 원하는 건축물을 만들때 빠르게 완성 가능.
이러한 기초공사, 전기, 수도.하수등 배관 등의 키트를 제공하는 걸 프레임워크 라고 합니다.
In software development
Basic structure (MVC pattern)
Frequently used functions (Login, DB connection)
Basic functions
=> Enables rapid and consistent development according to a defined method
소프트웨어 개발에서는
기본구조 ( MVC 패턴 )
자주쓰는기능 ( 로그인, DB 연결 )
기본 Function
=> 정해진 방식대로 빠르게 일관성있게 개발가능
Frameworks for each language
Java => Spring Boot
Javascript => Express.js
Python => Django
PHP => Laravel, CodeIgniter
Features of the Laravel Framework
1. Clean and easy-to-read code (Expressive Syntax)
2. Powerful features (Built-in Features)
3. Thorough separation of MVC structure
4. Massive ecosystem and community'
Laravel 프레임워크의 특징
1. 깔끔하고 읽기 쉬운 코드 (Expressive Syntax)
2. 강력한 기능들 (Built-in Features)
3. MVC 구조의 철저한 분리
4. 거대한 생태계와 커뮤니티
1. 깔끔하고 읽기 쉬운 코드 (Expressive Syntax)
PHP
<?php
// 1. DB 연결 설정
$host = '127.0.0.1';
$db = 'my_database';
$user = 'root';
$pass = 'password';
$charset = 'utf8mb4';
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
];
try {
$pdo = new PDO($dsn, $user, $pass, $options);
} catch (\PDOException $e) {
throw new \PDOException($e->getMessage(), (int)$e->getCode());
}
// 2. 쿼리 실행 및 데이터 가져오기
$email = 'user@example.com';
$stmt = $pdo->prepare("SELECT * FROM users WHERE email = ?");
$stmt->execute([$email]);
$user = $stmt->fetch();
// 3. 결과 사용
echo $user['name'];
Laravel
<?php
// 이메일로 사용자 한 명을 찾아서 가져오기
$user = User::where('email', 'user@example.com')->first();
// 결과 사용
echo $user->name;
2. 강력한 기능들 (Built-in Features)
1) 라우팅 & 컨트롤러 사용
간편하게 URL 처리하고 응답한다.
2) 미들웨어 ( Middleware )
요청을 처리하기 전후에 특정로직을 실행하도록 해준다 ( 로그인, 권한부여 )
3) Eloquent ORM
데이터베이스 레코드를 단순한 PHP 객체로 다룰 수 있게 해줍니다.
4) Blade 템플릿 기본제공
- 상속과 컴포넌트: @extends, @section 등을 이용해 레이아웃을 재사용할 수 있습니다. 예를 들어, 헤더와 푸터를 한 곳에서 관리하고 본문만 갈아 끼우는 방식입니다.
1) 부모 Layout
<html>
<head>
<title> Hokma Academy - @yield('title') </title>
</head>
<body>
<nav>
<a href="/">홈</a> |
<a href="/aboutus">About Us</a> |
<a href="/services">Services</a> |
<a href="/contactus">ContactUs</a> |
<a href="/mypage">Mypage</a>
</nav>
<div class="container">
@yield('content')
</div>
<footer>
<p>© 2026 Hokma Academy</p>
</footer>
</body>
</html>
2) 자식페이지
@extends('layouts.app') {{-- 부모 레이아웃 확장 --}}
@section('title', '내 프로필 페이지') {{-- 짧은 내용은 두 번째 인자로 --}}
@section('content')
<h1>회원 정보</h1>
<p>이름: {{ $user->name }}</p>
<p>이메일: {{ $user->email }}</p>
<button>정보 수정</button>
@endsection
기존의 PHP 는 include 를 사용하고, 레이아웃 부분부분에 원하는 데이터를 지정하기는 어렵다.
- 성능: Blade 코드는 순수 PHP 코드로 컴파일되어 캐싱되기 때문에 속도가 매우 빠릅니다.
3. MVC 구조의 철저한 분리
MVC 아키텍처 패턴

4. 문서화, 거대한 생태계와 커뮤니티
1) 문서화 - 버젼에 따라 잘 정리된 문서를 업데이트 해줍니다.
Laravel - The clean stack for Artisans and agents
Laravel is a PHP web application framework with expressive, elegant syntax. We've already laid the foundation — freeing you to create without sweating the small things.
laravel.com

2) Laracasts 와 같은 교육/커뮤니티 플랫폼이 있습니다.
Learn Laravel | Laracasts
Want to learn Laravel and PHP from the coding wizards who know it best?
laracasts.com
Teddy's Think...
1) DB ( mysql, mssql, oracle... ) - raw 쿼리 사용외에는 동일
2) 크로스 사이트 스크립팅 ( Xss ) 및 크로스 사이트 요청 위조 ( CSRF ) 방어 기능 내장
3) 다양한 패키지를 편리하게 설치하고 사용
예) sns 연동, QR 코드생성, 권한관리
4) 단점! - 많은 기능을 포함하고 있어서 속도가 조금 느리다
< Developers only need to focus on developing service logic. >
개발자는 서비스 로직 개발에만 집중하면 된다.
본 강의에서 laravel 설치를 위한 composer 를 설치하는 과정은 다루지 않겠습니다.
0. Laravel 설치 환경이 구축되었는지 확인
php -v
composer -V
1. Laravel 설치 방법
composer global require laravel/installer
2. Laravel 프로젝트 생성
# 현재 디렉토리 하위에 myapp 이라는 폴더를 만들고 laravel 프로젝트를 생성합니다.
# 초보자를 위한 방법
laravel new myapp
or
# 정확한 버젼선택이 가능한 방법
composer create-project laravel/laravel myapp
# 현재 디렉토리에 프로젝트를 생성
laravel new .
composer create-project laravel/laravel .

1) Which starter kit would you like to install?
기초 과정에서는 None 을 선택합니다.

2) Which testing framework do you prefer?
테스트 코드를 Pest 로 작성할 것인지, PHPUnit ( PHP OOP 표준 )

3) Do you want to install Laravel Boost to improve AI assisted coding?
Laravel Boost ?
Creating a "laravel/laravel" project at "./sample"
Installing laravel/laravel (v13.1.2)
- Downloading laravel/laravel (v13.1.2)
- Installing laravel/laravel (v13.1.2): Extracting archive
Created project in /Users/b2g/Documents/work/hyunjucho/sample
Loading composer repositories with package information
Updating dependencies
Lock file operations: 107 installs, 0 updates, 0 removals
- Locking brick/math (0.14.8)
- Locking carbonphp/carbon-doctrine-types (3.2.0)
- Locking dflydev/dot-access-data (v3.0.3)
- Locking doctrine/inflector (2.1.0)
- Locking doctrine/lexer (3.0.1)
- Locking dragonmantank/cron-expression (v3.6.0)
- Locking egulias/email-validator (4.0.4)
- Locking fakerphp/faker (v1.24.1)
- Locking filp/whoops (2.18.4)
- Locking fruitcake/php-cors (v1.4.0)
- Locking graham-campbell/result-type (v1.1.4)
- Locking guzzlehttp/guzzle (7.10.0)
- Locking guzzlehttp/promises (2.3.0)
- Locking guzzlehttp/psr7 (2.9.0)
- Locking guzzlehttp/uri-template (v1.0.5)
- Locking hamcrest/hamcrest-php (v2.1.1)
- Locking laravel/framework (v13.4.0)
- Locking laravel/pail (v1.2.6)
- Locking laravel/pint (v1.29.0)
- Locking laravel/prompts (v0.3.16)
- Locking laravel/serializable-closure (v2.0.11)
- Locking laravel/tinker (v3.0.0)
- Locking league/commonmark (2.8.2)
- Locking league/config (v1.2.0)
- Locking league/flysystem (3.33.0)
- Locking league/flysystem-local (3.31.0)
- Locking league/mime-type-detection (1.16.0)
- Locking league/uri (7.8.1)
- Locking league/uri-interfaces (7.8.1)
- Locking mockery/mockery (1.6.12)
- Locking monolog/monolog (3.10.0)
- Locking myclabs/deep-copy (1.13.4)
- Locking nesbot/carbon (3.11.4)
- Locking nette/schema (v1.3.5)
- Locking nette/utils (v4.1.3)
- Locking nikic/php-parser (v5.7.0)
- Locking nunomaduro/collision (v8.9.3)
- Locking nunomaduro/termwind (v2.4.0)
- Locking phar-io/manifest (2.0.4)
- Locking phar-io/version (3.2.1)
- Locking phpoption/phpoption (1.9.5)
- Locking phpunit/php-code-coverage (12.5.3)
- Locking phpunit/php-file-iterator (6.0.1)
- Locking phpunit/php-invoker (6.0.0)
- Locking phpunit/php-text-template (5.0.0)
- Locking phpunit/php-timer (8.0.0)
- Locking phpunit/phpunit (12.5.16)
- Locking psr/clock (1.0.0)
- Locking psr/container (2.0.2)
- Locking psr/event-dispatcher (1.0.0)
- Locking psr/http-client (1.0.3)
- Locking psr/http-factory (1.1.0)
- Locking psr/http-message (2.0)
- Locking psr/log (3.0.2)
- Locking psr/simple-cache (3.0.0)
- Locking psy/psysh (v0.12.22)
- Locking ralouphie/getallheaders (3.0.3)
- Locking ramsey/collection (2.1.1)
- Locking ramsey/uuid (4.9.2)
- Locking sebastian/cli-parser (4.2.0)
- Locking sebastian/comparator (7.1.4)
- Locking sebastian/complexity (5.0.0)
- Locking sebastian/diff (7.0.0)
- Locking sebastian/environment (8.0.4)
- Locking sebastian/exporter (7.0.2)
- Locking sebastian/global-state (8.0.2)
- Locking sebastian/lines-of-code (4.0.0)
- Locking sebastian/object-enumerator (7.0.0)
- Locking sebastian/object-reflector (5.0.0)
- Locking sebastian/recursion-context (7.0.1)
- Locking sebastian/type (6.0.3)
- Locking sebastian/version (6.0.0)
- Locking staabm/side-effects-detector (1.0.5)
- Locking symfony/clock (v7.4.8)
- Locking symfony/console (v7.4.8)
- Locking symfony/css-selector (v7.4.8)
- Locking symfony/deprecation-contracts (v3.6.0)
- Locking symfony/error-handler (v7.4.8)
- Locking symfony/event-dispatcher (v7.4.8)
- Locking symfony/event-dispatcher-contracts (v3.6.0)
- Locking symfony/finder (v7.4.8)
- Locking symfony/http-foundation (v7.4.8)
- Locking symfony/http-kernel (v7.4.8)
- Locking symfony/mailer (v7.4.8)
- Locking symfony/mime (v7.4.8)
- Locking symfony/polyfill-ctype (v1.33.0)
- Locking symfony/polyfill-intl-grapheme (v1.33.0)
- Locking symfony/polyfill-intl-idn (v1.33.0)
- Locking symfony/polyfill-intl-normalizer (v1.33.0)
- Locking symfony/polyfill-mbstring (v1.33.0)
- Locking symfony/polyfill-php80 (v1.33.0)
- Locking symfony/polyfill-php83 (v1.33.0)
- Locking symfony/polyfill-php84 (v1.33.0)
- Locking symfony/polyfill-php85 (v1.33.0)
- Locking symfony/polyfill-uuid (v1.33.0)
- Locking symfony/process (v7.4.8)
- Locking symfony/routing (v7.4.8)
- Locking symfony/service-contracts (v3.6.1)
- Locking symfony/string (v7.4.8)
- Locking symfony/translation (v7.4.8)
- Locking symfony/translation-contracts (v3.6.1)
- Locking symfony/uid (v7.4.8)
- Locking symfony/var-dumper (v7.4.8)
- Locking theseer/tokenizer (2.0.1)
- Locking tijsverkoyen/css-to-inline-styles (v2.4.0)
- Locking vlucas/phpdotenv (v5.6.3)
- Locking voku/portable-ascii (2.0.3)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 107 installs, 0 updates, 0 removals
- Downloading symfony/http-foundation (v7.4.8)
- Downloading symfony/string (v7.4.8)
- Downloading symfony/console (v7.4.8)
- Downloading nunomaduro/termwind (v2.4.0)
- Downloading symfony/css-selector (v7.4.8)
- Downloading symfony/var-dumper (v7.4.8)
- Downloading symfony/uid (v7.4.8)
- Downloading symfony/routing (v7.4.8)
- Downloading symfony/process (v7.4.8)
- Downloading symfony/mime (v7.4.8)
- Downloading symfony/event-dispatcher (v7.4.8)
- Downloading symfony/mailer (v7.4.8)
- Downloading symfony/error-handler (v7.4.8)
- Downloading symfony/http-kernel (v7.4.8)
- Downloading league/uri-interfaces (7.8.1)
- Downloading league/uri (7.8.1)
- Downloading league/flysystem (3.33.0)
- Downloading laravel/serializable-closure (v2.0.11)
- Downloading laravel/framework (v13.4.0)
- Downloading laravel/pail (v1.2.6)
- Downloading laravel/tinker (v3.0.0)
- Downloading nunomaduro/collision (v8.9.3)
- Downloading staabm/side-effects-detector (1.0.5)
- Downloading sebastian/version (6.0.0)
- Downloading sebastian/type (6.0.3)
- Downloading sebastian/recursion-context (7.0.1)
- Downloading sebastian/object-reflector (5.0.0)
- Downloading sebastian/object-enumerator (7.0.0)
- Downloading sebastian/global-state (8.0.2)
- Downloading sebastian/exporter (7.0.2)
- Downloading sebastian/environment (8.0.4)
- Downloading sebastian/diff (7.0.0)
- Downloading sebastian/comparator (7.1.4)
- Downloading sebastian/cli-parser (4.2.0)
- Downloading phpunit/php-timer (8.0.0)
- Downloading phpunit/php-text-template (5.0.0)
- Downloading phpunit/php-invoker (6.0.0)
- Downloading phpunit/php-file-iterator (6.0.1)
- Downloading theseer/tokenizer (2.0.1)
- Downloading sebastian/lines-of-code (4.0.0)
- Downloading sebastian/complexity (5.0.0)
- Downloading phpunit/php-code-coverage (12.5.3)
- Downloading phpunit/phpunit (12.5.16)
- Installing doctrine/inflector (2.1.0): Extracting archive
- Installing doctrine/lexer (3.0.1): Extracting archive
- Installing dragonmantank/cron-expression (v3.6.0): Extracting archive
- Installing symfony/deprecation-contracts (v3.6.0): Extracting archive
- Installing psr/container (2.0.2): Extracting archive
- Installing fakerphp/faker (v1.24.1): Extracting archive
- Installing symfony/polyfill-mbstring (v1.33.0): Extracting archive
- Installing symfony/http-foundation (v7.4.8): Extracting archive
- Installing fruitcake/php-cors (v1.4.0): Extracting archive
- Installing psr/http-message (2.0): Extracting archive
- Installing psr/http-client (1.0.3): Extracting archive
- Installing ralouphie/getallheaders (3.0.3): Extracting archive
- Installing psr/http-factory (1.1.0): Extracting archive
- Installing guzzlehttp/psr7 (2.9.0): Extracting archive
- Installing guzzlehttp/promises (2.3.0): Extracting archive
- Installing guzzlehttp/guzzle (7.10.0): Extracting archive
- Installing symfony/polyfill-php80 (v1.33.0): Extracting archive
- Installing guzzlehttp/uri-template (v1.0.5): Extracting archive
- Installing symfony/polyfill-intl-normalizer (v1.33.0): Extracting archive
- Installing symfony/polyfill-intl-grapheme (v1.33.0): Extracting archive
- Installing symfony/polyfill-ctype (v1.33.0): Extracting archive
- Installing symfony/string (v7.4.8): Extracting archive
- Installing symfony/service-contracts (v3.6.1): Extracting archive
- Installing symfony/console (v7.4.8): Extracting archive
- Installing nunomaduro/termwind (v2.4.0): Extracting archive
- Installing voku/portable-ascii (2.0.3): Extracting archive
- Installing phpoption/phpoption (1.9.5): Extracting archive
- Installing graham-campbell/result-type (v1.1.4): Extracting archive
- Installing vlucas/phpdotenv (v5.6.3): Extracting archive
- Installing symfony/css-selector (v7.4.8): Extracting archive
- Installing tijsverkoyen/css-to-inline-styles (v2.4.0): Extracting archive
- Installing symfony/var-dumper (v7.4.8): Extracting archive
- Installing symfony/polyfill-uuid (v1.33.0): Extracting archive
- Installing symfony/uid (v7.4.8): Extracting archive
- Installing symfony/routing (v7.4.8): Extracting archive
- Installing symfony/process (v7.4.8): Extracting archive
- Installing symfony/polyfill-php85 (v1.33.0): Extracting archive
- Installing symfony/polyfill-php84 (v1.33.0): Extracting archive
- Installing symfony/polyfill-intl-idn (v1.33.0): Extracting archive
- Installing symfony/mime (v7.4.8): Extracting archive
- Installing psr/event-dispatcher (1.0.0): Extracting archive
- Installing symfony/event-dispatcher-contracts (v3.6.0): Extracting archive
- Installing symfony/event-dispatcher (v7.4.8): Extracting archive
- Installing psr/log (3.0.2): Extracting archive
- Installing egulias/email-validator (4.0.4): Extracting archive
- Installing symfony/mailer (v7.4.8): Extracting archive
- Installing symfony/error-handler (v7.4.8): Extracting archive
- Installing symfony/http-kernel (v7.4.8): Extracting archive
- Installing symfony/finder (v7.4.8): Extracting archive
- Installing ramsey/collection (2.1.1): Extracting archive
- Installing brick/math (0.14.8): Extracting archive
- Installing ramsey/uuid (4.9.2): Extracting archive
- Installing psr/simple-cache (3.0.0): Extracting archive
- Installing symfony/translation-contracts (v3.6.1): Extracting archive
- Installing symfony/translation (v7.4.8): Extracting archive
- Installing symfony/polyfill-php83 (v1.33.0): Extracting archive
- Installing psr/clock (1.0.0): Extracting archive
- Installing symfony/clock (v7.4.8): Extracting archive
- Installing carbonphp/carbon-doctrine-types (3.2.0): Extracting archive
- Installing nesbot/carbon (3.11.4): Extracting archive
- Installing monolog/monolog (3.10.0): Extracting archive
- Installing league/uri-interfaces (7.8.1): Extracting archive
- Installing league/uri (7.8.1): Extracting archive
- Installing league/mime-type-detection (1.16.0): Extracting archive
- Installing league/flysystem-local (3.31.0): Extracting archive
- Installing league/flysystem (3.33.0): Extracting archive
- Installing nette/utils (v4.1.3): Extracting archive
- Installing nette/schema (v1.3.5): Extracting archive
- Installing dflydev/dot-access-data (v3.0.3): Extracting archive
- Installing league/config (v1.2.0): Extracting archive
- Installing league/commonmark (2.8.2): Extracting archive
- Installing laravel/serializable-closure (v2.0.11): Extracting archive
- Installing laravel/prompts (v0.3.16): Extracting archive
- Installing laravel/framework (v13.4.0): Extracting archive
- Installing laravel/pail (v1.2.6): Extracting archive
- Installing laravel/pint (v1.29.0): Extracting archive
- Installing nikic/php-parser (v5.7.0): Extracting archive
- Installing psy/psysh (v0.12.22): Extracting archive
- Installing laravel/tinker (v3.0.0): Extracting archive
- Installing hamcrest/hamcrest-php (v2.1.1): Extracting archive
- Installing mockery/mockery (1.6.12): Extracting archive
- Installing filp/whoops (2.18.4): Extracting archive
- Installing nunomaduro/collision (v8.9.3): Extracting archive
- Installing staabm/side-effects-detector (1.0.5): Extracting archive
- Installing sebastian/version (6.0.0): Extracting archive
- Installing sebastian/type (6.0.3): Extracting archive
- Installing sebastian/recursion-context (7.0.1): Extracting archive
- Installing sebastian/object-reflector (5.0.0): Extracting archive
- Installing sebastian/object-enumerator (7.0.0): Extracting archive
- Installing sebastian/global-state (8.0.2): Extracting archive
- Installing sebastian/exporter (7.0.2): Extracting archive
- Installing sebastian/environment (8.0.4): Extracting archive
- Installing sebastian/diff (7.0.0): Extracting archive
- Installing sebastian/comparator (7.1.4): Extracting archive
- Installing sebastian/cli-parser (4.2.0): Extracting archive
- Installing phpunit/php-timer (8.0.0): Extracting archive
- Installing phpunit/php-text-template (5.0.0): Extracting archive
- Installing phpunit/php-invoker (6.0.0): Extracting archive
- Installing phpunit/php-file-iterator (6.0.1): Extracting archive
- Installing theseer/tokenizer (2.0.1): Extracting archive
- Installing sebastian/lines-of-code (4.0.0): Extracting archive
- Installing sebastian/complexity (5.0.0): Extracting archive
- Installing phpunit/php-code-coverage (12.5.3): Extracting archive
- Installing phar-io/version (3.2.1): Extracting archive
- Installing phar-io/manifest (2.0.4): Extracting archive
- Installing myclabs/deep-copy (1.13.4): Extracting archive
- Installing phpunit/phpunit (12.5.16): Extracting archive
47 package suggestions were added by new dependencies, use `composer suggest` to see details.
Generating optimized autoload files
78 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
No security vulnerability advisories found.
> @php -r "file_exists('.env') || copy('.env.example', '.env');"
INFO Application key set successfully.
47 package suggestions were added by new dependencies, use `composer suggest` to see details.
Generating optimized autoload files
( 종속성을 검토하여 47개 패키지를 설치했습니다. )
78 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
( 라라벨 78개 패키지가 후원을 기다리고 있다. )
No security vulnerability advisories found.
( 보안 취약점 경고가 발견되지 않았습니다. )
> @php -r "file_exists('.env') || copy('.env.example', '.env');"
위 명령을 포함해 다양한 방법으로 .env.example 를 복사해 .env 를 만들어 주세요.

> @php -r "file_exists('.env') || copy('.env.example', '.env');"
위 명령을 포함해 다양한 방법으로 .env.example 를 복사해 .env 를 만들어준다.
.env
프로젝트에서 환경변수를 모아둡니다.
개발환경, 테스트환경, 프로덕트 환경등에서 .env는 달라질수 있다.
이번 시간에는 자세한 내용 하나하나 보지는 않겠습니다.

다만, Laravel 프로젝트 생성을 완료하기 위해서 데이터베이스 설정을 하고 실행하는 것까지 진행하겠습니다.

3. 디비설정
DB_CONNECTION=sqlite
# DB_HOST=127.0.0.1
# DB_PORT=3306
# DB_DATABASE=laravel
# DB_USERNAME=root
# DB_PASSWORD=
부분을 아래 처럼 변경합니다.
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=sample
DB_USERNAME=sample
DB_PASSWORD=
여기에서 .env 를 수정한 뒤에 Yes를 선택하고 엔터를 누른다.

4. Migrate 실행
Creating migration table ............................................ 24.69ms DONE
INFO Running migrations.
0001_01_01_000000_create_users_table ................................ 59.01ms DONE
0001_01_01_000001_create_cache_table ................................ 17.01ms DONE
0001_01_01_000002_create_jobs_table ................................. 20.75ms DONE
DB 확인해 본다.
4. 기타


5. 폴더구조확인
모든 폴더를 확인하지는 않습니다. 다만 중요한 폴더를 살펴봅시다.
sample/
├── app/
├── routes/
├── resources/
├── public/
├── artisan
└── composer.json
6. 실행
라라벨은 개발용 웹서버를 지원합니다.
> cd sample
> php artisan serve
INFO Server running on [http://127.0.0.1:8000].
Press Ctrl+C to stop the server
브라우저로 확인해본다.
http://127.0.0.1:8000


다른 프로젝트를 실행할때 http://127.0.0.1:8001 , http://127.0.0.1:8002 실행확인
7. 기타 설치방법
* 특정환경에서는 불가능 ( 저도 안되요.. mac )
laravel new myapp --version=10.*
or
laravel new myapp --version=10.0
## 특정환경에서는 작동안함.
* 이방법을 사용하기로 합시다.
# 특정버젼 설치
composer create-project laravel/laravel myapp "10.3.0"
# * 를 사용하여 해당 이하 최종버젼
composer create-project laravel/laravel myapp "12.*"
composer create-project laravel/laravel myapp "11.*"
composer create-project laravel/laravel myapp "10.*"
composer create-project laravel/laravel myapp "9.*"
* 위 방법은 설치만 진행하므로
composer 를 이용해 설치하기
.env db 설정
DB 생성
8. 간단한 페이지를 추가
Step 0. welcome 페이지 확인

Step 1. Routing 테스트
Route::get('/', function () {
return "Hello Teddy!";
});
접속확인
http://127.0.0.1:8000
Step 2. View 에 연결하기
resources/views/hello.blade.php
<!DOCTYPE html>
<html>
<head>
<title>Hello</title>
</head>
<body>
<h1>Hello Hokma Academy!</h1>
</body>
</html>
routes/web.php
Route::get('/hello', function () {
return view('hello');
});
http://localhost:8000/hello

** 만약 시간이 남는다면 아래와 같은 디렉토리 구조를 prefix 를 이용해 구성해본다.
/aboutus
/aboutus/team
/aboutus/history
Route::prefix('aboutus')->group(function () {
Route::get('/', function () {
return view('aboutus.index');
});
Route::get('/team', function () {
return view('aboutus.team');
});
Route::get('/history', function () {
return view('aboutus.history');
});
});
“URL 구조는 파일이 아니라 Route가 만든다”
과제
1. 다음페이지들을 만들고 라우트를 연결해주세요.
/aboutus
/services
/reservation
/contactus
다음시간
Routing & Controller