728x90
반응형

MVC 는 비즈니스 로직과 사용자 뷰 영역을 분리하기 위한 소프트웨어 개발 패턴입니다. 과거의 php 는 MVC 를 따르지 않고 한 파일에 모든 로직을 기술하는 형식으로 개발되는 경우가 많았습니다.


예로 다음은 GET 파라미터에 따라 직원 db 에서 직원을 검색하거나 삭제하는 PHP 예제입니다.

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
<?php
$con = mysql_connect("localhost""laravel""homestead");
if (!$con) {
    die('Could not connect: ' . mysql_error());
}
 
$mode $_GET["mode"];
if ($mode == "list") {
    mysql_select_db("laravel"$con);
    $result = mysql_query("SELECT * FROM users");
    echo "<table border='1'>
    <tr>
    <th>user_id</th>
    <th>user_name</th>
    <th>email</th>
    </tr>";
    while ($row = mysql_fetch_array($result)) {
        echo "<tr>";
        echo "<td>" $row['id'] . "</td>";
        echo "<td>" $row['name'] . "</td>";
        echo "<td>" $row['email'] . "</td>";
        echo "</tr>";
        echo "\r\n";
    }
    echo "</table>";
else if ($mode == "delete") {
    $result = mysql_query("DELETE FROM users where id = " .  $_GET["user_id"]);
    echo "delete done!";
}
mysql_close($con);
?>

위 코드는 $mode 의 값의 설정 여부에 따라 다른 동작을 하고 있으며 비즈니스 로직과 db 에서 가져온 모델, 그리고 처리 결과를 보여주는 뷰 로직이 하나의 파일에 작성되어 있습니다.

이는 소프트웨어의 규모가 증가할 수록 복잡도를 늘리고 수정이 어려워지며 문제가 발생할 경우 디버깅도 매우 힘들어 지게 됩니다.


비즈니스 로직을 구현한 애플리케이션 코드와 이를 사용자에게 전달하기 위한 화면 디자인은 필요한 기술과 능력이 다르므로 각 분야의 전문가가 분업하는게 품질과 효율성이 높아집니다.

규모가 있는 프로젝트이면 개발자와 디자이너가 별도로 존재하나 하나의 파일에 비즈니스 로직과 화면 디자인이 존재한다면 디자이너가 화면의 디자인을 변경하기 위해서는 개발자의 도움이 필요하고 개발자가 코드를 수정하기 위해서는 디자이너의 도움이 받아야 하는등 작업 효율이 나빠지고 자기가 전문 분야가 아닌 부분의 내용을 만져야 하므로 품질도 떨어질 우려가 있습니다.

MVC가 없을 경우

MVC 가 없을 경우
대부분의 웹 프레임워크는 기본적으로 MVC 기능을 탑재하고 있듯이 라라벨도 MVC 를 제공하고 있으며 라라벨 MVC 는 가볍고 사용이 쉽고 유연하므로 비즈니스 로직과 디자인을 분리하고 간결하고 우아하고 유지보수가 용이한 코드를 작성할 수 있습니다.

MVC 패턴


다음은 위의 기존 코드를 라라벨 MVC 를 활용하여 작성할 때의 일반적인 모습으로 컨트롤러에서 모델을 생성하고 이를 뷰에 전달하여 코드가 간결하고 우아하며 기능이 분리되므로 코드 작성이 쉽고 유지보수가 용이한 것을 짐작할수 있습니다.


UserController.php
<?php namespace App\Http\Controllers;
  
class UserController extends Controller 
{
    // 사용자 목록 보기   
    public function list()
    {
        $list = User::findAll();
        return view('user.list')->with('list'$list);
    }
  
    // 사용자 삭제
    public function delete($id)
    {
        User::delete($id);
        return view('user.delete');
    }
}


user.list.php

<html>
    <body>
        <h1>User List</h1>
        <?php foreach ($list as $u): ?>
            <li> <?php echo $u['name']; ?> </li>
        <?php endforeach; ?>
    </body>
</html>


출처 : https://www.lesstif.com/display/LIFE

728x90
반응형
728x90
반응형

라라벨은 PHP 를 기반으로 하는 웹 개발 프레임워크로서 Taylor Otwell 과 커뮤니티 회원에 의해 개발되었습니다.

현대적인 PHP 의 기능을 최대한 활용하여 아름답고 우아하게 코드를 작성할 수 있으며 다양하고 풍부하고 사용하기 쉬운 기능을 제공하므로 약간의 코딩으로 강력하고 견고한 웹 어플리케이션을 개발할 수 있습니다.

 

이제는 라라벨 프레임워크의 장점이 많이 알려져서 나날이 사용자가 늘고 있으며 가장 대표적인 PHP 프레임워크가 되고 있으며 구글 트렌드(http://goo.gl/B9CU7k)를 보면 엄청난 성장세를 보이고 있음을 알 수 있습니다.

 

PHP 프레임워크 트렌드

 

라라벨은 PHP 프레임워크에서 압도적인 점유율을 보이고 있으며 레일즈나 장고 못지 않은 높은 인기를 누리고 있습니다.

웹 프레임워크 git 관심도

출처 : https://www.lesstif.com/display/LIFE


728x90
반응형
728x90
반응형
org.apache.commons.lang3.math

Class NumberUtils


max

public static int max(int a,
      int b,
      int c)

Gets the maximum of three int values.

Parameters:
a - value 1
b - value 2
c - value 3
Returns:
the largest of the values


728x90
반응형

'Web Programming > java-jsp' 카테고리의 다른 글

logback 설정 maxHistory  (0) 2021.03.31
람다 아키텍처  (0) 2018.09.05
java Generic  (0) 2018.09.05
TDD 테스트 주도 개발방법론  (0) 2018.09.04
클래스 정보 가져오기 - 리플렉션  (0) 2018.09.04
728x90
반응형

동시성 제어를 위한 의사컬럼 ORA_ROWSCN


1. 의사컬럼 ORA_ROWSCN

  oracle 10g부터 제공되는 동시성 제어를 위한 의사컬럼

 

사용예)

select   a.c2, a.ora_rowscn

into       :c2, :rowscn

from      xxx a

where   key1 = :k1

;

 

update xxx set c2 = 111

where   key1 = :k1 

and      ora_rowscn = :rowscn

;

 

if (sqlca.sqlcode == 1403) {

    printf("다른 사용자에 의해 변경되었습니다...\n");

}

 

2. 추가적으로 scn_to_timestamp(ora_rowscn) 함수

scn_to_timestamp 함수는 ora_rowscn의 타임스템프를 리턴한다.

단, sys.smon_scn_time 테이블을 기반으로 구현 되었으므로

해당 테이블의 삭제 주기인 5일이 경과하면 일시를 알 수 없게 되며

ora-8181오류가 발생한다.

 

3. autonomous 트란잭션 (sub commit)

 

stored procedure 내에서 pragma autonomous_transaction을 사용하여

서브커밋을 구현 할 수 있음.

 

예)

