반응형

이 글은 월간 마이크로소프트웨어(일명 마소) 2008년 01월호 실전 강의실에 기고한 글입니다. 요즘 도통 포스팅을 할 수 없는 관계로 인해 대체합니다. ㅡ_ㅡ;; (하는 거 없이 바빠요~~~)



ASP.NET을 이용하여, 사용자에게 친숙한 인터페이스 프로그래밍을 제공할 수 있는 확장 도구인 ASP.NET AJAX와 개발의 편의성을 제공되는 ASP.NET AJAX 컨트롤 툴킷이 나온지도 거의 1년이 넘었다. 이러한 장점을 바탕으로 한 ASP.NET AJAX에서 제공하는 확장 컨트롤과 ASP.NET AJAX 컨트롤 툴킷에서 제공하는 컨트롤을 이용하여 간단하게나마 RSS Viewer를 만들어보도록 하겠다.

필자가 ASP.NET을 접한 지 4년이라는 시간이 흘렀다. 이 기간 동안 ASP.NET을 가지고 프로젝트를 진행하는 사이트가 상당히 증가되었다는 점은 ASP.NET이 그만큼 사용자들에게 효율적이며, 개발자들에게 개발에 필요한 용이성을 제공해준다는 것을 인정받은 셈이다. 더더욱, 요즘 추세에 맞추어서 ASP.NET AJAX라는 ASP.NET과 궁합이 잘 들어맞는 프레임워크를 사용함으로써, ASP.NET의 단점이라 할 수 있는 불필요한 화면의 깜빡임을 없애고, 사용자에게 동적이고 파워풀한 기능을 보여줄 수 있게 되었다. 이번 호에서는 이 ASP.NET과 ASP.NET AJAX를 사용하여, 간단하게나마 사용자 자신이 등록한 RSS의 정보를 볼 수 있는 프로그램을 만들어보도록 하겠다.

RSS는 무엇인가?

웹 2.0의 시대에 들어서면서, 대다수의 사용자는 자신만의 인터넷 공간인 블로그를 가지고 있을 것이다. 사용자 자신의 자유로운 생각과 다른 인터넷 사용자들에게 필요한 정보를 포스트의 형태로 블로그에 등록하게 된다. 그래서, 인터넷 사용자가 자신에게 필요한 정보가 등록되어 있는 블로그를 찾게 되었을 때, 이를 즐겨찾기에 등록하거나 자신의 블로그로 해당 포스트를 등록하게 된다, 하지만 이러한 목록이 많아지게 되면, 정작 필요할 때 즐겨찾기에 등록한 블로그 목록을 선택해가며, 찾고자 하는 정보가 나와 있는 블로그를 다시 찾아야 하는 번거로움이 생길 수 있다. 이러한 불편함을 해소하기 위해 나온 것이 RSS이며, 이러한 RSS를 관리해 줄 수 있는 사이트 또는 프로그램을 이용하여 간편하게 정보를 찾을 수 있겠다. 필자의 경우는 한RSS를 통하여 이러한 정보를 제공하는 블로그 또는 사이트들을 관리하고 있다.


<화면 1> 한RSS 사이트

