CI 묻고 답하기

제목 전역에서 사용하는 객체 생성 관련 질문드립니다
글쓴이 nicengb 작성시각 2012/12/31 09:41:56
댓글 : 6 추천 : 0 스크랩 : 0 조회수 : 15057   RSS
안녕하세요.

웹에서 사용할 설정 파일이나 코드성 파일을 xml 로 만들어서 서버가 올라올 때 읽어놨다가
필요하면 사용하도록 하려고 합니다.

그런데 로그를 보니 Hook나 controler 등은 매 요청마다 새로 class가 initialize 되는것 같더라고요.
그렇게 되면 매번 init 될때마다 xml 을 읽어야 할테니 성능상 좋지 않을 것 같은데요.

혹시나 서버가 올라올 때 최초 한번만 xml을 읽어서 전역 객체에 값을 세팅해놓고 
이후에 Controler 에서 필요할때마다 사용하도록 하는 방법이 있을까요?

PHP 특성 때문에 어려울 것 같기도 한데 혹시나 싶어 질문 올립니다.

즐거운 연말 되세요. 
감사합니다.
 
 다음글 ci session 버그 있는것 같은데 아닌가요?ㅡㅡ;... (8)
 이전글 Config 의 Session 부분 (6)

댓글

변종원(웅파) / 2012/12/31 10:17:04 / 추천 0
한번만 읽고 계속 사용해야한다면 메모리에 올려야하는데 xml로 이용하는 목적에 위배됩니다.
올리고 받아오고 액션과 리소스가 사용되니까요. xml로 만드는 목적을 다시 생각해보셔야 할것 같습니다.
 
제 경우엔 게시판 설정 같은 것을 매번 접속할때마다 db에서 읽는 것이 무의미해서 그 설정을 xml로 저장하고
hook에서 매번 읽도록했습니다.

db에서 읽는 것과 파일에서 읽는 것은 분명 리소스 차이가 있으니까요.

적당한 선에서 타협을 해야합니다

벤지 / 2012/12/31 12:55:44 / 추천 0
jsp 의 spring 쪽에 말씀하신 부분이 있기는 한대

php 쪽에선 아직 구현하는 방법쪽이 없는것 같습니다.

이건 웹언어중에서 jsp 의 spring 쪽에서만 보았습니다.

즉, 서버가 시작될때 자체에서 데몬처럼 돌아가는 기능이 없더군요.
nicengb / 2012/12/31 14:57:14 / 추천 0
그렇군요. 제가 아직 PHP초보라서 잘 몰랐네요.
친절한 답변 감사합니다 ^^
한대승(불의회상) / 2012/12/31 16:26:31 / 추천 0
php가 스크립트 언어라 매번 초기화를 한답니다.
jsp의 was  컨테이너가 없는 관계로...

memdb 쪽을 좀 보시면 비슷한 기능을 구현 가능 할 것으로 사료 됩니다. ^^
우왕아항 / 2013/01/09 14:55:07 / 추천 0
웅파//
xml이 모든 상황에서 구조적으로 접근 가능한 표준 Markup 언어이므로 목적에 위배되지는 않는 것으로 보입니다.
IIS같은 경우도 환경변수가 다 xml에 있고, 서버가 시작될때 단 한번만 읽어오며,
이는 IIS 뿐만 아니라 대부분의 서버 어플리케이션도 그런 컨피그 형태(굳이 xml이 아니더라도)를 취한 사례가 많습니다.
 
 
nicengb//
nicengb님의 목적은 아래의 두가지로 보입니다.
 
A. 해당 xml은 컨피그성(환경설정용)으로만 사용하고,
B. 서버가 올라올때 최초 한번만 xml을 읽어서 전역 객체에 값을 셋팅
 
바로 떠오르는 방법을 말씀드리자면,
 
1. 웹 서버 스크립트의 활용
보통 "php in  웹서버"가 실행될 때, 기본으로 활용할 상수 값을 웹서버가 php로 넘깁니다.
이는 웹서버 시작시 단 한번 불려와 메모리에 상주되며, 웹서버가 종료되기 전까지는 동일한 값을 지닙니다. (사실 눈에 보기에 이렇지, 분석해보면 조금 비효율적인 방법으로 작동합니다. 이 이상의 설명은 생략 ^^;)
콘솔 프로그래밍으로 웹서버 스타트 시에 해당 xml을 읽어와 웹서버로 쏴주는 부분을 만들면 될 것 같습니다.
 
장점 : 아마도 "php in 웹서버" 플랫폼에서는 가장 빠릅니다.
단점 : 웹서버마다 스크립트 문법이나 형태가 다릅니다.
 
 
2. 메모리 DB의 활용
불의회상님 말씀대로 메모리db를 생성해서 그쪽을 읽어오게 하면 됩니다.
메모리db에 데이터가 없다면 최초로 xml을 읽어 메모리db에 써주고, 데이터가 있다면 메모리db만 읽게하는 형태의 핸들링 구조의 클래스를 하나 설계하면 될 듯 싶습니다.
 
장점 : 표준 SQL문을 따르며, 서버를 건드릴 일이 전혀 없습니다.
단점 : 조건B에는 충족되지 않습니다.
데이터가 메모리에 상주해 있으나, 웹서버에는 상주하지 않으므로 결국 그때그때 접근합니다.
DBMS가 아무리 성능이 뛰어나봤자 SELECT 문법 하나가 수많은 연산으로 구현되어 있기 때문에 그냥 메모리에 접근하는것 보다는 당연히 느립니다.
 
 
3. 메모리 파일 사용
xml의 상수들을 php로 변환하는 코드를 작성. 생성된 php 파일을 메모리에 올려 인클루드 하는 방식.
 
장점 : php 사용하듯이 접근하면 됩니다. (1)의 접근성을 살리면서 (2)의 동작개념을 갖고 있습니다.
단점 : 조건B에는 충족되지 않으나, php의 auto_prepend_include를 활용하면 사용하는 입장에서는 똑같은 느낌을 줄 수 있습니다.
 
 
 
2와 3은 최초 한번만 읽는 구조는 아니지만 읽을 대상이 메모리에 있어 속도를 높이고,
auto_prepend_include를 활용한다면 전역객체의 느낌을 살릴 순 있습니다. (2는 DB컨넥트 때문에 auto_prepend_include를 피하는 것이 좋을지도)
변종원(웅파) / 2013/01/09 18:16:16 / 추천 0
우왕아항/ xml 자체에 대한 것이 아니라 구현하려는 의도와 다르다는 거죠.