lecture Home > ASP.NET > Ç÷¯±×ÀÎÀÇ .NET ³×Æ®¿öÅ© ÇÁ·Î±×·¡¹Ö

.NET ¼ÒÄÏ ÄÄÆ÷³ÍÆ® °³¹ß°ú ASP¿¡¼­ »ç¿ëÇϱâ

   °­Á ÃÖÃÊ ÀÛ¼ºÀÏ : 2004³â 06¿ù 14ÀÏ
   °­Á ÃÖÁ¾ ¼öÁ¤ÀÏ : 2004³â 06¿ù 17ÀÏ

   °­Á ÀÐÀ½ ¼ö : ȸ

   ÀÛ¼ºÀÚ : pluginnz(ÃÖ À±±Ô)
   ÆíÁýÀÚ : Taeyo(±è Å¿µ)

   °­Á Á¦¸ñ : .NET ³×Æ®¿öÅ© ÇÁ·Î±×·¡¹Ö (6)

°­Á Àü Å¿ÀÀÇ Àâ´ã>

´º Å¿À »çÀÌÆ®ÀÇ ´º °Ô½ÃÆÇ ÁغñÁßÀÔ´Ï´Ù...
¾Æ... ¸ðµç ½ºÅ©¸³Æ®¸¦ HTC·Î ¹Ù²Ù·Á´Ï ½Ã°£ÀÌ Àå³­ÀÌ ¾Æ´Ï³×¿ä ¤Ð¤Ð


°­Á ½ÃÀÛ >

°­ÁÂ Àü¿¡

¾È³çÇϼ¼¿ä. À̹ø°­Á¿¡¼­´Â °í¼öÁØ TCP ¼ÒÄÏÀ» ´Ù·ïº¸°í, .NetÀÇ ¾î¼Àºí¸®¿¡ ¾Ë¾Æº¾´Ï´Ù.

°í¼öÁØ Å¬·¡½º¸¦ ÀÌ¿ëÇÑ ¼ÒÄÏ Åë½Å

System.Net.Sockets.TcpListener ¿Í System.Net.Sockets.TcpClient 2°³ÀÇ Å¬·¡½º·Î ÀÌ·ç¾îÁø TCP Ŭ·¡½º¸¦ ÅëÇØ Àú¹ø½Ã°£¿¡ Socket À¸·Î ±¸ÇöÇÑ ¼Ò½º¸¦ ¶È°°ÀÌ ±¸ÇöÇØ º¸µµ·Ï ÇϰڽÀ´Ï´Ù. ±âÁ¸ÀÇ Socket À» ÅëÇØ ±¸ÇöÇÑ °³³ä°ú ºñ½ÁÇÏÁö¸¸, Socket Ŭ·¡½º¿Í´Â ´Ù¸£°Ô ´Ù·ç±â°¡ Á» ´õ ½±´Ù°í ÇÕ´Ï´Ù. ±×·¡¼­ "°í¼öÁØ Tcp Ŭ·¡½º" ¶ó°í Çϸé "Socket Ŭ·¡½º"´Â Àú¼öÁØÀ̶ó°í ¸í¸íÇϰí ÀÖ½À´Ï´Ù. (°³ÀÎÀûÀ¸·Î´Â intellesence ±â´É ¶§¹®¿¡ µÑ ´Ù ´Ù·ç±â ÆíÇѰа°½À´Ï´Ù¸¸,)

¾Æ·¡Ç¥´Â ¿ì¸®°¡ À̹̹è¿î Socket Ŭ·¡½ºÀÇ ÀÇ ¸Þ¼Òµå¿¡ ´ëÀÀµÇ´Â TCP Ŭ·¡½ºÀÇ Å¬·¡½º¿Í ¸Þ¼ÒµîÀ» ¸ÅÄªÇØº»°ÍÀÔ´Ï´Ù.

ÇÏÀ§ TCP Ŭ·¡½º ¹æ½Ä
Socket socket = new Socket(TCP¼³Á¤)
socket.Listener();
socket.Bind(IPEndPoint);
Socket Client = socket.Accept();
Client.Write();
Client.Read();
Client.Close();
»óÀ§ TCP Ŭ·¡½º ÀÌ¿ë¹æ½Ä
TcpListener ln =new TcpListener(EndPoint); ln.Start(); //Socket ÀÇ Listener ¿¡ ÇØ´çµÈ´Ù.
TcpClient client = ln.AccepTcpClient();
NetworkStream ns = client.GetStream();
ns.Write();
ns.Read();
ns.Close();

Àá±ñ Ư¼ºÀ» ¾Ë¾Æº¸ÀÚ¸é, ±âÁ¸ÀÇ Socket Ŭ·¡½º´Â Socket »ý¼ºÀÚ·Î ÀνºÅϽº¸¦ »ý¼ºÇϸ鼭, TCPÀÎÁö UDP ÀÎÁö¿¡ ´ëÇÑ ¾Æ·¡¿Í °°Àº ¿É¼ÇÀ¸·Î ÁöÁ¤ÇØÁà¾ß ÇÕ´Ï´Ù.

Socket server = new Socket (AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);

