'소프트웨어/ASP'에 해당되는 글 10건

  1. 2007.07.06 실시간검색어 예제 - 다음(daum) 스타일
  2. 2007.05.30 ASP - > 닷넷 마이그레이션 (MS 무료 서적) | 닷넷 공부하기
  3. 2007.05.22 VBScript 를 이용한 예약작업 등록
  4. 2007.04.04 보안서버(SSL) 구축 가이드 Ver 0.9 배포
  5. 2007.02.14 URLEncode - JSP 연동
  6. 2007.02.07 Windows Script Component (wsc) Which Provides An Md5 Hash Of A String
  7. 2007.02.07 웹 개발자를 위한 Naming Rule 가이드
  8. 2007.02.07 Http에러코드
  9. 2007.02.07 타 도메인의 웹페이지를 iframe 에 넣었을 때 쿠키문제
  10. 2007.01.10 ASP Component 에서 RecordSet 으로 리턴하기
2007.07.06 18:42

실시간검색어 예제 - 다음(daum) 스타일




다음(daum)에서 실시간 검색어 예제입니다.

4대 사이트 - <네이버, 다음, 엠파스, 야후> 에서 제일 이쁜놈으로 협찬받았습니다 ㅡㅡ;

키보드+마우스 완벽지원! 고광택 칼라(?), 깔끔한 소스

:: 데모사이트 → http://211.238.15.54/~somekal/ajax/idx.php

idx.php .... 시작파일
ajax_suggest.php ... 검색어 리스팅
ajax_query.php ... 검색어 조회 xml 페이지

그냥 거의 날로도 드실 수 있게 약간 편집해 놨습니다 ㅡㅡ;

ajax_suggest.php에서 '요기'라는 단어를 찾으면 쉽게 수정가능합니다.

훌륭한 소스를 만드신 다음(daum) 개발자님께 다시 한번 감사드립니다.

** 다음(daum)에서 컨닝한 사이트입니다. ***

daumtop_suggest.html ... 검색어 리스팅 페이지
http://sug.search.daum.net/top_nsuggest?q=홍 ... 검색어 조회 xml 페이지

** 후기 **

검색어 리스팅 페이지를 왜 아이프레임으로 따로 처리했나 궁금했는데
Ajax에서는 서브-도메인도 틀리면 안먹더라구요 ㅡㅡ;

ps. 본 예제를 올릴 수 있게 서버를 분양해 주신 '우하루'님께 감사드립니다 ^^

ps. 아래 소스 수정해 주세요. ㅡㅡ; (ajax_suggest.php)
    .daum.net으로 고정이 되었네요 ㅡㅡ;

function setCookie(name, value, expire) {
    var expire_date = new Date(expire)
    document.cookie = name + "=" + escape(value) + "; path=/; expires=" + expire_date.toGMTString(); // + "; domain=.daum.net";
}


Demo : http://211.238.15.54/~somekal/ajax/idx.php

출처 : http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=54572&page=2
Trackback 0 Comment 0
2007.05.30 00:47

ASP - > 닷넷 마이그레이션 (MS 무료 서적) | 닷넷 공부하기

Inside C# 무료 기술 서적 - Inside C# (한글 번역본) 다운로드
이 책은 C# 언어의 내부 구조를 샅샅이 파헤치고, Microsoft .NET 플랫폼과 Microsoft Visual Studio .NET에 대한 최신 정보를 다룬다. 그리고 C# 예제 코드와 예제 응용 프로그램을 작성하여 손쉽게 개발 방법을 체득할 수 있게 한다. 또한, 고급 기능도 빼놓지 않고 다루고 있어 C#을 어떻게 코딩해야 하는지, C#이 어떻게 흘러가는지 쉽게 이해할 수 있다.   

Programming Microsoft SQL Server 2000 with XML 무료 기술 서적 - Programming Microsoft SQL Server 2000 with XML 다운로드
Programming Microsoft SQL Server 2000 with XML은 회사의 데이터베이스로 좀더 확장성 있는 전자상거래 솔루션을 생성하거나, B2B 솔루션을 구축하거나, 웹 애플리케이션을 구축하려는 개발자에게 해답을 제시해 드립니다.   

VC++NETStepbyStep 무료 기술 서적 - Microsoft Visual C++ .NET Step by Step (한글 번역본) 다운로드
이 입문서는 기초적인 C++에 대한 설명에서부터 확장된 Visual C++의 기능 그리고 .NET환경과의 통합에 이르기까지 C++를 사랑하는 개발자들이 가장 쉽고 빠르게 Visual Studio C++ .NET을 활용할 수 있는 방법을 다루고 있습니다. 모든 장마다 간단하면서 핵심적인 예제를 다루었으며, 예제를 차례대로 따라하다 보면 어느덧 .NET 환경에서 C++프로그램을 개발하는 것이 어렵지 않음을 느낄 수 있습니다.   

ASP.NET Step by Step 무료 기술 서적 - ASP.NET Step by Step (한글 번역본) 다운로드
Active Server Pages .NET(ASP.NET)은 현재까지 만들어진 프로그램 중 가장 발전된 웹 개발 플랫폼입니다. 이 혁명적인 새 프로그래밍 프레임워크와 그 기반 기술들을 쉽게 접근할 수 있는 모듈식 입문서인 이 책으로 기초부터 튼튼히 익히기 바랍니다.   

Visual Basic .NET Step by Step 무료 기술 서적 - Visual Basic .NET Step by Step (한글 번역본) 다운로드
이 입문서는 .NET 플랫폼을 위한 전문적인 응용 프로그램을 작성하기 위해 Microsoft Visual Basic .NET을 사용하려는 모든 개발자들이 Visual Basic .NET의 모든 기능을 알 수 있는 가장 빠른 방법을 제공합니다. 전문적인 코드, 최적화를 위한 팁, 조언, 예제 등과 함께 필수적인 내용들로만 묶어 놓은 각 장의 내용을 통해 핵심적인 프로그래밍 기술을 배워보십시오.   

Upgrading Microsoft Visual Basic 6.0 to Microsoft Visual Basic .NET 무료 기술 서적 - Upgrading Microsoft Visual Basic 6.0 to Microsoft Visual Basic .NET (한글 번역본) 다운로드
Visual Basic 6 응용 프로그램을 Visual Basic .NET으로 업그레이드하는 완벽한 기술 가이드 서적으로 API에서 ZOrders에 이르는 모든 업그레이드 주제를 설명하고 있습니다. 이 서적은 폼, 개발언어, 데이터 접속, COM+ 서비스 그리고 XML 웹 서비스, ADO.NET, .NET remoting을 사용하여 응용 프로그램을 업그레이드하는 방법을 제시합니다.   

Visual Basic .NET & ASP.NET WebCast Visual Basic .NET & ASP.NET WebCast
여러분이 참석하셨던, 또는 요청하셨던 다양한 세미나와 강사를 여유 있는 시간에, 자유롭게 들으실 수 있게 되었습니다. 그 동안 바쁜 일정으로 세미나에 참석하지 못하셨던 분들은, 여러분의 자리를 방문한 정상급 강사의 1:1 세미나를 즐기시기 바랍니다.   

Visual Basic .NET 2003: 성공을 위한 업그레이드 ASP .NET으로 마이그레이션: 주요 고려 사항
기존의 ASP 응용 프로그램을 가능한 한 효율적이고 빠르게 ASP .NET 환경으로 옮기기 위해 고려해야 할 기본 사항에 대해 알아 봅니다.   

