Home 라라벨로 배우는 php 웹 프로그래밍
Post
Cancel

라라벨로 배우는 php 웹 프로그래밍

라라벨로 배우는 실전 PHP 웹 프로그래밍

PART 1 라라벨 입문

1.1 새로운 라라벨 프로젝트 만들기

라라벨 설치

1
2
--verbose 옵션은 생략 가능
$ composer create-project laravel/laravel myapp --prefer-dist --verbose

라라벨 설치 확인

1
2
$ cd myapp
$ php artisan --version

로컬 서버 구동

1
$ php artisan serve --port=8080

1.2 라라벨 프로젝트 구조

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|- .evn                     # 글로벌 설정
|- app                          
|   |-Console               # 콘솔 명령어 담는 디렉터리
|   |   |-  Kernel.php       #
|   |
|   |- Exceptions
|   |   |-  Handler.php
|   |
|   |-Http
|   |   |-  Controllers
|   |   |   ㄴ Auth
|   |   |-  Kernel.php
|   |   |-  Middleware
|   |   
|   |-Providers
|   |   |-  AppServiceProvider.php
|   |   |-  AuthServiceProvider.php
|   |   |-  BroadcastServiceProvider.php
|   |   |-  EventServiceProvider.php
|   |   |-  RouteServiceProvider.php
|   |
|   |-  User.php
|   
|-  bootstrap
|-  composer.json
|-  composer.lock
|-  config
|-  database
|   |-  factories
|   |-  migrations
|   |-  seeds
|
|-  gulpfile.js
|-  pakage.json
|-  phpunit.xml
|-  public
|-  resources
|   |-  assets
|   |-  lang
|   |-  views
|
|-  routes
|   |-  api.php
|   |-  console.php
|   |-  web.php
|
|-  server.php
|-  storage
|-  tests
|-  vendor

1.3 라라벨 작동 원리

  • 사용자는 브라우저에서 http://example.com/about 페이지 요청을 한다.
  • 사용자의 요청은 example.com 이라는 이름을 가진 서버에 도착한다.
  • 웹 브라우저가 HTTP 프로토콜로 요청했으므로 example.com 서버의 웹 서버가 요청을 처리한다.
    • 웹 서버는 URL을 해석하고 자신이 해결할 수 있는 파일이면, 파일을 읽어서 곧바로 응답한다.(CSS , 이미지등 정적 데이터)
    • 자신이 해결할 수 없는 파일이면 웹 서버 설정에 따라 작업을 PHP에게 넘긴다.
    • PHP에게 작업을 넘길 때는 index.php 를 향하도록 URL 경로를 변경하여 넘긴다.
  • index.php에는 라라벨의 부팅 시퀀스가 담겨 있다.
    • 라라벨은 routes/web.php에 정의한 라우팅 테이블에서 about을 찾는다 (라우팅)
      • 일치하는 라우트가 없다면 웹 서버에게 적절한 오류 응답을 반환한다.(전역 예외 처리기)
      • 일치하는 라우트가 있다면 전역 미들웨어about 라우트에 정의한 라우트 미들웨어가 HTTP 요청을 필터링한다.(미들웨어)
    • 미들웨어를 통과하지 못하면 예외가 발생한다. 전역 예외 처리기는 웹 서버에게 적절한 HTTP 응답을 반환한다.
    • 미들웨어를 통과하면 비소로 about 요청을 처리할 컨트롤러에게 작업이 도달한다.(컨트롤러)
    • 컨트롤러는 HTTP 요청을 처리한다. 이때 라라벨 컴포넌트, 외부 컴포넌트의 기능, 우리가 만든 기능 등을 이용한다. 처리가 끝나면 HTTP 응답을 만들고 반환한다.
    • 컨트롤러는 요청을 처리하는 과정에 데이터베이스와 통신을 하기도 한다(엘로퀀트)
    • 컨트롤러는 웹 서버에게 돌려줄 HTTP 응답 본문을 만들 때 템플릿 엔진을 이용하기도 한다.(블레이드)
    • 웹 서버는 PHP/라라벨 측으로부터 넘겨받은 HTTP 응답을 브라우저에 돌려준다

2. 전역 환경 설정

2.1 dotenv 파일이 하는 일

.gitignore

1
2
3
4
/verdor
/node_modules
/pulbic/storage
.env