TCP Ŭ·¡½ºÀÇ °æ¿ì´Â µû·Î TCP ¼³Á¤¾øÀÌ, TCP¸¸ÀÇ Åë½ÅÀ» À§ÇØ Àú¼öÁØÀÇ SocketÀ¸·Î ÀÛ¼ºµÈ TCPListener, TCPClient Ŭ·¡½º¸¦ .Net ¿¡¼­´Â Áö¿øÇÕ´Ï´Ù.±×·¡¼­ º¹ÀâÇÑ ¼³Á¤¾øÀÌ

TcpListener ln = new TcpListener(EndPoint)

·Î ´ë½Å ÇÕ´Ï´Ù. EndPoint°´Ã¼¸¦ ¸¸µé±â À§ÇØ IPEndPointŬ·¡½º·Î ÀνºÅϽº¸¦ µû·Î ÀÛ¼ºÇϴ°ÍÀº ÀÌ¹Ì Socket ´Ù·ç¸é¼­ ¸¹ÀÌ ºÁ¿ÔÀ» °ÍÀÔ´Ï´Ù. ÇÏÁö¸¸ TCP °´Ã¼ ¿¡¼­´Â Á» ´õ ÆíÇÏ°Ô ¿À¹ö·ÎµùµÈ »ý¼ºÀÚ¸¦ °¡Áö°í ÀÖ¾î µû·Î IPEndPoint ÀνºÅϽº»ý¼ºÀÚ¸¦ ¸¸µéÁö¾Ê°í ¾Æ·¡¿Í °°À̵µ °¡´ÉÇÕ´Ï´Ù.

    TcpListener ln = new TcpListener(int port);
        -> TcpListener ln = new TcpListener(6000);

ÀÌ·¯ÇÑ ½ÄÀ¸·Î Æ÷Æ® ¹øÈ£¸¸ ÁöÁ¤ÇØÁÖ¸é ÀÚ½ÅÀÇ IP ¸¦ ¼­¹öIP·Î Çϰí port ¸¸ int °ªÀ¸·Î ÀÔ·ÂÇØÁÖ¸é IPEndPoint ÀνºÅϽº¸¦ µû·Î ÀÛ¼ºÇØÁÖ½Ç Çʿ䰡 ¾ø½À´Ï´Ù. Á» ´õ ¼³¸íÇÏÀÚ¸é,

Ŭ¶óÀ̾ðÆ®ÀÇ Á¢¼ÓÀ» ´ë±âÇÏ´Â TcpListener Ŭ·¡½º¿Í Ŭ¶óÀÌ¾ðÆ® ¼ÒÄÏ °´Ã¼¸¦ °¡¸®Å°´Â TcpClient Ŭ·¡½º·Î ±¸ÇöÀÌ µÇ¾î ÀÖ½À´Ï´Ù. ³»ºÎÀûÀ¸·Î´Â Socket Ŭ·¡½º·Î ÀÛ¼ºµÇ¾îÁ® ÀÖÀ¸¹Ç·Î, Socket Ŭ·¡½º¸¦ ½á¾ßÇÒÁö TcpListener , TcpClient °´Ã¼¸¦ ½á¾ßÇÒÁö °í¹ÎÇÒ ÇÊ¿ä´Â Ưº°È÷ ¾øÀ» °ÍÀÔ´Ï´Ù. ÀÚ½ÅÀÌ ÆíÇÑ ¹æ½ÄÀ» ¼±ÅÃÇØ¼­ ÇÁ·Î±×·¡¹ÖÀ» ÀÛ¼ºÇÏ½Ã¸é µÇ°Ú½À´Ï´Ù. ±¸Áö Àå´ÜÁ¡À» µûÁöÀÚ¸é TCPListener , TcpClient (ÀÌÇÏ TCP Ŭ·¡½º) ´Â ÀÎÅÍÆäÀ̽º°¡ »ç¿ëÀÚµéÀÌ Á¢ÇϱⰡ Á¶±Ý ´õ ½±´Ù´Â Á¡ÀÔ´Ï´Ù.

    Socket Client = socket.Accept(); // ±âÁ¸ Socket
    TcpClient client = ln.AccepTcpClient(); // Tcp Ŭ·¡½º

±âÁ¸ÀÇ Socket À» ÀÌ¿ëÇÑ ¹æ½ÄÀº ¼­¹ö¼ÒÄϰ´Ã¼.Accept(); ¸Þ¼Òµå°¡, Á¢¼ÓµÇ´Â Ŭ¶óÀ̾ðÆ®ÀÇ IPEndPoint Á¤º¸¸¦ °¡Áö°í ¼ÒÄÏ °´Ã¼·Î ¸®ÅϵǴ ¸ð½ÀÀÔ´Ï´Ù.

TCP Ŭ·¡½º¸¦ ¿¹·Î Á» ´õ Á÷°üÀûÀ¸·Î ¸»ÇÏÁö¸é, Ŭ¶óÀ̾ðÆ®ÀÇ Á¢¼ÓÀ» ¸®½º´×Çϰí ÀÖ´Â ln ÀνºÅϽº°¡ AccepTcpClient() ¸Þ¼Òµå¸¦ È£ÃâÇÏ¿© Ŭ¶óÀÌ¾ðÆ® Á¢¼ÓÀ» ´ë±âÇÏ´Ù°¡, Á¢¼ÓÀÌ ½ÃµµµÇ¸é Ŭ¶óÀ̾ðÆ®Ãø IPEndPointÀÇ Á¤º¸¸¦ °¡Áö°í ÀÖ´Â TcpClient °´Ã¼·Î ¸®ÅÏÇÏ°Ô µË´Ï´Ù.