Visual Basic 6.0을 Visual Basic .NET으로 업그레이드 권장 경로 Visual Basic 6.0을 Visual Basic .NET으로 업그레이드 권장 경로
이 업그레이드 지침은 개발 요건에 가장 적합한 Visual Basic .NET 또는 Visual Studio .NET 에디션을 알아보는 데 사용합니다.   




C# 자스북 무료 서적
http://www.jabook.net/jabook/csharp/frame.html

Trackback 0 Comment 0
2007.05.22 08:19

VBScript 를 이용한 예약작업 등록

Windows 에서 예약작업(스케쥴링, Linux계열에서는 Cron) 을 설정하기 위해서는 2가지 방법이 제공된다.

명령줄 환경에서, 또는 관리목적의 스크립트에서 예약작업을 등록할려면,. 기존에는 옵션이 조금 빈약한 At 을 이용하거나, 별도의 Win32 API 를 호출하는 프로그램을 이용해서 작업을 해야 했으나,

이런 작업을 쉽게 할수 있는 컴포넌트 및 스크립트를 MS에서 다운로드 할수 있으며, 다음 링크에서 가능하다. 다운로드 할때 정품인증 하므로,. 정품이 아닌 OS는 알아서 잘 하면 되겠다. ^^

http://www.microsoft.com/downloads/details.aspx?FamilyID=601d75e2-f907-4e51-ad88-adb818df1d27&displaylang=en

다운로드 하면 다음과 같은 파일이 압축형태로 풀린다.



뭐 별거 없다.

각각의 파일기능은,. itask.tlb 는 윈도우 예약작업 컴포넌트인 SechedulingAgent.dll 에서 참조하는 라이브러리 파일이며, SQLSchedullingAgent.dll 은 SQL Server 의 스케쥴링을 등록해 주며,

sqltasks.xml 은 XML 형태의 스케쥴링 목록을 가진 파일, tasks.xml 은 예약작업 목록을 가진 파일이다.

물론, 최종적인 작업은 task.vbs 파일이 해당 XML 파일에 지정된 컴포넌트를 호출하여 해당 XML 파일의 예약작업 목록을 등록하는 작업을 하게 된다.

그럼, 일단 실행해 보자.

C:\task>task.vbs tasks.xml
Microsoft (R) Windows Script Host 버전 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

 Task: System State Backup scheduled.


결과, task.xml 에 지정된 예약작업이 등록되었다.



그럼, XML 파일은 어떤 형식으로 되어 있을까?. 이 역시 뭐 간단하다. 물론, XML 구조에 대한 간단하나마 이해를 하고 있으면 말이다.



task.vbs 소스파일을 보면,. 지정된 XML 파일을 파싱하여 지정된 agent 라이브러리 이용하여 task 노드의 어트리뷰트의 예약작업 각 항목을 등록을 하게 된다.


SQL 스케쥴링도 별반 다를게 없다.

물론, 하나의 tasks.xml 파일 내부에, 윈도우 예약작업을 2개 이상 지정하거나, SQL 예약작업과 함께 설정할수가 있는데,

XML 노드중, agent 노드가 하나의 예약작업이므로 1개 이상의 예약작업 설정이 가능하다. 운영하는 서버가 여러대이거나, 또는 관리하는 컴퓨터가 여러대 일 경우 쉽게 예약작업 설정이 가능해 진다.


실제 처리를 하는 파일인 task.vbs 소스를 보면, 내부가 모두 각 함수로 잘 정리되어 있는데 각 함수의 기능은 앞서 얘기한 각 항목별 기능을 처리하는 함수이다.

dll 파일이 레지스트리에 등록되어 있지 않으면 레지스트리에 등록하는거나, xml 파일 파싱을 하는거나 컴포넌트를 호출하여 실제 예약작업에 등록하는 등이다.


추가로, 예약작업에 등록하는 방법은 WMI 를 이용하는 방법도 있다.

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set objNewJob = objWMIService.Get("Win32_ScheduledJob") errJobCreated = objNewJob.Create _
    ("Notepad.exe", "********123000.000000-420", _
        True , 1 OR 4 OR 16, , , JobID)
Wscript.Echo errJobCreated


WMI 를 이용하는것과 위 vbscript 의 차이점은, API 가 다르다. WMI 에서의 실제 작업은 At 방식과 같게 작동한다. 그래서 특정 실행 계정을 지정할수 없으며, SYSTEM 계정 권한으로 등록되어 실행된다.

 


위 2가지 방식으로, 쉽게 예약작업 설정이 가능하다. 물론 관리자가 어떤 작업을 프로그래미컬 한 작업을 원할 경우에 말이다.
 

