http://fwd.nogary.xwow.net/board/Default.aspx
안녕하세요.
제가 만든 좀 특이한(?) 보드를 소개합니다. 위 주소로 접속해 보시면 일반적인 보드가 보입니다. 맨 위에 캐쉬된 시각이 나옵니다. 맨 처음 전체 레코드가 캐쉬된 시각입니다. 그리고 그 밑에 마지막으로 업데이트된 시각은 가장 마지막에 업데이트된 시각입니다.
저의 캐쉬 방식은 디비의 변경사항에 대해 그 내용만 업데이트합니다. 즉, 맨처음에 전체 데이터를 캐쉬하고 그 뒤로는 변경된 내용만 캐쉬만 업데이트합니다. 현재 캐쉬는 보드의 리스트 내용만 캐쉬를 하고 있습니다. 각 글의 내용과 답글은 실제 디비에서 가져옵니다. 이러한 방식은 캐쉬기능을 활용하면서도 캐쉬의 업데이트를 효율적으로 할 수 있습니다.
지연입력이라는 것은 여러개의 레코드를 한꺼번에 입력할 수 있습니다. 지연 입력을 하면 "입력"과 "완료"라는 것이 있습니다. 입력은 임시적으로 입력할 레코드를 저장합니다. 입력할 레코드가 모두 입력되면 완료 버튼을 누르면 한꺼번에 입력이 됩니다.
레코드를 클릭하면 답변을 달 수 있습니다. "트랜잭션" 이라는 버튼은 3개의 답글을 한꺼번에 달 수 있는 기능입니다. 그 처리를 트랜잭션으로 합니다.
두번째 중요한 기능은 메모리의 내용을 파일로 저장하는 기능입니다. 이렇게 계속 캐쉬를 해 가면 메모리 사용량이 계속 늘어날 것 입니다. 그래서 메모리의 내용을 파일로 저장해 놓는 기능이 있습니다. (메모리에 계속 저장할 수도 있고 혹은 파일에 저장할 수도 있습니다.) 현재 메모리에 캐쉬가 없으면 파일에서 레코드를 읽어서 뿌려줍니다. 그리고 캐쉬에 액세스가 1분이상 없을 경우 그리고 캐쉬의 내용이 수정되었을 경우 캐쉬의 내용을 자동으로 파일에 저장합니다. 변경 사항이 없는 경우는 그냥 캐쉬의 내용을 지웁니다. 즉, 액세스가 없을 때는 메모리를 해제함으로써 메모리 사용량을 줄이게 됩니다.
세번째 중요한 기능은 분산환경에 적용된다는 것입니다. 현재 게시판은 총 3대의 서버가 돌아가고 있습니다. 디비서버, 애플리케이션 서버(COM+), 웹서버입니다. 애플리케이션 서버와 웹서버의 통신은 .NET Remoting으로 수행됩니다. 웹서버의 config정보를 간단히 수정(리모팅을 쓸 것인지 여부)함으로써 웹서버와 애플리케이션 서버를 합칠 수도 있고 혹은 분리시킬 수도 있습니다. 전혀 코드의 수정이 필요없습니다. 또 한 분산 시켰을 경우 웹서버를 여러대를 붙여서 클러스터를 구성할 수도 있습니다. 캐쉬 기능은 그대로 쓰면서 말이죠.
한번 캐쉬를 시작하면 캐쉬된 내용에 대해서는 서버가 다운되지 않는한 절대 디비로 부터 읽지 않습니다. 저는 이것을 관리자모드용 보드에 적용하기 위해서 만들었습니다. 이렇게 레코드를 모두 캐쉬해 놓은 경우 검색이나 정렬등을 디비에 부하를 주지 않고 자유롭게 할 수 있는 장점이 있습니다.
글도 써보시고 자유로운 의견도 부탁합니다.
감사합니다.
P.S. 개발언어는 ASP.NET(C#)입니다. 웹서버는 XP입니다. 동시접속자 수가 5명입니다. 그리고 위에서 설명한 기능은 프레임워크로 제작되어 있습니다. 그래서 간단히 재활용이 가능합니다. 프레임워크는 좀 더 다듬어서 공개할 예정입니다.
|