ÀÚ.. µÑ´Ù °°Àº¸»ÀÔ´Ï´Ù. TCP Ŭ·¡½º·Î ÀÛ¼ºµÈ TcpClient °´Ã¼°¡ Á» ´õ Á÷°üÀûÀ¸·Î º¸ÀÏ »ÓÀÔ´Ï´Ù. TCP Ŭ·¡½º·Î ÀÛ¼ºµÈ ¼ÒÄÏÀÇ °æ¿ì ÇѰ¡Áö ƯÀÌÇÑ Á¡ÀÌ Àִµ¥, ±×°ÍÀº TcpClient·Î ¸®ÅÏµÈ °´Ã¼°¡ Á÷Á¢ Åë½ÅÀ» ÇÏÁö ¾Ê´Â´Ù´Â°ÍÀÔ´Ï´Ù. ¾Æ·¡¸¦ º¸¸é,

    NetworkStream ns = client.GetStream();
    ns.Write();
    ns.Read();

Ŭ¶óÀ̾ðÆ®Ãø ÀνºÅϽº°¡ getStream() ¸Þ¼Òµå¸¦ ÅëÇØ ½ºÆ®¸² Åë½ÅÀ» ÇÒ ¼ö ÀÖµµ·Ï NetworkStream À¸·Î ¸®ÅÏÀÌ µË´Ï´Ù. Áï, ½ÇÁ¦ÀûÀ¸·Î ÇÏÀ§ ¼ÒÄÏ¿¡¼­ÀÇ ¿¬°á¼³Á¤°ú ¸®½º´×, ¹ÙÀεù , Accept ¸¦ Socket °´Ã¼È¥ÀÚ¼­ ÇÑ´Ù¸é, TCP Ŭ·¡½º¿¡¼­´Â ¿¬°á¼³Á¤,¸®½º´×,¹ÙÀεù,Accept´Â TcpListener Á¢¼ÓµÈ Ŭ¶óÀÌ¾ðÆ® ¼ÒÄÏÀº TcpClient ±×¸®°í ½ÇÁ¦ ¼Û/¼ö½ÅÀº NetworkStream ÀÌ ÇÏ°Ô µÇ´Â°ÍÀÔ´Ï´Ù. Á» ´õ º¹ÀâÇØ º¸Àϼö´Â ÀÖÁö¸¸ ¾î¶»°Ô º¸¸é TCP Ŭ·¡½º°¡ Á» ´õ Á÷°üÀûÀÌ°í ¼ø¼­ ÀûÀÏ ¼ö°¡ ÀÖ½À´Ï´Ù. ¿ªÇÒÀÌ ºÐ´ãµÇ¾î ÀÖ´Ù°í ÇÒ ¼ö ÀÖ°Ú½À´Ï´Ù. ÇÏÁö¸¸ À§¿¡¼­ Àá±ñ ¸»¾¸µå·ÈµíÀÌ ¾î¶»°Ô ÇÁ·Î±×·¡¹ÖÀ» ÀÛ¼ºÇϽôø "¼±ÅÃ"ÀÔ´Ï´Ù. ÇÏÁö¸¸ ¼±ÅÃÀ̶õ ¸»Àº µÎ°¡Áö·Î ¸ðµÎ ÀÛ¼º ÇØºÁ¾ß "¼±ÅÃ" ÇÒ ¼ö ÀÖ´Â ¸é¸ñ? ÀÌ »ý±âÁö ¾Ê³ª ½Í½À´Ï´Ù. ±×·³ ÀÌ·¯ÇÑ ´ë·«ÀûÀÎ ³»¿ëÀ» Åä´ë·Î ÀÛ¼ºµÈ ÀüÁ¦ ¼Ò½º¸¦ º¸°Ú½À´Ï´Ù.

[¼­¹öÃø ¼Ò½º]

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

namespace ServerHighSocket
{
    class Class1
    {
        static byte[] rData = new byte[1024];
        static byte[] sData = new byte[1024];

        [STAThread]    static void Main(string[] args)
        {

            IPAddress ipAddr = Dns.Resolve("127.0.0.1").AddressList[0];
            IPEndPoint ipEnd = new IPEndPoint(ipAddr,6000);

            TcpListener listener = new TcpListener(6000);
            listener.Start();

            Console.WriteLine("--------------------------------");
            Console.WriteLine(" Ŭ¶óÀ̾ðÆ®ÀÇ ¿¬°áÀ» ±â´Ù¸³´Ï´Ù.");
            Console.WriteLine("--------------------------------");

            TcpClient client = listener.AcceptTcpClient();
            NetworkStream ns = client.GetStream();

            while(true)
            {
                int rDataLength = ns.Read(rData,0,rData.Length);

                if (rDataLength > 0)
                {
                    Console.WriteLine("¼ö½Åµ¥ÀÌÅÍ>>{0}",Encoding.UTF7.GetString(rData,0,Class1.byteArrayDefrag(rData)+1));
                    ns.Write(rData,0,rData.Length);
                }
            }
        }

        public static int byteArrayDefrag(byte[] sData)
        {
            int endLength = 0;
            for(int i=0; i< sData.Length ;i++)
            {
                if((byte)sData[i] != (byte)0)
                {
                    endLength =i;
                }
            }
            return endLength;
        }
    }
}