[원본글: http://www.serverinfo.pe.kr/TipnTech.aspx?Seq=296]
Trackback 1 Comment 0
2007.04.04 08:18

보안서버(SSL) 구축 가이드 Ver 0.9 배포

"한국정보보호진흥원에서는 이용자 개인정보를 취급하는 정보통신서비스제공자들의 보안서버 구축을 지원하고자 「보안서버 구축 가이드 Ver 0.9」를 개발하였습니다.
본 가이드에 대한 다양한 검토의견 수렴 및 보완을 통하여 추후 지속적인 업데이트를 진행할 계획입니다. 따라서 향후 가이드에서 소개되기를 바라는 내용이 있으신 경우 언제든지 아래 문의처로 제안해주시면 적극 반영하겠습니다."

「보안서버 구축 가이드 Ver 0.9」의 구성은 다음과 같습니다.
    Ⅰ장 보안서버란
    Ⅱ장 어떻게 시작하지?
    Ⅲ장 SSL 방식 보안서버 구축하기
    Ⅳ장 응용프로그램 방식 보안서버 구축하기
    Ⅴ장 웹호스팅업체의 보안서버 구축하기
    Ⅵ장 웹페이지 수정 및 적용 확인하기
    Ⅶ장 제도 관련 FAQ
    부록 : 멀티도메인 SSL 인증서 및 SSL 가속기 소개
본 가이드는 아래 링크에서도 다운로드가 가능합니다. 참고하시기 바랍니다.
  - 시큐어넷 http://www.securenet.or.kr/ → 보고서 → 법,가이드라인
  - 보안서버전문협의회 http://www.kisia.or.kr/secureserver/
관련문의처
  - 한국정보보호진흥원 정책개발단 기술정책팀
  - 이민우 연구원, 02-405-5504, mwlee@kisa.or.kr


http://www.kisa.or.kr/kisa/notics/jsp/notice_list.jsp
http://www.serverinfo.pe.kr/File/News/2007/03/보안서버구축가이드_v09.pdf
Trackback 0 Comment 0
2007.02.14 11:10

URLEncode - JSP 연동

   Public Function URLEncode(URLStr)

    Dim sURL         '** 입력받은 URL 문자열
    Dim sBuffer      '** URL 인코딩 처리 중 URL 을 담을 버퍼 문자열
    Dim sTemp        '** 임시 문자열
    Dim cChar        '** URL 문자열 중 현재 인텍스의 문자
      
    Dim Index


    Dim lErrNum      '** 오류 번호
    Dim sErrSource   '** 오류 소스
    Dim sErrDesc     '** 소류 설명
    Dim sMsg         '** 오류 메세지
      
      
    sURL = Trim(URLStr)     '** URL 문자열을 얻는다.
    sBuffer = ""            '** 임시 버퍼용 문자열 변수 초기화.

      
    '******************************************************
    '* URL 인코딩 작업
    '******************************************************
      
    For Index = 1 To Len(sURL)
      
     '** 현재 인덱스의 문자를 얻는다.
     cChar = Mid(sURL, Index, 1)

     If cChar = "0" Or _
     (cChar >= "1" And cChar <= "9") Or _
     (cChar >= "a" And cChar <= "z") Or _
     (cChar >= "A" And cChar <= "Z") Or _
     cChar = "-" Or _
     cChar = "_" Or _
     cChar = "." Or _
     cChar = "*" Then

      '** URL 에 허용되는 문자들 :: 버퍼 문자열에 추가한다.
      sBuffer = sBuffer & cChar
              
     ElseIf cChar = " " Then
          
      '** 공백 문자 :: + 로 대체하여 버퍼 문자열에 추가한다.
      sBuffer = sBuffer & "+"
              
     Else
          
      '** URL 에 허용되지 않는 문자들 :: % 로 인코딩해서 버퍼 문자열에 추가한다.
      sTemp = CStr(Hex(Asc(cChar)))
              
      If Len(sTemp) = 4 Then

       sBuffer = sBuffer & "%" & Left(sTemp, 2) & "%" & Mid(sTemp, 3, 2)

      ElseIf Len(sTemp) = 2 Then

       sBuffer = sBuffer & "%" & sTemp

      End If
                  
     End If

    Next


    '** 결과를 리턴한다.
    URLEncode = sBuffer
      
      
   
   End Function

   '-----------------------------------------
   ' URLDecode (ASP NewsGroup whohwa)
   '-----------------------------------------
   Public Function URLDecode(byVal pURL)
    Dim vPos, result, tempHex, i
    pURL = Replace(pURL, "+", " ")
    result = ""

    for i = 1 to len(pURL)

     If Mid(pURL, i, 1) = "%" Then
      If LCase(Mid(pURL, i + 1, 1)) = "u" Then
       result = result & Chr(CLng("&H" & Mid(pURL, i + 2, 4)))
       i = i + 5
      Else

       If Mid(pURL, i + 3, 1) = "%" then
        tempHex = CLng("&H" & Mid(pURL, i + 1, 2))

        If tempHex > 127 Then
         result = result & _
         Chr(CLng("&H" & Mid(pURL, i + 1, 2)) * &H100 + CLng("&H" & Mid(pURL, i + 4, 2)))
         i = i + 5
        Else
         result = result & Chr(CLng("&H" & Mid(pURL, i + 1, 2)))
         i = i + 2
        End If
       Else
        tempHex = CLng("&H" & Mid(pURL, i + 1, 2))
        If tempHex > 127 Then
         result = result & Chr("&H" & Mid(pURL, i + 1, 2) & Cstr(Hex(Asc(Mid(pURL, i + 3, 1)))))
         i = i + 3
        Else
         result = result & Chr(CLng("&H" & Mid(pURL, i + 1, 2)))
         i = i + 2
        End If

       End If
      End If
     Else
      result = result & Mid(pURL, i, 1)
     End If
    next
    URLDecode = result
   End Function


   '-----------------------------------------
   ' URLEncode
   ' www.egocube.pe.kr
   '-----------------------------------------


 JSP서버 페이지 호출시에 유용하게 사용함

Trackback 0 Comment 0
2007.02.07 09:09

Windows Script Component (wsc) Which Provides An Md5 Hash Of A String

Author: Ian Northwood

Description:

A Windows Script Component (WSC) which provides an MD5 hash of a string. It was built to check the integrity of scripts (to prevent unauthorised users editing then running scripts) - hence the GetFileHash function - but is easily editable so that the hash could be anything you wanted.

Script:

<?XML version="1.0" encoding="utf-8" ?>
<component id="MD5.Server">

    <?component error="true" debug="true"?>

<!--
    '// RSA/MD5 implementation
    '// Most MD5 implementations look more or less the same. The exception with this one is that
    '// it is inside a WSC. Other than that, it's massaged from the RFC1321 C code and simplified a little.
    '//
    '//     Text     - String    text to encode
    '//     HEXMD5     - String    read-only, MD5 value of Text above
    '//
    '// The component contains these : CalculateMD5, GetFileHash, BuildHashString
    '//
    '// Usage:
    '//        CalculateMD5
    '//        ===
    '//    Dim objMD5Hash
    '//    Dim strHash
    '//    Dim sString
    '//
    '//    sString        = "Mary had a little lamb"
    '//
    '//    Set objMD5Hash     = CreateObject("MD5.Server")
    '//    strHash     = objMD5Hash.CalculateMD5(sString)
    '//
    '//    WScript.Echo     "Text:" & sString
    '//    WScript.Echo     "Hash:" & strHash
    '//    
    '//    Set objMD5Hash = Nothing
    '//
    '//        GetFileHash
    '//        ===
    '//    Dim objMD5Hash
    '//    Dim strFileHash
    '//    Dim strFile
    '//
    '//    strFile        = "C:\SomeFileName.TXT"
    '//
    '//    Set objMD5Hash     = CreateObject("MD5.Server")
    '//    strFileHash     = objMD5Hash.GetFileHash(strFile)
    '//
    '//    WScript.Echo     "Hash:" & strFileHash
    '//    
    '//    Set objMD5Hash = Nothing
    '//
   
   
    BuildHashString
-->

    <resource id="progid">MD5.Server
    </resource>
    <registration
        description="MD5.Server"
        progid="MD5.Server"
        version="1.00"
        classid="{d3bf0715-b5a6-49de-8e3c-dfde3ef64d80}">
    </registration>

    <public>

        <method name="CalculateMD5">
            <PARAMETER name="strText"/>
        </method>

        <method name="GetFileHash">
            <PARAMETER name="strFile"/>
        </method>

        <method name="BuildHashString">
            <PARAMETER name="objFile"/>
        </method>
    </public>

    <implements type="Behavior" id="Behavior"/>

    <script language="VBScript">
    <![CDATA[

        Private Const S11    =    &H007
        Private Const S12    =    &H00C
        Private Const S13    =    &H011
        Private Const S14    =    &H016
        Private Const S21    =    &H005
        Private Const S22    =    &H009
        Private Const S23    =    &H00E
        Private Const S24    =    &H014
        Private Const S31    =    &H004
        Private Const S32    =    &H00B
        Private Const S33    =    &H010
        Private Const S34    =    &H017
        Private Const S41    =    &H006
        Private Const S42    =    &H00A
        Private Const S43    =    &H00F
        Private Const S44    =    &H015

        Dim m_lMask(30)
        Dim m_lPow(30)

        '// Make arrays of these values to save some time during the calculation
        m_lMask(0)    =    CLng(&H00000001&)
        m_lMask(1)    =    CLng(&H00000003&)
        m_lMask(2)    =    CLng(&H00000007&)
        m_lMask(3)    =    CLng(&H0000000F&)
        m_lMask(4)    =    CLng(&H0000001F&)
        m_lMask(5)    =    CLng(&H0000003F&)
        m_lMask(6)    =    CLng(&H0000007F&)
        m_lMask(7)    =    CLng(&H000000FF&)
        m_lMask(8)    =    CLng(&H000001FF&)
        m_lMask(9)    =    CLng(&H000003FF&)
        m_lMask(10)    =    CLng(&H000007FF&)
        m_lMask(11)    =    CLng(&H00000FFF&)
        m_lMask(12)    =    CLng(&H00001FFF&)
        m_lMask(13)    =    CLng(&H00003FFF&)
        m_lMask(14)    =    CLng(&H00007FFF&)
        m_lMask(15)    =    CLng(&H0000FFFF&)
        m_lMask(16)    =    CLng(&H0001FFFF&)
        m_lMask(17)    =    CLng(&H0003FFFF&)
        m_lMask(18)    =    CLng(&H0007FFFF&)
        m_lMask(19)    =    CLng(&H000FFFFF&)
        m_lMask(20)    =    CLng(&H001FFFFF&)
        m_lMask(21)    =    CLng(&H003FFFFF&)
        m_lMask(22)    =    CLng(&H007FFFFF&)
        m_lMask(23)    =    CLng(&H00FFFFFF&)
        m_lMask(24)    =    CLng(&H01FFFFFF&)
        m_lMask(25)    =    CLng(&H03FFFFFF&)
        m_lMask(26)    =    CLng(&H07FFFFFF&)
        m_lMask(27)    =    CLng(&H0FFFFFFF&)
        m_lMask(28)    =    CLng(&H1FFFFFFF&)
        m_lMask(29)    =    CLng(&H3FFFFFFF&)
        m_lMask(30)    =    CLng(&H7FFFFFFF&)

        '// Power operations always take time to calculate
        m_lPow(0)    =    CLng(&H00000001&)
        m_lPow(1)    =    CLng(&H00000002&)
        m_lPow(2)    =    CLng(&H00000004&)
        m_lPow(3)    =    CLng(&H00000008&)
        m_lPow(4)    =    CLng(&H00000010&)
        m_lPow(5)    =    CLng(&H00000020&)
        m_lPow(6)    =    CLng(&H00000040&)
        m_lPow(7)    =    CLng(&H00000080&)
        m_lPow(8)    =    CLng(&H00000100&)
        m_lPow(9)    =    CLng(&H00000200&)
        m_lPow(10)    =    CLng(&H00000400&)
        m_lPow(11)    =    CLng(&H00000800&)
        m_lPow(12)    =    CLng(&H00001000&)
        m_lPow(13)    =    CLng(&H00002000&)
        m_lPow(14)    =    CLng(&H00004000&)
        m_lPow(15)    =    CLng(&H00008000&)
        m_lPow(16)    =    CLng(&H00010000&)
        m_lPow(17)    =    CLng(&H00020000&)
        m_lPow(18)    =    CLng(&H00040000&)
        m_lPow(19)    =    CLng(&H00080000&)
        m_lPow(20)    =    CLng(&H00100000&)
        m_lPow(21)    =    CLng(&H00200000&)
        m_lPow(22)    =    CLng(&H00400000&)
        m_lPow(23)    =    CLng(&H00800000&)
        m_lPow(24)    =    CLng(&H01000000&)
        m_lPow(25)    =    CLng(&H02000000&)
        m_lPow(26)    =    CLng(&H04000000&)
        m_lPow(27)    =    CLng(&H08000000&)
        m_lPow(28)    =    CLng(&H10000000&)
        m_lPow(29)    =    CLng(&H20000000&)
        m_lPow(30)    =    CLng(&H40000000&)

        Public Function CalculateMD5(ByVal strTextToHash)
            Dim lArray
            Dim lIndex
            Dim AA
            Dim BB
            Dim CC
            Dim DD
            Dim lStatus0
            Dim lStatus1
            Dim lStatus2
            Dim lStatus3

            lArray = ConvertToWordArray(strTextToHash)

            lStatus0 = &H67452301
            lStatus1 = &HEFCDAB89
            lStatus2 = &H98BADCFE
            lStatus3 = &H10325476

            For lIndex = 0 To UBound(lArray) Step 16
                AA = lStatus0
                BB = lStatus1
                CC = lStatus2
                DD = lStatus3

                FF lStatus0,lStatus1,lStatus2,lStatus3,lArray(lIndex + 0),    S11,&HD76AA478
                FF lStatus3,lStatus0,lStatus1,lStatus2,lArray(lIndex + 1),    S12,&HE8C7B756
                FF lStatus2,lStatus3,lStatus0,lStatus1,lArray(lIndex + 2),    S13,&H242070DB
                FF lStatus1,lStatus2,lStatus3,lStatus0,lArray(lIndex + 3),    S14,&HC1BDCEEE
                FF lStatus0,lStatus1,lStatus2,lStatus3,lArray(lIndex + 4),    S11,&HF57C0FAF
                FF lStatus3,lStatus0,lStatus1,lStatus2,lArray(lIndex + 5),    S12,&H4787C62A
                FF lStatus2,lStatus3,lStatus0,lStatus1,lArray(lIndex + 6),    S13,&HA8304613
                FF lStatus1,lStatus2,lStatus3,lStatus0,lArray(lIndex + 7),    S14,&HFD469501
                FF lStatus0,lStatus1,lStatus2,lStatus3,lArray(lIndex + 8),    S11,&H698098D8
                FF lStatus3,lStatus0,lStatus1,lStatus2,lArray(lIndex + 9),    S12,&H8B44F7AF
                FF lStatus2,lStatus3,lStatus0,lStatus1,lArray(lIndex + 10),    S13,&HFFFF5BB1
                FF lStatus1,lStatus2,lStatus3,lStatus0,lArray(lIndex + 11),    S14,&H895CD7BE
                FF lStatus0,lStatus1,lStatus2,lStatus3,lArray(lIndex + 12),    S11,&H6B901122
                FF lStatus3,lStatus0,lStatus1,lStatus2,lArray(lIndex + 13),    S12,&HFD987193
                FF lStatus2,lStatus3,lStatus0,lStatus1,lArray(lIndex + 14),    S13,&HA679438E
                FF lStatus1,lStatus2,lStatus3,lStatus0,lArray(lIndex + 15),    S14,&H49B40821

                GG lStatus0,lStatus1,lStatus2,lStatus3,lArray(lIndex + 1),    S21,&HF61E2562
                GG lStatus3,lStatus0,lStatus1,lStatus2,lArray(lIndex + 6),    S22,&HC040B340
                GG lStatus2,lStatus3,lStatus0,lStatus1,lArray(lIndex + 11),    S23,&H265E5A51
                GG lStatus1,lStatus2,lStatus3,lStatus0,lArray(lIndex + 0),    S24,&HE9B6C7AA
                GG lStatus0,lStatus1,lStatus2,lStatus3,lArray(lIndex + 5),    S21,&HD62F105D
                GG lStatus3,lStatus0,lStatus1,lStatus2,lArray(lIndex + 10),    S22,&H2441453
                GG lStatus2,lStatus3,lStatus0,lStatus1,lArray(lIndex + 15),    S23,&HD8A1E681
                GG lStatus1,lStatus2,lStatus3,lStatus0,lArray(lIndex + 4),    S24,&HE7D3FBC8
                GG lStatus0,lStatus1,lStatus2,lStatus3,lArray(lIndex + 9),    S21,&H21E1CDE6
                GG lStatus3,lStatus0,lStatus1,lStatus2,lArray(lIndex + 14),    S22,&HC33707D6
                GG lStatus2,lStatus3,lStatus0,lStatus1,lArray(lIndex + 3),    S23,&HF4D50D87
                GG lStatus1,lStatus2,lStatus3,lStatus0,lArray(lIndex + 8),    S24,&H455A14ED
                GG lStatus0,lStatus1,lStatus2,lStatus3,lArray(lIndex + 13),    S21,&HA9E3E905
                GG lStatus3,lStatus0,lStatus1,lStatus2,lArray(lIndex + 2),    S22,&HFCEFA3F8
                GG lStatus2,lStatus3,lStatus0,lStatus1,lArray(lIndex + 7),    S23,&H676F02D9
                GG lStatus1,lStatus2,lStatus3,lStatus0,lArray(lIndex + 12),    S24,&H8D2A4C8A

                HH lStatus0,lStatus1,lStatus2,lStatus3,lArray(lIndex + 5),    S31,&HFFFA3942
                HH lStatus3,lStatus0,lStatus1,lStatus2,lArray(lIndex + 8),    S32,&H8771F681
                HH lStatus2,lStatus3,lStatus0,lStatus1,lArray(lIndex + 11),    S33,&H6D9D6122
                HH lStatus1,lStatus2,lStatus3,lStatus0,lArray(lIndex + 14),    S34,&HFDE5380C
                HH lStatus0,lStatus1,lStatus2,lStatus3,lArray(lIndex + 1),    S31,&HA4BEEA44
                HH lStatus3,lStatus0,lStatus1,lStatus2,lArray(lIndex + 4),    S32,&H4BDECFA9
                HH lStatus2,lStatus3,lStatus0,lStatus1,lArray(lIndex + 7),    S33,&HF6BB4B60
                HH lStatus1,lStatus2,lStatus3,lStatus0,lArray(lIndex + 10),    S34,&HBEBFBC70
                HH lStatus0,lStatus1,lStatus2,lStatus3,lArray(lIndex + 13),    S31,&H289B7EC6
                HH lStatus3,lStatus0,lStatus1,lStatus2,lArray(lIndex + 0),    S32,&HEAA127FA
                HH lStatus2,lStatus3,lStatus0,lStatus1,lArray(lIndex + 3),    S33,&HD4EF3085
                HH lStatus1,lStatus2,lStatus3,lStatus0,lArray(lIndex + 6),    S34,&H4881D05
                HH lStatus0,lStatus1,lStatus2,lStatus3,lArray(lIndex + 9),    S31,&HD9D4D039
                HH lStatus3,lStatus0,lStatus1,lStatus2,lArray(lIndex + 12),    S32,&HE6DB99E5
                HH lStatus2,lStatus3,lStatus0,lStatus1,lArray(lIndex + 15),    S33,&H1FA27CF8
                HH lStatus1,lStatus2,lStatus3,lStatus0,lArray(lIndex + 2),    S34,&HC4AC5665

                II lStatus0,lStatus1,lStatus2,lStatus3,lArray(lIndex + 0),    S41,&HF4292244
                II lStatus3,lStatus0,lStatus1,lStatus2,lArray(lIndex + 7),    S42,&H432AFF97
                II lStatus2,lStatus3,lStatus0,lStatus1,lArray(lIndex + 14),    S43,&HAB9423A7
                II lStatus1,lStatus2,lStatus3,lStatus0,lArray(lIndex + 5),    S44,&HFC93A039
                II lStatus0,lStatus1,lStatus2,lStatus3,lArray(lIndex + 12),    S41,&H655B59C3
                II lStatus3,lStatus0,lStatus1,lStatus2,lArray(lIndex + 3),    S42,&H8F0CCC92
                II lStatus2,lStatus3,lStatus0,lStatus1,lArray(lIndex + 10),    S43,&HFFEFF47D
                II lStatus1,lStatus2,lStatus3,lStatus0,lArray(lIndex + 1),    S44,&H85845DD1
                II lStatus0,lStatus1,lStatus2,lStatus3,lArray(lIndex + 8),    S41,&H6FA87E4F
                II lStatus3,lStatus0,lStatus1,lStatus2,lArray(lIndex + 15),    S42,&HFE2CE6E0
                II lStatus2,lStatus3,lStatus0,lStatus1,lArray(lIndex + 6),    S43,&HA3014314
                II lStatus1,lStatus2,lStatus3,lStatus0,lArray(lIndex + 13),    S44,&H4E0811A1
                II lStatus0,lStatus1,lStatus2,lStatus3,lArray(lIndex + 4),    S41,&HF7537E82
                II lStatus3,lStatus0,lStatus1,lStatus2,lArray(lIndex + 11),    S42,&HBD3AF235
                II lStatus2,lStatus3,lStatus0,lStatus1,lArray(lIndex + 2),    S43,&H2AD7D2BB
                II lStatus1,lStatus2,lStatus3,lStatus0,lArray(lIndex + 9),    S44,&HEB86D391

                lStatus0 = Add32(lStatus0,AA)
                lStatus1 = Add32(lStatus1,BB)
                lStatus2 = Add32(lStatus2,CC)
                lStatus3 = Add32(lStatus3,DD)
            Next

            CalculateMD5 = LCase(WordToHex(lStatus0) & WordToHex(lStatus1) & WordToHex(lStatus2) & WordToHex(lStatus3))
        End Function

        Private Function F(lX, lY, lZ)
            F = (lX And lY) Or ((Not lX) And lZ)
        End Function

        Private Function G(lX, lY, lZ)
            G = (lX And lZ) Or (lY And (Not lZ))
        End Function

        Private Function H(lX, lY, lZ)
            H = lX Xor lY Xor lZ
        End Function

        Private Function I(lX, lY, lZ)
            I = lY Xor (lX Or (Not lZ))
        End Function

        Private Sub FF(lA, lB, lC, lD, lX, lS, lAC)
            lA = Add32(lA,Add32(Add32(F(lB,lC,lD),lX),lAC))
            lA = RotateLeft32(lA,lS)
            lA = Add32(lA,lB)
        End Sub

        Private Sub GG(lA, lB, lC, lD, lX, lS, lAC)
            lA = Add32(lA,Add32(Add32(G(lB,lC,lD),lX),lAC))
            lA = RotateLeft32(lA,lS)
            lA = Add32(lA,lB)
        End Sub

        Private Sub HH(lA, lB, lC, lD, lX, lS, lAC)
            lA = Add32(lA,Add32(Add32(H(lB,lC,lD),lX),lAC))
            lA = RotateLeft32(lA,lS)
            lA = Add32(lA,lB)
        End Sub

        Private Sub II(lA, lB, lC, lD, lX, lS, lAC)
            lA = Add32(lA,Add32(Add32(I(lB,lC,lD),lX),lAC))
            lA = RotateLeft32(lA,lS)
            lA = Add32(lA,lB)
        End Sub

        Private Function ConvertToWordArray(sText)
            Dim lTextLength
            Dim lNumberOfWords
            Dim lWordArray()
            Dim lBytePosition
            Dim lByteCount
            Dim lWordCount

            lTextLength = Len(sText)

            lNumberOfWords = (((lTextLength + 8) \ 64) + 1) * 16

            ReDim lWordArray(lNumberOfWords - 1)

            lBytePosition = 0
            lByteCount = 0

            Do Until lByteCount >= lTextLength
                lWordCount = lByteCount \ 4
                lBytePosition = (lByteCount Mod 4) * 8
                lWordArray(lWordCount) = lWordArray(lWordCount) Or ShiftLeft(Asc(Mid(sText,lByteCount + 1,1)),lBytePosition)
                lByteCount = lByteCount + 1
            Loop

            lWordCount = lByteCount \ 4
            lBytePosition = (lByteCount Mod 4) * 8

            lWordArray(lWordCount) = lWordArray(lWordCount) Or ShiftLeft(&H80,lBytePosition)

            lWordArray(lNumberOfWords - 2) = ShiftLeft(lTextLength,3)
            lWordArray(lNumberOfWords - 1) = ShiftRight(lTextLength,29)

            ConvertToWordArray = lWordArray
        End Function

        Private Function WordToHex(lValue)
            Dim lTemp

            For lTemp = 0 To 3
                WordToHex = WordToHex & Right("00" & Hex(ShiftRight(lValue,lTemp * 8) And m_lMask(7)),2)
            Next
        End Function

        ' Unsigned value arithmetic functions for rotating, shifting and adding
        Private Function ShiftLeft(lValue,iBits)
            ' Guilty until proven innocent
            ShiftLeft = 0

            If iBits = 0 then
                ShiftLeft = lValue ' No shifting to do
            ElseIf iBits = 31 Then ' Quickly shift left if there is a value, being aware of the sign
                If lValue And 1 Then
                    ShiftLeft = &H80000000
                End If
            Else ' Shift left x bits, being careful with the sign
                If (lValue And m_lPow(31 - iBits)) Then
                    ShiftLeft = ((lValue And m_lMask(31 - (iBits + 1))) * m_lPow(iBits)) Or &H80000000
                Else
                    ShiftLeft = ((lValue And m_lMask(31 - iBits)) * m_lPow(iBits))
                End If
            End If
        End Function

        Private Function ShiftRight(lValue,iBits)
            ' Guilty until proven innocent
            ShiftRight = 0

            If iBits = 0 then
                ShiftRight = lValue ' No shifting to do
            ElseIf iBits = 31 Then ' Quickly shift to the right if there is a value in the sign
                If lValue And &H80000000 Then
                    ShiftRight = 1
                End If
            Else
                ShiftRight = (lValue And &H7FFFFFFE) \ m_lPow(iBits)

                If (lValue And &H80000000) Then
                    ShiftRight = (ShiftRight Or (&H40000000 \ m_lPow(iBits - 1)))
                End If
            End If
        End Function

        Private Function RotateLeft32(lValue,iBits)
            RotateLeft32 = ShiftLeft(lValue,iBits) Or ShiftRight(lValue,(32 - iBits))
        End Function

        Private Function Add32(lA,lB)
            Dim lA4
            Dim lB4
            Dim lA8
            Dim lB8
            Dim lA32
            Dim lB32
            Dim lA31
            Dim lB31
            Dim lTemp

            lA32 = lA And &H80000000
            lB32 = lB And &H80000000
            lA31 = lA And &H40000000
            lB31 = lB And &H40000000

            lTemp = (lA And &H3FFFFFFF) + (lB And &H3FFFFFFF)

            If lA31 And lB31 Then
                lTemp = lTemp Xor &H80000000 Xor lA32 Xor lB32
            ElseIf lA31 Or lB31 Then
                If lTemp And &H40000000 Then
                    lTemp = lTemp Xor &HC0000000 Xor lA32 Xor lB32
                Else
                    lTemp = lTemp Xor &H40000000 Xor lA32 Xor lB32
                End If
            Else
                lTemp = lTemp Xor lA32 Xor lB32
            End If

            Add32 = lTemp
        End Function

        Public Function GetFileHash(ByVal strFileToHash)

            Dim objFSO_Hash
            Dim objFile_Hash
           
            Set objFSO_Hash            = CreateObject("Scripting.FileSystemObject")
           
            GetFileHash            = Empty

            On Error Resume Next
            With objFSO_Hash
                Set objFile_Hash = .GetFile(strFileToHash)
                If Err.Number <> 0 Then
                    Exit Function
                End If

                With objFile_Hash
                    strDummy_Hash    = Empty
                    strDummy_Hash    = BuildHashString(objFile_Hash)
                End With
            End With

            On Error Goto 0

            GetFileHash        = CalculateMD5(strDummy_Hash)
            Set objFile         = Nothing
            Set objFSO_Hash        = Nothing
        End Function
   
        Public Function BuildHashString(ByVal strFileName)
       
            Dim objFSO_Build
            Dim objFile_Build
            Dim strDummy_Build
           
            Set objFSO_Build        = CreateObject("Scripting.FileSystemObject")
           
            BuildHashString            = Empty

            On Error Resume Next
            Set objFile_Build = objFSO_Build.GetFile(strFileName)
            On Error Goto 0

            With objFile_Build
                strDummy_Hash    = Empty
                strDummy_Hash    = strDummy_Hash & UCase(.Name)
                strDummy_Hash    = strDummy_Hash & "|"
                strDummy_Hash    = strDummy_Hash & FormatDateTime(.DateCreated, 4)
                strDummy_Hash    = strDummy_Hash & "|"
                strDummy_Hash    = strDummy_Hash & CStr(.Size)
                strDummy_Hash    = strDummy_Hash & "|"
            End With
       
            BuildHashString        = strDummy_Hash

        End Function
   
    ]]>
    </script>
</component>

Keywords: Windows Script Component Wsc Md5 Security

Trackback 0 Comment 0
2007.02.07 08:25

웹 개발자를 위한 Naming Rule 가이드

웹 개발자를 위한 Naming Rule 가이드

이 글은 웹 응용 프로그램을 개발할 때, 필요한 Naming Rule 을 정리한 것이다. 개발자들 사이의 커뮤니케이션과 관리를 위해서 가능한 규칙을 따르는 것이 좋다고 생각한다. 이 규칙들은 정답은 아니지만, 컨설팅을 수행하면서 어느 정도의 시행착오를 거쳐서 정리한 내용이고 웹 개발자들에게 참고가 되기를 바란다. 이 규칙을 각자의 개발 환경에 맞게 보완해서 사용한다면 도움이 될거라 생각된다.

분류 대상 비고
Presentation Services(ASP) ASP File Name, HTML File Name, Image File Name, Session Level Variable Name(PascalCasing Naming Conversion or CamelCasing Naming Conversion), Script Variable Name, Tag Name, Cookie Name
Business Services (Component) Project File Name(DLL Name), Class Name, Interface(Method, Property) Name
Data Services(Database) Table Name, Field Name, Stored Procedure Name, View Name, Trigger Name

모든 이름은 Hungarian 표기법과 PascalCasing Naming Convention을 따르는 것을 원칙으로 한다.



Presentation Services Naming Rule

1. ASP File Name

ASP 파일 명은 관리를 쉽게 할 수 있도록 업무에 관련된 이름을 부여한다.

[명명 규칙] 시스템단축명_기능.asp

예) 웹메일 시스템의 자유 게시판의 ASP 파일 명은 wm_FreeBoard.asp로 명명한다.

