홈페이지 동시접속자수 구현을 위한 PHP 소스 코드

내 홈페이지의 동시 접속자수는 몇명이나 될지 궁금할 때가 있습니다. 이런 필요로 동시 접속자수를 알려주는 위젯도 있고 제 블로그에서도 플래시 위젯으로 동시 접속자수를 알려주는 위젯을 제공하고 있기도 합니다. 그러나 직접 만들어서 동시접속자를 알려주는 것이 좀더 매력적이라고 생각하는 분들이 있다면 아래 소스 코드를 참고 하세요.^^
웹서비스의 특성상 완벽한 동시접속자를 알아 낼 수 없으므로 약간의 편법이 필요합니다. 웹서비스는 요청한 웹페이지를 내보내주고 접속을 끊으므로 같은 사용자라는 것을 알려주는 세션(session)을 발행합니다. 세션이 같으면 같은 사용자라고 볼 수 있습니다. 이 세션을 구분하는 ID 와 카운트 하고 있는 페이지(page) URL 그리고 시간(ctime)을 기록하고 현재 시간을 기준으로 적당한 시간(30초 ~ 60초) 이내에 있는 기록만 남기고 삭제 합니다. 그러면 남아 있는 레코드의 갯수가 동시 접속자수가 됩니다. 이런 작업을 하기 위해 데이타베이스에 아래와 같은 테이블을 만들고 세션 ID(session)는 주키로 시간(ctime)을 인덱스로 만듭니다.

CREATE TABLE abc_siteon (
    session varchar(64) NOT NULL default '',
    page varchar(255) default '',
    ctime datetime default NULL,
    PRIMARY KEY (session),
    KEY ctime (ctime)
)

그리고 아래와 같은 페이지(siteon_counter.php)를 만들고 원하는 홈페이지에 보이지 않는 이미지로 출력합니다. 또는 해당 홈페이지의 로고(images/siteon.gif)를 출력하거나 GD 라이브러리를 사용할 수 있는 분들은 아래 소스 마지막 라인에 이미지 출력 대신 레코드의 갯수를 숫자 이미지로 출력해주는 코드를 입력하실 수 있습니다.

<?
session_start();
$connect = @mysql_connect("localhost", "user", "password") or die("");
@mysql_select_db("database") or die("");
@mysql_query("set names utf8");
//mysql_query("set names latin1");
//mysql_query("set names euckr");
$table_name = 'abc_siteon';
$session_id = session_id();
$page = $_SERVER['HTTP_REFERER'];
if (strlen($page)<1) $page="direct";
$query = "insert into $table_name set session='$session_id'";
@mysql_query($query);
$query = "update $table_name set page='$page', ctime=now() where session='$session_id'";
@mysql_query($query);
$query = "delete from $table_name where ctime < DATE_SUB(NOW(), INTERVAL 60 SECOND)";
@mysql_query($query);
@readfile("images/siteon.gif");
?>

<img
src="/siteon_counter.php" width="1" height="1">


아래의 소스 코드(siteon.php)를 이용해 노출하고 싶은 홈페이지의 적당한 위치에 동시 접속자수를 표시해주면 동접자 구현이 완료됩니다.

<?
$connect = @mysql_connect("localhost", "user", "password") or die("");
@mysql_select_db("database") or die("");
@mysql_query("set names utf8");
$table_name = 'abc_siteon';
$query = "select count(*) total from $table_name";
$result = mysql_query($query);
$total = 0;
if ($result) {
    $row = mysql_fetch_row($result);
    if ($row) {
        $total = intval($row[0]);
    }
}
echo "동접 ".$total."명";
?>

관리자 페이지에 현재 레코드 현황을 확인할 수 있는 페이지를 만들고 페이지별 동접자수를 확인할 수 있도록 하는 것도 유용합니다. 그리고 리눅스/유닉스용 스캐쥴러인 크론(cron)을 이용해서 1분마다 동접자수를 기록하고 이를 그래프화 하면 홈페이지 트래픽을 보기좋게 파악할 수 있는 유용한 홈페이지 관리 도구가 됩니다. PHP 초급자도 파악할 수 있는 수준으로 소스 코드가 작성되었으므로 차근 차근 소스 코드를 살펴보시면 이해가 될 것이라 생각합니다.

웹프로그래머의 홈페이지 정보 블로그 http://hompy.info
플래시(Flash) 스터디와 플렉스(Flex) 스터디

