C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
분야별 포럼
C++빌더
델파이
파이어몽키
C/C++
프리파스칼
파이어버드
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

자유게시판
세상 살아가는 이야기들을 나누는 사랑방입니다.
[7264] 캐쉬기능을 쓰는 보드를 소개할까 합니다.
궁그미 [zimzion] 944 읽음    2003-05-25 16:25
http://fwd.nogary.xwow.net/board/Default.aspx

안녕하세요.
제가 만든 좀 특이한(?) 보드를 소개합니다. 위 주소로 접속해 보시면 일반적인 보드가 보입니다. 맨 위에 캐쉬된 시각이 나옵니다. 맨 처음 전체 레코드가 캐쉬된 시각입니다. 그리고 그 밑에 마지막으로 업데이트된 시각은 가장 마지막에 업데이트된 시각입니다.

저의 캐쉬 방식은 디비의 변경사항에 대해 그 내용만 업데이트합니다. 즉, 맨처음에 전체 데이터를 캐쉬하고 그 뒤로는 변경된 내용만 캐쉬만 업데이트합니다. 현재 캐쉬는 보드의 리스트 내용만 캐쉬를 하고 있습니다. 각 글의 내용과 답글은 실제 디비에서 가져옵니다. 이러한 방식은 캐쉬기능을 활용하면서도 캐쉬의 업데이트를 효율적으로 할 수 있습니다.

지연입력이라는 것은 여러개의 레코드를 한꺼번에 입력할 수 있습니다. 지연 입력을 하면 "입력"과 "완료"라는 것이 있습니다. 입력은 임시적으로 입력할 레코드를 저장합니다. 입력할 레코드가  모두 입력되면 완료 버튼을 누르면 한꺼번에 입력이 됩니다.

레코드를 클릭하면 답변을 달 수 있습니다. "트랜잭션" 이라는 버튼은 3개의 답글을 한꺼번에 달 수 있는 기능입니다. 그 처리를 트랜잭션으로 합니다.

두번째 중요한 기능은 메모리의 내용을 파일로 저장하는 기능입니다. 이렇게 계속 캐쉬를 해 가면 메모리 사용량이 계속 늘어날 것 입니다. 그래서 메모리의 내용을 파일로 저장해 놓는 기능이 있습니다. (메모리에 계속 저장할 수도 있고 혹은 파일에 저장할 수도 있습니다.) 현재 메모리에 캐쉬가 없으면 파일에서 레코드를 읽어서 뿌려줍니다. 그리고 캐쉬에 액세스가 1분이상 없을 경우 그리고 캐쉬의 내용이 수정되었을 경우 캐쉬의 내용을 자동으로 파일에 저장합니다. 변경 사항이 없는 경우는 그냥 캐쉬의 내용을 지웁니다. 즉, 액세스가 없을 때는 메모리를 해제함으로써 메모리 사용량을 줄이게 됩니다.

세번째 중요한 기능은 분산환경에 적용된다는 것입니다. 현재 게시판은 총 3대의 서버가 돌아가고 있습니다. 디비서버, 애플리케이션 서버(COM+), 웹서버입니다. 애플리케이션 서버와 웹서버의 통신은 .NET Remoting으로 수행됩니다. 웹서버의 config정보를 간단히 수정(리모팅을 쓸 것인지 여부)함으로써 웹서버와 애플리케이션 서버를 합칠 수도 있고 혹은 분리시킬 수도 있습니다. 전혀 코드의 수정이 필요없습니다. 또 한 분산 시켰을 경우 웹서버를 여러대를 붙여서 클러스터를 구성할 수도 있습니다. 캐쉬 기능은 그대로 쓰면서 말이죠.

한번 캐쉬를 시작하면 캐쉬된 내용에 대해서는 서버가 다운되지 않는한 절대 디비로 부터 읽지 않습니다. 저는 이것을 관리자모드용 보드에 적용하기 위해서 만들었습니다. 이렇게 레코드를 모두 캐쉬해 놓은 경우 검색이나 정렬등을 디비에 부하를 주지 않고 자유롭게 할 수 있는 장점이 있습니다.

글도 써보시고 자유로운 의견도 부탁합니다.
감사합니다.

P.S. 개발언어는 ASP.NET(C#)입니다. 웹서버는 XP입니다. 동시접속자 수가 5명입니다. 그리고 위에서 설명한 기능은 프레임워크로 제작되어 있습니다. 그래서 간단히 재활용이 가능합니다. 프레임워크는 좀 더 다듬어서 공개할 예정입니다.

이우룡.요로리 [yololy]   2003-05-25 16:52 X
음.. 지금은 4학년 졸업반이라 셤공부하고 있지만.. 전에 회사 다닐때 자바로 비슷한 게시판을 만든적이 있습니다.
이우룡.요로리 [yololy]   2003-05-25 16:54 X
3tier(자바 RMI 이용) 환경으로 구성하였고 메모리에 DB 내용을 캐쉬했었습니다. 캐쉬하는 양이나 캐쉬여부도 정할 수 있었구요..
이우룡.요로리 [yololy]   2003-05-25 16:55 X
무엇보다 장점은 규모가 있는 포털 사이트를 만들 경우 미들웨어(?) 흉내를 낼 수 있다는 것이었습니다. 즉 애플리케이션 서버(COM+)의 역할을 해주는 서버를 n개로 늘릴 수 있죠
이우룡.요로리 [yololy]   2003-05-25 16:57 X
서비스 하는 중간에 어플 서버 A가 죽으면 request가 바로 어플 서버 B로 붙어서 이용자는 서비스 이상을 감지할 수 없었습니다.
이우룡.요로리 [yololy]   2003-05-25 16:59 X
그리고 어플 서버 A는 시스템 자체가 꺼진게 아니라면 1분 후에 다시 restart 되게 설계했습니다.
이우룡.요로리 [yololy]   2003-05-25 17:01 X
DB 보다 파일 보다 메모리 캐쉬를 이용한 경우가 훨씬 속도가 좋았습니다. 다만 메모리가 한정되다 보니 게시판이 많아서 5페이지 정도 밖에 캐쉬가 어려웠습니다.
이우룡.요로리 [yololy]   2003-05-25 17:03 X
캐쉬가 안된 부분을 읽을때 DB에서 가져오는 수 밖에 없어서 DB 튜닝이 관건이었습니다. 일부 방송사 게시판의 경우 10만건 단위로 게시물을 자르더군요.
이우룡.요로리 [yololy]   2003-05-25 17:04 X
그때 제가 만든 65만건까지도 이상이 없었던걸로 기억합니다. 그 뒤로 이상이 있었는지는 잘 모르겠구요..^^
이우룡.요로리 [yololy]   2003-05-25 17:07 X
얼마전 마소(프세였나..-_-)에 D 모 포털사이트 이야기가 실렸었습니다. 사이트의 대부분에 메모리 캐슁을 이용했더라구요. asp, jsp, php가 아닌 CGI를 직접 설계한것
이우룡.요로리 [yololy]   2003-05-25 17:10 X
같았습니다. 무척 보고 싶네요. -_- 졸업하고 지원해볼까.. 별 도움 안되는 얘기만 주저리 주저리 썼네요. 즐거운 하루 되세요..^^
수야!╋ [sooya23]   2003-05-26 21:37 X
DB 죽었네요.. 확인 시간은 오후 9시 27분~

+ -

관련 글 리스트
7264 캐쉬기능을 쓰는 보드를 소개할까 합니다. 궁그미 944 2003/05/25
7267     Re보드 2개를 동기화 시키는 예제입니다. 궁그미 772 2003/05/26
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.