시스템 단축 명은 프로젝트 관리자가 부여한다.

2. HTML File Name

HTML 파일 명은 관리를 쉽게 할 수 있도록 업무에 관련된 이름을 부여하며, HTML 파일의 확장자는 htm로 명명한다.

[명명 규칙] 시스템단축명_기능.htm

예) 웹메일 시스템의 자유 게시판의 HTML 파일 명은 wm_FreeBoard.htm으로 명명한다.

시스템 단축 명은 프로젝트 관리자가 부여한다.

3. Image File Name

Image 파일 명은 다음과 같은 이름 부여 규칙을 사용한다.

[명명 규칙] 업무단축명_위치_기능.gif

업무 단축명은 가능하다면 ASP 파일의 단축 명을 사용한다.

위치 : 상(t), 중(m), 하(b), 좌(l), 중(m), 우(r)

예1) 웹메일 시스템의 자유 게시판의 우측상단에 있는 목록보기 이미지는 fb_tr_list.gif로 명명한다.
여기서 fb는 FreeBoard의 단축 명이다.

예2) 메인 페이지의 좌측 중앙에 있는 로그온 이미지는 main_ml_LogOn.gif로 명명한다.

웹 응용 프로그램 전반에 공통적으로 사용되는 이미지는 명명 규칙에 “위치”를 포함하지 않으며,
“업무단축명”으로 “cn_”을 사용한다.