[Ŭ¶óÀ̾ðÆ®Ãø ¼Ò½º]

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

namespace ClientHighSocket
{
    class Class1
    {
        static byte[] rData = new byte[1024];
        static byte[] sData = new byte[1024];
        
        [STAThread]    static void Main(string[] args)
        {
            TcpClient client = new TcpClient();
            client.Connect("127.0.0.1",6000);
            NetworkStream ns = client.GetStream();
            
            Console.WriteLine("--------------------------");
            Console.WriteLine(" ¼­¹ö¿¡ Á¢¼ÓÇÕ´Ï´Ù. ");
            Console.WriteLine("--------------------------");

            while(true)
            {
                if (ns.CanWrite)
                {
                    Console.Write("¹ß¼ÛÇÒµ¥ÀÌÅÍ>>>");
                    sData = Encoding.UTF7.GetBytes(Console.ReadLine());
                    ns.Write(sData,0,sData.Length);

                    int rDataLength = ns.Read(rData,0,rData.Length);

                    if (rDataLength > 0)
                    {
                        Console.WriteLine("¼ö½Åµ¥ÀÌÅÍ>>{0}",Encoding.UTF7.GetString(rData,0,Class1.byteArrayDefrag(rData)+1));
                    }
                }
            }
        }

        public static int byteArrayDefrag(byte[] sData)
        {
            int endLength = 0;
            for(int i=0; i< sData.Length;i++)
            {
                if((byte)sData[i] != (byte)0)
                {
                    endLength =i;
                }
            }

            return endLength;
        }
    }
}

±âÁ¸ÀÇ Socket Ŭ·¡½º·Î Á÷Á¢ ÄÚµùÀ» ÇØº¸¼Ì´ø ºÐÀ̶ó¸é Ưº°È÷ ¾î·Á¿î ºÎºÐµéÀº ¾ø¾úÀ» °ÍÀÔ´Ï´Ù. ´ÜÁö, TCP Ŭ·¡½ºÀÇ ÀÌÇØ°¡ Á¶±Ý ÇÊ¿äÇÒ »ÓÀÔ´Ï´Ù. À̰ÍÀ¸·Î ´ë°­ ¼ÒÄÏ¿¡ ´ëÇÑ °­Á¸¦ 1´Ü¶ô ¸·À» ³»¸°°Í °°½À´Ï´Ù. ¹°·Ð ¸¹ÀÌ ºÎÁ·ÇÕ´Ï´Ù. »ç½Ç Àúµµ °øºÎÇϰí ÀÔ´Â ÀÔÀåÀ̶ó ¾Ö¸ÅÇϰí, ¼³¸íÀÌ ¾ÈµÇ´Â°Ç ÇÇÇØ°£°Íµµ ÀÖ°í -_-; °­Á¸¦ ³Ê¹« ±æ°Ô ÇÏÁö ¾ÊÀ¸·Á°íº¸´Ï ¸î°¡Áö »©¸ÔÀº°Íµµ ÀÖ½À´Ï´Ù. °í¼öÁØ Udp ¼ÒÄÏÅë½Å°ú udp ¸¦ ÀÌ¿ëÇÑ ¸ÖƼij½ºÆ® Åë½Å(1:n) ÇÏÁö¸¸ Áß¿äÇѰÍÀº.. asp ½ÃÀý ¼ÒÄÏÀ» ¸¸µéÁö ¸øÇØ ÀÛ¾÷»ó ¾î¶°ÇÑ ºÒÀÌÀÍ? À» ´çÇϼ˰ųª -_-;;

"asp ·Î´Â ±×°Íµµ ¸øÇØ? ´Ï°¡ ¸øÇϴ°Š¾Æ³Ä?"´Â ½ÄÀÇ ¾ï¿ïÇÔÀ» °ÝÀ¸¼Ì´ø ºÐµé²²´Â ¼ÒÄÏÀ» ½ÃÀÛÇϴµ¥ ´Ù¼Ò µµ¿òÀ» ÁÖÁö ¾Ê¾Ò³ª ½Í½À´Ï´Ù. ¹°·Ð ÀÌ ½Ã°£À¸·Î °­Á°¡ ³¡³ª´Â °ÍÀº ¾Æ´Õ´Ï´Ù. °­Á´ °è¼ÓµË´Ï´Ù.

°ø¿ë(Àü¿ª) ¾î¼Àºí¸® ¿Í »ç¼³ ¾î¼Àºí¸®

