È®ÀåÀÚ ¿¬°á ±â´ÉÀ̶õ È®ÀåÀÚ¸¦ ƯÁ¤ ½ÇÇà ÆÄÀÏ°ú ¿¬°áÇÏ¿© Ž»ö±â¿¡¼ ÀÌ ÆÄÀÏÀ» ´õºíŬ¸¯ÇÏ¸é ¿¬°áµÈ ÆÄÀÏ°ú ÇÔ²² ½ÇÇàÇÏ´Â ±â´ÉÀÌ´Ù. È®ÀåÀÚ txt¸¦ °¡Áö´Â ÅؽºÆ® ÆÄÀÏÀ» ´õºíŬ¸¯ÇÏ¸é ¸Þ¸ðÀåÀÌ ½ÇÇàµÇ¸é¼ ÀÌ ÆÄÀÏÀ» ¿¸®´Âµ¥ ÀÌ·± µ¿ÀÛÀÌ °¡´ÉÇÑ ÀÌÀ¯´Â txt È®ÀåÀÚ¿Í ¸Þ¸ðÀåÀÌ ¿¬°áµÇ¾î Àֱ⠶§¹®ÀÌ´Ù.
ÀÌ·± ¿¬°á Á¤º¸´Â ·¹Áö½ºÆ®¸®ÀÇ HKEY_CLASSES_ROOT¿¡ ÀúÀåµÇ¾î Àִµ¥ ÅؽºÆ® ÆÄÀÏÀÇ °æ¿ì ¾î¶² ½ÄÀ¸·Î ¿¬°áµÇ¾î ÀÖ´ÂÁö º¸ÀÚ. ·¹Áö½ºÆ®¸® ÆíÁý±â·Î È®ÀÎÇØ º¸¸é ÀÌ·± ¿¬°á °ü°è¸¦ Á÷Á¢ º¼ ¼ö ÀÖÀ¸¸ç ¿øÇÒ °æ¿ì ÆíÁýÇÏ´Â °Íµµ ¹°·Ð °¡´ÉÇÏ´Ù.
.txt ¼ºêÅ°ÀÇ ±âº»°ª¿¡´Â txtfileÀ̶ó°í µÇ¾î Àִµ¥ ÀÌ È®ÀåÀÚ¿¡ ´ëÇÑ ½© Á¤º¸°¡ txtfileÀ̶ó´Â ¼ºêÅ°¿¡ ÀÖ´Ù´Â ¶æÀÌ´Ù. txtfile ¼ºêÅ°¸¦ º¸¸é ±âº»°ª¿¡ ÀÌ È®ÀåÀÚ¿¡ ´ëÇÑ °£´ÜÇÑ ¼³¸íÀÌ ÀÛ¼ºµÇ¾î ÀÖ°í shell\open\commandÀÇ ±âº»°ª¿¡´Â ÀÌ È®ÀåÀÚ¿Í ¿¬°áµÈ ½ÇÇà ÆÄÀÏÀÇ °æ·Î°¡ ÀúÀåµÇ¾î ÀÖ´Ù. Ž»ö±â´Â ÀÌ ÆÄÀÏÀÌ ´õºíŬ¸¯µÉ °æ¿ì NotePad.exe¸¦ ½ÇÇàÇÏ¸é¼ ´õºíŬ¸¯µÈ ÆÄÀϸíÀ» ¸Þ¸ðÀåÀÇ ¸í·ÉÇà Àμö·Î Àü´ÞÇÏ´Â °ÍÀÌ´Ù.
È®ÀåÀÚ ¿¬°á Á¤º¸ÀÇ ±¸Á¶¸¦ ¾Ë°Ô µÇ¸é ¿øÇÏ´Â È®ÀåÀÚ¸¦ ÀÓÀÇÀÇ ½ÇÇà ÆÄÀÏ°ú ¿¬°áÇÒ ¼ö ÀÖ´Ù. ´ç±Ù°ú ÅؽºÆ® ÆÄÀÏÀ» ¿¬°áÇѴٰųª HTML ÆÄÀÏ°ú ¿¬°áÇÏ´Â °Íµµ °¡´ÉÇѵ¥ ÀÌ·¸°Ô ¿¬°áÇØ ³õÀ¸¸é Ž»ö±â¿¡¼ ÆÄÀÏÀ» ´õºíŬ¸¯ÇÏ¿© ´ç±ÙÀ» ¹Ù·Î ½ÇÇàÇÒ ¼ö ÀÖ¾î Æí¸®ÇÏ´Ù. ´ç±ÙÀÌ ¾Æ¹«¸® ¸øÇصµ ¸Þ¸ðÀ庸´Ù´Â ±â´ÉÀÌ ´õ ¸¹À¸¹Ç·Î ±âº»ÀûÀÎ ÅؽºÆ® ÆíÁý±â¸¦ ´ç±ÙÀ¸·Î ÁöÁ¤ÇÒ ¼ö ÀÖ´Â °ÍÀÌ´Ù. ·¹Áö½ºÆ®¸®ÀÇ ¿¬°á Á¤º¸¸¦ ÆíÁýÇÏ°í ÇØÁ¦ÇÏ´Â ÇÔ¼ö¸¦ ÀÛ¼ºÇØ º¸ÀÚ.
void MakeAssociate(TCHAR *ext, TCHAR *desc)
{
TCHAR OldProgID[64];
TCHAR OldDesc[64];
TCHAR NewProgID[64];
TCHAR NewDesc[64];
TCHAR szKey[MAX_PATH];
TCHAR Path[MAX_PATH];
SHRegReadString(SHCR,ext,NULL,"",OldProgID,64);
SHRegReadString(SHCR,OldProgID,NULL,"",OldDesc,64);
wsprintf(NewProgID,"Dangeun%s",ext);
if (desc == NULL) {
lstrcpy(NewDesc,OldDesc);
} else {
lstrcpy(NewDesc,desc);
}
SHRegWriteString(SHCR,NewProgID,NULL,NewDesc);
wsprintf(szKey,"%s\\shell\\open\\command",NewProgID);
GetModuleFileName(g_hInst,Path,MAX_PATH);
lstrcat(Path, " \"%1\"");
SHRegWriteString(SHCR,szKey,NULL,Path);
SHRegWriteString(SHCR,ext,NULL,NewProgID);
if (lstrcmp(OldProgID, NewProgID)!=0) {
SHRegWriteString(SHCR,NewProgID,"OldProgID",OldProgID);
}
SHChangeNotify(SHCNE_ASSOCCHANGED,SHCNF_IDLIST,NULL,NULL);
}
void UnAssociate(TCHAR *ext)
{
TCHAR OldProgID[64];
TCHAR NewProgID[64];
wsprintf(NewProgID,"Dangeun%s",ext);
SHRegReadString(SHCR,ext,NULL,"",OldProgID,64);
if (lstrcmp(OldProgID, NewProgID)==0) {
SHRegReadString(SHCR,NewProgID,"OldProgID","",OldProgID,64);
SHRegWriteString(SHCR,ext,NULL,OldProgID);
SHDeleteKey(SHCR,NewProgID);
}
SHChangeNotify(SHCNE_ASSOCCHANGED,SHCNF_IDLIST,NULL,NULL);
}
¿¬°áÇÏ´Â ÇÔ¼ö´Â ´ë»ó È®ÀåÀÚ¿Í ¼³¸í ¹®ÀÚ¿À» Àμö·Î Àü´Þ¹Þ¾Æ ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÑ ÇÁ·Î±×·¥°ú ¿¬°áÇÑ´Ù. ¿¬°á »óÅ´ ÀÓÀÇ·Î ¹Ù²Ü ¼ö ÀÖÁö¸¸ ¿ø·¡ »óÅ·Πµ¹¾Æ°¥ ¼öµµ ÀÖ¾î¾ß ÇϹǷΠ¹Ýµå½Ã ÀÌÀü ¿¬°á »óŸ¦ ¾îµò°¡¿¡ µû·Î ÀúÀåÇØ µÎ¾î¾ß ÇÑ´Ù. ±×·¡¼ ÀÌÀü ID¿Í ¼³¸íÀ» OldProgID, OldDesc¿¡ ¸ÕÀú Á¶»çÇß´Ù.
»õ ProgId´Â DangeunÀ̶ó´Â Á¢µÎ¾î¿Í È®ÀåÀÚ À̸§À¸·Î ÁöÁ¤ÇßÀ¸¸ç ¼³¸íÀº Àμö·Î Àü´ÞµÈ desc¸¦ »ç¿ëÇϰųª NULLÀÌ Àü´ÞµÇ¾úÀ» °æ¿ì OldDesc¸¦ »ç¿ëÇÑ´Ù. txt ÆÄÀÏ¿¡ ´ëÇØ dgtext¶ó´Â ¼³¸íÀ» Àü´ÞÇß´Ù¸é Dangeun.txt¶ó´Â ¼ºêÅ°¿¡ ¿¬°á Á¤º¸¸¦ ÀÛ¼ºÇÑ´Ù. ÀÌ ¹®ÀÚ¿·Î »õ ProgID¸¦ ÀÛ¼ºÇÏ°í shell\open\commmand¿¡ ´ç±ÙÀÇ °æ·Î¸¦ ÁöÁ¤ÇÑ´Ù. ±×¸®°í txtÈ®ÀåÀÚÀÇ ProgID¸¦ Dangeun.txt·Î º¯°æÇÏ¿© ¿¬°á Á¤º¸¸¦ ¹Ù²Û´Ù.
±×¸®°í º¹¿øÀ» À§ÇØ ÀÌÀü ¿¬°á ÇÁ·Î±×·¥ÀÇ ProgIDµµ ÀúÀåÇÑ´Ù. ´Ü, Áߺ¹ ¿¬°áÇÒ °æ¿ì¸¦ ´ëºñÇؼ ÀÌÀü ProgID°¡ »õ ProgID¿Í ´Ù¸¦ ¶§¸¸ ÀÌÀü ¿¬°á ÇÁ·Î±×·¥À» ±â·ÏÇÑ´Ù. ¸Þ¸ðÀå¿¡¼ ´ç±ÙÀ¸·Î ¿¬°áÀÌ ¹Ù²ð ¶§ ¸Þ¸ðÀåÀÇ ¿¬°áÁ¤º¸ÀÎ txtfileÀ» ÀúÀåÇØ µÖ¾ß ´Ù½Ã ¸Þ¸ðÀåÀ¸·Î º¹¿øÇÒ ¼ö Àִµ¥ ´ç±ÙÀÌ Áߺ¹ ¿¬°áÇÒ °æ¿ì´Â ÀÌÀü ¿¬°á Á¤º¸µµ Dangeuntxt°¡ µÇ¾î ¹ö·Á ¿ø·¡ ¿¬°áµÇ¾î ÀÖ´ø ¸Þ¸ðÀåÀ» ãÁö ¸øÇÏ°Ô µÈ´Ù. È®ÀåÀÚ ¿¬°áÀ» ¹Ù²Û ÈÄ¿¡´Â ½©¿¡°Ô ÅëÁö¸¦ º¸³» ¿¬°áÀÌ ¹Ù²î¾úÀ½À» ¾Ë·Á¾ß ÇÑ´Ù. ÀÌ ÇÔ¼ö¿¡ ÀÇÇØ .txtÀÇ ¿¬°á Á¤º¸´Â ´ÙÀ½°ú °°ÀÌ º¯°æµÈ´Ù.
txt È®ÀåÀÚÀÇ ±âº»°ªÀÌ Dangeun.txt·Î º¯°æµÇ¾úÀ¸¸ç ÀÌ ¼ºêÅ°¸¦ º¸¸é ÆÄÀÏÀ» ¿ ¶§ Dangeun.exe¿Í ÇÔ²² ¿¾î¾ß ÇÑ´Ù´Â Á¤º¸°¡ ÀÛ¼ºµÇ¾î ÀÖ´Ù. º¹¿øÀ» À§ÇØ OldProgID´Â ¹Ýµå½Ã ÀúÀåÇØ¾ß ÇÑ´Ù. UnAssiciate ÇÔ¼ö´Â OldProgID¿¡ ÀúÀåµÈ °ªÀ» º¹¿øÇÏ¿© ´ç±Ù°ú ¿¬°áµÇ±â ÀüÀÇ ÇÁ·Î±×·¥°ú ´Ù½Ã ¿¬°áÇÏ¸ç ´ç±ÙÀÌ ÀÛ¼ºÇÑ ·¹Áö½ºÆ®¸® Á¤º¸´Â ¿ÏÀüÈ÷ »èÁ¦ÇÑ´Ù.
ÀÌ µÎ ÇÔ¼ö´Â ¿¬°á ¼³Á¤ ´ëÈ»óÀÚ¿¡¼ È£ÃâÇϹǷΠÀÏ´ÜÀº ¸¸µé¾î µÎ±â¸¸ ÇÏÀÚ. ´Ù¸¥ ÇÁ·Î±×·¥¿¡µµ È®ÀåÀÚ ¿¬°á ±â´ÉÀÌ ÇÊ¿äÇÏ´Ù¸é ÀÌ ÇÔ¼öµéÀ» °¡Á®°¡ ÀçÈ°¿ëÇÒ ¼ö ÀÖµÇ DangeunÀ̶ó´Â ¹®ÀÚ¿ »ó¼ö¸¸ ÇØ´ç ÇÁ·Î±×·¥ÀÇ À̸§À¸·Î ¹Ù²Ù¸é µÈ´Ù.
´ç±Ù°ú È®ÀåÀÚ°¡ ¿¬°áµÈ ÆÄÀÏÀ» ´õºíŬ¸¯ÇÏ¸é ¾ðÁ¦³ª ´ç±ÙÀÌ ¿¸°´Ù. ±×·±µ¥ ¸¸¾à ´ç±ÙÀÇ ½ÇÇà ÆÄÀÏ °æ·Î°¡ ¹Ù²î¸é Ž»ö±â°¡ ´ç±ÙÀÇ À§Ä¡¸¦ Á¦´ë·Î ãÁö ¸øÇÒ °ÍÀÌ´Ù. ´ç±ÙÀº ´Üµ¶ ½ÇÇà ÆÄÀÏÀ̶ó ¾ðÁ¦µçÁö ÀÚ¸®¸¦ ¿Å±æ ¼ö ÀÖÀ¸¹Ç·Î ÀÌ·± °¡´É¼ºÀ» Ç×»ó ´ëºñÇØ¾ß ÇÑ´Ù. ½ÇÇà ÆÄÀÏÀÇ °æ·Î°¡ ¹Ù²î¸é ·¹Áö½ºÆ®¸®ÀÇ °æ·Îµµ °°ÀÌ ¼öÁ¤ÇØ¾ß Çϴµ¥ ÀÌ ÀÛ¾÷À» ÇÏ´Â ´ÙÀ½ ÇÔ¼ö¸¦ ÀÛ¼ºÇÑ´Ù.
void RearrangePath()
{
TCHAR InstPath[MAX_PATH];
TCHAR ExePath[MAX_PATH];
TCHAR lpSubKey[MAX_PATH];
FILETIME FileTime;
DWORD i;
LONG Result;
HKEY key;
DWORD Size;
// ·¹Áö½ºÆ®¸®ÀÇ °æ·Î¿Í ½ÇÇà ÆÄÀÏÀÇ °æ·Î °°À¸¸é ¾Æ¹« °Íµµ ÇÒ ÇÊ¿ä°¡ ¾ø´Ù.
SHRegReadString(SHCU,KEY"Setting","InstPath","",InstPath,MAX_PATH);
GetModuleFileName(g_hInst,ExePath,MAX_PATH);
if (lstrcmp(ExePath,InstPath)==0) {
return;
}
// »õ °æ·Î¸¦ ±â·ÏÇÑ´Ù.
SHRegWriteString(SHCU,KEY"Setting","InstPath",ExePath);
if (Option.bExplorerPopup) {
RegisterPopup(TRUE);
}
// ¿¬°áµÈ ÆÄÀÏÀÇ °æ·Î¸¦ ¼öÁ¤ÇÑ´Ù.
RegOpenKeyEx(SHCR,NULL,0,KEY_READ,&key);
Result=ERROR_SUCCESS;
for (i=0;Result==ERROR_SUCCESS;i++) {
Size=MAX_PATH;
Result=RegEnumKeyEx(key,i,lpSubKey,&Size,NULL,NULL,NULL,&FileTime);
if (Result==ERROR_SUCCESS) {
if (strncmp(lpSubKey,"Dangeun.",8)==0) {
MakeAssociate(lpSubKey+7,NULL);
}
}
}
RegCloseKey(key);
}
HKEY_CLASSES_ROOT ¾Æ·¡ÀÇ ¸ðµç Å°¸¦ µÚÁ® Dangeun.À¸·Î ½ÃÀ۵Ǵ ŰÀÇ ½© ¸í·ÉÀ» ¸ðÁ¶¸® ´Ù½Ã ÀÛ¼ºÇÑ´Ù. ´Ü ¸Å¹ø ÀÌ ÀÛ¾÷À» ÇÒ ÇÊ¿ä´Â ¾øÀ¸¸ç ½ÇÇà ÆÄÀÏÀÇ °æ·Î°¡ ÃÖÃÊ ½ÇÇàÇßÀ» ¶§ÀÇ °æ·Î¿Í ´Ù¸¦ ¶§¸¸ À翬°áÇÏ¸é µÈ´Ù. ÀÌ ÆÇ´ÜÀ» Çϱâ À§Çؼ´Â ¼Â¾÷ ´ëÈ»óÀÚ¿¡¼ ÃÖÃÊ ½ÇÇà½Ã ½ÇÇà ÆÄÀÏÀÇ °æ·Î¸¦ ·¹Áö½ºÆ®¸®¿¡ µû·Î ±â·ÏÇØ ³õ¾Æ¾ß ÇÑ´Ù.
BOOL CALLBACK SetupDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
....
switch(iMessage)
{
case WM_INITDIALOG:
....
CheckDlgButton(hDlg,IDC_IS_ASSODGP,BST_CHECKED);
return TRUE;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDOK:
case IDCANCEL:
....
if (IsDlgButtonChecked(hDlg,IDC_IS_ASSODGP)==BST_CHECKED) {
MakeAssociate(".dgp","´ç±Ù ÇÁ·ÎÁ§Æ® ÆÄÀÏ");
MakeAssociate(".dgc","´ç±Ù »ó¿ë±¸ ÆÄÀÏ");
}
GetModuleFileName(g_hInst,szPath,MAX_PATH);
SHRegWriteString(SHCU,KEY"Setting","InstPath",szPath);
EndDialog(hDlg,IDOK);
return TRUE;
case IDCANCEL:
EndDialog(hDlg,IDCANCEL);
return TRUE;
}
return FALSE;
}
return FALSE;
}
dgp, dgc ¿¬°á ¿É¼ÇÀÌ Ãß°¡µÇ¾ú°í ÀÌ È®ÀåÀÚ¸¦ ±âº»ÀûÀ¸·Î ¿¬°áÇÏ¿´´Ù. ´ç±ÙÀÇ ÇÁ·ÎÁ§Æ® ÆÄÀÏÀÎ dgp´Â ´ç¿¬È÷ ´ç±ÙÀÇ ÆÄÀÏÀ̹ǷΠ¿¬°áÇÏ´Â °ÍÀÌ ¸¶¶¥ÇÏ´Ù. dgc´Â ´ç±ÙÀÇ »ó¿ë±¸ ÆÄÀÏÀε¥ ´ÙÀ½ Àå¿¡¼ ¸¸µé°Ô µÉ °ÍÀÌ´Ù. ¶Ç IDCANCEL¿¡ ´ëÇÑ Ã³¸®¸¦ Ãß°¡ÇÏ¿© ¼³Ä¡ Áß¿¡ Ãë¼ÒÇÒ ¼ö ÀÖµµ·Ï Çß´Ù. ÀÌÀü ¹öÀü¿¡¼´Â ¼³Ä¡ ´ëÈ»óÀÚ¿¡¼ ¹«Á¶°Ç ¼³Ä¡¸¦ °ÇàÇß¾ú´Âµ¥ À߸ø ½ÇÇàÇÑ °æ¿ì ¼³Ä¡¸¦ Ãë¼ÒÇÒ ¼öµµ ÀÖ¾î¾ß ÇÑ´Ù. WinMainÀÇ ÀÌ ÇÔ¼ö È£Ãâ¹®À» ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÑ´Ù.
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance
,LPSTR lpszCmdParam,int nCmdShow)
{
....
if (SHRegReadInt(SHCU,KEY"Setting","StartAction",1000)==1000) {
if (DialogBox(g_hInst, MAKEINTRESOURCE(IDD_SETUP),
HWND_DESKTOP, SetupDlgProc) == IDCANCEL) {
CloseHandle(hMutex);
return 0;
}
}
´ëÈ»óÀÚÀÇ ¸®ÅÏ°ªÀ» º¸°í Ãë¼ÒÇßÀ¸¸é WinMainÀ» Á¾·áÇß´Ù. OnCreate¿¡¼ RegisterPopupÀ» È£ÃâÇÏ´Â ´ë½Å RearrangePath ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù.
int OnCreate(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
SetTimer(hWnd,100,1,NULL);
....
if (SHRegReadInt(SHCU,KEY"Setting","StartAction",1000) == 1000) {
....
} else {
....
if (Option.bExplorerPopup) {
RegisterPopup(TRUE);
}
RearrangePath();
}
....
SetTimer(hWnd,100,1,NULL);
return 0;
}
RearrangePath ÇÔ¼ö¿¡¼ bExplorerPopup ¿É¼ÇÀ» Á¡°ËÇÏ¿© Æ˾÷À» µî·ÏÇϹǷΠ¿É¼Ç ¼³Á¤ »óŸ¦ º¼ ÇÊ¿ä¾øÀÌ ¹«Á¶°Ç ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÏ¸é µÈ´Ù. ÃʱâÈ ¿Ï·á ½ÃÁ¡ ÆľÇÀ» À§ÇÑ ÀÏȸ¿ë ŸÀÌ¸Ó ¼³Ä¡¹®ÀÎ SetTimer¸¦ ¸®ÅÏÇϱâ Á÷ÀüÀ¸·Î À̵¿½ÃÄ״µ¥ ÃʱâÈ Áß¿¡ ¸Þ½ÃÁö ¹Ú½º¸¦ ¿¬´Ù°Å³ª ÇÒ ¼öµµ Àֱ⠶§¹®¿¡ °¡±ÞÀûÀÌ¸é ´Ê°Ô ¼³Ä¡ÇØ¾ß ÇÑ´Ù. ¼³Ä¡ ÇØÁ¦½Ã¿¡ ¿¬°á ÆÄÀÏ°úÀÇ °ü°èµµ ²÷¾î¾ß ÇÑ´Ù.
void Uninstall()
{
....
TCHAR lpSubKey[MAX_PATH];
FILETIME FileTime;
DWORD i;
LONG Result;
HKEY key;
DWORD Size;
....
RegOpenKeyEx(SHCR,NULL,0,KEY_READ,&key);
Result=ERROR_SUCCESS;
for (i=0;Result==ERROR_SUCCESS;i++) {
Size=MAX_PATH;
Result=RegEnumKeyEx(key,i,lpSubKey,&Size,NULL,NULL,NULL,&FileTime);
if (Result==ERROR_SUCCESS) {
if (strncmp(lpSubKey,"Dangeun.",8)==0) {
UnAssociate(lpSubKey+7);
i--;
}
}
}
RegCloseKey(key);
}
Dangeun.À¸·Î ½ÃÀ۵Ǵ ŰÀÇ È®ÀåÀÚ¸¦ Á¶»çÇÏ¿© ¿¬°á °ü°è¸¦ ²÷¾ú´Ù. ÀÌ Ã³¸®¸¦ ÇÏÁö ¾Ê°í ´ç±Ù¸¸ »ç¶óÁ® ¹ö¸®¸é ´ç±Ù°ú ¿¬°áµÈ ÆÄÀÏÀº ´õºíŬ¸¯Çصµ ÀÚ½ÅÀ» ¿¾îÁÙ ÇÁ·Î±×·¥À» ãÁö ¸øÇÒ °ÍÀÌ´Ù. UnAssociate ÇÔ¼ö¸¦ È£ÃâÇϸé ÀÌÀü ¿¬°á ÇÁ·Î±×·¥À¸·Î ´Ù½Ã º¹±¸µÇ¹Ç·Î ´ç±ÙÀÌ ¼³Ä¡µÇ±â ÀüÀÇ »óÅ·Πµ¹¾Æ°¥ °ÍÀÌ´Ù.