• 목록
  • 아래로
  • 위로

안녕하세요?


제가 저번에 소스 게시판에 올렸던 출첵 여부를 확인하는 위젯(아미나)의 PHP 스크립트를 짬짬이 수정하고 있는데요.


출첵자 수가 많은 경우에 반복해서 쿼리를 돌리는 것은 비효율적이라고 생각되어서


쿠키를 이용해서 서버의 부하를 줄여보려고 하는데요.


참고할만한 자료를 찾지 못해서 제 나름대로 두 가지 방법을 생각해봤거든요 ㅠㅠ

(두 가지 방법 모두 며칠 테스트해봤는데 다행히 정상적으로 작동하네요~!)


다음과 같은 두 가지 방식 중에서 어느 방법이 더 무난한 방법일까요?



방법 1: 


쿠키의 이름을 id(아미나에서 mb_id)로 하는 방법입니다(3, 4행).


<?php
    $write_table = "g5_write_{$wset['bo_list']}";
    $cookie_name = $member['mb_id'];
    if ($_COOKIE[$cookie_name] === 'OK') {
        echo "<a href = '".G5_BBS_URL."/board.php?bo_table=".$wset['bo_list']."' class='myButton'><i class='fa fa-calendar-check-o'></i>출석완료!!</a>";
    } else {
        $sql_attendance = " select mb_id from $write_table where mb_id = '{$member['mb_id']}' and wr_datetime >= '".G5_TIME_YMD." 00:00:00' and wr_datetime <= '".G5_TIME_YMD." 23:59:59' ";
        $result = sql_fetch($sql_attendance);
        if ($result['mb_id']) {
            echo "<a href = '".G5_BBS_URL."/board.php?bo_table=".$wset['bo_list']."' class='myButton'><i class='fa fa-calendar-check-o'></i>출석완료!</a>";
            setcookie($cookie_name, 'OK', strtotime('tomorrow'));
        } else {
            echo "<a href = '".G5_BBS_URL."/board.php?bo_table=".$wset['bo_list']."' class='myButton' id='no_attendance'><i class='fa fa-calendar-check-o'></i>출석하세요</a>";
        }
    }



방법 2:


쿠키의 이름은 고정하되 그 값에 id를 넣습니다(2행).


<?php
    if ($_COOKIE['attendance'] === $member['mb_id']) {
        echo "<a href = '".G5_BBS_URL."/board.php?bo_table=".$wset['bo_list']."' class='myButton'><i class='fa fa-calendar-check-o'></i>출석완료!!</a>";
    } else {
        $sql_attendance = " select mb_id from $write_table where mb_id = '{$member['mb_id']}' and wr_datetime >= '".G5_TIME_YMD." 00:00:00' and wr_datetime <= '".G5_TIME_YMD." 23:59:59' ";
        $result = sql_fetch($sql_attendance);
        if ($result['mb_id']) {
            echo "<a href = '".G5_BBS_URL."/board.php?bo_table=".$wset['bo_list']."' class='myButton'><i class='fa fa-calendar-check-o'></i>출석완료!</a>";
            setcookie('attendance', $member['mb_id'], strtotime('tomorrow'));
        } else {
            echo "<a href = '".G5_BBS_URL."/board.php?bo_table=".$wset['bo_list']."' class='myButton' id='no_attendance'><i class='fa fa-calendar-check-o'></i>출석하세요</a>";
        }
    }
?>




방법 1로 하면 공용 컴퓨터의 경우에 브라우저에서 생성되는 쿠키의 수가 늘어날 것이고,


방법 2로 하면 공용 컴퓨터에서도 쿠키는 1개만 생성이 되지만


대신 여러 명이 같은 컴퓨터에서 출첵을 하면 그 때마다 쿼리를 돌리고 쿠키도 갱신이 되겠죠.



아마도 큰 차이는 없겠지만 출첵자 수도 많고, 공용 컴퓨터에서 여러 명이 사용을 한다는 가정하에 어느 방법이 보다 효율적일까요?


그리고 이 방법에 제가 생각하지 못했던 문제점이 있거나, 제가 미처 발견하지 못한 보다 효율적인 방법이 있으면 조언을 부탁드립니다 ^^


혹시 쿠키의 이름이 아이디와 동일하게 생성이 되면 유저들이 싫어할까요??


그럼 열흘 남은 2018년 뜻깊게 보내시길 기원합니다!


답변 달아주실 분께 미리 감사드려요~ 

작성자
이니스프리 119 Lv. (0%) 2175700/115200000EXP

Make StudyForUs Great Again!

 

CSVpuymXAAAVVpd.jpg

댓글 4

라엘
profile image
+1

어차피 $member 데이터를 가져와야하므로, member테이블의 여분필드 (wr_1) 에 attenddate를 저장하는 것은 어떨까요?

comment menu
2018.12.22. 21:52

신고

"라엘님의 댓글"