¾î¼Àºí¸®¶õ ª°Ô ³ª¸¶ ÇÁ·Î±×·¡¹Ö¿¡ °ü½ÉÀ» °¡Áö¼Ì´ø ºÐµéÀ̶ó¸é. ±â°è¾î¸¦ Àΰ£ÀÌ º¸±â ½±°Ô ¸¸µç ±âȣȭ ¾ð¾îÀÎ ¾î¼Àºí¸® ¶Ç´Â ±â°è¾î ½ÄÀ¸·Î ÀνÄÀ» ÇÏ°í °è½Ç°ÍÀÔ´Ï´Ù. .Net ¿¡¼­´Â ±× ¾ð¾î ÀÚü¸¦ °¡¸®Å°´Â °Å °°Áö´Â ¾Ê½À´Ï´Ù. .Net ¿¡¼­ÀÇ ¾î¼Àºí¸®´Â ½ÇÇàÆÄÀÏÀÇ ´ÜÀ§ÀÔ´Ï´Ù. .Net ÀÇ ÄÄÆÄÀÏÀ» °ÅÃÄ »ý¼ºµÈ MSIL(MicroSoft intermediate Language) ÄÚµåÀÇ EXE, DLL ÆÄÀϵéÀÔ´Ï´Ù.(»ç½ÇÀº ¾î¼Àºí ¸®°¡ MSILÄڵ带 Æ÷ÇÔÇϰí ÀÖ½À´Ï´Ù. ¾î¼Àºí¸®´Â MSIL ÄÚµå¿Ü¿¡µµ ÀÚ±âÀÚ½ÅÀÇ Á¤º¸¸¦ °¡Áö°í ÀÖ´Â Meta Data, ¸®¼Ò½º µîÀ¸·Î ±¸ºÐµÇ¾î ÀÖ½À´Ï´Ù.-¾Æ·¡)

¸Å´Ï Æä½ºÆ®(¸ÞŸ µ¥ÀÌÅÍ ¿µ¿ª) MSIL ÄÚµå ¸®¼Ò½º
¾î¼Àºí¸® ¸ÞŸµ¥ÀÌÅÍ Çü½Ä ¸ÞŸ µ¥ÀÌÅÍ MSIL ÄÚµå ºñ ½ÇÇà ºÎºÐ

°£´ÜÇÏ°Ô ¼³¸íÇÏÀÚ¸é, ¾î¼Àºí¸® ¸ÞŸµ¥ÀÌÅÍÀÇ °æ¿ì ÀÚ½ÅÀÌ Çʿ信 ÀÇÇØ ÂüÁ¶µÈ ´Ù¸¥ ¾î¼Àºí¸®µéÀÇ Á¤º¸¸¦ °¡Áö°í ÀÖ´Â µ¥ÀÌÅͺ£À̽º À̸ç, Çü½Ä ¸ÞŸ µ¥ÀÌÅÍÀÇ °æ¿ì ÀÚ½ÅÀÇ ¾î¼Àºí¸®¿¡ ´ëÇÑ Self Description À̶ó°í ÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×¸®°í ÈçÈ÷ .Net ÀÇ ÄÚµå´Â MSIL ÄÚµåÀÌ´Ù ¶ó°í ¸»ÇÏ´Â MSIL ÄÚµå(ÄÄÆÄÀÏµÈ ¼Ò½º(?) -> ´Ù½Ã JIT ¿¡ ÀÇÇØ ·±Å¸ÀÓÀÌ ÄÄÆÄÀÏ µÇ°ÚÁö¿ä) ±×¸®°í ¾ÆÀÌÄÜÀ̳ª À̹ÌÁö¿Í °°Àº ½ÇÇàÀ» Á¦¿ÜÇÑ µ¥ÀÌÅ͵éÀ» ´ã°í ÀÖ´Â ¸®¼Ò½º ºÎºÐÀÌ ÀÖ½À´Ï´Ù.

ÀÚ, DLL ÄÄÆ÷³ÍÆ®´Â À¥ÇÁ·Î±×·¡¹Ö »Ó¸¸¾Æ´Ï¶ó. .Net À̵ç C++ ÀÌ´ø º£ÀÌÁ÷ÀÌµç ¸ðµç ¾ð¾îµéÀÌ ÂüÁ¶µÉ¼ö ÀÖ´Â ÇϳªÀÇ ½ÇÇàÆÄÀÏÀÇ ´ÜÀ§°¡ µÉ ¼ö ÀÖ½À´Ï´Ù. ÀÌ·¯ÇÑ DLL ÆÄÀϵéÀÌ ÇϳªÀÇ ¾îÇø®ÄÉÀ̼ǿ¡¸¸ ƯÈ÷ ÂüÁ¶µÇ¾î »ç¿ëµÉ °ÍÀ̳Ä. ¾Æ´Ï¸é ¿©·¯ ¾îÇø®ÄÉÀ̼ÇÀÌ °øÅëÀûÀ¸·Î »ç¿ëµÈ´Â DLL ÆÄÀÏÀ̳Ŀ¡ µû¶ó °ø¿ë¾î¼Àºí¸®¿Í »ç¼³ ¾î¼Àºí¸® ·Î ±¸ºÐµÉ ¼ö°¡ ÀÖ½À´Ï´Ù. ¿ì¸®°¡ ASP¿¡¼­ Regsvr32 ¸¦ ÅëÇØ DLL ÆÄÀÏÀ» ·¹Áö½ºÆ®¸®¿¡ µî·ÏÇÏ°í »ç¿ë µÇ´ø °ÍÀÌ °ø¿ë¾î¼Àºí¸®¶ó º¼ ¼ö ÀÖÀ¸¸ç, °ÔÀÓÀ̳ª ¾î¶°ÇÑ ÀÏ¹Ý ÀÀ¿ëÇÁ·Î±×·¥¿¡¼­¸¸ µî·ÏµÇ¾î Ȱ¿ëµÇ´Â DLL ÀÇ °æ¿ì¸¦ »ç¼³ ¾î¼Àºí¸®¶óÇÒ ¼ö ÀÖ½À´Ï´Ù. »ç¼³ ¾î¼Àºí¸®´Â ·¹Áö½ºÆ®¸®¿¡ µî·ÏÇÒ ÇÊ¿ä¾øÀÌ ÂüÁ¶ ¸Þ´º¸¦ Ŭ¸¯Çؼ­ ÇÊ¿äÇÑ ÄÄÆ÷³ÍÆ®¸¦ ÂüÁ¶Çؼ­ ±×´ë·Î ¾²´Â °ÍÀÔ´Ï´Ù

