CI 묻고 답하기

제목 Singleton 이 소멸되는 시점 혹은 CI 재시작 방법을 알고 싶습니다.
카테고리 CI 2, 3
글쓴이 zepinos 작성시각 2017/03/06 09:05:41
댓글 : 7 추천 : 0 스크랩 : 0 조회수 : 14760   RSS
CI 의 librarys 에 memcached 관련 소스를 만들어서 사용중입니다. __construct() 에 memcached 접속 정보를 넣고 private static 변수에 생성된 연결 정보를 넣고 사용중인데요...$this->load->library() 로 호출해도 Singleton 으로 생성되는 것으로 알고 있습니다.

그런데, 다중 서버 설정이 되어 있을 경우 memcached 라이브러리가 서버 중 일부가 다운되었을 경우 연결 시도 후 실패 시 목록에서 뺀다고 들었습니다. (문서가 참 없어서...확실하지가 않네요) 그럼 해당 서버가 복구되었을 경우 다시 서버에 추가해줘야 하는데, 현재 코드에는 추가해주는 것이 없어서 Singleton 을 강제로 소멸시키고 다시 생성시키거나 CI 을 다시 시작해야 재인식이 될 것 같습니다.

현재 코드에서 추가로 객체에 다시 서버 정보를 밀어넣는 코드를 추가하는 방법이 있으나, 코드 수정 후 적용하는게 당장 힘들고, 서버 재시작이 거의 불가능한 상황입니다. 하지만 정말 필요하다면 방법을 먼저 안 뒤 보고 후 적용해야 하는데, 정확히 어떤 방법을 써야 하는지 잘 모르겠습니다.

어떤 방법이 있을까요?

조언 부탁드립니다.
태그 싱글톤,Singleton,싱글턴
 다음글 안녕하세요 질문드립니다. (2)
 이전글 설치 하고 나서 index.php 죽이기는 성공했는데요... (2)

댓글

kaido / 2017/03/06 09:25:35 / 추천 1

한번 가상 서버를 올려서 테스트 해보시는 것이 좋을것 같습니다.

[아무런 변경없이 동일하게 셋팅하고 말이죠.]

 

싱글톤 호출하고는 크게 매칭 되는 문제라고 생각 들진 않습니다.

만일 CI 라이브러리 호출 방식에 문제가 있으시다면, CI 라이브러리를 사용하지 않고 네이티브로 작성 하거나, 혹은 서드파티 모듈에 넣고 작업 하시거나, CI 방식이면서 독립적인 느낌을 원하신다면 드라이브로 만드실수도 있습니다.

zepinos / 2017/03/06 09:43:02 / 추천 0

@kaido 아...CI 가 문제가 있다는 의미는 아니고, 오히려 제가 속한 회사 소스에 좀 문제가 있는 것 같아서요(이직한 지 한 달 됐습니다). 무중단을 가장 큰 가치로 생각하는 회사라 서버 재시작은 좀 힘들고 소스 수정도 장애 보고서 써야 적용 가능한 곳이라서...

가장 큰 문제는, 제가 근 십년 가까이 Java 만 써서 객체 생성과 소멸에 대해서 Java 스럽게만 생각하고 있어서 PHP 그 중에서도 CI 에서 Singleton 이 언제 생성되고 소멸되는건지 몰라서 여쭤본 것입니다.

kaido / 2017/03/06 09:51:09 / 추천 1

@zepinos . 

네 ㅎㅎ. 저도 java를 같이 하고 있습니다. java와 php는 사실 객체는 동일한데 운영하는 방식이 조금 다릅니다.

[어느정도로 동일하냐면 php에서 생성한 객체를 java에서 받아가서 바로 사용 가능 합니다.]

 

java는 재시작이 필요하지만, php는 재시작 필요없이 적용됩니다. 

[이는 동작 구조가 조금 다르기 때문입니다.]

autoDeploy 이나 frickr free 같은 옵션 적용 없이도 즉시 적용됩니다.

 

혹시 java 개발을 하시다 질문 하신것 같은 느낌이 나서 한번 가상 서버 올리고 테스트 이야기를 꺼내 드렸습니다.

한대승(불의회상) / 2017/03/06 10:56:06 / 추천 1

세션 단위로 생성 소멸 됩니다.

zepinos / 2017/03/06 11:09:28 / 추천 0

@한대승(불의회상)

알려주셔서 고맙습니다. ^^;

대신에, 한가지 궁금증이 다시 생겼는데, 세션 단위라면 사용자(브라우져 등) 단위로 객체가 생긴다는 것이 되는데...맞나요? 그럼 Singleton 이라도 다른 사용자와 전역 public 변수의 값이 공유되진 않는다고 봐야 하는 건가요?

kaido / 2017/03/06 12:05:01 / 추천 1

이렇게 생각 하시면 편합니다.

java는 runtime 동안 활동을 한다고 치면 php는 요구 할때마다 실행하고 end 를 맺습니다.

사용자마다 다르게 인식하니, 공유개념이 적용되진 않습니다.

 

대표적인 차이로 java는 중복 로그인 체크가 vm 레벨에서 체크가 가능 합니다.

[사실상 웹 언어 쪽에선 유일한 수준]

 

php는 중복 로그인 방법이 통상적으로 정확하게 체크할 수단이 없습니다.

[어디까지나 비슷하게 보이게 트릭을 쓸 뿐입니다.]

zepinos / 2017/03/06 13:39:29 / 추천 0
조언 고맙습니다. kaido 님 말씀대로라면 Singleton 이 Singleton 이 아니네요...