요즘 주말 또는 여가시간을 보다 알차게 보내기 위해 플래시(FLASH)와 플렉스(FLASH) 스터디를 추진하고 있습니다. 플렉스 스터디는 플렉스, 액션스크립트, UI, 서버, WAS, JSP, Servlet, LiveCycle 등을 다루며 주로 프로그래밍 소양을 갖춘 분들로 맴버를 구성하고 있고 플래쉬 스터디는 주로 웹디자인 툴에 익숙한 분들로 스터디 맴버를 구성하고 플래시, 액션스크립트, 포토샵, PHP 등을 다룰 예정에 있습니다. 물론 플래시,플렉스 관련 지식을 공유하는 것이 기본 목표이지만 IT 직종에 일하는 분들과 인맥을 쌓는 것에도 관심이 있다고 보면 됩니다. 저는 플래시쪽 스터디를 맡아서 진행할 것이며 최대 8명의 신청자를 받고자 했으나 신청자가 초과되어 신중한 선택을 해야합니다. 내일까지는 맴버구성을 마치고 공지를 할 생각입니다. 그리고 초과 되는 맴버들과 스터디에 관심을 보이는 새로운 맴버들에 대해서는 또 다른 스터디나 다른 주제의 스터디를 구성해야할 것 같습니다. 요즘 개인적으로 플래시 관련 커뮤니티와 블로그를 운영하고 있는 덕분에 플래시 제작의뢰 또는 홈페이지 제작의뢰가 종종 들어오더군요. 가벼운 의뢰인 경우 스터디에 적용해서 실무 학습도 하고 수익을 맴버들에게 나눠주는 방식도 가능할 것 같은데 욕심이겠죠? 그래도 고려해봐야겠습니다.

[Flex 스터디] 2008-08-18
학습내용: 플렉스, 액션스크립트, UI, 서버, WAS, JSP, Servlet, LiveCycle
참여인원: 리더를 제외하고 최대 8명
학습장소: 역삼역 링크나우 회의실 (변경될 수 있음)
학습일정: 매월 2회 토요일 (시간 등 자세한 일정은 참가자들과 협의)
참가신청: 자기소개 및 참가 이유를 간략하게 이메일로 리더에게 송신
이번 8월 14일 정모에 참석하신 분들에게 우선권이 있으며 리더를 제외하고 최대 8명으로 스터디 맴버를 구성합니다. 되도록 개발언어에 관계 없이 개발에 대한 소양을 가지고 있거나 개발언어를 다뤄본 경험이 있는 분들이 참여할 수 있습니다. 구체적인 질문은 리더에게 이메일로 보내주세요. 그리고 현재 추진중인 2개의 스터디 중 1개의 스터디에만 참여 가능합니다.

[Flex 스터디] 2008-08-23
안녕하세요, 이경빈입니다.
개인적인 사정으로 정리가 많이 늦은 점 죄송합니다.
지금 시점으로 FLEX 스터디 신청을 마감하겠습니다.
현재 정모 참여자 4 분, 불참자 9 분이 메일을 주셨습니다.
이 분들 중 8 분만 대상으로 진행하겠습니다.
신청하신 분들께 메일로 별도 연락을 다 드리겠습니다만,
일단 대체적인 의견과 제 사정을 종합해볼
2 주에 한 번 주말에 모이는 것으로 하겠습니다.
우선 첫 모임을 8월 30일 오후 5 시로 잡겠습니다.
장소는 (아직 허락도 안받았지만) 링크나우 스터디룸입니다.
첫 모임의 대상은 신청하신 전원입니다.
저번 정모에 불참하신 분들은 이 날 오시는 것으로
참여 의지를 보여주신 것으로 생각하고
다시 우선권을 드립니다.
물론 그래도 8 분이 넘는다면.... 사다리라도 타야 할지..
시간과 장소는 참여자들의 협의나
저 또는 송팀장님 그리고 링크나우의 사정에 따라 변경될 있습니다.
메일과 게시로 공지하도록 하겠습니다.
그럼 회원 제웅께 만신의 축복이 있기를 기원하며 공지를 마치겠습니다.