설정 정보(.env)를 저장하시는 않지만, 설정 정보를 처리하는 파일(config/*)은 git으로 관리한다

.env

1
2
3
4
5
6
7
8
9
10
...

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=

...

config/database.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
...

'mysql' => [
            'driver' => 'mysql',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'prefix_indexes' => true,
            'strict' => true,
            'engine' => null,
            'options' => extension_loaded('pdo_mysql') ? array_filter([
                PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
            ]) : [],
        ],

...

위 소스에서 보듯이, 설정파일 정보(전역변수)를 가져와 설정 처리에서 그 값을 사용한다


2.2 APP 환경 설정

.env

1
2
3
4
5
6
7
8
9
10
11
12
13
14
APP_ENV=local
# 어플리케이션 실행 환경을 선언한다. 현재 값인 local은 임의의 값이다. 통상적으로 local, staging, testing, production 등의 값을 사용한다. local은 로컬 컴퓨터, pordution은 운영 서버에서 사용한다

APP_DEBUG=true
디버그 옵견 활성화 여부를 정의한다. true는 로컬 환경에서만 사용해야 한다. true로 설정하면 예외에 관한 상세한 역추적 로거가 화면에 출력된다. 운영 환경에서 이 새용이 표시되면 해커의 공격 대상이 될 수 있으니 주의

APP_KEY=base64:xxxxxxxxxxxxxxxxxxxxx
프레임워크 전반에 걸쳐 암호화 알고리즘의 키 값으로 사용되는 값이다. 예를 들면 브라우저와 주고받는 암호화된 쿠키를 만들거나 해독할 때 사용한다.
SomeRandomString으로 값이 채워져 있거나 비어있다면, 다음 명열으로 새로운 암호화 키를 만들다. 또한, 다른 실행환경에 코드를 처음 배포했을 때도 다음 명령으로 암호화 키를 만들 수 있다.

$ php artisan key:generate

APP_URL=http://localhost
콜솔에서는 $_SERVER['HTTP_HOST'] 값이 없다. 아티등 녈령줄 인터페이스는 이 설정을 대체 값(fallback)으로 사용한다.

3. 라우팅


3.1 URL

라벨에서는 .php가 없는 URL을 사용한다.

3.2 라우팅 만들기

index 페이지를 수정해 본다

resources/views/welcome.blade.php

1
<h1>hello, Laravel</h1>

설정 파일 변경시, 서버 재부팅이 필요하다

웹 서버의 루트 다렉터리는 public 이다. 다음을 확인 해보자

routes/web.php

1
2
3
Route::get('/', function () {
    return view('welcome');
});

/ 요청이 들어오면 , view() 함수를 실행하며, 해당 'welcome'이라는 인자가 resources/views/welcome.blade.php 로 매핑된다.


3.3 URL 파라미터

파라미터 처리를 위해선 중괄호를 사용한다

routes/web.php

1
2
3
4
# http://127.0.0.1:8000/파라미터
Route::get('/{foo}', function ($foo) {
    return $foo;
});

기본값 설정

routes/web.php

1
2
3
4
# http://127.0.0.1:8000/파라미터
Route::get('/{foo?}', function ($foo = '기본값') {
    return $foo;
});

파라미터 중간 설정

routes/web.php

1
2
3
4
# http://127.0.0.1:8000/파라미터/test
Route::get('/{foo?}/test', function ($foo = '기본값') {
    return $foo;
});

정규 표현식 사용하여 필터링이 가능하다

routes/web.php

1
2
3
4
5
Route::pattern('foo','[0-9a-zA-z]{3}');

Route::get('/{foo?}', function ($foo = '기본값') {
    return $foo;
});

메서드 체인

routes/web.php

1
2
3
Route::get('/{foo?}', function ($foo = '기본값') {
    return $foo;
})->where('foo','[0-9a-zA-Z]{3}');

3.4 라우트 이름

Route::get() 메서드의 두 번째 인자를 배열로 전달하는데, 배열 원소에 'as' => '라우트_이름' 을 정의하면 사용 가능

routes/web.php

1
2
3
4
5
6
7
8
9
10
Route::get('/', [
    'as' => 'home',
    function () {
    return '메인 화면 입니다';
    }
]);

Route::get('/home', function(){
    return redirect(route('home'));
});

redirect()route()는 도우미 함수다

This post is licensed under CC BY 4.0 by the author.

라라벨로 배우는 php 웹 프로그래밍

라라벨로 배우는 php 웹 프로그래밍

Comments powered by Disqus.

Trending Tags