Spac 매뉴얼/MySQL Dao2009. 11. 14. 00:26
Mysql 데이터베이스와 연결하여 다양한 기능을 수행하는 어플리케이션을 위한 Database Access Object Controller 입니다.

예제상의 Mysql Dao 는 Mysql 5.x 버전을 토대로 만들어졌으나 4.x  버전 이상이라면 무난하게 사용하실 수 있습니다.
단, Transaction 기능을 사용하시려면 테이블 작성시 "InnoDB" 로 작성하셔야 합니다.



Spac Dao 의 특징은 다음과 같습니다.

* Spac 의 기본 Dao 로서 Spac 프레임웍을 이용해 웹어플리케이션 개발시 쉽게 연동하여 사용할 수 있습니다.

* 일반 변수 대입방식의 쿼리문 및 "?"를 이용한 쿼리바인딩을 지원합니다.

* 정상적으로 종료되지 않은 어플리케이션은 Database를 자동으로 Rollback 시켜줍니다.

* 쿼리문의 로깅을 지원합니다.





Mysql 용 Dao는 네개의 파일로 구성됩니다.

* Dao.Class.php      : Mysql 데이터베이스에 연결하고 쿼리문 실행을 하며 다양한 SQL 작업을 실행합니다.
* Dao.ini                 : Dao 실행에 관련된 설정값 정보를 담고 있습니다.
* DaoConnection.ini   : Mysql 서버에 연결하기 위한 연결 정보를 담고 있습니다.
* DaoTables.ini        : Mysql 서버 계정의 각 테이블명 정보를 담고 있습니다.


Dao 를 Spac에서 사용하기 위해서는 Spac 경로에 Dao를 복사해야 합니다.
Dao를 Spac에서는 컨트롤러로 취급하므로 컨트롤러경로 아래에 "Dao" 라는 디렉토리를 만들고 그 안에 위치시킵니다.
(Spac 기본 패키지에는 Dao가 포함되어 있으므로 참고만 합니다.)

배치의 예는 아래와 같습니다.





먼저 "Dao.Class.php" 파일을 에디터로 열어 Dao 기본경로값인 "$daoPath" 변수값을 자신의 환경에 맞게 고쳐줍니다.
경로값은 웹경로의  "index.php" 파일의 위치에서 부터 현재 파일의 상대경로값을 입력하시거나, 절대경로값을 입력합니다.





그리고 "Dao.ini" 파일을 열어 데이터베이스 연결 정보를 자신의 데이터베이스 연결 환경에 맞게 수정합니다.
아래 경로중 "dbLogFilePath" 값은 반드시 절대경로를 넣어야 합니다.




다음은 "DaoConnection.ini" 파일을 열어 MySQL 접속 정보를 설정합니다.



마지막으로 "DaoTables.ini" 파일을 열어 사용하는 테이블 정보를 입력합니다.
아래 그림을 참조하여 변수명 = "변수값" 의 형태로 작성합니다.
변수명은 적당한 변수명을 입력하시면 되고, 변수값은 해당 변수명에 지정할 실제 테이블명을 입력합니다.

이 테이블 정보는 비즈니스로직에서 데이터베이스 관련 프로세스 수행시 테이블명 입력시 변수로 이를 대신하여 코드를 작성하기 위해 필요하므로, 쿼리문 작성시 테이블명을 변수로 할당하여 사용하지 않고 직접 테이블명을 명시하여 코드를 작성하시는 경우에는 설정하실 필요가 없습니다.



이로서 Dao 를 사용하기 위한 준비를 마쳤습니다.

이제 실제 데이터베이스 연결과 SQL 문의 실행, 결과값 처리, 화면 출력 등 예제를 실행해 보겠습니다.


Posted by webdata
첫번째 예제로 브라우저 화면에 "Hello World" 를 출력하는 프로그램을 만들어보겠습니다.

예제를 수행하기 위해 "Controller.ini" 파일의 설정값을 약간 수정하겠습니다.

아래는 "Controller.ini" 파일의 일부입니다. 아래 해당하는 항목을 아래의 경로로 수정합니다.