create or replace function xxx (aa number) return number

as

pragma autonomous_transaction;

 

begin

  update ...

  ;

 

  commit;

  return n;

end;

 

위의 펑션을 사용하는 프로그램은 위 스토어드 프로시져 내에서의 커밋에

영향을 받지 아니한다.

 

 

참고 : 오라클 성능 고도화 해법 - 조시형[b2en] 

 

728x90
반응형
728x90
반응형


1. 테이블 권한주기

GRANT [SELECT , INSERT, UPDATE, DELETE 등..] ON [권한 줄 테이블명] TO [권한 받을 사용자 계정]

 

예) 조회권한주기

GRANT SELECT ON TEST TO ADMIN;  //조회권한만 추가됨..

 


2. 함수 실행권한 주기

GRANT EXECUTE ON [권한 줄 함수명] TO [권한 줄 사용자명]

 

 

3. Sequence(시퀀스) 권한주기

GRANT [SELECT, ALTER] ON [소유계정.시퀀스] TO [대상계정]

 

 

4. SYNONYM 생성

먼저..

시노님(SYNONYM)이란 자신의 계정에서 다른 계정의 특정 테이블을 자신의 계정에서 볼 때 Alias(별칭)으로 정해 놓고, 그 테이블을 참조할 때 Alias로 참조한다.

 

CREATE SYNONYM [시노님명] FOR [소유계정.테이블명];

728x90
반응형

'Web Programming > database' 카테고리의 다른 글

오라클 아우터 조인 외부조인  (0) 2021.03.27
ORA-ROWSCN  (0) 2018.09.13
org.apache.ibatis.exceptions.PersistenceException  (0) 2018.09.04
mybatis if else choose  (0) 2018.08.30
ACID란?  (0) 2018.08.29

+ Recent posts