예3) 메인 화면에 사용하는 읽기에 대한 공통 이미지는 cn_read.gif로 명명한다.

4. Application Level Variable Name

Application Level의 변수는 다음과 같은 이름 부여 규칙을 사용한다.

[명명 규칙] ap_기능

예) 웹 사이트 방문자 수를 나타내는 Application Level 변수는 ap_VisitCount로 명명한다.

5. Session Level Variable Name

Session Level의 변수는 다음과 같은 이름 부여 규칙을 사용한다.

[명명 규칙] se_기능

예) 사용자 계정을 나타내는 Session Level 변수는 se_UserID로 명명한다.

6. Script Variable Name

스크립트 변수 명은 변수의 Scope에 따라 접두어(“g_” 전역, “l_” 로컬, “p_” 매개변수)를 붙인다.
단, 로컬 변수인 경우에는 Scope를 나타내는 접두어는 생략 가능하다.

[명명 규칙] 접두어_기능

예) 사용자가 선택한 색상을 저장하는 로컬 변수는 “l_Color” 이다.
스크립트에서는 모든 데이터 타입이 Variant이기 때문에, 변수 명에 데이터 형을 표기하지 않는다.

7. Tag Name

태그 명은 태그의 종류를 나타내는 접두어와 기능으로 이름을 부여한다.