RSS의 구조는 이미 많은 사이트에서 내용을 알려주고 있고, 이 글을 읽고 있는 독자들도 어느 정도의 지식이 있다고 생각하므로, 간단하게RSS에 대한 설명을 하도록 하겠다.
RSS를 제공하고 있는 ““ASP.NET News””(http://www.asp.net/news/rss.ashx) 의 RSS 소스를 보면 다음과 같다.


<화면 2> Xml 형태로 구성되어 있는 RSS 정보

RSS는 Xml의 형태로 제공되고 있으며, 구조는 크게 요소와 요소의 하위에 속하는 으로 구분질 수 있다. <표 1>은, 요소에필요한 요소의 목록을 보여준다.


기타, 요소에 들어갈 수 있는 요소들이 더 있으나, 여기에서는 이 요소들에 대한 설명은 하지 않도록 하겠다. <표 2>는, 요소의 하위 항목들의 정의에 쓰이는 요소에 사용되는 요소의 목록을 보여준다.


대부분의 웹 사이트 또는 블로그에서 RSS에 대한 정보를 제공해줌으로, 사이트나 블로그를 사용하는 사용자들은 크게 신경을 쓰지 않아도 된다. 다만, 이러한 요소들로 RSS에 대한 정보가 제공된다는 것을 아는 것도 나쁘지는 않을 듯 하다.

데이터베이스의 생성 및 구성

먼저, ASP.NET 웹 사이트를 만들기 전에 RSS 주소를 등록, 삭제하고 RSS 주소에 들어있는 정보를 저장하기 위한 데이터베이스 및 테이블을 만들도록 하겠다. 먼저, SQL Server 2005를 실행시킨 후, 새 데이터베이스 생성 메뉴를 통해, 새로운 데이터베이스를 만들도록 한다. 데이터베이스의 명은 MASODataBase라고 한다.


<화면 3> MASO 데이터베이스의 생성

확인 버튼을 눌러 MASODataBase를 생성한다. 이제RSS 정보를 저장할 테이블을 만들도록 하겠다. 정보를 저장할RSS_CHANNEL 테이블과 정보를 저장할 RSS_ITEMS라는 2개의 테이블을 만든다. 각 테이블의 필드들은 다음과 같다.



이들 테이블의 관계는 <화면 4>와 같다.


<화면 4> RSS_CHANNEL 테이블과 RSS_ITEM 테이블의 관계

저장 프로시저의 생성 및 구성

지금 만들려고 하는 RSS Viewer 프로그램은, RSS 정보를 저장하고 읽어오는 과정을 저장 프로시저를 사용하여 처리할 것이다. 그러므로 웹 사이트를 만들기 전에 사용하는 저장 프로시저를 미리 만들어놓도록 한다. RSS Viewer 프로그램에 사용되는 저장 프로시저는 총 5개이며, 각 저장프로시저의 이름은 다음과 같다.

- dbo.usp_GetRssAddressCount
- dbo.usp_GetRssAddressList
- dbo.usp_GetRssItemList
- dbo.usp_InsertRssChannel
- dbo.usp_InsertRssItem

이제부터, 위에 나열한 저장 프로시저에 대한 설명을 하도록 하겠다. 우선, 첫 번째 저장 프로시저인 dbo.usp_GetRssAddressCount는 RSS_CHANNEL 테이블에 등록되어 있는 RSS 주소의 카운트를 가지고 오는 저장 프로시저로 <리스트 1>과 같이 구성되어 있다.

---------------------------------------------------------------------------------------------------
CREATE PROCEDURE [dbo].[usp_GetRssAddressCount]
AS
BEGIN
SELECT ISNULL(COUNT(channelid), 0) AS CNT
FROM dbo.RSS_CHANNEL WITH(NOLOCK)
END
---------------------------------------------------------------------------------------------------
<리스트 1> dbo.usp_GetRssAddressCount 저장 프로시저

두 번째 저장 프로시저인 dbo.usp_GetRssAddressList는 RSS_CHANNEL 테이블에 등록되어 있는 정보들을 반환하는 역할을 하며, <리스트 2>와 같이 구성되어 있다.

---------------------------------------------------------------------------------------------------
CREATE PROCEDURE [dbo].[usp_GetRssAddressList]
AS
BEGIN
SELECT channelid, title, link
FROM dbo.RSS_CHANNEL WITH(NOLOCK)
END
---------------------------------------------------------------------------------------------------
<리스트 2> dbo.usp_GetRssAddressList 저장 프로시저

세 번째 저장 프로시저인 dbo.usp_GetRssItemList는 @link 파라미터를 통해, RSS_CHANNEL 테이블에 등록되어 있는 link 필드에서 @link 파라미터와 동일한 channelid를 찾은 후, RSS_ITEM 테이블의 channelid 필드의 값과 동일한 channelid 값을 가지는 행들의 정보를 반환하는 역할을 하며, <리스트 3>과 같이 구성되어 있다.

---------------------------------------------------------------------------------------------------
CREATE PROCEDURE [dbo].[usp_GetRssItemList]
(
@link VARCHAR(200)
)
AS
BEGIN
DECLARE @channelid INT

IF @link = ''
BEGIN
SELECT @channelid = (SELECT TOP 1 ISNULL(channelid, 0)
FROM dbo.RSS_CHANNEL WITH(NOLOCK) ORDER BY channelid ASC)
END
ELSE
BEGIN
SELECT @channelid = (SELECT ISNULL(channelid, 0)
FROM dbo.RSS_CHANNEL WITH(NOLOCK) WHERE link = @link)
END

IF @channelid <> 0
BEGIN
SELECT title, link, description, pubdate
FROM dbo.RSS_ITEM WITH(NOLOCK)
WHERE channelid = @channelid
ORDER BY itemid ASC
END
END
---------------------------------------------------------------------------------------------------
<리스트 3> dbo.usp_GetRssItemList 저장 프로시저

네 번째 저장 프로시저인 dbo.usp_InsertRssChannel 저장 프로시저는 새로운 RSS 주소를 추가할 때의 RSS 주소의 기본 정보를 저장하는 저장 프로시저로, <리스트 4>와 같이 구성되어 있다.

---------------------------------------------------------------------------------------------------
CREATE PROCEDURE [dbo].[usp_InsertRssChannel]
(
@title NVARCHAR(200)
, @link VARCHAR(200)
, @description NVARCHAR(2000)
, @result VARCHAR(5) OUTPUT
)
AS
BEGIN
IF EXISTS ( SELECT link FROM dbo.RSS_CHANNEL WITH(NOLOCK) WHERE link = @link )
BEGIN
SET @result = 'EXIST'
END
ELSE
BEGIN
INSERT INTO dbo.RSS_CHANNEL WITH(ROWLOCK) (title, link, description)
VALUES (@title, @link, @description)

SET @result = 'OK'
END
END
---------------------------------------------------------------------------------------------------
<리스트 4> dbo.usp_InsertRssChannel 저장 프로시저

마지막 저장 프로시저인 dbo.usp_InsertRssItem는 dbo.usp_InsertRssChannel 저장 프로시저와 마찬가지로, 새롭게 추가된 RSS 주소에 속한 Item의 기본 정보를 저장하는 저장 프로시저로, <리스트 5>와 같이 구성되어 있다.

---------------------------------------------------------------------------------------------------
CREATE PROCEDURE [dbo].[usp_InsertRssItem]
(
@link VARCHAR(200)
, @iteminfo NTEXT
, @result VARCHAR(5) OUTPUT
)
AS
BEGIN
DECLARE @channelid INT
DECLARE @pDoc INT

SELECT @channelid = (SELECT channelid FROM dbo.RSS_CHANNEL WITH(NOLOCK)
WHERE link = @link)

EXEC sp_xml_preparedocument @pDoc OUTPUT, @iteminfo

INSERT INTO dbo.RSS_ITEM WITH(ROWLOCK)
(channelid, title, link, description, pubdate)
SELECT @channelid, title, link, description, pubdate
FROM OPENXML (@pDoc, '//channel/item', 2)
WITH (
title NVARCHAR(200) 'title'
, link VARCHAR(200) 'link'
, description NTEXT 'description'
, pubdate DATETIME 'pubDate' )

EXEC sp_xml_removedocument @pDoc

SET @result = 'OK'
END
---------------------------------------------------------------------------------------------------
<리스트 5> dbo.usp_InsertRssItem 저장 프로시저

저장 프로시저를 만들었다면, 이제 RSS Viewer를 만들기 위한 ASP.NET AJAX 웹 사이트를 만들어보도록 하자.


Creative Commons License
저작물크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
반응형

+ Recent posts