¿ì¸®´Â À¥ ÇÁ·Î±×·¡¸ÓÀ̱⠶§¹®¿¡ À¥°ú °ü·ÃµÇ¾î À̾߱â ÇØº¸°Ú½À´Ï´Ù.

±âÁ¸¿¡ ASP·Î ÇÁ·Î±×·¡¹ÖÀ» ÇÏ´Ùº¸¸é ASP ³»¿¡¼­ ó¸®ÇÒ ¼ö ¾ø´Â ºÎºÐ Áö±Ý ÀúÈñ°¡ ¹è¿ì°í ÀÖ´Â ¼ÒÄÏ °ü·ÃÀÌ ¶ó´ø°¡ ĸ½¶È­ÇÏ¿© µ¹¸®°í ½ÍÀº ¸ðµâµîÀ» ¶óÀ̺귯¸®(DLL) ·Î ¸¸µé¾î ³»°í Regsvr32 ¸¦ ÅëÇØ ·¹Áö½ºÆ®¸®¿¡ µî·Ï ÇϰԵ˴ϴÙ. À̰ÍÀº °ø¿ë¾î¼Àºí¸®ÀÇ °æ¿ì°¡ µÇ°Ú½À´Ï´Ù. °ø¿ë¾î¼Àºí¸®ÀÇ °æ¿ì´Â, DLLÀ» ÂüÁ¶ ÇϰíÀÚ ÇÏ´Â ÆÄÀϰú °°Àº Æú´õ¿¡ ¾ø¾îµµ »ç¿ëÀÌ °¡´ÉÇÕ´Ï´Ù.(»ç¼³ ¾î¼Àºí¸®´Â °°ÀÌ ÀÖ¾î¾ß ÇÕ´Ï´Ù.) ´ë½Å ·¹Áö½ºÆ®¸®¿¡ µî·ÏÀ» ÇØÁà¾ß ÇÏ´Â ÀýÂ÷°¡ ÇÊ¿äÇÕ´Ï´Ù.(»ç¼³ ¾î¼Àºí¸®´Â ÀÛ¾÷ ÆÄÀϰú ÇÔ²² ³Ö¾î µÎ¸é µË´Ï´Ù.) ·¹Áö½ºÆ®¸®¿¡ µî·ÏµÈ DLLÀÇ ÂüÁ¶´Â asp ÀÇ Server °´Ã¼¸¦ ÅëÇØ °´Ã¼¸¦ »ý¼ºÇس»°í ¸¸µé¾îÁø ÀνºÅϽº´Â ¸Þ¼Òµå¿Í , ¼Ó¼ºµîÀ» ÅëÇØ Á¤º¸¸¦ ´Ù·ç°Ô µË´Ï´Ù.

.Net Framework ȯ°æ¿¡¼­ µ¹¾Æ°¡´Â .Net ¾î¼Àºí¸®ÀÇ °æ¿ì °ü¸®ÄÚµå ¶ó°í ºÎ¸¥´Ù¸é, .Net ÀÌ ¾Æ´Ñ c++ À̳ª VB ȯ°æ¿¡¼­ »ý¼ºµÈ ½ÇÇàÆÄÀÏÀº ºñ°ü¸® ÄÚµå¶ó°í ºÎ¸£°Ô µÈ´Ù´Â°ÍÀ» ÀÌ¹Ì °øºÎÇϽźеéÀ̶ó¸é ¾Æ½Ç °ÍÀÔ´Ï´Ù. ¹®Á¦´Â .Net ÀÇ °ø¿ë¾î¼Àºí¸®ÀÇ °æ¿ì ±âÁ¸ÀÇ DLL °ú °°Àº ¹æ½ÄÀ» ÅëÇØ ASP¿¡¼­ »ç¿ëµÉ ¼ö°¡ ¾ø½À´Ï´Ù. .Net ¿¡¼­ÀÇ ÆÄÀÏ °ü¸® ¹æ¹ýÀº ·¹Áö½ºÆ®¸®¸¦ ÀÇÁ¸ÇÏÁö ¾Ê´Âµ¥, ÀÌ´Â ¾î¼Àºí¸® ÀÚ½ÅÀÌ ¼­¼úÇü½ÄÀÇ ¸ÞŸµ¥ÀÌÅÍ Á¤º¸ °¡Áö°í Àֱ⠶§¹®¿¡ ´õ ÀÌ»ó º¹ÀâÇÑ ¹æ½ÄÀÇ ·¹Áö½ºÆ®¸®¿¡ ÀÇÁ¸ÇÏÁö ¾Ê´Â °ÍÀÔ´Ï´Ù. ´ë½Å ÀÌ·¯ÇÑ ¾î¼Àºí¸®ÆÄÀϵ鿡 ´ëÇÑ °ü¸®°¡ ÇÊ¿äÇѵ¥ ±×°ÍÀº Global Assembly Cache ¶ó°í ÇØ ¼­ C:\winnt\Assembly Æú´õÀÇ Shell Extension¿¡ ÀÇÇØ Ưº°ÇÏ°Ô °ü¸®°¡ µÇ°í ÀÖ½À´Ï´Ù. ±×·³ ¹®Á¦°¡ ÇѰ¡Áö »ý±â°Ô µÇ´Âµ¥