[명명 규칙] 접두어_기능

태그는 종류별로 다음과 같은 접두어를 붙인다.

접두어 태그
frm 폼
btn_ 버튼
txt_ 텍스트 박스
mtx_ 멀티라인 텍스트 박스
lbl_ 라벨
chk_ 체크박스
opt_ 옵션버튼

이미지 파일은 확장자로 알 수 있기 때문에 태그의 접두어를 사용하지 않는다.

여기서는 주로 많이 사용하는 태그들의 이름 부여 규칙만을 정의하며,
그 외의 태그들은 개발자가 임의로 이름을 부여해서 사용한다.

예) 사용자 이름을 입력하는 텍스트 박스의 명은 txt_UserName으로 명명한다.

8. Cookie Name

Cookie 명은 관리를 쉽게 할 수 있도록 업무에 관련된 이름을 부여한다.

[명명 규칙] 시스템단축명_기능

예) 웹메일 시스템의 사용자 이름을 저장하는 쿠키의 명은 wm_UserName으로 명명한다.
서브 쿠키 명은 개발자가 임의로 부여한다.


Business Services Naming Rule

1. Visual Basic Project File Name (DLL File Name)

DLL 파일 명은 관리를 쉽게 할 수 있도록 업무에 관련된 이름을 부여한다.

