{"action":"created","issue":{"url":"https://api.github.com/repos/xpressengine/xe-core/issues/1615","labels_url":"https://api.github.com/repos/xpressengine/xe-core/issues/1615/labels{/name}","comments_url":"https://api.github.com/repos/xpressengine/xe-core/issues/1615/comments","events_url":"https://api.github.com/repos/xpressengine/xe-core/issues/1615/events","html_url":"https://github.com/xpressengine/xe-core/pull/1615","id":94239404,"number":1615,"title":"선택적 세션 시작 (Proof of Concept)","user":{"login":"kijin","id":164058,"avatar_url":"https://avatars.githubusercontent.com/u/164058?v=3","gravatar_id":"","url":"https://api.github.com/users/kijin","html_url":"https://github.com/kijin","followers_url":"https://api.github.com/users/kijin/followers","following_url":"https://api.github.com/users/kijin/following{/other_user}","gists_url":"https://api.github.com/users/kijin/gists{/gist_id}","starred_url":"https://api.github.com/users/kijin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kijin/subscriptions","organizations_url":"https://api.github.com/users/kijin/orgs","repos_url":"https://api.github.com/users/kijin/repos","events_url":"https://api.github.com/users/kijin/events{/privacy}","received_events_url":"https://api.github.com/users/kijin/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/xpressengine/xe-core/labels/type/discussion","name":"type/discussion","color":"009800"}],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":4,"created_at":"2015-07-10T07:38:20Z","updated_at":"2015-07-10T12:38:43Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/xpressengine/xe-core/pulls/1615","html_url":"https://github.com/xpressengine/xe-core/pull/1615","diff_url":"https://github.com/xpressengine/xe-core/pull/1615.diff","patch_url":"https://github.com/xpressengine/xe-core/pull/1615.patch"},"body":"#1598 및 #1613 과 달리, 필요할 때만 세션을 시작하면서도 **서드파티 애드온, 모듈, 스킨, 레이아웃 등의 코드를 단 한 줄도 변경할 필요가 없는 패치입니다.**\r\n\r\n- 세션 쿠키가 이미 존재한다면 세션을 시작하고, 그렇지 않다면 시작하지 않습니다. 이 부분의 로직은 #1598 과 동일합니다.\r\n- 세션을 시작하지 않는 경우 `$_SESSION`을 빈 배열로 초기화합니다.\r\n- 모든 모듈과 애드온, 레이아웃, 스킨 등의 실행이 끝난 후에 `$_SESSION`을 다시 확인하여, 만약 1개라도 데이터가 들어가 있으면 \"누군가가 세션 사용을 시도하고 있다\"라고 간주하고 세션을 시작합니다.\r\n- 즉, 서드파티 코드에서 `$_SESSION`에 데이터를 저장할 경우 자동으로 감지하여 세션을 시작합니다.\r\n- 서드파티 자료에서 단순히 세션 데이터를 읽기만 할 경우에는 세션이 시작되지 않으며, 해당 자료는 `NULL`을 돌려받게 됩니다. 그러나 이것은 로그인 직후에도 마찬가지이므로, `NULL`을 돌려받는다고 문제가 발생할 가능성은 극히 희박합니다. 정말로 예전에 저장해 둔 데이터가 있다면 이미 세션이 시작되었을 테니 걱정할 필요도 없겠지요.\r\n- 물론 세션을 많이 사용하는 서드파티 자료라면 애초에 세션을 선택적으로 시작하는 의미가 없겠지요. 그러나 그런 자료를 전혀 수정하지 않고 그대로 사용하더라도 최악의 경우 기존과 같은 성능을 얻을 뿐, 기능상의 문제는 발생하지 않을 것입니다.\r\n\r\n이 PR은 개념 증명(POC)에 불과하므로, 사용자가 선택할 수 있는 옵션은 넣지 않았습니다. 필요하다면 나중에 추가하도록 하겠습니다. 일단 테스트를 위해 모듈 핸들러와 문서 모듈, 회원 모듈 등에서 세션에 데이터를 저장하도록 하드코딩되어 있는 곳만 일부 수정했습니다.\r\n\r\n로그인시 별도로 세션 시작 처리를 해줄 필요는 없습니다. 로그인시 `member` 모듈에서 `$_SESSION`에 데이터 저장을 시도하기 때문에, 이것을 자동으로 감지하여 세션을 시작합니다.\r\n\r\n로그인하지 않은 사용자가 세션을 시작하지 않고도 게시판 등을 이용하기 위해서는 더 많은 부분의 수정이 필요할 것입니다. 이것은 #1598 의 방법을 따라도 무방합니다.\r\n"},"comment":{"url":"https://api.github.com/repos/xpressengine/xe-core/issues/comments/120400444","html_url":"https://github.com/xpressengine/xe-core/pull/1615#issuecomment-120400444","issue_url":"https://api.github.com/repos/xpressengine/xe-core/issues/1615","id":120400444,"user":{"login":"wkpark","id":232347,"avatar_url":"https://avatars.githubusercontent.com/u/232347?v=3","gravatar_id":"","url":"https://api.github.com/users/wkpark","html_url":"https://github.com/wkpark","followers_url":"https://api.github.com/users/wkpark/followers","following_url":"https://api.github.com/users/wkpark/following{/other_user}","gists_url":"https://api.github.com/users/wkpark/gists{/gist_id}","starred_url":"https://api.github.com/users/wkpark/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wkpark/subscriptions","organizations_url":"https://api.github.com/users/wkpark/orgs","repos_url":"https://api.github.com/users/wkpark/repos","events_url":"https://api.github.com/users/wkpark/events{/privacy}","received_events_url":"https://api.github.com/users/wkpark/received_events","type":"User","site_admin":false},"created_at":"2015-07-10T12:38:43Z","updated_at":"2015-07-10T12:38:43Z","body":"XE3 논의가 여기서 왜 필요한가요\r\n이름만 XE를 빌렸을  뿐이지 더이상 XE라 할 수 없지요.\r\n무론 라라벨 기대하고 있고, 오히려 쉬워보입니다만\r\n- - -\r\n다시 논의로 돌아가서, XE는 충분히 안정적이고 조금만 더 최적화 하면 최적의 성능을 올릴 가능성이 많습니다. 당장에 랜더링 결과를 캐싱하고 있지도 않더군요. 당연히 랜더링 결과를 캐싱할줄 알았는데 한번 랜더링한 그 결과가 똑같은데 또 랜더링을 반복하고 저장도 안하고 있더군요. 이러니 ab 벤치가 100도 안나옵니다.\r\n\r\n성능은 좋은 플레임워크와 사실 별 무관합니다. XE가 많이 비판받고 있는것이 플레임워크가 복잡해져서 성능이 안나온다는 선입견인데, 사실 그것과 별무관하고, 제대로 된 캐싱처리를 안하고 있습니다. memcached / wincache 다 지원하는데 정작 랜더링 결과를 파일캐싱하는 간단한 캐싱을 안하고 있으니^^;;;\r\n\r\n아무튼 이 부분은 차차 고치기로 하고...\r\n- - -\r\n님께서 제안하신 `$_SESSION`을 후처리 한다는 부분도 상당히 좋은 아이디어 같습니다.\r\n이 부분은 저도 별도로 생각해보기로 하겠습니다~"}}