.Net Àº ·¹Áö½ºÆ®¸®¿¡ ÀÇÁ¸ÇÏÁö ¾Ê´Â, ¸ÞŸÁ¤º¸¿Í Global Assembly ¸¦ ÅëÇØ DLL À» °ü¸®Çϰí, ASP ¿¡¼­ »ç¿ëµÉ °ø¿ë¾î¼Àºí¸®´Â ·¹Áö½ºÆ®¸®¿¡ µî·ÏÀ» ÇØ¾ß ÇÑ´Ù´Â °ÍÀÔ´Ï´Ù.

±×·¡¼­ .Net ¿¡¼­´Â DLL ÄÄÆ÷³ÍÆ®¸¦ ±âÁ¸ÀÇ COM °ú °°ÀÌ ÀÛµ¿½ÃŰ°Ô Çϱâ À§ÇÑ ·¹Áö½ºÆ®¸® µî·Ï¹æ¹ýÀ¸·Î RegAsm.Exe ¸¦ ÀÌ¿ëÇÏ°Ô µË´Ï´Ù.

c:>Regasm Pluginn.dll [¼³Ä¡]
c:>Regasm /u Pluginn.dll [Á¦°Å]

»ç¿ë¹ýÀº Regsvr32 ¿Í °°ÀÌ °ú °°Àº ½ÄÀ¸·Î ·¹Áö½ºÆ®¸®¿¡ µî·ÏÀ» ÇÏ°Ô µË´Ï´Ù. ±×¸®°í °ø¿ëÀ¸·Î »ç¿ëµÉ DLL Àº Global Assemly ¿¡ µî·ÏÀ» ÇÏ°Ô µÇ´Âµ¥ ±×°ÍÀº GacUtil ¿¡ ÀÇÇØ Global Assembly Cache ¿¡ µî·ÏÀ» ÇÏ°Ô µË´Ï´Ù. »ç¿ë¹æ¹ýÀº,

c:> GacUtil /i Pluginn.dll [¼³Ä¡]
c:> GacUtil /u Pluginn.dll [Á¦°Å]

[C:\Winnt\Assembly °æ·Î·Î Á¢±ÙÇØ¼­ GAC ¿¡ µî·ÏµÈ ÄÄÆ÷³ÍÆ® ¸ñ·ÏÀ» º»°ÍÀÔ´Ï´Ù.]

ÀÚ ¿©±â±îÁö ÀÌÇØÇϼÌÀ¸¸é Áß¿äÇѰÍÀÌ Çϳª ³²¾Æ Àִµ¥.. ±×°ÍÀº GAC ¿¡ µî·ÏµÉ Assembly µéÀÇ ¹öÀü°ü¸®¸¦ À§ÇÑ Strong NameÀÔ´Ï´Ù. ÇØ¼®ÇÏ¸é °­·ÂÇÑ À̸§À¸·Î ºÒ¸®¿ì´Â À̰ÍÀº Public۸¦ ÀÌ¿ëÇÑ º¸¾È ¹× ¹öÀü°ü¸®¸¦ À§ÇÑ ÇØ¹ýÀ» Á¦½ÃÇØÁÖ°í ÀÖ½À´Ï´Ù. ÀÚ ÀÏ´Ü SN À» »ý¼ºÇÏ´Â °úÁ¤À» º¸¸é,

ÀÌ·¸°Ô µÇ¸é Àú¸¸ÀÇ °íÀ¯ÇÑ pluginn.key ¶ó´Â Ű ÆÄÀÏÀ» °®°Ô µÇ°í, À̰ÍÀº Gac ¿¡ µî·ÏµÈ Assembly ÆÄÀÏÀÇ À§¿¡ º¸½Ã¸é ¡°Public Key Token" Ç׸ñ¿¡ ³ªÅ¸³­ token À» »ý¼ºÇϴµ¥ ¾²ÀÔ´Ï´Ù. ÀÌ·¸°Ô gac ¿¡ µî·ÏµÈ ÄÄÆ÷³ÍÆ®´Â ¹öÀü°ü¸®±â´Éµµ Á¦°øÇÏ°Ô µÇ´Âµ¥,

¿¹¸¦ µéÀÚ¸é, A ¶ó´Â ¾îÇø®ÄÉÀ̼ǿ¡¼­ test.dll ¿¡ sum() À̶ó´Â ¸Þ¼Òµå¸¦ »ç¿ëÇϰí ÀÖ½À´Ï´Ù. °³¹ßÀÚ¿¡ ÀÇÇØ test.dll Àº ¾÷±×·¹À̵尡 µÇ¾î test.dll ¿¡ sum() ÀÌ ¾Æ´Ñ sum2() ·Î ¸Þ¼Òµå°¡ º¯°æÇÏ°Ô µÇ¾ú´Ù¸é ±âÁ¸ÀÇ A ¾îÇ÷¹ÄÉÀ̼ÇÀº DLL Hell ¿¡ ºüÁö°Ô µÉ °ÍÀÔ´Ï´Ù. ÀÌ°Ç ´ÜÀûÀÎ ¿¹ÀÇ °æ¿ìÁö¸¸ ¼ö¸¹Àº ¾îÇø® ÄÉÀ̼ÇÀÌ À©µµ¿ì¿¡ ¼³Ä¡µÇ¸é¼­, ·¹Áö½ºÆ®¸®¿¡ ¼ö¾øÀÌ µî·ÏµÇ°í »èÁ¦µÇ´Â DLL ÀÇ °æ¿ì¶ó¸é ¾ê±â°¡ ´Þ¶óÁö°Ô µË´Ï´Ù. (ÀÌ¹Ì °Ý¾î º¸½ÅºÐµéµµ ÀÖÀ¸¸®¶ó »ý°¢µË´Ï´Ù. Àú´Â À¥Âʸ¸ ÇÏ´Ùº¸´Ï º°·Î..-_-)

