¿©±â±îÁö ÀÛ¾÷ÇÑ ÈÄ FTP ±â´ÉÀ» Å×½ºÆ®Çغ¸¸é ¾ÆÁÖ Àß µ¿ÀÛÇÑ´Ù. ³×Æ®¿öÅ©»óÀÇ ÆÄÀÏÀ» Àß Àоî¿À°í ÆíÁý °á°úµµ Àß ÀúÀåµÇ¸ç ¼Óµµ°¡ Á» ´À¸± »Ó ·ÎÄà ÆÄÀÏÀ» ÆíÁýÇÏ´Â °Í°ú Å« Â÷À̾øÀÌ ÀÛ¾÷À» ÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª ±â´ÉÀûÀ¸·Î´Â Å« ¹®Á¦°¡ ¾øÁö¸¸ ¾ÆÁÖ ½É°¢ÇÑ ¹®Á¦°¡ ÀÖ´Ù. ÀÚ½ÅÀÌ ¾Ë°í ÀÖ´Â FTP ¼¹ö¿¡ Á¢¼ÓÇؼ ÆÄÀÏ Çϳª¸¦ Àо ÈÄ MRU¸¦ ¿¾îº¸ÀÚ. MRU´Â ÃÖ±Ù ¿¬ ÆÄÀÏÀÇ ¸ñ·ÏÀ» À¯ÁöÇϸç FTP °æ·Î¿¡´Â ÆÄÀÏÀ» ´Ù½Ã ÀÐÀ» ¼ö ÀÖ´Â ¸ðµç Á¤º¸°¡ °í½º¶õÈ÷ µé¾îÀÖ´Ù.
±×·¡¼ ¿ä·¸°Ô º¸ÀδÙ. Á¢¼ÓÁ¤º¸°¡ ÈÍÈ÷ ´Ù µå·¯³ª ÀÖ´Â °ÍÀÌ´Ù. ¶ÇÇÑ ´ç±ÙÀº ÆíÁýÁßÀÎ ÆÄÀÏÀÇ °æ·Î¸¦ ŸÀÌƲ¹Ù¿¡ º¸¿©Áִµ¥, FTP ÆÄÀÏÀÇ °æ·Î¿¡ Á¢¼ÓÁ¤º¸°¡ Ç¥½ÃµÇ±â ¶§¹®¿¡ ´©±¸¿¡°Ô³ª Á¢¼ÓÁ¤º¸°¡ °ø°³µÇ´Â ¼ÀÀÌ´Ù. ¸¸¾à »ç¹«½Ç¿¡¼ FTP ¼¹ö¿¡ Á¢¼ÓÇÏ¿© ¾ÆÁÖ Áß¿äÇÑ ÆÄÀÏÀ» ÆíÁýÇÏ°í ÀÖ´Ù°í Çغ¸ÀÚ. »ç¹«½Ç¿¡ º¸Çè ¾ÆÁܸ¶³ª ±¸µÎ ¹ÌÈ¿øÀÌ µ¹¾Æ´Ù´Ï´Ù°¡ ¿ì¿¬È÷ ³» ¸ð´ÏÅ͸¦ ¾î±ú ³Ñ¾î·Î »ì¦ º¸°í´Â ¡®À½À½. ±×·¸´Ü ¸»ÀÌÁö?¡¯ÇÏ°í µ¹¾Æ°£ ÈÄ FTP ¼¹ö¸¦ ÇØÅ·ÇÑ´Ù¸é Å«ÀÏÀÌ ¾Æ´Ò ¼ö ¾ø´Ù.
FTP´Â ID¿Í ºñ¹Ð¹øÈ£¸¸ ¾Ë°í ÀÖÀ¸¸é ¿ÏÀüÈ÷ Àڱ⠰ÍÀÌ µÇ¸ç ¹«½¼ ÁþÀ» ÇϵçÁö ¸»¸± ¼ö°¡ ¾ø´Ù. ±×·¸´Ù°í ¸ð´ÏÅ͸¦ °¡¸®°í ÀÛ¾÷À» ÇÒ ¼öµµ ¾øÁö ¾ÊÀº°¡? ±¸µÎ ¹ÌÈ¿øº¸´Ù ´õ °æ°èÇØ¾ß ÇÒ ´ë»óÀº ¹Ù·Î ³»ºÎ µ¿·áÀε¥ ŸÀÌƲ¹Ù³ª MRU°¡ ¹®Á¦°¡ ¾Æ´Ï¶ó ·¹Áö½ºÆ®¸®¸¦ µÚÁö¸é ±â¾ïµÇ¾î ÀÖ´Â ¸ðµç Á¢¼ÓÁ¤º¸¸¦ Àϸñ ¿ä¿¬ÇÏ°Ô º¼ ¼ö ÀÖÀ¸´Ï ÀÌ ¾ó¸¶³ª ¹«¼¿î ÀÏÀΰ¡? ÀÌ·± »óȲÀ̸é Àá½Ã ÀÚ¸®¸¦ ºñ¿ì°í °í¹Î ÇؼÒÇÏ·¯ °¡±âµµ Èûµé °ÍÀÌ´Ù.
º¸¾È ±â´ÉÀº ¸ðµç ÇÁ·Î±×·¥¿¡ ÀÖ¾î ¾ÆÁÖ Áß¿äÇÑ ¹®Á¦ÀÌ´Ù. ´ç±ÙÀÌ ÀÌ ¹®Á¦¸¦ Á¦´ë·Î ÇØ°áÇÏÁö ¸øÇϸé ÅؽºÆ® ÆíÁý±â·Î¼ÀÇ ±â´ÉÀÌ ¾Æ¹«¸® ÈǸ¢ÇÏ´Ù ÇÏ´õ¶óµµ ¿Ü¸é¹ÞÀ» ¼ö¹Û¿¡ ¾ø´Ù. ÀÏ´Ü Á¢¼ÓÁ¤º¸¸¦ ¼û°Ü¼ ¹ÛÀ¸·Î µå·¯³ªÁö ¾Êµµ·Ï ¼öÁ¤Çغ¸ÀÚ. FTP °æ·Î¿¡¼ Á¢¼ÓÁ¤º¸¸¦ »©°í ÆÄÀÏ À̸§¸¸ ÃßÃâÇÏ´Â ÇÔ¼ö¸¦ ÀÛ¼ºÇ쵂 ÀÌ ÇÔ¼ö´Â ÇÁ·ÎÁ§Æ®ÀÇ ¸ðµç °÷¿¡¼ »ç¿ëµÇ¹Ç·Î Util.cpp¿¡ ÀÛ¼ºÇÑ´Ù.
void EncodePath(TCHAR *Path, TCHAR *EncPath)
{
TCHAR Server[256];
TCHAR User[32];
TCHAR *File;
if (strnicmp(Path,"ftp",3) == 0) {
ParseFtpInfo(Path,Server,User,Pass,File,Port);
wsprintf(EncPath,"ftp://%s/%s",Server,File);
} else {
lstrcpy(EncPath,Path);
}
}
ParseFtpInfo·Î Á¢¼ÓÁ¤º¸¸¦ ºÐ¼®ÇÑ ÈÄ Á¢¼Ó ¼¹ö¿Í ÆÄÀÏÀÇ °æ·Î¸¸À¸·Î ´Ù½Ã °æ·Î¸¦ Á¶¸³ÇÏ¿© ID¿Í ºñ¹Ð ¹øÈ£´Â °æ·Î¿¡¼ »èÁ¦ÇÏ¿´´Ù. ŸÀÌƲ¹Ù¿¡ Ç¥½ÃÇÒ °æ·Î´Â ÀÌ ÇÔ¼ö°¡ ¸¸µé¾î³½ °£·«ÈµÈ °æ·Î·Î ´ëüÇÑ´Ù. ÆÄÀÏÀ» ¿©´Â ÇÔ¼ö¿Í ÀúÀå(¾÷·Îµå) ÇÔ¼ö¿¡ °æ·Î¸¦ Ç¥½ÃÇÏ´Â Äڵ尡 Àִµ¥ ÀÌ Äڵ带 ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÑ´Ù.
BOOL OpenFileToChild(HWND hChild, TCHAR *Path)
{
TCHAR EncPath[MAX_PATH];
....
pSi->Ae.SetModified(FALSE);
lstrcpy(pSi->NowFile,Path);
EncodePath(Path,EncPath);
SetWindowText(hChild,EncPath);
return TRUE;
}
BOOL SaveAs(HWND hChild)
{
TCHAR EncPath[MAX_PATH];
....
Mru.AddMRU(OFN.lpstrFile);
lstrcpy(pSi->NowFile,OFN.lpstrFile);
EncodePath(pSi->NowFile,EncPath);
SetWindowText(hChild,EncPath);
°æ·Î ¹®ÀÚ¿À» ¹Ù·Î ŸÀÌƲ¹Ù¿¡ Ãâ·ÂÇÏÁö ¾Ê°í EncodePath ÇÔ¼ö·Î °£·«È½ÃÄѼ Ãâ·ÂÇÏ¿´´Ù. ÀÌÁ¦ ŸÀÌƲ¹Ù¿¡´Â FTP Á¢¼ÓÁ¤º¸°¡ º¸ÀÌÁö ¾ÊÀ» °ÍÀÌ´Ù. ´Ù¿î·Îµå ´ëÈ»óÀÚÀÇ ÆÄÀÏ¸íµµ °£·«ÈÇÏ¿© º¸¿©ÁÖµµ·Ï ¼öÁ¤ÇÑ´Ù.
int DgFtpDown(TCHAR *Path, TCHAR *&Text)
{
TCHAR EncPath[MAX_PATH];
....
EncodePath(Path,EncPath);
wsprintf(Mes,"À§Ä¡ : %s",EncPath);
SetDlgItemText(hDlgDown,IDC_STDOWN1,Mes);
BOOL DgFtpUp(TCHAR *Path, TCHAR *Text)
{
TCHAR EncPath[MAX_PATH];
....
EncodePath(Path,EncPath);
wsprintf(Mes,"À§Ä¡ : %s",EncPath);
SetDlgItemText(hDlgDown,IDC_STDOWN1,Mes);
´Ù¿î·Îµå¹Þ´Â Àá½Ã µ¿¾ÈÀÌ¶óµµ Á¢¼ÓÁ¤º¸´Â ¼û°Ü¾ß ÇÑ´Ù. MRUÀÇ ¸Þ´º ÅؽºÆ®¿¡µµ Á¢¼ÓÁ¤º¸¸¦ ¼û°Ü¾ß ÇÑ´Ù. ArrangeMenu ÇÔ¼ö¸¦ ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÑ´Ù.
void CMru::ArrangeMenu()
{
int i;
TCHAR szItem[MAX_PATH+12];
TCHAR EncPath[MAX_PATH];
if (arMru.num) {
while (DeleteMenu(hMenu,0,MF_BYPOSITION));
}
for (i=0;i<arMru.num;i++) {
EncodePath(arMru.Get(i),EncPath);
if (i < 9) {
wsprintf(szItem,"&%c %s",i+1+¡¯0¡¯,EncPath);
} else {
wsprintf(szItem,"&%c %s",i-9+¡¯A¡¯,EncPath);
}
AppendMenu(hMenu,MF_STRING,MenuID+i,szItem);
}
}
ŸÀÌƲ ¹Ù³ª MRUÀÇ FTP °æ·Î¿¡ Á¢¼ÓÁ¤º¸°¡ ³ªÅ¸³ªÁö ¾ÊÀ¸¹Ç·Î ÀÏ´Ü ±¸µÎ ¹ÌÈ¿ø¿¡°Ô´Â Á¢¼ÓÁ¤º¸¸¦ µéÅ°Áö ¾Ê°Ô µÇ¾ú´Ù. ÇÏÁö¸¸ ´Ü¼øÈ÷ º¸¿©ÁÙ ¶§ Ãâ·ÂµÇ´Â ¹®ÀÚ¿À» Á¶ÀÛÇßÀ» »ÓÀÌÁö ·¹Áö½ºÆ®¸®¿¡´Â ¿©ÀüÈ÷ ¿ÏÀüÇÑ Á¤º¸°¡ ÀúÀåµÇ¾î ÀÖ´Ù. ÆÄÀÏÀ» ´Ù½Ã ´Ù¿î·Îµå¹ÞÀ» ¼ö ÀÖ¾î¾ß ÇϹǷΠÁ¢¼ÓÁ¤º¸ ÀÚü¸¦ ¾ø¾Ö¹ö¸± ¼ö´Â ¾øÀ¸¸ç °á±¹ ³²µéÀÌ ¾Ë¾Æº¸Áö ¸øÇÏ°Ô ¾Ïȣȸ¦ ÇÏ´Â ¼ö ¹Û¿¡ ¾ø´Ù. ¾Ïȣȸ¦ À§ÇØ ´ÙÀ½ ³× ÇÔ¼ö¸¦ Util.cpp¿¡ ÀÛ¼ºÇÑ´Ù.
void EncodeBinary(PBYTE buf, int Length, BOOL bEncode)
{
int i;
BYTE b;
int Carry;
for (i=0;i<Length;i++) {
b=buf[i];
if (bEncode == TRUE) {
if (b >= 128) Carry = 1; else Carry = 0;
b = b * 2 + Carry;
b = b ^ 0xdb;
if (b % 2 == 1) Carry = 128; else Carry = 0;
b = b / 2 + Carry;
b = b ^ 0xbd;
buf[i] = b;
} else {
b = b ^ 0xbd;
if (b >= 128) Carry = 1; else Carry = 0;
b = b * 2 + Carry;
b = b ^ 0xdb;
if (b % 2 == 1) Carry = 128; else Carry = 0;
b = b / 2 + Carry;
buf[i] = b;
}
}
}
int BinaryToTextEnccode(PBYTE Src, int length, PBYTE Dest, BOOL bEncode)
{
BYTE s1, s2, s3, s4, d1, d2, d3, d4;
BYTE *buf;
int si,di;
int OriginalLen;
if ((bEncode == FALSE) && (length < 12))
return -3;
if (bEncode) {
buf=(PBYTE)malloc(length+8);
memcpy(buf+6, Src, length);
buf[0]=0x57;
buf[1]=0xEC;
buf[2]=0xFF;
buf[3]=(length & 0xff0000) >> 16;
buf[4]=(length & 0xff00) >> 8;
buf[5]=(length & 0xff);
buf[length+6]=0;
buf[length+7]=0;
for (si=0,di=0;si<length+6;si+=3,di+=4) {
s1=buf[si];
s2=buf[si+1];
s3=buf[si+2];
d1=(s1 >> 2) + 48;
d2=(((s1 & 0x3) << 4) | (s2 >> 4)) + 48;
d3=(((s2 & 0xf) << 2) | (s3 >> 6)) + 48;
d4=(s3 & 0x3f) + 48;
Dest[di]=d1;
Dest[di+1]=d2;
Dest[di+2]=d3;
Dest[di+3]=d4;
}
Dest[di]=0;
free(buf);
return 0;
} else {
if ((Src[0] != ¡®E¡¯) || (Src[1] != ¡®n¡¯) || (Src[2] != ¡®c¡¯) || (Src[3] != ¡®o¡¯)) {
return -1;
}
for (si=4,di=-3;si<length;si+=4,di+=3) {
s1=Src[si]-48;
s2=Src[si+1]-48;
s3=Src[si+2]-48;
s4=Src[si+3]-48;
d1=(s1 << 2) | ((s2 & 0x30) >> 4);
d2=(s2 << 4) | ((s3 & 0x3c) >> 2);
d3=(s3 << 6) | (s4 & 0x3f);
if (si==4) {
OriginalLen = (d1 << 16) + (d2 << 8) + d3;
if ((OriginalLen+2)/3*4+8 != length) {
return -2;
}
} else {
Dest[di]=d1;
Dest[di+1]=d2;
Dest[di+2]=d3;
}
}
return OriginalLen;
}
}
void EncodeText(TCHAR *Text, TCHAR *EncText)
{
int len;
TCHAR *temp;
len=lstrlen(Text)+1;
temp=(TCHAR *)malloc(len);
lstrcpy(temp,Text);
EncodeBinary((PBYTE)temp,len,TRUE);
BinaryToTextEnccode((PBYTE)temp,len,(PBYTE)EncText,TRUE);
free(temp);
}
int DecodeText(TCHAR *EncText, TCHAR *Text)
{
int len;
len=BinaryToTextEnccode((PBYTE)EncText,lstrlen(EncText),(PBYTE)Text,FALSE);
if (len < 0)
return len;
EncodeBinary((PBYTE)Text,len,FALSE);
return 0;
}
¾ÆÁÖ ´Ü¼øÇÑ ¼öÁØÀÇ ¾ÏÈ£È ÇÔ¼öÀε¥ º¸¾È»óÀÇ ÀÌÀ¯·Î ÀÌ ÇÔ¼öµé¿¡ ´ëÇÑ »ó¼¼ÇÑ ºÐ¼®Àº ÇÏÁö ¾Ê´Â´Ù. °ü½É ÀÖÀ¸¸é Á÷Á¢ ºÐ¼®Çغ¸µÇ ±×·¡µµ ¸í»öÀÌ ¾ÏÈ£È ÇÔ¼öÀÎÁö¶ó ±×´ÙÁö ½±°Ô ºÐ¼®µÇÁö´Â ¾ÊÀ» °ÍÀÌ´Ù. ÄÚµå ÀÚü¸¸À¸·Î´Â ºÐ¼®ÇϱⰡ ¾î·Æ°í µð¹ö°ÅÀÇ µµ¿òÀ» Á» ¹ÞÀ¸¸é ¾ó¸¶µçÁö ºÐ¼®ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ÀÌ ÇÔ¼öµéÀº 3³â Àü¿¡ ¸¸µé¾ú´Âµ¥ °¡²û ¾µ ÀÏÀÌ ÀÖ¾î ´Ù½Ã º¸¸é ¸¸µç »ç¶÷µµ Çò°¥¸°´Ù. ÀÌ ÇÔ¼öº¸´Ù Á¶±Ý ´õ º¹ÀâÇÑ ¹æ½ÄÀÇ ¾ÏÈ£È ÇÔ¼ö¸¦ Á÷Á¢ ½Ç¹«¿¡ »ç¿ëÇϱ⵵ Çß¾ú´Âµ¥ ¾ÆÁ÷±îÁö´Â º° ¹®Á¦°¡ ¾ø´Â °Í °°´Ù.
ÀÌ ÇÔ¼ö·Î FTP °æ·Î¸¦ ·¹Áö½ºÆ®¸®¿¡ ÀúÀåÇϱâ Àü¿¡ ¾ÏÈ£ÈÇÏ°í ½ÇÁ¦ »ç¿ëÇÒ ¶§ ¾ÏÈ£¸¦ Ç®¾î¼ »ç¿ëÇÏ¸é µÈ´Ù. ±×·¯¸é ´ç±ÙÀÌ ½ÇÇàÁßÀÏ ¶§ ³»ºÎÀûÀ¸·Î¸¸ FTP °æ·Î¸¦ Àá½Ã À¯ÁöÇÒ »Ó ³ª¸ÓÁö °æ¿ì´Â ¾ÏȣȵǾî ÀÖÀ¸¹Ç·Î Á¢¼ÓÁ¤º¸°¡ ³ëÃâµÇÁö ¾Ê´Â´Ù. MRUÀÇ ÀúÀå ¹× ·Îµå ÇÔ¼ö¸¦ ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÑ´Ù.
void CMru::LoadMRU()
{
int i;
TCHAR SubKey[32];
TCHAR Path[MAX_PATH];
TCHAR Text[MAX_PATH];
arMru.num=SHRegReadInt(SHCU,Key,"nFiles",0);
arMru.num=min(arMru.num, MaxMru);
for (i=0;i<arMru.num;i++) {
wsprintf(SubKey,"File%d",i);
SHRegReadString(SHCU,Key,SubKey,"",Path,MAX_PATH);
if (strncmp(Path,"Enco",4)==0) {
DecodeText(Path,Text);
} else {
lstrcpy(Text,Path);
}
arMru.Set(i,Text);
}
ArrangeMenu();
}
void CMru::SaveMRU()
{
int i;
TCHAR SubKey[32];
TCHAR EncText[MAX_PATH];
SHRegWriteInt(SHCU,Key,"nFiles",arMru.num);
for (i=0;i<arMru.num;i++) {
wsprintf(SubKey,"File%d",i);
if (strnicmp(arMru.Get(i),"ftp",3)==0) {
EncodeText(arMru.Get(i),EncText);
} else {
lstrcpy(EncText,arMru.Get(i));
}
SHRegWriteString(SHCU,Key,SubKey,EncText);
}
}
·ÎÄà ÆÄÀÏ¿¡ ´ëÇÑ °æ·Î´Â ±»ÀÌ ¾ÏÈ£ÈÇÒ ÇÊ¿ä°¡ ¾øÀ¸¸ç FTP °æ·Î¸¸ ¾ÏÈ£ÈÇÏ¿´´Ù. ¸¶Áö¸·À¸·Î ¾ÏÈ£ÈÇÒ °¡Àå Áß¿äÇÑ ´ë»óÀº FTP Á¢¼ÓÁ¤º¸ÀÎ arFtp ¹è¿ÀÌ´Ù. ÀÌ ¹è¿¿¡ FTP ¼¹ö¿¡ ´ëÇÑ ¸ðµç Á¤º¸°¡ µé¾î ÀÖÀ¸¹Ç·Î ±Ùº»ÀûÀ¸·Î º¸È£ÇØ¾ß ÇÒ °¡Àå Áß¿äÇÑ Á¤º¸ÀÌ´Ù. ±×·¡¼ ÀÌ ¹è¿À» ÀúÀåÇÏ´Â Äڵ带 ¾ÆÁ÷ ÀÛ¼ºÇÏÁö ¾Ê¾Ò´Âµ¥ SOptionÀÇ Load, Save ÇÔ¼ö¿¡ arFtp ÀúÀå Äڵ带 ´ÙÀ½°ú °°ÀÌ ÀÛ¼ºÇϵµ·Ï ÇÏÀÚ.
void SOption::Load(TCHAR *Key)
{
TCHAR EncText[400];
....
lstrcpy(szKey,Key);
lstrcat(szKey,"Ftp");
j=SHRegReadInt(SHCU,szKey,"Num",0);
for (i=0;i<j;i++) {
wsprintf(szSub,"Name-%d",i);
SHRegReadString(SHCU,szKey,szSub,"",EncText,32);
DecodeText(EncText,arFtp[i].Name);
wsprintf(szSub,"Addr-%d",i);
SHRegReadString(SHCU,szKey,szSub,"",EncText,256);
DecodeText(EncText,arFtp[i].Addr);
wsprintf(szSub,"User-%d",i);
SHRegReadString(SHCU,szKey,szSub,"",EncText,32);
DecodeText(EncText,arFtp[i].User);
wsprintf(szSub,"Pass-%d",i);
SHRegReadString(SHCU,szKey,szSub,"",EncText,32);
DecodeText(EncText,arFtp[i].Pass);
wsprintf(szSub,"Port-%d",i);
arFtp[i].Port=SHRegReadInt(SHCU,szKey,szSub,0);
}
}
void SOption::Save(TCHAR *Key)
{
TCHAR EncText[400];
....
lstrcpy(szKey,Key);
lstrcat(szKey,"Ftp");
for (i=0;;i++) {
if (lstrlen(arFtp[i].Name)==0) {
SHRegWriteInt(SHCU,szKey,"Num",i);
break;
}
wsprintf(szSub,"Name-%d",i);
EncodeText(arFtp[i].Name,EncText);
SHRegWriteString(SHCU,szKey,szSub,EncText);
wsprintf(szSub,"Addr-%d",i);
EncodeText(arFtp[i].Addr,EncText);
SHRegWriteString(SHCU,szKey,szSub,EncText);
wsprintf(szSub,"User-%d",i);
EncodeText(arFtp[i].User,EncText);
SHRegWriteString(SHCU,szKey,szSub,EncText);
wsprintf(szSub,"Pass-%d",i);
EncodeText(arFtp[i].Pass,EncText);
SHRegWriteString(SHCU,szKey,szSub,EncText);
wsprintf(szSub,"Port-%d",i);
SHRegWriteInt(SHCU,szKey,szSub,arFtp[i].Port);
}
}
»ç¿ëÀÚ ID, ºñ¹Ð ¹øÈ£´Â ¹°·ÐÀÌ°í Á¢¼Ó¸í, ¼¹öÀÇ ÁÖ¼Ò±îÁö ¸ðµÎ ¾ÏÈ£ÈÇß´Ù. ´Ü Á¢¼Ó Æ÷Æ®´Â Á¤¼ö°ªÀÌ°í ÀϹÝÀûÀ¸·Î 21¹øÀ̱⠶§¹®¿¡ ±»ÀÌ ¾Ïȣȸ¦ ÇÒ ÇÊ¿ä°¡ ¾ø¾î Á¤¼ö°ªÀ» ¹Ù·Î ±â·ÏÇÏ¿´´Ù. ¿©·¯ °³ÀÇ FTP ¼¹ö¸¦ µî·ÏÇÑ ÈÄ ·¹Áö½ºÆ®¸® ÆíÁý±â·Î ¾î¶»°Ô Á¢¼ÓÁ¤º¸°¡ ÀúÀåµÇ¾î ÀÖ´ÂÁö º¸µµ·Ï ÇÏÀÚ.
¾ð¶æ ºÁ¼´Â µµ´ëü ¹«½¼ Á¤º¸ÀÎÁö ¾Ë±â°¡ ¹«Ã´ ¾î·Æ´Ù. ÇÏÁö¸¸ ´ç±ÙÀº ÀÌ ¾ÏÈ£ÈµÈ ¹®ÀÚ¿·ÎºÎÅÍ Á¢¼ÓÁ¤º¸¸¦ Çص¶ÇÒ ¼ö ÀÖÀ¸¹Ç·Î FTP Á¢¼ÓÀº ÀÌ»ó¾øÀÌ ÇÒ ¼ö ÀÖ´Ù. º¸¾È ¹®Á¦°¡ ÀÏ´ÜÀº ÇØ°áµÇ¾ú´Ù.
±×·¯³ª ¿©±â¼ ÀÛ¼ºÇÑ ¾ÏÈ£È ÇÔ¼öÀÇ ¼öÁØÀº ¾ÆÁÖ ÃʱÞÀûÀÎ ¼öÁØ¿¡ ºÒ°úÇؼ ¾ÏÈ£¿¡ ´ëÇØ Á¶±ÝÀÌ¶óµµ ¿¬±¸ÇØ º» ÀûÀÌ ÀÖ´Â »ç¶÷À̶ó¸é ¾î·ÆÁö ¾Ê°Ô Çص¶ÇÒ ¼ö ÀÖ´Ù. ·¹Áö½ºÆ®¸® ±¸¼ºµµ ¾ÆÁÖ Á÷°üÀûÀ¸·Î µÇ¾î Àִµ¥ Á¢¼ÓÁ¤º¸¸¦ ÀúÀåÇÏ´Â ¼ºêÅ° À̸§Àº FtpÀÌ°í Addr, User, Pass °°Àº À̸§À» ÁÖ¾î ¡®³ª ¿©±â ÀÖ¼Ò¡¯ÇÏ°í ¾Ë·Á ÁÖ´Â ¼ÀÀÌ´Ù. Á¢¼ÓÁ¤º¸¸¦ ¾ÈÀüÇÏ°Ô ÁöÅ°·Á¸é ÀÌ ÇÔ¼öµéº¸´Ù´Â ÈξÀ ´õ Á¤±³ÇÏ°í °·ÂÇÑ ¼öÁØÀÇ ¾Ïȣȸ¦ ±¸ÇöÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. ÀÌ¹Ì °ø°³µÈ ¾ÏÈ£È ¾Ë°í¸®Áòµµ ¸¹ÀÌ ÀÖÀ¸¹Ç·Î ±× Áß Çϳª¸¦ äÅÃÇؼ Àû¿ëÇϱ⸸ ÇÏ¸é µÈ´Ù. ·¹Áö½ºÆ®¸® °æ·Îµµ ¾ó¸¥ ¾Ë ¼ö ¾ø´Â À̸§À¸·Î ¹Ù²Ù°Å³ª ¾Æ´Ï¸é ¾Æ¿¹ ·¹Áö½ºÆ®¸®¸¦ »ç¿ëÇÏÁö ¸»¾Æ¾ß ÇÑ´Ù.
±×·¯³ª ´ç±Ù 1.0Àº ¾ÏȣȰ¡ ÇÊ¿äÇÏ´Ù´Â °Í°ú ºñ·Ï ÃÊ±Þ ¼öÁØÀÌÁö¸¸ ¾Ïȣȸ¦ ÇÏ´Â ¿¹¸¦ º¸¿´À¸¹Ç·Î ¿©±â±îÁö¸¸ ¾Ïȣȸ¦ Çϱâ·Î ÇÑ´Ù. ¾îÂ÷ÇÇ ¼Ò½º°¡ °ø°³µÇ¾î Àֱ⠶§¹®¿¡ ¾Æ¹«¸® °·ÂÇÑ ¾Ïȣȸ¦ ÇÏ´õ¶óµµ ¼Ò½ºÀÇ ¾ÏÈ£ Çص¶ ·çƾÀ» ¶¼¾î ³»¸é ¸ðµç ¾ÏÈ£¸¦ Ç® ¼ö ÀÖ¾î Çö ½ÃÁ¡¿¡¼ ´õ ÀÌ»óÀÇ °·ÂÇÑ ¾ÏÈ£È ¹æ¹ýÀ» Àû¿ëÇÏ´Â °ÍÀº ¾Æ¹« Àǹ̰¡ ¾ø´Ù. ´ÙÀ½ ¹öÀü¿¡¼´Â À̺¸´Ù ÈξÀ ´õ °·ÂÇÑ ¹æ¹ýÀ¸·Î ¾Ïȣȸ¦ ÇÒ °ÍÀÌ´Ù.