[Flash 스터디] 2008-08-18
학습내용: 플래시, 액션스크립트, 포토샵, PHP
참여인원: 리더를 제외하고 최대 8명
학습장소: 역삼역 링크나우 회의실 (변경될 수 있음)
학습일정: 매월 2회 토요일 (시간 등 자세한 일정은 참가자들과 협의)
참가신청: 자기소개 및 참가 이유를 간략하게 이메일로 리더에게 송신
이번 8월 14일 정모에 참석하신 분들에게 우선권이 있으며 리더를 제외하고 최대 8명으로 스터디 맴버를 구성합니다. 되도록 포토샵 또는 일러스트와 같은 디자인툴을 다뤄본 경험이 있는 분들이 참여할 있습니다. 구체적인 질문은 리더에게 이메일로 보내주세요. 그리고 현재 추진중인 2개의 스터디 중 1개의 스터디에만 참여 가능합니다.

웹프로그래머의 홈페이지 정보 블로그 http://hompy.info

몇일전 학주니닷컴 블로그 운영자 이학준님을 만났습니다.

몇일전 학주니닷컴 블로그 운영자 이학준님을 만났습니다.
링크나우 신동호 대표이사님이 사무실에 학준님을 초청 하셔서 사무실에 방문하게 되었고 미처 방문 사실을 알지 못한 저는 살짝 당황을 했지만 같이 식사도 하고 블로고스피어에 대한 생각도 나누고 블로거 클럽의 발전 방향에 대해 이런 저런 이야기도 나누었습니다. 서로 일하는 사무실도 가깝고 하니 가끔 만나서 술한잔 기울이는 것도 좋겠습니다. 술자리에 관심 있는 분들은 댓글 남겨주세요.^^ 앞으로 블로거 클럽도 행사나 세미나가 진행이 될 것이고 링크나우의 지원과 후원을 받게 될 것으로 예상됩니다. 블로거 클럽의 발전에 일조해주실 분이 있으시면 운영진 신청 해보세요. 다만 자신이 운영하는 사업을 홍보 하기 위해 자신이 운영하는 커뮤니티를 홍보하기 위해 운영진 신청을 하는 것은 환영하지 않습니다. 운영진 활동을 열심히 하시면 그것이 자신과 자신이 추구하는 바를 자연스럽고 효과적으로 홍보하는 일이 되겠죠.
링크나우 블로거 클럽은 운영된지 오래되지 않았고 회원수도 500명 수준이지만 링크나우에서 관심가지고 지켜보고 있고 필요에 따라 적극적인 지원도 받게 될 예정에 있어 빠른 속도로 성장하게 될 것 같습니다. 링크나우가 추구하는 "프로페셔널을 위한 인맥 서비스"와 "블로거 클럽"의 만남은 전문직 종사자들과 커리어 퀼리티가 높은 인력들이 링크나우를 통해 인맥을 구축하고 블로그와 블로거클럽을 통해 소통하고 수준높은 포스팅을 할 수 있도록 시너지 효과를 내지 않을까 긍정적인 기대를 해봅니다.
링크나우는 최근 링크나우 운영진들과 링크나우 개별 카페 운영자들 그리고 카페 회원들의 활동과 노력으로 고속 성장을 하고 있고 현재 5만명의 회원을 바라보고 있습니다. 많은 회원들이 수준 높은 인맥 확장과 경력직/전문직 인력 시장이 활성화 되기 위해 링크나우의 성장이 필요하다고 느끼고 있고 끊임없는 발전을 희망하고 있고 몇몇 열혈 회원들은 링크나우에 소액 투자를 하고 있기도 합니다. 회원들의 이런 기대에 부흥하기 위해 개발팀 맴버를 늘려 나가고 있고 서비스의 품질을 개선하기 위해 여러가지 준비와 개발을 하고 있습니다. 9월 초에는 카페 운영에 꼭 필요한 새로운 서비스가 추가될 예정에 있기도 합니다.
요즘 링크나우에서 가장 잘나가는 카페는 서울대 열린 동창회, 강남포럼이며 회원수가 가장 많은 카페는 커리어 클럽이고 IT분야 인기 클럽은 인터넷마케팅클럽과 플래시카페입니다. 여성들만의 공간인 여성비즈니스클럽도 성장 가능성이 높으며 CEO 들이 모이는 인기 카페는 CEO클럽입니다. 이외에도 다양한 전문 포럼들이 있으니 관심 있는 분들은 관심 포럼에 노크해봐도 좋겠습니다. 그러나 블로거 여러분들은 당연히 블로거 클럽에 관심가져주셔야 겠습니다. ㅎㅎㅎ
개인적으로 모두에게 유익한 사이트와 커뮤니티로 성장하길 바라며 이를 위해 저도 집중하고 있습니다. 끝으로 블로거 여러분 함께 할까요? ^^