ÀÌ·¯ÇÑ Ãæµ¹Çö»óÀ» ÇÇÇϱâ À§ÇØ .Net ¿¡¼­´Â °¢ ¾î¼Àºí¸®ÀÇ ÆÄÀÏ ¼³¸í¼­ÀÎ AssemblyInfo.cs ÆÄÀÏÀ» °¡Áö°Ô µÇ¸ç,

SN.EXE ¿¡ »ý¼ºµÈ Ű ÆÄÀÏÀº ¾î¼Àºí¸®ÀÇ ¸ÞŸÁ¤º¸ÀÎ AssemblyInfo.cs ÆÄÀÏ¿¡ µî·ÏµÇ¾î

ÄÄÆÄÀÏ µÇ°Ô µË´Ï´Ù. ¹°·Ð ¾Æ·¡¿Í °°ÀÌ ¹öÀüµµ ÀûÀ» ¼ö°¡ ÀÖ½À´Ï´Ù.

ÀÌ·¸°Ô sn ۸¦ Æ÷ÇÔÇÏ¿© ÄÄÆÄÀÏµÈ ¾î¼Àºí¸®°¡ µÇ¾î¾ß.. ºñ·Î¼Ò GAC ¿¡ µî·ÏÀÌ µÉ ¼ö ÀÖ½À´Ï´Ù. Áï, .Net ¿¡¼­´Â °°Àº DLL ÀÌ¶óµµ ÆÄÀϸí°ú ¹öÀü ±×¸®°í SN(StrongName) ¿¡ ÀÇÇØ¼­ ¾î¼Àºí¸®¸¦ ´Ù¸£°Ô º¸°ÔµÇ¸ç, Ãæµ¹À» ÃÖ¼ÒÈ­ Çϵµ·Ï ÇѰÍÀÔ´Ï´Ù. »ç½Ç À̺κп¡ ´ëÇØ¼­´Â ´õ ¸¹Àº ³»¿ëÀ» ´Ù·ç¾î¾ß ÇÏÁö¸¸ ¿ì¸®´Â.Net ¼ÒÄÏÀ¸·Î »ý¼ºµÈ DLL ÄÄÆ÷³ÍÆ®¸¦ COM À¸·Î ³»º¸³»¼­ ASP¿¡¼­ »ç¿ëÇϴ°ÍÀÌ ¸ñÀûÀ̱⠶§¹®¿¡ ÀÌÁ¤µµ¸é ÃæºÐÇÑ ³»¿ëÀÌ µÉ²¨ °°½À´Ï´Ù.

¸¹ÀÌ Çì±ò¸®½Å´Ù¸é ´ÙÀ½ °­Á¶§ »ç¼³¾î¼Àºí¸®¿Í , °ø¿ë¾î¼Àºí¸®¸¦ Á÷Á¢ ¿¹·Î ÇØº¸´Â ¼¼¼ÇÀ» °¡Á®º¸µµ·Ï ÇϰڽÀ´Ï´Ù.

±×¸®°í Ãß°¡·Î ½ºÆ®¸²¿¡¼­ÀÇ ¿£ÄÚµù ¹æ½ÄÀÎ UTF7,UTF8¿¡ ´ëÇØ ¾Ë¾Æº¸·Á°í ÇÕ´Ï´Ù. ¹®ÀÚ Encoding ¿¡ ´ëÇØ¼­´Â ¾î¶² ºÐÀÌ ¸ÞÀÏ·Î Áú¹®À» ÇØÁ̴ּµ¥.. À̺κÐÀ» °­Á·Π´Ù·ç´Â°Ô ÁÁÀ»°Å¶ó°í »ý°¢ÀÌ µé¾î Àúµµ Á» ´õ °øºÎÇÏ°í º¸Ãæ¿¡¼­ ´ÙÀ½°­Á¿¡ Ãß°¡Çϵµ·Ï ÇÏ¿´½À´Ï´Ù. ¸ÞÀÏÀ» Áֽźв²´Â °³ÀÎÀûÀ¸·Î ¸ÞÀÏÀ» µå¸®Áö ¸øÇØ Á˼ÛÇϰí¿ä, ´ÙÀ½ °­Á¸¦ ÅëÇØ ±Ã±ÝÁõÀ» ÇØ°áÇϼÌÀ¸¸é ÁÁ°Ú½À´Ï´Ù.

´ÊÀº °­Á ³¡±îÁö Àоî Áּż­ °¨»çÇÕ´Ï´Ù.

 

Back