이 댓글을 신고 하시겠습니까?

이니스프리 작성자 → 라엘
profile image

앗 그런 좋은 방법이 있었군요!! 제가 미처 거기까지 생각하지 못했네요~! ^^

일반적으로는 그런 방법으로 출첵 위젯을 만드는데 제가 너무 우회적인 방법을 택했나보군요 ㄷㄷ

여분필드에 출첵 날짜가 계속 쌓일텐데, 그걸 이용해서 다른 기능을 구현할 수도 있겠네요.

라엘 님께서도 연말이라 바쁘실텐데 답변해주셔서 정말 감사합니다 :)

그럼 라엘 님께서도 남은 2018년 뜻깊게 잘 마무리하시길 기원합니다!

comment menu
2018.12.22. 23:46

신고

"이니스프리님의 댓글"

이 댓글을 신고 하시겠습니까?

title: 황금 서버 (30일)humit
profile image

아니면 방법 2를 사용하되 쿠키 값을 갱신하실 때 ";" + {새로 출석체크한 ID}와 같은 방식으로 해서 출석여부를 확인할 때는 split 함수로 배열로 바꾸는 방법이 있습니다.

comment menu
2018.12.23. 19:31

신고

"humit님의 댓글"

이 댓글을 신고 하시겠습니까?

이니스프리 작성자 → humit
profile image

앗.. 그런 방법을 사용하면 방법 2의 단점이 해결되는군요 ^^

번번이 정말 감사합니다!!

이제 전역까지 7일 남으셔을텐데 부디 무탈히 전역하시고 가족분들과 함께 뜻깊은 연말연시를 보내시길 기원합니다 :)

comment menu
2018.12.23. 21:16

신고

"이니스프리님의 댓글"

이 댓글을 신고 하시겠습니까?

권한이 없습니다.
번호 제목 글쓴이 날짜 조회 수
공지 [작업 완료] 설 명절 맞이 서버 업데이트 안내 3 마스터 24.02.11.17:21 1024
공지 [중요] 호스팅 만료와 관련하여 일부 수칙이 변경됩니다. 4 마스터 23.01.14.02:23 4699
공지 [필독] 질문하는 방법 17 마스터 18.02.23.03:09 4482
326 호스팅패널에서 서브도메인 사용하시는 분 계신가요? 2 joyfuI 19.08.28.18:13 250
325 [미디어위키] 시각편집기 no vrs 260578 19.09.03.19:49 231
324 리눅스에서.. 무선랜카드 활성화?켜기? 3 홀민 19.09.10.02:26 374
323 일본어 시험 초급(?)을 따야되는데 조언을 부탁드립니다 ㅠㅠ 6 이니스프리 19.10.04.12:06 442
322 워드프레스 백업 툴 추천 부탁드려요! 10 갱생협스 19.10.04.19:53 227
321 유튜브 페이지 가져오는 방법이 뭐가있을까요? 9 image 슬기 19.10.11.16:52 887
320 파이썬에서 유니코드 문자열 처리와 관련하여 질문 드립니다 6 image 이니스프리 19.10.12.21:10 1132
319 크롤링 머신(미니PC) 세팅과 관련하여 질문 드립니다 2 이니스프리 19.10.14.20:23 507
318 VPS에서 홈서버의 네트워크 접속 이상 여부를 확인하는 방법이 있을까요? 6 이니스프리 19.10.15.01:26 256
317 JS 반복 처리에 대한 로컬저장문제와 PHP의 Request의 비동기처리 2 Hanam09 19.10.20.23:10 220
316 스마트폰 지문인식 과정에서 에러가 덜 발생하는 방법을 질문 드립니다 6 이니스프리 19.10.25.20:08 440
315 무접점 방식의 키보드의 윤활과 관련하여 질문 드려요~! 이니스프리 19.10.25.22:57 198
314 크롤링한 어절 또는 문장의 유사성을 구하는 방법에 대해 질문 드립니다 9 이니스프리 19.10.26.22:22 401
313 히어로 무비 추천 부탁드립니다! 30 이니스프리 19.10.29.13:48 312
312 PC 원격접속을 위한 스마트폰 앱 추천을 부탁드립니다. 14 이니스프리 19.11.02.22:21 294
311 갤럭시노트10+ 구매해도 괜찮을까요?? 2 이니스프리 19.11.03.16:03 185
310 싸이월드 미니홈피 크롤링 과정에서 swf 파일 다운로드와 관련하여 질문 드립니다 ㅠㅠ 6 이니스프리 19.11.05.00:45 891
309 피규어샵 방문과 관련하여 질문 드립니다 6 이니스프리 19.11.06.21:32 206
308 명함 제작 업체 추천 부탁드립니다! 2 갱생협스 19.11.08.16:57 244
307 리눅스에서 랜섬웨어 감염 원인이 무엇일까요? 14 NoYeah 19.11.08.17:33 247