월척컵 토종붕어 챔피언십

· 기존의 ‘월척 신고합니다‘ 게시판은 이 게시판과 통합되어 운영됩니다,(18년 3월 23일 적용)
· 18년 4월 부터 정식버전으로 운영되며 매년 1등에서 3등까지 월척에서 제작한 소정의 기념품을 드립니다

· 아래의 사유로 공식기록으로 불인정된 투표수가 많을 땐 순위 산정에서 제외 됩니다.(불인정 투표수가 10개 이상이고, 추천보다 불인정 투표수가 많을 때)

*토종붕어라고 보기 어려운 경우
*크기를 정확히 확인하기 어려운 경우
*자연지가 아니거나, 붕어를 방류하는 낚시터에서 잡은 조과인 경우
*최근 일 주일 이내의 조과가 아닌 경우
*대리 등록

마릿수 조과의 경우 한 마리씩 따로 등록하셔야 각각의 순위에 반영됩니다
특파원이나 낚시점주께서도 참여하실 수 있습니다
특파원이나 낚시점에서 올린 조황의 사진이라도 본인의 조과라면 참여하실 수 있습니다
자연지의 조과만 인정하지만, 입어료를 지급하더라도 붕어를 방류하지 않는 낚시터의 조과라면 참여하실 수 있습니다

4짜

IP : cec83c682d94f4d 날짜 : 조회 : 6731 본문+댓글추천 : 0

땟장 밭에서 띄우질 못해 절절 매다 거의 물에 들어가 뜰채질 더 이상 말이 필요없씀 당황해서리

전장 일시 장소 미끼 채비
41.5 4.23 경남 합천 건태수로권 ㅎㅎ
추천 1 공식기록으로 불인정

1등! IP : ac1cff82547f375


덩어리 만나심을 진심으로 축하 드립니다.

요즘 무월조사 틈새를 비집는 꽝조사 부럽습니다
추천 0

IP : b5af5589ac013b5
축하드립니다.!! 근데 토종은아닌것 같고 떡붕어내요,

저번에 떡 5짜 잡은거 사진좀 찍어 놓을걸 ㅠ
추천 0

IP : 0f4f3ce9256350e
떡이라 좀아쉽지만 그래두 월척이네요..

축하합니다..

쉽게 만나는 대물은 아니니까요...