[명명 규칙] 시스템단축명_기능.dll

예) 웹메일 시스템의 자유 게시판을 구현하는 DLL의 파일 명은 wm_FreeBoard.dll로 명명한다.

시스템 단축 명은 프로젝트 관리자가 부여한다.

2. Class Name

비주얼 베이직 프로젝트에 포함된 클래스 파일의 이름은 기본적으로 Query와 Modify로 분류하고,
별도의 비즈니스 로직을 포함하는 클래스는 프로젝트 관리자와 협의 후 부여한다.

Query 클래스는 조회용 메서드를 포함하는 클래스의 명칭이며,
Modify 클래스는 삽입, 수정, 삭제와 같은 트랜잭션이 발생하는 메서드를 포함하는 클래스의 명칭이다.

[명명 규칙] Query, Modify, 업무명

예) 웹메일 시스템의 자유 게시판의 글을 읽는 클래스 파일의 이름은 Query로 명명하며,
ASP에서 사용하기 위한 이 클래스의 ProgID는 wm_FreeBoard.Query이다.

일반적으로 Query와 Modify 이외의 클래스 명을 요하는 경우는 거의 발생하지 않는다.

3. Interface Name (Method, Property)

인터페이스 명은 메서드에 대해서만 기술한다.

MS의 COM+에 등록되는 컴포넌트는 Stateless한 컴포넌트이어야 하기 때문에,
일반적인 경우에는 Property를 사용하지 않는다.

개발팀 별로 메서드에 대한 공통 인터페이스를 정의해야 하며, 정의된 공통 인터페이스를
기준으로 메서드의 이름을 부여해야 한다.
다음은 공통 인터페이스의 몇 가지를 정리한 것이다.

메서드 명 설명
Insert 하나의 레코드를 삽입하는 기능
Update 하나의 레코드를 수정하는 기능
Delete 하나의 레코드를 삭제하는 기능
Save 여러 개의 레코드를 삽입, 수정, 삭제하는 기능
SelectByWhere 하나의 조건으로 데이터를 조회하는 기능
SelectByName 이름으로 데이터를 조회하는 기능
SelectByCode 코드로 데이터를 조회하는 기능

발생 가능한 모든 메서드를 Brainstorming을 통해서 추출한 후, 협의를 통해서
공통 인터페이스를 정의해야 한다.


Data Services Naming Rule

데이터베이스 명은 별로의 이름 부여 규칙을 정하지 않고 프로젝트 관리자가 시스템에 적합하게 부여한다.

1. Table Name

테이블 명은 관리를 쉽게 할 수 있도록 업무에 관련된 이름을 부여하며,
레코드들의 집합이기 때문에 복수형으로 부여한다.

[명명 규칙] 기능의 복수형

예) 웹메일 시스템의 자유 게시판의 테이블 명은 FreeBoards로 명명한다.

2. Field Name

필드 명은 기능과 관련된 의미로 부여하며, 업무에 관련된 의미는 테이블 명에서 이미 표기하였기 때문에
업무에 관련된 의미는 부여하지 않는다.

[명명 규칙] 기능
예) 웹메일 시스템의 자유 게시판의 날짜 필드 명은 Date로 명명한다.
FreeBoardDate로 표기하지 않도록 주의한다.

3. Stored Procedure Name

저장 프로시저 명은 기준이 되는 테이블 명과 기능과 관련된 의미로 부여한다.
시스템 저장 프로시저와 구별하기 위해서 접두어 “up_”를 붙인다.

[명명 규칙] up_테이블명_기능

예) 웹메일 시스템의 자유 게시판의 쓰기 기능의 저장 프로시저 명은 up_FreeBoards_Insert로 명명한다.

4. View Name

뷰 명은 기준이 되는 테이블 명을 단수형으로 부여한다. 뷰를 나타내기 위해서 접두어 “view_”를 붙인다.

[명명 규칙] view_테이블명의단수형

예) 웹메일 시스템의 자유 게시판의 데이터를 일자를 조건으로 조회하기 위해서 사용될 뷰의 명은
view_FreeBoard로 명명한다.

5. Trigger Name

트리거 명은 기준이 되는 테이블 명과 기능으로 부여한다.

[명명 규칙] 테이블명_기능

예) 웹메일 시스템의 자유 게시판의 데이터를 삭제할 경우에 발생할 트리거의 명은
FreeBoards_Delete로 명명한다.

