°Á Àü Å¿ÀÀÇ Àâ´ã>
ÀÌÁ¦ 2006³âÀÇ Å©¸®½º¸¶½ºµµ ÇÑ´Þ Á¤µµ¹Û¿¡ ³²Áö ¾Ê¾Ò³×¿ä.
¿©·¯ºÐµéÀº Å©¸®½º¸¶½º¿¡ ¹«¾ùÀ» ÇÏ½Ç »ý°¢À̽Ű¡¿ä?
¹«¾ùÀ» °èȹÇÏ´ø ÇÑ ÇØ¸¦ Àß Á¤¸®Çϸé¼~ Áñ°Ì°Ô º¸³»½Ã±â ¹Ù¶ø´Ï´Ù.
°øÅëÀûÀ¸·Î ÀÚÁÖ »ç¿ëÇÏ´Â UI ¿µ¿ªÀ» ÇÊ¿ä·Î ÇÒ °æ¿ì ¿©·¯ºÐÀº ÁÖ·Î ¾î¶»°Ô ÀÛ¾÷À» ÇØ ¿À¼Ì³ª¿ä? ´ëºÎºÐÀÇ °æ¿ì´Â ±× ¿µ¿ªÀ» User ControlÀ̳ª Custom Control·Î Á¦ÀÛÇØ¼ »ç¿ëÇØ ¿À¼ÌÀ» °ÍÀÔ´Ï´Ù. "³ª´Â µÑ ´Ù ¾Æ´Ï¾ú´Ù!!"¶ó°í ÀÚ½ÅÇϽô ºÐÀº ÁÁ¾Ò¾î!! ÆÐ½º!! -_-+
´ë°³ÀÇ °æ¿ì´Â User ControlÀ» ÀÌ¿ëÇßÀ»ÅÙµ¥¿ä. ÀÌ´Â User ControlÀÇ °³¹ßÀÌ »ó´çÈ÷ ½±±â ¶§¹®ÀÏ °ÍÀÔ´Ï´Ù. Custom ControlÀÇ °æ¿ì´Â °³¹ß¿¡ ÀûÁö ¾ÊÀº ³»°ø°ú ½Ã°£ÀÌ ¿ä±¸µÇ±â¿¡ ½±»ç¸® ´ýºµé ¼ö ¾øÁö¸¸, User ControlÀº ±âÁ¸¿¡ Á¸ÀçÇÏ´Â ÄÁÆ®·ÑµéÀ» º¹ÇÕÀûÀ¸·Î ¹¾î¼ ½±°Ô Ãâ·Â ¿µ¿ªÀ» ²Ù¹Ð ¼ö ÀÖÀ¸´Ï±î¿ä.
À̹ø °Á¿¡¼ ÇϰíÀÚ ÇÏ´Â À̾߱â´Â ¹Ù·Î ÀÌ·¯ÇÑ User ControlÀ» »ç¿ëÇÔ¿¡ ÀÖ¾î¼, UI °³¹ßÀÚµéÀÌ Á» ´õ ¼Õ½±°Ô À̸¦ ´Ù·ê ¼ö ÀÖ°Ô, ±×¸®°í À̸¦ ÀÏÁ¾ÀÇ ÅÛÇø´Ã³·³ ÀÌ¿ëÇÒ ¼ö ÀÖ°Ô ÇÏ´Â ÀÛÀº ±â¹ÝÀ» ¸¸µå´Â ¹æ¹ý¿¡ ´ëÇÑ °ÍÀÔ´Ï´Ù. ¹Ýµå½Ã ÇÊ¿äÇÑ ÀÛ¾÷Àº ¾Æ´Ò ¼ö ÀÖÁö¸¸, ÀÏ´Ü ÀÛ¼ºÇصθé Àü¹ÝÀûÀÎ °³¹ßÀÌ Æí¸®ÇØÁø´Ù°í³ª ÇÒ±î¿ä? °³¹ß »ý»ê¼º ¹× À¯Áö º¸¼ö¼ºÀÌ ÁÁ¾ÆÁö´Â ¹æ¾ÈÀ̶ó°í º¸½Ã¸é µÉ µí ÇÕ´Ï´Ù.
Á¦°¡ ¾÷¹« ÇÁ·ÎÁ§Æ®¿¡¼ ÇÏ´Â ¿ªÇÒÀÌ ÁÖ·Î ¾ÆÅ°ÅØÃ³¸¦ Àâ´Â´Ù°Å³ª, °øÅë ¸ðµâÀ» ¼³°è ¹× °¡À̵å ÇѴٰųª, °³¹ßÀÚµéÀÇ °³¹ß »ý»ê¼ºÀ» ³ôÀ̱â À§ÇÑ ÇÁ·¹ÀÓ¿öÅ© ÀÛ¾÷À» ÇѴٰųª ÇÏ´Â ÀÛ¾÷ÀÌ´Ùº¸´Ï ÀÌ·¯ÇÑ ÂÊ¿¡ ´ëÇÑ °ü½ÉÀÌ º»ÀÇ ¾Æ´Ï°Ô »ý±æ ¼ö ¹Û¿¡ ¾ø´õ±º¿ä(½ÇÀº, ¾÷üÀÇ °³¹ßÇ¥ÁØÆÀ¿¡¼ ±×·± °ÍµéÀ» ¿ä±¸ÇØ ¿À°Åµç¿ä. ÀÌ·± °Ô ÀÖÀ¸¸é ÆíÇÒ °Í °°Àºµ¥ ¸¸µé¾î ÁÖ¼¼¿ä. ÀÌ°Í Á» ÀÚµ¿ÈÇÒ ¼ö ÀÖ´Â µµ±¸°¡ ÀÖ¾úÀ¸¸é ÁÁ°Ú¾î¿ä. µîµî -_-+).
|
¾Æ! ±×·¯´Ï±ñ, Á¤È®È÷ À̹ø °Á°¡ ¾î¶² ³»¿ëÀ» ´Ù·ç´ÂÁö °¨ÀÌ Àß ¿ÀÁö ¾ÊÀ¸½Å´Ù±¸¿ä? ±×·¸´Ù¸é, Á» ´õ ±¸Ã¼ÀûÀ¸·Î ¸»¾¸À» µå·Á¾ß ÇÒ µí Çϳ׿ä. À̹ø °ÁÂÀÇ ÁÖ ³»¿ëÀº ȸ鿡 °øÅëÀûÀ¸·Î »ç¿ëµÇ´Â Ãâ·Â ¿µ·ÂÀ» User Control·Î ¸¸µé°í À̸¦ µ¿ÀûÀ¸·Î ¼Õ½±°Ô ÆäÀÌÁö¿¡ ³¢¿ö³ÖÀ» ¼ö ÀÖ°Ô ÇÏ·Á ÇÕ´Ï´Ù.
"¼³¸¶, Page.LoadControl() ¸Þ¼µå¸¦ ÀÌ¿ëÇØ¼ ÆäÀÌÁö¿¡ µ¿ÀûÀ¸·Î User ControlÀ» ³ÖÀÚ´Â À̾߱⸦ ÇÏ·Á´Â °ÍÀº ¾Æ´Ï°ÚÁÒ?" ¶ó°í ÇϽô ºÐµéÀÌ °è½Ã´Âµ¥¿ä. ´ÙÇàÈ÷µµ ±× À̾߱â´Â ¾Æ´Õ´Ï´Ù(¾ö¹ÐÈ÷ ¸»Çϸé, ÀϺδ ¸Â±âµµ ÇÕ´Ï´Ù¸¸ -_-). Page.LoadControl() ¸Þ¼µå¸¦ ÀÌ¿ëÇØ¼ ÆäÀÌÁö¿¡ µ¿ÀûÀ¸·Î User ControlÀ» Ãß°¡ÇÏ´Â °ÍÀº User ControlÀÇ Ãâ·Â µ¥ÀÌÅͰ¡ Á¤ÀûÀÎ °æ¿ì¿¡ ÇÑÇØ ºÎÇÕÇÒ °ÍÀÔ´Ï´Ù. ¸¸ÀÏ, User ControlÀÌ Repeater³ª DataList µîÀÇ ÄÁÆ®·Ñ·Î ±¸¼ºµÇ¾î ÀÖ°í(¿¹¸¦ µé¸é, °øÁö»çÇ× ¸ñ·Ï °°Àº), µ¥ÀÌÅÍ ¹ÙÀεùÀÌ µÈ »óÅ·ΠPage¿¡ Ãß°¡µÇ¾î¾ß ÇÑ´Ù¸é ¾î¶»°Ô ÇÒ±î¿ä?
"¹¼´Ï±î? Àå³ÇϽʴϱî? ±×·³ User Control¾È¿¡¼(¿¹¸¦ µé¸é, ControlÀÇ Page_Load À̺¥Æ®) µ¥ÀÌÅÍ ¹ÙÀεù ÀÛ¾÷À» ÇÏ¸é µÇÀݾƿä"¶ó°í À̾߱âÇϽô ºÐµé °è½Ê´Ï´Ù. ÇÖ!!! ¸Â´Â ¸»¾¸ÀÔ´Ï´Ù. ±×·± ¹æ¹ýÀÌ ÀÖ¾ú±º¿ä. À½¡¦ ±×·¸³×¿ä.. È졦 ±×·¸±¸³ª¡¦
±×·¸½À´Ï´Ù. ÀϹÝÀûÀ¸·Î´Â ±×·¸°Ôµé ÀÛ¾÷À» ÇϼÌÀ» °ÍÀÔ´Ï´Ù. ¹°·Ð, °øÁö»çÇ× ¸ñ·ÏÀÇ Ãâ·Â °°Àº °æ¿ì´Â °øÅëÀûÀ¸·Î ¿©±â Àú±â¿¡¼ ÀÚÁÖ »ç¿ëµÇ±â¿¡ ºÐ¸í User Control(ȤÀº º°µµÀÇ ÄÁÆ®·Ñ)·Î ¸¸µé¾î¼ »ç¿ëÇÏ´Â °ÍÀÌ ÀÌ·Î¿ï °ÍÀÔ´Ï´Ù. ±×¸®°í, ±× °æ¿ì ´ëºÎºÐ µ¥ÀÌÅÍ ¾×¼¼½º ÇÏ´Â Äڵ尡 .ascx ÆÄÀÏ ¾È¿¡ ´ã±â°Ô µÇ°ï ÇÏÁÒ. N-Tier ÀÛ¾÷À» ¸¹ÀÌ ÇØº¸½Å ºÐµéÀ̶ó¸é Business Logic ·¹À̾î¿Í Presentation ·¹À̾ ¸íÈ®ÇÏ°Ô ±¸ºÐÇÏ¿© ÀÛ¾÷À» ÇϼÌÀ» °ÍÀÔ´Ï´Ù. ±×·¸±â¿¡ ¹°·Ð, ÀÌ¿Í °°Àº °æ¿ì¶ó ÇØµµ, ascx ÆÄÀÏ ¾È¿¡ µ¥ÀÌÅ͸¦ Á÷Á¢ÀûÀ¸·Î ¾×¼¼½º ÇÏ´Â ÄÚµå´Â ÀÛ¼ºÇÏÁö ¾ÊÀ» °ÍÀÔ´Ï´Ù. ´Ù¸¸, ºñÁî´Ï½º ·ÎÁ÷ ÄÄÆ÷³ÍÆ®(BLC)³ª µ¥ÀÌÅÍ ¾×¼¼½º ÄÄÆ÷³ÍÆ®(DAC)¸¦ È£ÃâÇÏ¿© ¾ò¾î¿Â °á°ú¸¦ ¹ÙÀεù ÇÏ´Â ÄÚµå Á¤µµ¸¸ÀÌ ³õ¿©Á® ÀÖ°ÚÁÒ? ¿ä´Â ¾î·µç ±×·¯ÇÑ Äڵ尡 ÀÖ±â´Â ÀÖ¾î¾ß¸¸ ÇÑ´Ù´Â °ÍÀÔ´Ï´Ù. ±×·¸±â¿¡, ±× User ControlÀº ¿À·ÎÁö °øÁö»çÇ×À» Ãâ·ÂÇϱâ À§ÇÑ "°øÁö»çÇ× ¿ë User Control"À̶õ À̸§À» °®°Ô µÉ °ÍÀÔ´Ï´Ù. ¿Ö³ÄÇϸé, ±×·¯ÇÑ ¸ñÀûÀ¸·Î User ControlÀ» ²Ù¹Î °ÍÀ̴ϱî¿ä.
ÇÏÁö¸¸, User ControlÀ» ÀÛ¼ºÇÏ´Ù º¸¸é, Ãâ·ÂÇÏ´Â µ¥ÀÌÅ͸¸ ´Ù¸¦ »ÓÀÌÁö, ±× Ãâ·Â À¯ÇüÀÌ ¸Å¿ì À¯»çÇÑ °æ¿ì¸¦ ¸¹ÀÌ Á¢ÇÏ°Ô µË´Ï´Ù. ¹Ù·Î ¿©±â¼ ÇÑ °¡Áö ¾ÆÀ̵ð¾î°¡ »Ï·á·Õ »ý°Ü³³´Ï´Ù. User ControlÀ» ÅÛÇø´Ã³·³ »ç¿ëÇÒ ¼ö´Â ¾øÀ»±î? Áï, °øÁö»çÇ× µ¥ÀÌÅÍ´ø ÁÖ¼Ò ¸ñ·Ï µ¥ÀÌÅÍ´ø µ¥ÀÌÅ͸¦ ´øÁ®ÁÖ¸é ¸ñ·ÏÀ» Ãâ·ÂÇÏ´Â User ControlÀ» ¸¸µé¾îµÎ¸é °³¹ß »ý»ê¼ºÀÌ ´õ ³ª¾ÆÁöÁö ¾ÊÀ»±î? ÇÏ´Â »ý°¢ÀÌ µé ¼ö ÀÖ´Ù´Â °ÍÀÌÁÒ. ¹Ù·Î ±×°ÍÀÌ À̹ø °Á¿¡¼ À̾߱âÇϰíÀÚ ÇÏ´Â ³»¿ëÀÔ´Ï´Ù.
Àü¿ë User Control(°øÁö»çÇ׿ë ÄÁÆ®·Ñ, °øÅë µ¥ÀÌÅÍ Ãâ·Â¿ë ÄÁÆ®·Ñ µî ƯÁ¤ µ¥ÀÌÅ͸¦ Ãâ·ÂÇϱâ À§ÇØ ÀÛ¼ºÇÑ ÄÁÆ®·Ñ)À» ÀÛ¼ºÇÏ´Â °ÍÀÌ ³ª»Ú´Ù´Â À̾߱â´Â ¾Æ´Õ´Ï´Ù. ±×´Â ¸Å¿ì ÀϹÝÀûÀÎ ¹æ¹ýÀ̴ϱî¿ä. ´Ù¸¸, »óȲ¿¡ µû¶ó¼´Â À̸¦ Á» ´õ »ý»ê¼ºÀÌ ³ôÀº ¹æÇâÀ¸·Î ¹Ù²ãº¸´Â °Íµµ ³ª»ÚÁö ¾Ê´Ù´Â »ý°¢ÀÔ´Ï´Ù(»ý»ê¼ºÀº ÁÁ¾ÆÁö´Â ¹Ý¸é, ¼º´ÉÀûÀ¸·Î´Â ¾à°£ÀÇ Èñ»ýÀÌ µû¸¦ ¼ö ÀÖ½À´Ï´Ù). Áï, º°µµÀÇ ÄÁÆ®·Ñ·¯ Ŭ·¡½º°¡ ÀÖ¾î¼ ±×°¡ µ¿ÀûÀ¸·Î User Control¿¡ µ¥ÀÌÅ͸¦ ä¿ì°í ¹ÙÀεùÀ» Çϵµ·Ï ÇÏÀÚ´Â °ÍÀÌÁÒ. ÀÌ·± ½ÄÀ¸·Î ±¸¼ºÇÏ°Ô µÇ¸é, ascx´Â ´ÜÁö Ãâ·ÂÀ» À§ÇÑ Äڵ常À» ´ã°ÔµÇ¾î ¸Å¿ì °£°áÇØÁö¸ç, ascx¸¦ ÀÏÁ¾ÀÇ È¸é ÅÛÇø´ °ÝÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù.
¿¹¸¦ µé¸é, ´ÙÀ½Àº Á¦°¡ ÀÛ¼ºÇØ º» °øÁö»çÇ× User Control(View.ascx)ÀÇ ¼Ò½º ÄÚµå ÀüüÀÔ´Ï´Ù.
View.ascx
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="View.ascx.cs" Inherits="Template_View" %>
<asp:DataList ID="DataList1" runat="server">
<ItemTemplate>
<%# Eval("title") %>
</ItemTemplate>
</asp:DataList>
|
View.ascx.cs
public partial class Template_View : System.Web.UI.UserControl
{
private object _data;
public object Data
{
get { return _data; }
set { _data = value; }
}
protected void Page_Load(object sender, EventArgs e)
{
DataList1.DataSource = Data;
DataList1.DataBind();
}
}
|
º¸½Ã´Ù½ÃÇÇ, User Control¿¡´Â µ¥ÀÌÅÍ ¹ÙÀεù ÄÚµå ¿Ü¿¡´Â ¾Æ¹«°Íµµ Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù. ¹ÙÀεùÀ» À§ÇÑ µ¥ÀÌÅ͸¦ °¡Á®¿À´Â Äڵ嵵 Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù. ÀÌ´Â ¿ÜºÎ ÄÁÆ®·Ñ·¯ Ŭ·¡½º°¡ µ¿ÀûÀ¸·Î µ¥ÀÌÅ͸¦ ¹Ð¾î³Öµµ·Ï ÇÒ °ÍÀ̱⠶§¹®ÀÔ´Ï´Ù.
ÀÌ ¹æ½ÄÀÇ ÀåÁ¡Àº È¸é °³¹ßÀÚ°¡ User ControlÀÇ HTML ±¸¿ª¿¡¸¸ ÁýÁßÇØ¼ ÀÛ¾÷À» ÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÔ´Ï´Ù. ³»ºÎÀûÀ¸·Î µ¥ÀÌÅͰ¡ ¾î¶»°Ô ¹ÙÀεùµÇ´ÂÁö ¾î¼´ÂÁö ÀüÇô °ü½ÉÀ» °®Áö ¾Ê¾Æµµ µË´Ï´Ù. ȸéÀÇ µðÀÚÀθ¸À» »ý°¢ÇÏ¸é µÇ±â¿¡ ÀÌ User ControlÀ» ÀÏÁ¾ÀÇ ÅÛÇø´Ã³·³ À̸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÌÁÒ. ÁÖ¾îÁö´Â µ¥ÀÌÅͰ¡ ¾î¶² °ÍÀ̳Ŀ¡ µû¶ó °øÁö»çÇ×À» Ãâ·ÂÇÒ ¼öµµ ÀÖ°í, ´Ù¸¥ ¸ñ·Ï µ¥ÀÌÅ͵éÀ» Ãâ·ÂÇÒ ¼öµµ ÀÖ½À´Ï´Ù.
°á°úÀûÀ¸·Î, ÀÌ´Â µ¿ÀÏÇÑ °á°ú¸¦ ¾ò±â À§ÇÑ ¶Ç ´Ù¸¥ ¹æ½Ä(°³¹ß »ý»ê¼ºÀ» ³ôÀÌ´Â ¹æ½Ä)ÀÔ´Ï´Ù. ÇÏÁö¸¸, ±×·¸´Ù°í ÀÌ ¹æ½ÄÀÌ ²À ¿Ç´Ù°í ¸»ÇÒ ¼ö´Â ¾ø½À´Ï´Ù. Á¦°¡ ÁøÇàÇÏ´Â ÇÁ·ÎÁ§Æ®¿¡¼´Â À̸¦ ÀÌ¿ëÇÏ¿© °³¹ß¼º Çâ»ó°ú À¯Áö º¸¼ö¼ºÀÇ Çâ»óÀÌ ÀÖ¾ú½À´Ï´Ù¸¸, ¿©·¯ºÐÀÇ »óȲ¿¡¼´Â ¿ÀÈ÷·Á ¹øÀ⽺·´°í ¾î·Æ°Ô ´À²¸Áú ¼öµµ ÀÖ½À´Ï´Ù. ±×·¯´Ï, ³¡±îÁö Àß »ìÆìº¸½Ã°í ÆÇ´ÜÇϽñ⠹ٶø´Ï´Ù. ±×·¯³ª, À̸¦ ¿©·¯ºÐÀÇ ¾÷¹«¿¡ Àû¿ëÇÏÁö´Â ¾Ê´Â´Ù ÇÏ´õ¶óµµ, ÄÁ¼Á Á¤µµ´Â ´À²¸º¸½Ã±â¸¦ ±ÇÇØ º¾´Ï´Ù.
»ç½Ç, ÀÌ ÄÁ¼ÁÀº ASP.NETÀÇ ´ëºÎÀÎ Scott GuthrieÀÇ ºí·Î±×¿¡ ¿Ã¶ó¿Â "Cool UI Templating Technique to use with ASP.NET AJAX for non-UpdatePanel scenarios"¶õ ±Û¿¡¼ ÈùÆ®¸¦ ¾ò¾î ÀÛ¼ºÇÑ °ÍÀÔ´Ï´Ù. ÇØ¼, »ç½Ç ÀÌ ÄÁ¼ÁÀº Ajax ¾ÖÇø®ÄÉÀ̼ÇÀ» Á¦ÀÛÇÒ °æ¿ì¿¡ ´õ ÀûÀýÇÏ´Ù°í º¸¿©Áý´Ï´Ù.
http://weblogs.asp.net/scottgu/archive/2006/10/22/Tip_2F00_Trick_3A00_-Cool-UI-Templating-Technique-to-use-with-ASP.NET-AJAX-for-non_2D00_UpdatePanel-scenarios.aspx
ÀÚ. ±×·¸´Ù¸é, ÀüüÀûÀÎ ±¸Çö ¼³°è¸¦ »ìÆìº¸°í, ½ÇÁ¦ ±¸ÇöÀ» Çѹø ÇØº¸µµ·Ï ÇϰڽÀ´Ï´Ù.
TitlesManager¶õ Ŭ·¡½º´Â pubs µ¥ÀÌÅͺ£À̽ºÀÇ titles Å×ÀÌºí¿¡¼ Ã¥ µ¥ÀÌÅÍ(DataTable)¸¦ °¡Á®¿À´Â ¿ªÇÒÀ» ¼öÇàÇϸç, ViewManager¸¦ ÀÌ¿ëÇÏ¿© ¾ò¾î¿Â µ¥ÀÌÅ͸¦ User Control¿¡ ¹ÙÀεùÇÑ µÚ, À̸¦ ¹ÝȯÇÏ´Â ¸Þ¼µå¸¦ Á¦°øÇϴ Ŭ·¡½ºÀÔ´Ï´Ù. ¼³¸í¸¸À¸·Î´Â ÀÌÇØ°¡ ¾î·Á¿ï ¼ö ÀÖÁö¸¸, Àá½Ã µÚ¿¡ ¼Ò½º Äڵ带 º¸½Ã¸é ÀÌÇØ°¡ µÇ½Ç °ÍÀÔ´Ï´Ù. »ç½Ç, TitlesManager Ŭ·¡½º¸¦ º°µµ·Î Á¦ÀÛÇÒ ÇÊ¿ä´Â ¾ø½À´Ï´Ù¸¸(±×³É aspx ÆäÀÌÁö¿¡ Äڵ带 ³Ö¾îµµ µ¿ÀÛÇÏ´Â µ¥¿¡´Â ¹®Á¦°¡ ¾øÀ¸´Ï), ³í¸®ÀûÀ¸·Î ¿ªÇÒ ±¸ºÐÀ» ÇÏ´Â °ÍÀÌ ¼³°èÀûÀ¸·Î ÁÁ¾Æº¸À̱⿡ º°µµÀÇ Å¬·¡½º·Î ÀÛ¼ºÇØ º¸¾Ò½À´Ï´Ù.
ViewManagerÀÇ ¿ªÇÒÀº ÀÌ ÄÁ¼Á¿¡¼ ¸Å¿ì Áß¿äÇÏÁö¸¸, ±× ³»¿ëÀº ÀǿܷΠ°£´ÜÇÕ´Ï´Ù. ƯÁ¤ ascx ÄÁÆ®·ÑÀÇ ¼Ó¼º¿¡ µ¿ÀûÀ¸·Î µ¥ÀÌÅÍ(TitlesManager°¡ ³Ñ°ÜÁִ å ¸ñ·Ï µ¥ÀÌÅÍ-DataTable)¸¦ Ãß°¡ÇÑ µÚ, ±×¸¦ ¹ÙÀεùÇÑ User ControlÀ» ¹ÝȯÇÏ´Â ¿ªÇÒÀ» Á¦°øÇÏ´Â °ÍÀÔ´Ï´Ù. ±âº» ¿¹Á¦¿¡¼´Â µ¿ÀûÀ¸·Î User Control¿¡ µ¥ÀÌÅ͸¦ °Ç³×ÁÖ±â À§Çؼ ¸®Ç÷º¼Ç ±â¼úÀ» ÀÌ¿ëÇϰí ÀÖÁö¸¸, ÀÌ´Â Â÷ÈÄ ÀÎÅÍÆäÀ̽º¸¦ ÀÌ¿ëÇÏ´Â ¹æ½ÄÀ¸·Î ¹Ù²Ù¾î ¼º´ÉÀûÀÎ Çâ»óÀ» ²ÒÇÒ ¼öµµ ÀÖÀ» °ÍÀÔ´Ï´Ù.
¾î·Æ´Ù±¸¿ä? ¸»·Î¸¸ ¼³¸íÇÏ¸é º¹ÀâÇÑ °¨ÀÌ ¾øÁö ¾ÊÀ¸´Ï Á÷Á¢ ¼Ò½º¸¦ º¸¸é¼ ÀÌÇØÇØ º¸µµ·Ï ÇϽÃÁÒ. ¿ì¼± TitlesManager.cs Ŭ·¡½ººÎÅÍ »ìÆìº¸µµ·Ï ÇϰڽÀ´Ï´Ù.
TitlesManager.cs
using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
/// <summary>
/// TitlesManagerÀÇ ¿ä¾à ¼³¸íÀÔ´Ï´Ù.
/// </summary>
public class TitlesManager
{
private DataTable GetTitles()
{
SqlConnection con = new SqlConnection();
con.ConnectionString = "server=(local);database=pubs;uid=**;pwd=**";
string sql = "Select title from Titles";
SqlCommand cmd = new SqlCommand(sql, con);
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
adapter.Fill(ds);
return ds.Tables[0];
}
public UserControl GetTitlesRenderControl()
{
DataTable titles = this.GetTitles();
if (titles.Rows.Count > 0)
return ViewManager.GetViewControl("~/Template/View.ascx", titles);
else
return ViewManager.GetViewControl("~/Template/NoView.ascx", null);
}
}
|
TitlesManager Ŭ·¡½º´Â ¿ì¼± GetTitles()¶ó´Â ¸Þ¼µå¸¦ °¡Áö°í ÀÖ½À´Ï´Ù. ÀÌ´Â µ¥ÀÌÅͺ£À̽º·ÎºÎÅÍ Ã¥ ¸ñ·Ï µ¥ÀÌÅ͸¦ °¡Á®¿Í¼ ±×¸¦ DataTable Çü½ÄÀ¸·Î ¹ÝȯÇÏ´Â ¸Þ¼µåÀÔ´Ï´Ù. n-Tier ±¸Á¶·Î ¼³°èµÇ¾ú´Ù¸é, »ç½Ç»ó ÀÌ ¸Þ¼µå´Â TitlesManager Ŭ·¡½º°¡ ¾Æ´Ñ Data Access Component ÂÊ¿¡ ³õ¿©Á®¾ß ÇϰڽÀ´Ï´Ù¸¸, ¿©±â¼´Â µ¥¸ðÀÇ ¸ñÀûÀ¸·Î Äڵ带 ¿©±â¿¡ Á÷Á¢ ÀÛ¼ºÇØ º¸¾Ò½À´Ï´Ù. ¸¸ÀÏ, ¿©·¯ºÐÀÇ ÇÁ·ÎÁ§Æ®¿¡ °³¹ß ÇÁ·¹ÀÓ¿öÅ©°¡ µµÀԵǾî ÀÖ°í, ÀÌ¹Ì Business Logic °èÃþ°ú Data Access °èÃþÀÌ Á¸ÀçÇÑ´Ù¸é ÀÌ ¸Þ¼µå´Â ±× ¾ÈÂÊ¿¡ ÀÛ¼ºµÇ¾î¾ß ÇÒ °ÍÀÔ´Ï´Ù.
TitlesManager Ŭ·¡½ºÀÇ ÇÙ½É ¸Þ¼µå´Â »ç½Ç GetTitlesRenderControl() ÀÔ´Ï´Ù. ÀÌ ¸Þ¼µå°¡ ¹Ù·Î ViewManager Ŭ·¡½º¸¦ »ç¿ëÇØ¼! µ¿ÀûÀ¸·Î ÇÊ¿äÇÑ User ControlÀ» ¾ò¾î³»´Â ¸Þ¼µåÀ̴ϱî¿ä. ÇØ¼, ¼Ò½º¸¦ º¸½Ã¸é ÀÌ´Â ¿ì¼± GetTitles() ¸Þ¼µå¸¦ ÀÌ¿ëÇØ¼ ÇÊ¿äÇÑ DataTableÀ» ¾ò¾î³»°í ÀÖÀ¸¸ç, ±× °¡Á®¿Â µ¥ÀÌÅͰ¡ Á¸ÀçÇÑ´Ù¸é(ÇÑ °³ ÀÌ»óÀÇ Row¸¦ °¡Áø´Ù¸é) View.ascx¶õ ÅÛÇø´À», µ¥ÀÌÅͰ¡ Á¸ÀçÇÏÁö ¾Ê´Â´Ù¸é NoView.ascx¶õ ÅÛÇø´À» µ¿ÀûÀ¸·Î ¾ò¾î¿Í ¹ÝȯÇÏ´Â °ÍÀ» º¼ ¼ö ÀÖ½À´Ï´Ù(View.ascx¶õ ÅÛÇø´À» »ç¿ëÇÏ´Â °æ¿ì¿¡´Â ¹ÙÀεù µ¥ÀÌÅ͸¦ ÇÊ¿ä·Î ÇϹǷÎ, DataTable °³Ã¼¸¦ ÀÎÀÚ·Î ³Ñ°ÜÁÖ¾î¾ß ÇÕ´Ï´Ù).
´ë·«ÀûÀÎ TitlesManager Ŭ·¡½ºÀÇ ¿ªÇÒÀÌ ÀÌÇØ°¡ µÇ½Ã³ª¿ä? ±×·¸½À´Ï´Ù. º° °Í ¾ø½À´Ï´Ù. Äõ¸® °á°ú µ¥ÀÌÅͰ¡ Á¸ÀçÇϸé View.ascx¸¦, µ¥ÀÌÅͰ¡ ¾øÀ¸¸é NoView.ascx¸¦ ¾ò¾î¿À´Â ViewManager Ŭ·¡½ºÀÇ GetViewControl ¸Þ¼µå¸¦ È£ÃâÇÏ´Â °ÍÀÌ ÀüºÎÀ̴ϱî¿ä.
±×·¸±â¿¡, ¿©±â¼ Áß¿äÇÑ °ÍÀº ¹«¾ùº¸´Ùµµ ViewManager.GetViewControl() ¶ó´Â °ÍÀ» ¿©·¯ºÐÀº ¹øÂ½! ´«Ä¡ ä¼ÌÀ» °ÍÀÔ´Ï´Ù. ½ÇÁ¦·Î ascx ÅÛÇø´°ú ÁÖ¾îÁø µ¥ÀÌÅ͸¦ ÀÌ¿ëÇØ µ¿ÀûÀ¸·Î User ControlÀ» »ý¼ºÇÏ´Â ÇÙ½É ¿ªÇÒÀ» Çϴ ģ±¸°¡ ¹Ù·Î ViewManager.GetViewControl()À̴ϱî¿ä. ±×·¸´Ù¸é, ÀÌÁ¦ ViewManager Ŭ·¡½ºÀÇ Äڵ带 Çѹø »ìÆìº¸µµ·Ï ÇϰڽÀ´Ï´Ù.
ViewManager.cs
using System;
using System.Web;
using System.Web.UI;
using System.IO;
using System.Reflection;
public class ViewManager
{
public static UserControl GetViewControl(string path, object data)
{
Page page = new Page();
UserControl viewControl = (UserControl) page.LoadControl(path);
if (data != null)
{
Type viewControlType = viewControl.GetType();
PropertyInfo prop = viewControlType.GetProperty("Data");
if (prop != null)
{
prop.SetValue(viewControl, data, null);
}
else
{
throw new Exception(path + "´Â Data ¼Ó¼ºÀ» °¡Áö°í ÀÖÁö ¾Ê½À´Ï´Ù");
}
}
return viewControl;
}
}
|
ViewManager Ŭ·¡½ºÀÇ ÇÙ½ÉÀº GetViewControl¶ó´Â ¸Þ¼µåÀÔ´Ï´Ù. ÀÌ´Â ÁÖ¾îÁø ascx ÆÄÀϸí°ú ¹ÙÀεù µ¥ÀÌÅ͸¦ ÀÎÀÚ·Î ¹Þ¾Æ¼ ±×¸¦ ÀÌ¿ëÇØ µ¿ÀûÀ¸·Î User ControlÀ» »ý¼ºÇÏ´Â ¿ªÇÒÀ» ÇÕ´Ï´Ù. ÇØ¼, óÀ½ µÎ ÁÙÀÇ ÄÚµå´Â ÀÏ´Ü ÁöÁ¤µÈ °æ·ÎÀÇ ascx ÆÄÀÏÀ» User Control·Î ¾ò¾î³»´Â ÀÛ¾÷À» ¼öÇàÇϰí ÀÖ¾î¿ä.
Page page = new Page();
UserControl viewControl = (UserControl) page.LoadControl(path);
¸¸ÀÏ, ÀÌ·¸°Ô ¾ò¾î¿Â User ControlÀÌ Á¤ÀûÀÎ µ¥ÀÌÅ͸¸À» °¡Áø´Ù¸é, ÇöÀçÀÇ viewControl °³Ã¼¸¦ ±×´ë·Î ¹ÝÈ¯ÇØµµ ¹«°üÇϰÚÁö¸¸, °íÀÛ ±×·± ÀÛ¾÷À» ÇÏ·ÁÇß´Ù¸é ±»ÀÌ ÀÌ·¸°Ô º¹ÀâÇÏ°Ô ViewManager¸¦ Á¦ÀÛÇÒ ÇÊ¿äÁ¶Â÷ ¾ø¾úÀ» °Ì´Ï´Ù. ViewManager°¡ ÇÊ¿äÇÑ ÀÌÀ¯´Â ¹Ù·Î µ¿ÀûÀ¸·Î User ControlÀÇ ¼Ó¼ºÀ» ¼³Á¤ÇÒ Çʿ䰡 Àֱ⠶§¹®À̴ϱî¿ä.
ÄÚµå´Â page.LoadControl() ¸Þ¼µå¸¦ ÀÌ¿ëÇØ¼ UserControl °³Ã¼¸¦ ¾ò¾î¿À±ä ÇßÀ¸³ª, ¹®Á¦´Â ÀÌ »óÅÂ·Î´Â ÇØ´ç UserControlÀÌ Data ¶ó´Â ¼Ó¼ºÀ» °®´ÂÁö ¾î¶²Áö ¾Ë ¼ö°¡ ¾ø´Ù´Â °ÍÀÔ´Ï´Ù. UserControl Çü½ÄÀÇ .NET Ŭ·¡½º´Â Data¶ó´Â Çʵ带 ±âº»ÀûÀ¸·Î °¡Áö°í ÀÖÁö ¾ÊÀ¸´Ï±î¿ä.
ÇÏÁö¸¸, ¿ì¸®°¡ µ¿ÀûÀ¸·Î ·ÎµåÇϰíÀÚ ÇÏ´Â View.ascx ´Â ºÐ¸í Data¶ó´Â °ø°³ ¼Ó¼ºÀ» °¡Áö°í ÀÖ½À´Ï´Ù. ±×·¸´Ù¸é, ¾î¶»°Ô ÇÁ·Î±×·¡¹ÖÀûÀ¸·Î ÀÌ °³Ã¼ÀÇ Data Çʵ带 Á¢±ÙÇÒ ¼ö ÀÖÀ»±î¿ä?
¿ì¸®°¡ À§¿¡¼ ÀÛ¼ºÇسõÀº(À§¿¡¼ ¼Ò½º¸¦ º¸¿©µå·È¾úÁÒ?) View.ascxÀÇ ¼Ò½º¸¦ ´Ù½Ã±Ý »ìÆìº¸¸é ±×´Â Data¶ó´Â object Çü½ÄÀÇ ¼Ó¼ºÀ» °¡Áö°í ÀÖÀ½À» ¾Ë ¼ö ÀÖ½À´Ï´Ù. ±×¸®°í, ÄÁÆ®·ÑÀÇ Page_Load À̺¥Æ® ½Ã¿¡´Â ±× Data¸¦ °¡Áö°í µ¥ÀÌÅÍ ¹ÙÀεùÀ» ½ÃµµÇÔÀ» ¾Ë ¼ö ÀÖÁÒ. ÀÌ´Â ¿ì¸®³¢¸® »çÀü Á¤ÀÇÇØ ³õÀº ±ÔÄ¢ÀÔ´Ï´Ù. Áï,
"¸ðµç ascx ÅÛÇø´µéÀº Data¶ó´Â °ø°³ ¼Ó¼ºÀ» °¡Áö¸ç, µ¥ÀÌÅÍ ¹ÙÀεùÀº ±× µ¥ÀÌÅ͸¦ °¡Áö°í ÀÌ·ç¾îÁø´Ù"
°¡ ¿ì¸®³¢¸® ¾à¼ÓÇØ³õÀº ±ÔÄ¢À̶ó´Â °ÍÀÌÁÒ. ´Ù½Ã ¸»Çؼ, ¿ì¸®°¡ ÅÛÇø´À¸·Î ÀÌ¿ëÇÒ ¸ðµç ascxµéÀº Data¶ó´Â °ø°³ ¼Ó¼ºÀ» °¡Á®¾ß¸¸ ÇÕ´Ï´Ù. Çö½ÇÀûÀ¸·Î À̾߱âÇÏÀÚ¸é, ÀÌ ±ÔÄ¢Àº ÇÁ·ÎÁ§Æ®ÀÇ Å¬·¡½º ¼³°è Ç¥Áع®¼¿¡ ±â·ÏµÇ¾î ÀÖ¾î¾ß ÇÒ °ÍÀ̰í, °³¹ßÀڵ鿡°Ô »çÀü¿¡ ¼÷Áö½ÃÄѾ߸¸ ÇÏ´Â ºÎºÐÀ̾î¾ß ÇÒ °ÍÀÔ´Ï´Ù.
|
±×·¸½À´Ï´Ù. ¹æ¹ýÀº Å©°Ô µÎ °¡Áö°¡ ÀÖ½À´Ï´Ù. Çϳª´Â Data¶ó´Â ¼Ó¼ºÀ» °®´Â ÀÎÅÍÆäÀ̽º¸¦ ÀÛ¼ºÇؼ View.ascx Ŭ·¡½º°¡ ±× ÀÎÅÍÆäÀ̽º(¿¹¸¦ µé¸é, IcommonUC¶õ À̸§À¸·Î)¸¦ ±¸ÇöÇϵµ·Ï Çϰí, ´ÙÀ½°ú °°ÀÌ Äڵ带 ÀÛ¼ºÇÏ´Â ¹æ¹ýÀÌ ÀÖ°ÚÁÒ?
Page page = new Page();
ICommonUC viewControl = (ICommonUC)page.LoadControl(path);
»ç½Ç, ÀÌ ¹æ¹ýÀÌ Á¦°¡ °Á¿¡¼ ¼³¸íÇÏ·Á´Â ¸®Ç÷º¼Ç ¹æ¹ýº¸´Ù ÈξÀ ´õ È¿°úÀûÀÎ ¹æ¹ýÀÓ¿¡´Â Ʋ¸²ÀÌ ¾ø½À´Ï´Ù. ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇÑ´Ù¸é À§ÀÇ GetViewControl() ¸Þ¼µåµµ ´ÙÀ½°ú °°ÀÌ ¸Å¿ì!! °£´ÜÇØÁú ¼ö ÀÖÀ»Å״ϱî¿ä.
public static UserControl GetViewControlwInterface(string path, object data)
{
Page page = new Page();
UserControl ctl = (UserControl)page.LoadControl(path);
ICommonUC viewControl = ctl as ICommonUC;
if(viewControl != null)
viewControl.Data = data;
return ctl;
}
// ¿ä ºÎºÐ ÄÚµå´Â À¯ °æ»ó ¼ö¼®ÀÌ °£¼·Çß´Ù´Â ÈĹ®ÀÌ µ¹°í ÀÖ½À´Ï´Ù.
|
»ç½Ç, °á°ú·ÐÀûÀ¸·Î´Â »ó±â¿Í °°ÀÌ ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇÏ´Â °ÍÀ» °·ÂÈ÷ ÃßõÇÕ´Ï´Ù. ÇÏÁö¸¸, ÀÌ °Á´ ¸®Ç÷º¼ÇÀ» ÀÌ¿ëÇØ¼ ¼Ó¼ºÀ» ¼³Á¤ÇÏ´Â ³»¿ëÀ» º¸¿©µå¸®°í ÀÖ½À´Ï´Ù. ´Ù½Ã º¸¿©µå¸®ÀÚ¸é,
Type viewControlType = viewControl.GetType();
PropertyInfo prop = viewControlType.GetProperty("Data");
if (prop != null)
{
prop.SetValue(viewControl, data, null);
}
°¡ ¹Ù·Î ±×·¯ÇÑ ÄÚµåÀÌÁÒ. ¸®Ç÷º¼ÇÀ» ÀÌ¿ëÇØ¼ ÇöÀç °³Ã¼ Çü½ÄÀÌ Data¶ó´Â ¼Ó¼ºÀ» °®´ÂÁö ¿©ºÎ¸¦ °Ë»çÇϰí, ¸¸ÀÏ ÇØ´ç ¼Ó¼ºÀÌ Á¸ÀçÇÑ´Ù¸é ±× ¼Ó¼º¿¡ µ¥ÀÌÅÍ(¿ì¸®ÀÇ °æ¿ì Ã¥ ¸ñ·Ï DataTable)À» ¹Ð¾î³Ö´Â °ÍÀÔ´Ï´Ù.
¸®Ç÷º¼ÇÀ» ÀÌ¿ëÇÏ´Â ¹æ½ÄÀº ¼º´ÉÀûÀ¸·Î ±×´ÙÁö ÁÁÁö ¾Ê±â¿¡ Å©°Ô ±ÇÀåÇÏÁö´Â ¾Ê½À´Ï´Ù¸¸, Á¦°¡ Âü°íÇÑ ¿ø·¡ÀÇ Æ÷½ºÆ® ±ÛÀÌ ÀÌ ¹æ½ÄÀ» »ç¿ëÇ߱⿡ Àúµµ ÀÌ ¹æ½ÄÀ¸·Î ±ÛÀ» ÀÛ¼ºÇß½À´Ï´Ù. °³ÀÎÀûÀ¸·Î´Â ¸®Ç÷º¼Çº¸´Ù´Â ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇÏ´Â ÂÊÀ» ±ÇÀåÇÏ°í ½Í½À´Ï´Ù. ^^;
ÀÚ. ÀÌÁ¦ TitlesManager¿Í ViewManager°¡ ¸ðµÎ ¿Ï¼ºµÇ¾ú³×¿ä. ViewManager´Â ´Ù¸¥ °÷¿¡¼µµ µÎ°íµÎ°í Àç»ç¿ëÀÌ °¡´ÉÇÑ µ¶¸³ÀûÀÎ ¸ðµâÀÔ´Ï´Ù. ¸¸ÀÏ, ¿©·¯ºÐÀÌ Ã¥ ¸ñ·ÏÀÌ ¾Æ´Ñ °í°´ µ¥ÀÌÅÍ ¸ñ·ÏÀ» ´Ù·ç°í ½Í´Ù¸é, CustomerManager¿Í °°Àº Ŭ·¡½º¸¦ ¸¸µé°í (ÄÚµå´Â TitlesManager¿Í À¯»çÇϰÚÁÒ?) ³»ºÎÀûÀ¸·Î ViewManager¸¦ »ç¿ëÇÏ½Ã¸é µÉ °ÍÀÔ´Ï´Ù. ^^
ÀÚ. ±×·³ ÀÌÁ¦ À̸¦ ÀÌ¿ëÇÏ´Â ASPX ÆäÀÌÁö¸¦ ¸¸µé¾îºÁ¾ß °ÚÁÒ? Àú´Â default.aspx ÆäÀÌÁö¿¡ Label ÄÁÆ®·ÑÀ» Çϳª ¿Ã·Á³õ°í(±»ÀÌ LabelÀÏ ÀÌÀ¯´Â ¾øÁö¸¸), ÄÚµå ºñÇÏÀε忡´Â ´ÙÀ½°ú °°ÀÌ Äڵ带 ÀÛ¼ºÇØ º¸¾Ò½À´Ï´Ù.
default.aspx.cs
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
UserControl ctl = (new TitlesManager()).GetTitlesRenderControl();
lblData.Controls.Add(ctl);
}
}
|
°£´ÜÇÏÁÒ? ´ÙÀ½Àº Àüü ¼Ò½º°¡ µ¿ÀÛÇÏ¿© ³ª¿Â °á°úȸéÀÔ´Ï´Ù.(Àú´Â ¾à°£ÀÇ µðÀÚÀÎÀ» ÀÔÇôºÃ½À´Ï´Ù. ±×·¡ºÁ¾ß Å« Â÷ÀÌ´Â ¾øÁö¸¸ -_-)
³ª¸§´ë·Î ¸ÚÁöÁö ¾Ê³ª¿ä? ¤¾¤¾
À̰ÍÀÌ À̹ø °Á¿¡¼ ÀüÇÏ°í ½Í¾ú´ø ³»¿ëÀÔ´Ï´Ù. »ç½Ç, Á¦´ë·Î ÀÌÇØÇÏ·Á¸é Àüü ¼Ò½º¸¦ Çѹø µ¹·Áº¸°í µð¹ö±ë Àâ°í, ¼Ò½º¸¦ µû¶ó°¡¸é¼ È®ÀÎÇÏ´Â°Ô ´õ ÁÁ±ä ÇÏÁÒ. ÇØ¼, °Á ÇÏ´Ü¿¡¼´Â Àüü ¼Ò½º¸¦ ´Ù¿î·Îµå ÇÒ ¼ö ÀÖµµ·Ï ÁغñÇØ µÎ¾ú½À´Ï´Ù. ÀüüÀûÀ¸·Î µ¹¾Æ°¡´Â ¹æ½ÄÀ» È®ÀÎÇÏ½Ã°í ³ª¸é ÀÌ ¹æ½ÄÀÌ ¸¾¿¡ µå½Ã´Â ºÐµéµµ Á¶±Ý ÀÖÁö ¾ÊÀ»±î »ý°¢ÇØ º¾´Ï´Ù.
±×¸®°í, Ãß°¡ÀûÀ¸·Î ViewManager Ŭ·¡½º¸¦ º¸¸é User ControlÀ» Á÷Á¢ÀûÀ¸·Î ¹ÝȯÇÏÁö ¾Ê°í, ±× User ControlÀÇ ³»¿ëÀ» HTML ¹®ÀÚ¿·Î ·»´õÇÏ¿© ¹ÝȯÇÏ´Â ¸Þ¼µåµµ µé¾îÀÖ´Â °ÍÀ» º¸½Ç ¼ö ÀÖÀ» °ÍÀÔ´Ï´Ù. ASP.NET ¾ÖÇø®ÄÉÀ̼ǿ¡¼´Â ÀÌ ¸Þ¼µå°¡ ±×´ÙÁö À¯¿ëÇÏÁö ¾ÊÀ» ¼ö ÀÖÁö¸¸, AJAX ¾ÖÇø®ÄÉÀ̼ÇÀ» °³¹ßÇÑ´Ù¸é ³ª¸§´ë·Î ¾µ¸¸ÇÏ´Ù°í ÇÒ ¼ö ÀÖ½À´Ï´Ù. ±× ¸Þ¼µå¸¦ À¥ ¼ºñ½ºÀÇ ¸Þ¼µå·Î »© ³õÀ¸¸é, Ŭ¶óÀÌ¾ðÆ® Ãø¿¡¼ ¼Õ½±°Ô ¸ñ·Ï µ¥ÀÌÆ® Ãâ·ÂÀ» ¾ò¾î¿Í ȸ鿡 ¹Ý¿µÇÒ ¼ö ÀÖÀ»Å״ϱî¿ä ^^;
±×¸® ¾î·Á¿î ³»¿ëÀº ¾Æ´Ñµ¥, Á¦°¡ ¼³¸íÀ» °£°áÇÏ°Ô ÇÏÁö ¸øÇؼ ¿ÀÈ÷·Á ¿©·¯ºÐÀ» ¾î·Æ°Ô ¸¸µç °ÍÀº ¾Æ´ÑÁö °ÆÁ¤µË´Ï´Ù. ÇÏÁö¸¸, ¸¾¿¡´Â µå¼ÌÁÒ?
°¨»çÇÕ´Ï´Ù. ±×·³ ¶Ç ´ÙÀ½ °Á¿¡¼ ã¾ÆºÉ²²¿ä ^^
À̹ø °Á¿¡ ¾²ÀÎ ¼Ò½º(ÇÁ·ÎÁ§Æ® Àüü)¸¦ ¿øÇϽøé Ŭ¸¯Çϼ¼¿ä ^^
°Á ¸ñ·ÏÀ¸·Î..
|