modelPath = "../Spac/model"                ; 모델클래스의 경로
viewPath = "../Spac/view"                     ; 뷰의 경로
.
.
.
errPrintView = true                                 ; 에러 화면출력
.
.
useViewCache = false                           ; 뷰캐시 기능 끔


위와 같이 모델경로와 뷰경로를 변경 하고 예제를 작성해보겠습니다.


모델클래스를 만들기 전에 클래스 생성 규칙이 있습니다.

1. Spac 에 사용되는 클래스명은 알파벳 대/소문자, 숫자, 언더바 만 사용 가능하며
2. 클래스명의 첫글자는 알파벳 대문자로 시작해야 합니다.
3. 마지막으로 파일명은 "클래스명.Class.php" 로 생성해야 합니다.
4. 클래스파일내에 클래스를 작성할때 클래스명의 선언은 파일의 "클래스명" 과 동일하여야 합니다.
5. 클래스를 작성할때는 클래스명과 동일한 메소드(생성자) 외에 기본 실행 메소드가 반드시 존재해야 합니다.
   Spac에서는 기본메소드명을 "execute" 로 정하고 있습니다.


아래와 같이 클래스의 명명규칙에 따라 모델경로 내에 "HelloWorld.Class.php" 파일을 작성합니다.





간단한 "Hello World" 어플리케이션이 완성되었습니다.

이제 이 어플리케이션을 실행해 보겠습니다.
브라우저에 아래처럼 주소를 입력하고 실행합니다.


작성한 모델클래스를 웹브라우저에서 호출하는 방법은 http://www.mydomain.com/?/클래스명/메소드명 의 방식으로 호출합니다.

아파치 서버를 사용하는 경우 "Rewrite" 설정을 통해 ".htaccess" 파일을 생성한 후, 주소의 물음표(?) 를 없애 더욱 깔끔한 주소를 사용할 수도 있습니다만,
이는 별도의 메뉴에서 설명하고, 여기서는 일반적으로 호출 할 수 있는 방식을 설명드리겠습니다.


위에서 2개의 주소를 안내한 이유는 클래스내에 "execute" 메소드가 있는경우에는 생략이 가능하다는것을 보여주기 위해서 입니다.
"execute" 메소드는 Spac 모델클래스의 기본 실행 메소드 입니다.
즉, 브라우저 주소에 메소드명을 명시하지 않으면 기본 메소드인 "execute" 메소드가 호출되게 됩니다.


Posted by webdata

이전 예제에서는 사용자 클래스에서 직접 출력하여 "View" 가 필요없었지만, 이제부터는 View를 사용하여 "Hello World" 를 출력해 보겠습니다.

복잡한 비즈니스로직은 모델 클래스 로 구현하고, 결과값을 화면에 출력하는 부분에선 "View" 를 이용하면 모델과 뷰를 분리할 수 있습니다.

아래와같이 이전 HelloWorld 클래스를 조금 변경합니다.

* Spac/model/HelloWorld.Class.php
<?php
class HelloWorld extends Controller {

    var $string;

    function HelloWorld() {}

    function execute() {
        $this->string        = "Hello World";
        $this->result_uri   = "helloworld.html";
        $this->dispatcher();
    }

}



이전클래스와 비교하여 변경된 부분에 대해서 설명하면

1. "Controller" 를 상속받습니다. (dispatcher 메소드를 사용하기 위해서)
2. 출력할 메세지를 뷰에 전달하기 위해 $string 변수를 사용합니다.
3. "$this->result_uri" 라는 맴버변수에 뷰로 사용할 파일을 지정합니다.
    ("Spac/view" 로부터 시작되는 뷰파일의 경로를 입력합니다.)
4. $this->dispatcher 메소드를 사용하여 HelloWorld 클래스의 실행결과값을 뷰에 전달합니다.



위에서 뷰로 사용할 파일을 "helloworld.html" 로 정의 하였으므로 뷰 경로안에 이 파일을 생성합니다.

* Spac/view/helloworld.html

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Hello World</title>
</head>
<body>
<h3><? echo $this->string; ?></h3>
</body>
</html>



다 완성됐습니다.
이제 브라우저에서 호출해봅니다.

Posted by webdata
Posted by webdata

출처 : http://hfkais.blogspot.com/2008/07/804.html 에서 그대로 퍼 온 것입니다.