Trackback 0 Comment 0
2007.02.07 08:23

Http에러코드

| "101" ; Switching Protocols
| "200" ; OK
| "201" ; Created
| "202" ; Accepted
| "203" ; Non-Authoritative Information
| "204" ; No Content
| "205" ; Reset Content
| "206" ; Partial Content
| "300" ; Multiple Choices
| "301" ; Moved Permanently
| "302" ; Moved Temporarily
| "303" ; See Other
| "304" ; Not Modified
| "305" ; Use Proxy
| "400" ; Bad Request
| "401" ; Unauthorized
| "402" ; Payment Required
| "403" ; Forbidden
| "404" ; Not Found
| "405" ; Method Not Allowed
| "406" ; Not Acceptable
| "407" ; Proxy Authentication Required
| "408" ; Request Time-out
| "409" ; Conflict
| "410" ; Gone
| "411" ; Length Required
| "412" ; Precondition Failed
| "413" ; Request Entity Too Large
| "414" ; Request-URI Too Large
| "415" ; Unsupported Media Type
| "500" ; Internal Server Error
| "501" ; Not Implemented
| "502" ; Bad Gateway
| "503" ; Service Unavailable
| "504" ; Gateway Time-out
| "505" ; HTTP Version not supported


Trackback 0 Comment 0
2007.02.07 08:22

타 도메인의 웹페이지를 iframe 에 넣었을 때 쿠키문제

"인터넷 정보 서비스" -> 서버이름 -> 등록정보 -> "인터넷 정보 서비스" -> WWW 서비스 ->
편집 -> HTTP 헤더 -> "사용자 정의 HTTP헤더" -> 추가 -> 사용자 정의 헤더 이름과, 사용자 저의 헤더값을
아래 내용 넣으세요.
 
P3P
CP='CAO PSA CONi OTR OUR DEM ONL'
 
확인 -> "적용" -> 확인 -> 확인
 
하시면 됩니다. iis 정지하고 다시 시작 하시면 됩니다.
Trackback 0 Comment 0
2007.01.10 15:32

ASP Component 에서 RecordSet 으로 리턴하기

ASP Component 에서 RecordSet 으로 리턴하기


[요약]

보통 우리는 ADO Recordset(_Recordset)을 데이타베이스(SQL, Oracle, Access, ...)로부터 얻어서 사용한다. atl2ado.exe 나 ado2atl.exe 같은 샘플 프로그램이 모두 그런데 본 아티클에서는 Recordset 을 Database 가 아닌 수작업으로 만드는 코드를 작성해본다.


[추가정보]

1. Visual C++ 의 ATL COM AppWizard 를 이용해서 ATL 프로젝트 (manual_recordset)를 구성한다.


2. 프로젝트에 Simple Object 를 추가하고 이름을 MyObject 이라한다.


3. MyObject 에 ADO recordset 을 반환하는 메소드를 추가하기 위해 'import "helper.idl"을 추가한다.


4. 메소드를 추가하여 다음과 같은 manual_recordset.idl 을 만든다.

[ object, uuid(04611C2D-BBA6-11D2-ACF5-00C04F7A37DE), dual, helpstring("IMyObject Interface"), pointer_default(unique) ]

interface IMyObject : IDispatch

{

[id(1), helpstring("method GetRecordset")] HRESULT GetRecordset([out,retval]_Recordset **ppRecordset);

};... 


5. helper.idl 파일을 프로젝트에 추가한다.

import "oaidl.idl";
import "ocidl.idl";
import "helper.idl";
import "msado15.idl";


6. helper.h 를 프로젝트에 추가한다.
#ifndef HELPER_H
#define HELPER_H
 struct _Recordset;
 #if !defined(__cplusplus) || defined(CINTERFACE)
  typedef struct _Recordset _Recordset;
#endif
#endif


7. 다음과 같이 메소드를 구현한다. 
STDMETHODIMP CMyObject::GetRecordset(_Recordset **ppRecordset)
{
 // TODO: Add your implementation code here
 HRESULT hr = m_recordset.CreateInstance(__uuidof(Recordset));
 m_recordset->PutCursorLocation(adUseClient);
 m_recordset->Fields->Append("dbkey", adInteger,adEmpty,adFldUnspecified);
 m_recordset->Fields->Append("field1", adVarChar,40,adFldIsNullable);
 m_recordset->Fields->Append("field2", adVarChar,40,adFldUnspecified);
 m_recordset->Open(vtMissing,vtMissing,adOpenStatic,adLockBatchOptimistic ,-1);
 //////////////////////////////////////////
 // Column name safearray VARIANT varClmNames;
 VariantInit(&varClmNames);
 varClmNames.vt = VT_ARRAY | VT_VARIANT;
 SAFEARRAY* psaCol;
 SAFEARRAYBOUND bounds = {3,0};
 psaCol = SafeArrayCreate(VT_VARIANT, 1, &bounds);
 VARIANT* ptrVariant;
 SafeArrayAccessData(psaCol, (void**)&ptrVariant);
 ptrVariant[0].vt = VT_BSTR;
 ptrVariant[0].bstrVal = SysAllocString(L"dbKey");
 ptrVariant[1].vt = VT_BSTR;
 ptrVariant[1].bstrVal = SysAllocString(L"field1");
 ptrVariant[2].vt = VT_BSTR;
 ptrVariant[2].bstrVal = SysAllocString(L"field2");
 SafeArrayUnaccessData(psaCol);
 varClmNames.parray = psaCol;
 ////////////////////////////////////////////////
 // Data Safearray VARIANT varData;
 VariantInit(&varData);
 varData.vt = VT_ARRAY | VT_VARIANT;
 SAFEARRAY* psaData;
 psaData = SafeArrayCreate(VT_VARIANT, 1, &bounds);
 SafeArrayAccessData(psaData, (void**)&ptrVariant);
 ptrVariant[0].vt = VT_BSTR;
 ptrVariant[0].bstrVal = SysAllocString(L"1");
 ptrVariant[1].vt = VT_BSTR;
 ptrVariant[1].bstrVal = SysAllocString(L"field1-value1");
 ptrVariant[2].vt = VT_BSTR;
 ptrVariant[2].bstrVal = SysAllocString(L"field2-value1");
 SafeArrayUnaccessData(psaData);
 varData.parray = psaData;
 ////////////////////////////////////////////////////
 m_recordset->AddNew(varClmNames,varData);
 ////////////////////////////////////////////////
 // Data Safearray VariantInit(&varData);
 varData.vt = VT_ARRAY | VT_VARIANT;
 psaData = SafeArrayCreate(VT_VARIANT, 1, &bounds);
 SafeArrayAccessData(psaData, (void**)&ptrVariant);
 ptrVariant[0].vt = VT_BSTR;
 ptrVariant[0].bstrVal = SysAllocString(L"2");
 ptrVariant[1].vt = VT_BSTR;
 ptrVariant[1].bstrVal = SysAllocString(L"field1-value2");
 ptrVariant[2].vt = VT_BSTR;
 ptrVariant[2].bstrVal = SysAllocString(L"field2-value2");
 SafeArrayUnaccessData(psaData);
 varData.parray = psaData;
 ////////////////////////////////////////////////////
 m_recordset->AddNew(varClmNames,varData);
 *ppRecordset = m_recordset;
 m_recordset->AddRef();
 return S_OK;


출처 : wunderbar

Trackback 0 Comment 0