사짜''''
추천 0

IP : b827baddda05eda
<script language="javascript">
// 음악 경로 입니다.
// 추가는 ,로 구분하여 주시면 됩니다.
var sound=new Array("../모래시계.asf","../고독(여우와 솜사탕 OST).asf","../불꺼진창(휘파람).asf") // 음악 경로
var randomsoundenumber=Math.floor((sound.length)*Math.random())
document.write("")
document.write("") <br/>document.write("<bgsound-x SRC='"+sound[randomsoundenumber]+"' LOOP='1'>") <br/>document.write("<NOEMBED>") <br/>document.write("</EMBED>") <br/>//--> <br/>&lt;/&#115;&#99;ript&gt;</span> </div> <div class='sns_iconbox'><ul class='report-buttons'><li><a href='#singo' onclick='window.open("/bbs/bbs/report.php?bo_table=wol&wr_id=4724&type=comment","singo","scroll=no, width=680, height=550")' class='btn_singo singo_single btn btn-default btn-xs'>신고하기</a></li></ul></div> <span id='edit_4724' style='display:none;'></span><!-- 수정 --> <span id='reply_4724' style='display:none;'></span><!-- 답변 --> </td> </tr> <tr> <td colspan="2"> <!-- 댓글추천 --> <a href="/bbs/bbs/cmt_good.php?bo_table=wol&wr_id=4724&good=good" target='hiddenframe' class="btn btn-success btn-xs">추천 0</a> </td> </tr> </table> </article> <textarea id='save_comment_4724' style='display:none;'>&lt;script language=&#034;javascript&#034;&gt; // 음악 경로 입니다. // 추가는 ,로 구분하여 주시면 됩니다. var sound=new Array(&#034;../모래시계.asf&#034;,&#034;../고독(여우와 솜사탕 OST).asf&#034;,&#034;../불꺼진창(휘파람).asf&#034;) // 음악 경로 var randomsoundenumber=Math.floor((sound.length)*Math.random()) document.write(&#034;&lt;EMBED SRC='&#034;+sound[randomsoundenumber]+&#034;' AUTOSTART='TRUE' LOOP='FALSE' WIDTH='0' HEIGHT='0' ALIGN='CENTER'&gt;&#034;) document.write(&#034;&lt;NOEMBED&gt;&#034;) document.write(&#034;&lt;BGSOUND SRC='&#034;+sound[randomsoundenumber]+&#034;' LOOP='1'&gt;&#034;) document.write(&#034;&lt;NOEMBED&gt;&#034;) document.write(&#034;&lt;/EMBED&gt;&#034;) //--&gt; &lt;/script&gt;</textarea> </td> </tr> </table> <P> <a name="c_4725"></a> <table style="border: none; background-color: #efefef; width:100%"> <tr> <td style="background:url('https://img.wolchuck.co.kr/i_v4/ico_reply.png') top right scroll transparent no-repeat; "> </td> <td> <article class="comment" itemscope itemtype="https://schema.org/Comment"> <table class='table' style="margin-bottom:0;"> <tr> <td> <header class="comment-header"> <span itemprop="author" itemscope itemtype="http://schema.org/Person"><span itemprop="name"><link itemprop='url' href='https://www.wolchuck.co.kr/%EC%A1%B0%ED%99%A9%EC%A1%B0%ED%96%89%EA%B8%B0/%EC%9B%94%EC%B2%99%EC%BB%B5%ED%86%A0%EC%A2%85%EB%B6%95%EC%96%B4%EC%B1%94%ED%94%BC%EC%96%B8%EC%8B%AD/4%EC%A7%9C--9?page=218'/><a href="javascript:;" onClick="showSideView(this, 'k7142', '칠오', 'azcxNDJAcGFyYW4uY29t', '');" title="[k7142]칠오"><span class='member' itemprop='name'>칠오</span></a></span></span><span style='font-size:11px; color:#666'><time class='comment-time' itemprop='datePublished' datetime='2007-05-05T00:40:00+09:00'>07-05-05 00:40</time></span><span style='font-size:11px; color:#666' onclick='alert("IP는 암호화되어 출력됩니다. \n\n전체 IP : b827baddda05eda226427bcda27984c6b80d24ff \n\n\n ")'> IP : b827baddda05eda</span> </header> </td> <td> <div class="btn-group btn-xs pull-right"> </div> </td> </tr> <tr> <td colspan="2"> <!-- 코멘트 출력 --> <div class="ct lh comment-content" id="comment_article6" style="min-height: 100px;"> <span itemprop='text'>&lt;&#115;&#99;ript language="java&#115;&#99;ript"&gt; <br/>// 음악 경로 입니다. <br/>// 추가는 ,로 구분하여 주시면 됩니다. <br/>var sound=new Array("../모래시계.asf","../고독(여우와 솜사탕 OST).asf","../불꺼진창(휘파람).asf") // 음악 경로 <br/>var randomsoundenumber=Math.floor((sound.length)*Math.random()) <br/>document.write("<embed-x SRC='"+sound[randomsoundenumber]+"' AUTOSTART='TRUE' LOOP='FALSE' WIDTH='0' HEIGHT='0' ALIGN='CENTER'>") <br/>document.write("<NOEMBED>") <br/>document.write("<bgsound-x SRC='"+sound[randomsoundenumber]+"' LOOP='1'>") <br/>document.write("<NOEMBED>") <br/>document.write("</EMBED>") <br/>//--> <br/>&lt;/&#115;&#99;ript&gt;</span> </div> <div class='sns_iconbox'><ul class='report-buttons'><li><a href='#singo' onclick='window.open("/bbs/bbs/report.php?bo_table=wol&wr_id=4725&type=comment","singo","scroll=no, width=680, height=550")' class='btn_singo singo_single btn btn-default btn-xs'>신고하기</a></li></ul></div> <span id='edit_4725' style='display:none;'></span><!-- 수정 --> <span id='reply_4725' style='display:none;'></span><!-- 답변 --> </td> </tr> <tr> <td colspan="2"> <!-- 댓글추천 --> <a href="/bbs/bbs/cmt_good.php?bo_table=wol&wr_id=4725&good=good" target='hiddenframe' class="btn btn-success btn-xs">추천 0</a> </td> </tr> </table> </article> <textarea id='save_comment_4725' style='display:none;'>&lt;script language=&#034;javascript&#034;&gt; // 음악 경로 입니다. // 추가는 ,로 구분하여 주시면 됩니다. var sound=new Array(&#034;../모래시계.asf&#034;,&#034;../고독(여우와 솜사탕 OST).asf&#034;,&#034;../불꺼진창(휘파람).asf&#034;) // 음악 경로 var randomsoundenumber=Math.floor((sound.length)*Math.random()) document.write(&#034;&lt;EMBED SRC='&#034;+sound[randomsoundenumber]+&#034;' AUTOSTART='TRUE' LOOP='FALSE' WIDTH='0' HEIGHT='0' ALIGN='CENTER'&gt;&#034;) document.write(&#034;&lt;NOEMBED&gt;&#034;) document.write(&#034;&lt;BGSOUND SRC='&#034;+sound[randomsoundenumber]+&#034;' LOOP='1'&gt;&#034;) document.write(&#034;&lt;NOEMBED&gt;&#034;) document.write(&#034;&lt;/EMBED&gt;&#034;) //--&gt; &lt;/script&gt;</textarea> </td> </tr> </table> <P> <!-- 코멘트 리스트 --> <hr style='clear:both' /> </section><script language='javascript'> var g4_cf_filter = '18아,18놈,18새끼,18뇬,18노,18것,18넘,개년,개뇬,개새,개새끼,개색끼,개세끼,개세이,개쉐이,개쉑,개쉽,개자식,개좆,개뿔,게색기,게색끼,광뇬,꼴깝,뇬,눈깔,뉘미럴,니귀미,니기미,니미,도촬,되질래,뒈져라,뒈진다,디져라,디진다,디질래,병쉰,병신,뻐큐,뻑큐,뽁큐,삐리넷,새꺄,쉬발,쉬밸,쉬팔,쉽알,스패킹,스팽,시부랄,시부럴,시부리,스벌,시브랄,시팍,시팔,시펄,실밸,십8,십쌔,십창,싶알,쌉년,썅놈,쉐이,쌔끼,쌩쑈,썅,써벌,썩을년,쎄꺄,쎄엑,쓰바,쓰발,쓰벌,쓰불,쓰블,쓰벌놈,쓰발롬,쓰발럼,씨8,씨댕,씨바,씨발,씨뱅,씨봉알,씨부랄,씨부럴,씨부렁,씨부리,씨불,씨브랄,씨빠,씨빨,씨뽀랄,씨팍,씨팔,씨펄,이새끼,이ㅅㅙㄱ,이섹끼,이세끼,엄창,접년,잡놈,재랄,저주글,조까,조빠,조쟁이,조지냐,조질래,존나,존니,좀물,좁년,쥐랄,쥐롤,쥬디,지랄,지럴,지롤,지미랄,쫍빱,퍽큐,뻑큐,빠큐,ㅅㅂㄹㅁ,돌돌이,마음은못에,aaa.to,가입무료,cam88,opgame,최고의카지노,bacakorea,바카라,ah.to,kimoclub,kimo,딸따리,bakarawang,화상채팅,narating,jojoting,ㅂrㅋrㄹr,최소배팅,최소 배팅,생방송으로 진행되기 때문, 배팅으로,고액출금자,qaz08,aquapartner,QAZ08,Qaz08,qaZ08,qAZ08,QaZ08,qaZ08,qAz08,cc.to,kbs02,yenmi,베팅,태양성,bacara777@hotmail.com,enjoy,2jop,키스알바,ivyro.net,daganda,sxx99.com,낚시할인백화점,대전낚시,*백화점,낚시*,할인 백화점,대전 낚시,할인백화점,9477-9850,9477ㅡ9850,9477 9850,fishrod,nizzi,ohmy,doumi4989,tot58,ToT58.Ah.To ,wkfqk,whdkdy,zzimgirl,casino,yahan,filebus,iris,hothot,jj79,qdown,baka,KING79,카지노,juetex,playroyal,knave,hione,체험머니,gameco,fishinglord,,피싱로드,hothappy,platoon,koko8000,붕어생각,wooluck,낚시백화점,koreahot.co.nr, 강원랜드,ycp864,matemania,tendoctor,campingsquad,naksi24,daenga,netsko,booupin,개쌍도,절라디언,뒤퉁수,멍청도,슨상님,고담대구,뉴올리언스수원,http://ow.ly,http://me2.do,http://bit.do,bit.ly,2u.lc,durl.kr,https://tr.im,http://v.ly,https://blv.me/,http://adfoc.us/,http://adf.ly/,https://shorte.st/,http://linkshrink.net/,https://adyou.me/,http://shink.in/,http://bc.vc,http://yep.it,↑클릭(터치),돌싱남녀,이혼남녀,건전하게 대화할수 있는,대화내용을 전혀 기록,inning,오션파라다이스,ssulportal,elimcamp,오­션­파­라­다­이­스,ddp900,김남혁,무료픽,픽스터,스포츠 재테크,tjdnf0191,rrd.me,boking11,partner4ypu,can0.com,mycarbohum,611434,CYCwV5cm,appfing,reurl.kr,oevery,s.click.aliexpress.com,비아그라,시알리스, 무직자대출,소액대출,주부대출,무직장대출'; </script> <script language='javascript' src='/bbs/js/filter.js'></script> <script language='javascript' src='../js/md5.js'></script> </div> <!--// 댓글 --> <div id="btnView" class='button_view_header btn-toolbar' role="toolbar"> <a href="/조황조행기/월척컵토종붕어챔피언십?page=218" class='btn btn-default'>목록</a> <div class="btn-group" role="group"> </div> <div class="btn-group" role="group" style="float:right"> <a href="/조황조행기/월척컵토종붕어챔피언십/2007-2호?page=218" title="2007-2호" class='btn btn-default'>이전글</a><a href="/조황조행기/월척컵토종붕어챔피언십/연타석?page=218" title="연타석~?" class='btn btn-default'>다음글</a> </div> </div> <script> $(function() { function file_download(link, file) { document.location.href = link; } }); </script> <!-- 게시글 보기 끝 --> </article> </div><hr style='clear:both' /><!--Board Tail Include--><!-- PC board_include_tail --><!--Tail Include--><div style='margin:25px 0; padding:10px 0; position:relative; clear:both;'> <!-- ADSENSE --> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-1010898928364669" crossorigin="anonymous"></script> <!-- [PC]하단큰배너-하위 모든 페이지 --> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-1010898928364669" data-ad-slot="8339074150" data-ad-format="auto" data-full-width-responsive="true"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div></div> <!--//.main-contents--> </div> <!--//.main-contents-container --> <!-- 풋터 부분 시작 --> <div id="tail" class="tail"> <ul class='bmenu' style="margin-left: 30px"> <li><a href="javascript:;" onClick="window.open('/bbs/tail_menu01.php', '', 'width=616,height=400,scrollbars=yes');">이용약관</a></li> <li><a href="javascript:;" onClick="window.open('/bbs/tail_menu02.php', '', 'width=616,height=400,scrollbars=yes');" style="font-weight: bold;">개인정보처리방침</a></li> <li><a href="javascript:;" onClick="window.open('/bbs/tail_menu03.php', '', 'width=616,height=150,scrollbars=yes');">이메일주소무단수집거부</a> </li> <li><a href="/bbs/bbs/board.php?bo_table=pay">이용안내</a></li> <li><a href="javascript:;" onclick='window.open("/banner.htm", "", "status=yes,scrollbars=yes,width=1024,height=768,left=100,top=100");'>광고안내</a> </li> <li><a href="/bbs/bbs/board.php?bo_table=cscenter">제휴문의</a></li> <li><a href="/bbs/bbs/board.php?bo_table=pay&wr_id=111">공구/공제규정</a></li> <li><a href="javascript:;" onClick="window.open('/bbs/tail_menu05.php', '', 'width=616,height=400,scrollbars=yes');">특파원등록안내</a> </li> <li><a href="/bbs/bbs/write.php?bo_table=addpayspot">유료터등록안내</a></li> <li><a href="https://m.wolchuck.co.kr/bbs/bbs/board.php?bo_table=wol&wr_id=4706&from=pc" style="color: #0099ff">월척모바일</a></li> </ul> <ul class='copyright clear' style="text-align: center; display: block; padding: 1em;"> <li> &COPY; 1998 ~ 2025 Wolchuck all right reserved. <a href="#g4_head">▲TOP</a> </li> </ul> </div> <!-- 풋터 부분 끝--> <!-- 컨테이너 끝 --> <script type="text/javascript"> $(function() { //게시판 공지 $('.bbs_notice, #title_border').addClass('alert alert-info'); //메뉴 스크롤시 고정 $(window).scroll(function() { var height = $(document).scrollTop(); if (parseInt(height) >= 180) { $('.fixed_smenu').css({ "position": "fixed", "display": "block" }).addClass('bottom-shadow'); } else { $('.fixed_smenu').css({ "display": "none" }).removeClass('bottom-shadow'); } }); }); </script> <script src="/js/intersection-observer.js"></script><script src="/js/lazyload.min.js"></script><script> //이미지 지연로딩 lazyloading / ie8 이하 지원 안된다. var lazyLoadInstance = new LazyLoad({ elements_selector: ".lazy" //load_delay: 0 }); </script> <script src="/bbs/js/wrest.js"></script> <!-- 새창 대신 사용하는 iframe --> <iframe width=0 height=0 name='hiddenframe' style='display:none;'></iframe> <script type="text/javascript" src="/bbs/js/v4.js?ver=1002"></script> <script type="text/javascript" src="/bbs/js/scrolltopcontrol.js"></script> <script src="/js/jquery.newsTicker.js"></script> <!-- Global site tag (gtag.js) - Google Analytics --> <script async src="https://www.googletagmanager.com/gtag/js?id=UA-565500-2"></script> <script> window.dataLayer = window.dataLayer || []; function gtag() { dataLayer.push(arguments); } gtag('js', new Date()); gtag('config', 'UA-565500-2'); </script> <script> /* //구버전 브라우저 경고하기 var $buoop = { required: { e: 10, f: -1, o: -3, s: -1, c: -3 }, insecure: true, unsupported: true, api: 2019.05 }; function $buo_f() { var e = document.createElement("script"); e.src = "//browser-update.org/update.min.js"; document.body.appendChild(e); }; try { document.addEventListener("DOMContentLoaded", $buo_f, false) } catch (e) { window.attachEvent("onload", $buo_f) } */ </script> <!--네이버로그분석--> <script type="text/javascript" src="//wcs.naver.net/wcslog.js" async></script> <script type="text/javascript"> if (!wcs_add) var wcs_add = {}; wcs_add["wa"] = "25680010ba1f"; // 스크립트 로드 완료 후 실행 window.addEventListener('load', function() { if (window.wcs) { wcs_do(); } }); </script> <!-- JSON LD 본문 --> <script type="application/ld+json">{ "@context": "https:\/\/schema.org", "@type": "Article", "headline": "4짜", "author": { "@type": "Person", "name": "찍사" }, "datePublished": "2007-04-26T13:53:23+09:00", "dateModified": "2007-04-26T13:53:23+09:00", "mainEntityOfPage": { "@type": "WebPage", "@id": "https:\/\/www.wolchuck.co.kr\/조황조행기\/월척컵토종붕어챔피언십\/4짜--9" }, "articleBody": "땟장 밭에서 띄우질 못해 절절 매다 거의 물에 들어가 뜰채질 더 이상 말이 필요없씀 당황해서리" }</script><!-- //JSON LD 본문 --> <!-- JSON LD LIST --> <script type="application/ld+json">{ "@context": "https:\/\/schema.org", "@type": "ItemList", "itemListElement": [ { "@type": "ListItem", "position": 1, "item": { "@type": "Article", "headline": "", "author": { "@type": "Person", "name": "상무술" }, "datePublished": "2007-04-26T17:34:37+09:00", "url": "https:\/\/www.wolchuck.co.kr", "mainEntityOfPage": "https:\/\/www.wolchuck.co.kr", "description": "\r\n\r\n덩어리 만나심을 진심으로 축하 드립니다.\r\n\r\n요즘 무월조사 틈새를 비집는 꽝조사 부럽습니다...", "interactionStatistic": [ { "@type": "InteractionCounter", "interactionType": "https:\/\/schema.org\/ViewAction", "userInteractionCount": 0 }, { "@type": "InteractionCounter", "interactionType": "https:\/\/schema.org\/LikeAction", "userInteractionCount": 0 } ], "image": "https:\/\/www.wolchuck.co.kr\/bbs\/data\/file\/johwang\/autoup_johwang09471491.gif" } }, { "@type": "ListItem", "position": 2, "item": { "@type": "Article", "headline": "", "author": { "@type": "Person", "name": "붕어와춤을" }, "datePublished": "2007-04-27T09:45:28+09:00", "url": "https:\/\/www.wolchuck.co.kr", "mainEntityOfPage": "https:\/\/www.wolchuck.co.kr", "description": "저두 더이상 말이 필요 없네요 부러워서...", "interactionStatistic": [ { "@type": "InteractionCounter", "interactionType": "https:\/\/schema.org\/ViewAction", "userInteractionCount": 0 }, { "@type": "InteractionCounter", "interactionType": "https:\/\/schema.org\/LikeAction", "userInteractionCount": 0 } ] } }, { "@type": "ListItem", "position": 3, "item": { "@type": "Article", "headline": "", "author": { "@type": "Person", "name": "얼음고기" }, "datePublished": "2007-04-27T14:30:35+09:00", "url": "https:\/\/www.wolchuck.co.kr", "mainEntityOfPage": "https:\/\/www.wolchuck.co.kr", "description": "덩어리 상면하신것 축하드림니다~~...", "interactionStatistic": [ { "@type": "InteractionCounter", "interactionType": "https:\/\/schema.org\/ViewAction", "userInteractionCount": 0 }, { "@type": "InteractionCounter", "interactionType": "https:\/\/schema.org\/LikeAction", "userInteractionCount": 0 } ] } }, { "@type": "ListItem", "position": 4, "item": { "@type": "Article", "headline": "", "author": { "@type": "Person", "name": "착한붕어" }, "datePublished": "2007-04-27T14:38:23+09:00", "url": "https:\/\/www.wolchuck.co.kr", "mainEntityOfPage": "https:\/\/www.wolchuck.co.kr", "description": "축하드립니다.!! 근데 토종은아닌것 같고 떡붕어내요, \r\n\r\n저번에 떡 5짜 잡은거 사진좀 찍어 놓을걸 ㅠ...", "interactionStatistic": [ { "@type": "InteractionCounter", "interactionType": "https:\/\/schema.org\/ViewAction", "userInteractionCount": 0 }, { "@type": "InteractionCounter", "interactionType": "https:\/\/schema.org\/LikeAction", "userInteractionCount": 0 } ] } }, { "@type": "ListItem", "position": 5, "item": { "@type": "Article", "headline": "", "author": { "@type": "Person", "name": "어군탐지기" }, "datePublished": "2007-04-30T23:29:06+09:00", "url": "https:\/\/www.wolchuck.co.kr", "mainEntityOfPage": "https:\/\/www.wolchuck.co.kr", "description": "떡이라 좀아쉽지만 그래두 월척이네요..\r\n\r\n축하합니다..\r\n\r\n쉽게 만나는 대물은 아니니까요...\r\n\r\n사짜''''...", "interactionStatistic": [ { "@type": "InteractionCounter", "interactionType": "https:\/\/schema.org\/ViewAction", "userInteractionCount": 0 }, { "@type": "InteractionCounter", "interactionType": "https:\/\/schema.org\/LikeAction", "userInteractionCount": 0 } ] } }, { "@type": "ListItem", "position": 6, "item": { "@type": "Article", "headline": "", "author": { "@type": "Person", "name": "칠오" }, "datePublished": "2007-05-05T00:39:25+09:00", "url": "https:\/\/www.wolchuck.co.kr", "mainEntityOfPage": "https:\/\/www.wolchuck.co.kr", "description": " \r\n\/\/ 음악 경로 입니다.\r\n\/\/ 추가는 ,로 구분하여 주시면 됩니다.\r\nvar sound=new Array(\"..\/모래시계.asf\",\"..\/고독(여우와 솜사탕 OST).asf\",\"..\/불꺼진창(휘파람).asf\") \/\/ 음악 경로\r\nvar randomsoundenu...", "interactionStatistic": [ { "@type": "InteractionCounter", "interactionType": "https:\/\/schema.org\/ViewAction", "userInteractionCount": 0 }, { "@type": "InteractionCounter", "interactionType": "https:\/\/schema.org\/LikeAction", "userInteractionCount": 0 } ] } }, { "@type": "ListItem", "position": 7, "item": { "@type": "Article", "headline": "", "author": { "@type": "Person", "name": "칠오" }, "datePublished": "2007-05-05T00:40:04+09:00", "url": "https:\/\/www.wolchuck.co.kr", "mainEntityOfPage": "https:\/\/www.wolchuck.co.kr", "description": " \r\n\/\/ 음악 경로 입니다.\r\n\/\/ 추가는 ,로 구분하여 주시면 됩니다.\r\nvar sound=new Array(\"..\/모래시계.asf\",\"..\/고독(여우와 솜사탕 OST).asf\",\"..\/불꺼진창(휘파람).asf\") \/\/ 음악 경로\r\nvar randomsoundenu...", "interactionStatistic": [ { "@type": "InteractionCounter", "interactionType": "https:\/\/schema.org\/ViewAction", "userInteractionCount": 0 }, { "@type": "InteractionCounter", "interactionType": "https:\/\/schema.org\/LikeAction", "userInteractionCount": 0 } ] } } ] }</script><!-- //JSON LD LIST --> <!-- 2) 모든 adsbygoogle 슬롯을 자동 지연 초기화 --> <script> (function() { // 설정 var MARGIN = '400px 0px'; // 진입 400px 전에 미리 로드 [web:538] var THRESH = 0.01; // 1%만 보여도 초기화 var CLASS = 'adsbygoogle'; // 대상 클래스 // 슬롯 초기화 function initSlot(el) { if (el.dataset.inited === '1') return; try { (adsbygoogle = window.adsbygoogle || []).push({}); el.dataset.inited = '1'; } catch (e) { setTimeout(function() { initSlot(el); }, 600); } // 라이브러리 미완료 시 재시도 } // 즉시 보여야 하는 슬롯(above the fold)은 즉시 초기화 function isInView(el) { var r = el.getBoundingClientRect(); return r.top < window.innerHeight && r.bottom > 0; } function boot() { var slots = document.querySelectorAll('ins.' + CLASS); if (!slots.length) return; // 기존 광고 코드의 push({})는 전부 제거해두어야 함(중복 초기화 방지) if (!('IntersectionObserver' in window)) { // 구형 브라우저: 즉시 초기화 Array.prototype.forEach.call(slots, initSlot); return; } var io = new IntersectionObserver(function(entries, obs) { entries.forEach(function(entry) { if (entry.isIntersecting || entry.intersectionRatio > 0) { initSlot(entry.target); obs.unobserve(entry.target); } }); }, { root: null, rootMargin: MARGIN, threshold: THRESH }); Array.prototype.forEach.call(slots, function(el) { // 폴드 안이면 즉시, 아니면 관찰 if (isInView(el)) initSlot(el); else io.observe(el); }); } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', boot); } else { boot(); } })(); </script> <!-- Centrifuge 클라이언트 라이브러리를 로드합니다. --> <script src="https://unpkg.com/centrifuge@5/dist/centrifuge.js"></script> <script> // 즉시 실행 함수 표현식(IIFE)을 사용하여 전역 스코프의 오염을 방지합니다. (function() { // 디버그 메시지 출력 여부를 제어하는 상수입니다. const DEBUG_MODE = false; /** * 디버그 모드가 활성화된 경우 콘솔에 로그를 출력하는 함수입니다. * @param {string} message - 로그 메시지 * @param {any} [data] - 함께 출력할 데이터 (옵션) */ function log(message, data) { if (DEBUG_MODE) { console.log(message, data || ''); } } // 이미 CentrifugoOnline 객체가 초기화되었다면, 중복 실행을 방지하고 함수를 종료합니다. if (window.CentrifugoOnline) { if (DEBUG_MODE) console.warn('⚠️ CentrifugoOnline 이미 초기화됨'); return; } // Centrifuge 클라이언트 및 채널 구독 객체를 저장할 변수를 선언합니다. let centrifuge = null; let onlineChannel = null; let notificationChannel = null; // PHP에서 생성된 토큰과 사용자 정보를 JavaScript 변수로 가져옵니다. const token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJndWVzdF8xODY2YWJkNTJhYjIyYTIzNWRhMjZlOTM5NjhiOWNhMSIsImV4cCI6MTc2MjMyMTgyNSwiaW5mbyI6eyJ1c2VyX2lkIjoiZ3Vlc3RfMTg2NmFiZDUyYWIyMmEyMzVkYTI2ZTkzOTY4YjljYTEiLCJsZXZlbCI6MSwiaXNfbWVtYmVyIjpmYWxzZSwic3RhdHVzIjoiYWN0aXZlIn19.L9IMqT-TOwQSaDmWQ-dkATK1rRu-STFlaj0HjkoNIh8'; const userInfo = {"user_id":"guest_1866abd52ab22a235da26e93968b9ca1","level":1,"is_member":false,"status":"active"}; const isMember = false; log('🚀 CentrifugoOnline 초기화', userInfo); // 회원이면서 알림 토스트 컨테이너가 아직 없다면, 동적으로 생성하여 body에 추가합니다. if (isMember && !document.getElementById('notification-toast-container')) { var c = document.createElement('div'); c.id = 'notification-toast-container'; c.className = 'toast toast-start toast-bottom z-50'; document.body.appendChild(c); } /** * Centrifuge 클라이언트를 초기화하고 서버에 연결합니다. */ function initCentrifugo() { log('🔌 Centrifugo 연결 시도'); // Centrifuge 객체를 생성합니다. WebSocket 주소는 서버 환경에 따라 동적으로 설정됩니다. centrifuge = new Centrifuge('wss://www.wolchuck.co.kr:8443/connection/websocket', { token: token // 연결에 필요한 인증 토큰을 전달합니다. }); // 연결 상태에 따른 이벤트 리스너를 등록합니다. centrifuge.on('connecting', function(ctx) { log('🔄 연결 시도 중', ctx); }); centrifuge.on('connected', function(ctx) { log('✅ 연결 성공', ctx); }); centrifuge.on('disconnected', function(ctx) { log('❌ 연결 끊김', ctx); }); centrifuge.on('error', function(ctx) { console.error('⚠️ Centrifugo 연결 에러:', ctx); }); // 'online:users' 채널을 구독하여 온라인 접속자 정보를 받습니다. onlineChannel = centrifuge.newSubscription('online:users'); onlineChannel.on('subscribed', async function(ctx) { log('📡 온라인 채널 구독 성공', ctx); // 구독 성공 시, 현재 접속자 목록을 가져옵니다. await loadPresence(); }); onlineChannel.on('error', function(ctx) { console.error('⚠️ 온라인 채널 에러:', ctx); }); onlineChannel.subscribe(); // 회원인 경우, 개인 알림 채널을 구독합니다. if (isMember && userInfo.user_id) { var myUserId = userInfo.user_id; // 채널 이름은 'notifications:[사용자ID]' 형식입니다. notificationChannel = centrifuge.newSubscription('notifications:' + myUserId); notificationChannel.on('subscribed', function(ctx) { log('📬 알람 채널 구독 성공', ctx); console.log('✅ 개인 알람 시스템 활성화: notifications:' + myUserId); }); // 'publication' 이벤트는 채널에 새로운 메시지가 발행되었을 때 발생합니다. notificationChannel.on('publication', function(ctx) { log('📩 알람 수신', ctx.data); // 수신된 데이터로 토스트 알림을 화면에 표시합니다. showNotificationToast(ctx.data); }); notificationChannel.on('error', function(ctx) { console.error('⚠️ 알람 채널 에러:', ctx); }); notificationChannel.subscribe(); } // Centrifugo 서버에 연결을 시작합니다. centrifuge.connect(); } /** * 'online:users' 채널의 현재 접속자(presence) 정보를 비동기적으로 가져옵니다. */ async function loadPresence() { try { const presence = await onlineChannel.presence(); log('📊 Presence 데이터', presence); // 가져온 접속자 정보로 온라인 사용자 목록을 업데이트합니다. updateOnlineUsers(presence.clients); } catch (err) { console.error('❌ Presence 조회 실패:', err); } } /** * 접속자 정보를 가공하여 UI를 업데이트하기 위한 이벤트를 발생시킵니다. * @param {object} presence - Centrifugo의 presence.clients 객체 */ function updateOnlineUsers(presence) { // 서버에서 받은 클라이언트 정보를 {userId, info, isMember} 형태의 객체로 변환합니다. const users = Object.values(presence).map(client => { const info = client.conn_info || {}; return { userId: client.user, info: info, isMember: info.is_member || false }; }); // 동일한 사용자가 여러 기기/탭에서 접속한 경우, 사용자 ID 기준으로 중복을 제거합니다. const uniqueUsers = {}; users.forEach(user => { uniqueUsers[user.userId] = user; }); const userList = Object.values(uniqueUsers); // 회원 사용자를 목록 상단에 오도록 정렬합니다. userList.sort((a, b) => { if (a.isMember !== b.isMember) { return b.isMember ? 1 : -1; } return 0; }); // 최종 접속자 통계 객체를 생성합니다. const stats = { total: userList.length, users: userList }; log('📈 접속자 통계', stats); // 'onlineUsersUpdated' 커스텀 이벤트를 발생시켜 다른 스크립트에서 접속자 정보를 사용할 수 있게 합니다. window.dispatchEvent(new CustomEvent('onlineUsersUpdated', { detail: stats })); } /** * 쪽지 팝업을 여는 함수 * @param {string} url - 팝업으로 열 URL */ function openMemoPopup(url) { window.open(url, 'win_memo', 'left=100,top=100,width=620,height=500,scrollbars=1'); } /** * 수신된 데이터를 바탕으로 화면에 토스트 알림을 표시합니다. * @param {object} data - 서버에서 보낸 알림 데이터 */ function showNotificationToast(data) { var container = document.getElementById('notification-toast-container'); if (!container) { console.warn('Toast 컨테이너 없음'); return; } // 토스트 UI를 동적으로 생성합니다. var toast = document.createElement('div'); toast.className = 'card w-64 bg-base-100 shadow-xl mb-2'; // card, shadow-xl 적용 // XSS 공격을 방지하기 위해 수신된 텍스트를 HTML 이스케이프 처리합니다. var title = escapeHtml(data && data.post_title ? String(data.post_title) : ''); var author = escapeHtml(data && data.author ? String(data.author) : ''); var board = escapeHtml(data && data.board_name ? String(data.board_name) : ''); // URL 처리: 일반 URL은 이스케이프, javascript:는 별도 처리 var url = '#'; var isPopup = false; var popupUrl = ''; if (data && data.action_type === 'popup' && data.popup_url) { isPopup = true; popupUrl = escapeHtml(String(data.popup_url)); } else if (data && data.url) { url = escapeHtml(String(data.url)); } // 알림 종류(type)에 따라 아이콘, 메시지, 버튼 색상 등을 다르게 설정합니다. var icon = '📝'; var message = '알림'; var extraContent = ''; var btnText = '확인하기'; var btnClass = 'btn-primary'; switch (data.type) { case 'new_post': icon = '📝'; message = '새 게시물'; btnText = '게시물 보기'; btnClass = 'btn-primary'; break; case 'new_comment': icon = '💬'; message = '새 댓글'; extraContent = '<p class="text-xs text-gray-500 mt-1 line-clamp-2">' + escapeHtml(data.comment_content || '') + '</p>'; btnText = '댓글 보기'; btnClass = 'btn-secondary'; break; case 'new_reply': icon = '↩️'; message = '새 답글'; extraContent = '<p class="text-xs text-gray-500 mt-1 line-clamp-2">' + escapeHtml(data.reply_preview || '') + '</p>'; btnText = '답글 보기'; btnClass = 'btn-accent'; break; case 'post_liked': icon = '👍'; message = '게시물 추천'; extraContent = '<p class="text-xs text-gray-500 mt-1 truncate">' + author + '님이 추천했습니다</p>'; btnText = '게시물 보기'; btnClass = 'btn-success'; break; case 'new_message': icon = '✉️'; message = '새 쪽지'; title = data.message_title || '제목 없음'; extraContent = '<p class="text-xs text-gray-500 mt-1 line-clamp-2">' + escapeHtml(data.message_preview || '') + '</p>'; btnText = '쪽지 보기'; btnClass = 'btn-info'; board = ''; break; default: icon = '🔔'; message = '알림'; btnClass = 'btn-neutral'; } // 고유 ID 생성 (버튼 이벤트 바인딩용) var toastId = 'toast-' + Date.now() + '-' + Math.random().toString(36).substr(2, 9); var btnId = 'btn-' + toastId; // card-body 구조로 변경 toast.innerHTML = '<div class="card-body p-3">' + '<div class="flex items-start justify-between gap-2">' + '<div class="flex items-center gap-2 min-w-0 flex-1">' + '<span class="text-lg flex-shrink-0">' + icon + '</span>' + '<span class="text-sm font-bold text-base-content truncate">' + message + '</span>' + '</div>' + '<button type="button" class="btn btn-xs btn-ghost flex-shrink-0" aria-label="닫기" onclick="this.closest(\'.card\').remove()">✕</button>' + '</div>' + '<div class="mt-2 space-y-1">' + '<h2 class="card-title text-sm line-clamp-2">' + title + '</h2>' + extraContent + '<div class="text-xs text-base-content/70 truncate">' + author + ' · 방금 전</div>' + (board ? '<div class="text-xs text-base-content/50 truncate">' + board + '</div>' : '') + '</div>' + '<div class="card-actions justify-end mt-2">' + (isPopup ? '<button type="button" id="' + btnId + '" class="btn ' + btnClass + ' btn-sm w-full">' + btnText + '</button>' : '<a class="btn ' + btnClass + ' btn-sm w-full" href="' + url + '">' + btnText + '</a>' ) + '</div>' + '</div>'; // 생성된 토스트를 컨테이너에 추가합니다. container.appendChild(toast); // 팝업 버튼인 경우 클릭 이벤트 바인딩 if (isPopup) { var btn = document.getElementById(btnId); if (btn) { btn.addEventListener('click', function() { openMemoPopup(popupUrl); toast.remove(); }); } } // 일정 시간(10분)이 지나면 토스트를 자동으로 제거합니다. setTimeout(function() { if (toast && toast.parentNode) { toast.parentNode.removeChild(toast); } }, 300000); // 5분 (300초) } /** * XSS 방지를 위해 문자열을 HTML 이스케이프 처리하는 유틸리티 함수입니다. * @param {string} text - 이스케이프할 문자열 * @returns {string} 이스케이프된 HTML 문자열 */ function escapeHtml(text) { var div = document.createElement('div'); div.textContent = text == null ? '' : String(text); return div.innerHTML; } // 사용자가 페이지를 떠나기 전에 Centrifuge 연결을 안전하게 종료합니다. window.addEventListener('beforeunload', function() { if (centrifuge) { centrifuge.disconnect(); } }); // 다른 스크립트에서 Centrifugo 관련 기능에 접근할 수 있도록 전역 API를 노출합니다. window.CentrifugoOnline = { // 접속자 목록을 수동으로 다시 로드합니다. reload: async function() { log('🔄 수동 새로고침'); if (onlineChannel) { await loadPresence(); } else { console.error('⚠️ 채널이 초기화되지 않음'); } }, // 현재 연결 상태를 반환합니다. isConnected: function() { return centrifuge && centrifuge.state === 'connected'; }, // Centrifuge 클라이언트 인스턴스를 반환합니다. getCentrifuge: function() { return centrifuge; }, // 온라인 채널 구독 객체를 반환합니다. getOnlineChannel: function() { return onlineChannel; }, // 알림 채널 구독 객체를 반환합니다. getNotificationChannel: function() { return notificationChannel; }, // 디버그 모드를 활성화/비활성화합니다. setDebugMode: function(enabled) { DEBUG_MODE = enabled; } }; log('✅ CentrifugoOnline 초기화 완료'); // Centrifugo 초기화 및 연결 함수를 호출합니다. initCentrifugo(); })(); </script> </body> </html> <!-- 사용스킨 NAME : v6_basic -->