오늘은 root 계정으로 언어와 관련해 이것저것 건드리다, 글꼴의 안티앨리어싱을 죄다 빼버리는 사고(?)를 쳤습니다. 그것도 한글 글꼴에서만 말이죠. 저는 우분투 내에서의 글꼴을 대부분 '은 돋움'으로 쓰는데, 모두 보기싫게 변해버렸습니다.

snap_1361

이렇게 말이죠. 안티앨리어싱이 제거되어 들쭉날쭉한 모양에, 글꼴의 일부분이 보이지 않기도 합니다. '그놈 마작'은 '그늠 마작'으로 보이는군요. 사믁, 르븟 등이 인상적입니다.

snap_1362

이 현상은 웹페이지에서도 똑같이 적용됩니다. 파이어폭스에서도 기본 글꼴을 '은 돋움' 으로 해두었기 때문에 모조리 깨져버렸습니다. 도저히 이런 상태로는 쓸 수 없을 것 같았습니다.

하 지만 어딜가나 편법과 요령은 있게 마련이죠. 가장 간단한 방법은, 기존에 설정된 '은 돋움' 글꼴을 모두 'Sans' 나 'Serif' 등의 영문글꼴로 바꿔주는 것입니다. 우분투 메인 메뉴의 '시스템' - '기본 설정' - '모양새' 설정에서, '글꼴' 탭을 눌러 설정합니다. Sans는 돋움체 모양, Serif는 바탕체 모양의 글꼴입니다. 윈도에서 'Tahoma'로 글꼴을 설정해도 한글은 '굴림'으로 나오듯, Sans로 설정해도 한글은 은 돋움으로 표시됩니다.

하지만 뭔가 좀 꺼림칙하죠. 제대로 해결된 것도 아니고요. 어떻게 해야할까 고민하다, 검색을 통해 떠돌이 님의 글을 보게 되었습니다. 덕분에 아주 간단한 방법으로 문제를 해결할 수 있었습니다.

snap_1363

우분투 메인 메뉴의 '프로그램' - '보조 프로그램' 에서 터미널을 띄웁니다. 다음의 명령어를 입력해 줍니다.

sudo gedit /etc/fonts/conf.d/29-language-selector-ko-kr.conf

위 스크린샷처럼 패스워드를 물어봅니다. 자기 계정의 패스워드를 입력하고 엔터를 누르면 에디터가 열립니다.

snap_1365

위 스크린샷처럼, <!-- Turn off antialias and autohint for Korean fonts depending on pixelsize --> 아래 부분의 코드들을 주석처리해 줍니다. 일반적인 HTML의 주석처리 방법과 같습니다. <!-- 과 --> 를 쓰는 것이죠.

snap_1366

하 나 더 있습니다. 이번엔 <!-- Turn off antialias and autohint for ttf-alee depending on pixelsize --> 아래 부분의 코드들을 주석처리해 줍니다. 수정이 끝났으면, 파일을 저장하고 에디터를 닫습니다.

로그아웃했다 다시 로그인하거나, 재부팅을 하게 되면 변경된 내용이 적용됩니다.

snap_1367

이전과 같은 모습 그대로 깔끔하게 나오는군요. 드디어 '그놈'이 '그놈'으로 보입니다.

snap_1368

웹페이지도 보기좋게 나옵니다. 모두 '은 돋움' 으로 설정했을 때의 모습입니다.

그 런데 어떤 이유로 이런 문제가 발생하는 것인지 저는 잘 모르겠습니다. 분명 처음 우분투를 설치하고, 지금까지 폰트에 안티앨리어싱 처리가 잘 되고 있었거든요. 제 경우엔 root 계정으로 접속해서 기본값인 '영어'로 설정되어 있는 언어 설정 부분을 '한국어'로 바꾸다가 이런 일이 벌어졌습니다.

아무튼 이렇게 또 하나를 배웠네요. 그래도 찾아보면 명쾌한 해답을 올려주시는 분들이 많아서 다행입니다. 떠돌이 님 덕분에 문제도 해결하고 우분투에 대해 좀 더 배우게 되었습니다. 다시 한 번 감사말씀 드립니다.



출처 : http://hfkais.blogspot.com/2008/07/804.html

Posted by webdata