'2010/04'에 해당되는 글 22건

  1. 2010/04/29 C# 웹에서 파일 다운받기
  2. 2010/04/28 C# ListView Row Highlight
  3. 2010/04/26 C# HTTP Get 라이브러리
  4. 2010/04/20 아키텍처 / 프레임워크 / 플랫폼
  5. 2010/04/20 이클립스 단축키
  6. 2010/04/20 MS SQL Identity 초기화
  7. 2010/04/19 오라클 컬럼명 변경
2010/04/29 18:14

C# 웹에서 파일 다운받기

C#에서 웹에 있는 파일을 다운 받는 방법은 두가지가 있다. 둘다 WebClient 객체를 사용하지만 하나는 파일 다운만, 다른 방법은 Stream을 이용해 처리가 가능한 방법이다.

여기서는 파일 다운로드 방법만 소개한다. 나머지 방법은 아래의 출처에서~

using System.Net;

class Program
{
    static void Main(string[] args)
    {
        try
        {
            WebClient client = new WebClient();

            client.DownloadFile("http://www.google.co.kr/index.html",
                        "c:\\index.html");
        }
        catch (Exception e)
        {
            System.Console.WriteLine(e.StackTrace);
        }
    }
}


[출처] Download And Upload A File Using C#
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0
2010/04/28 16:16

C# ListView Row Highlight

C#의 listview를 사용하다 보면 열을 선택하면 맨 앞의 컬럼만 highlight된다. 이는 listview의 FullRowSelect property를 true로 설정함으로써 해결 할 수 있다.

myListView.FullRowSelect = true;
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0
2010/04/26 10:20

C# HTTP Get 라이브러리

C#에서 웹 페이지의 Reqest를 요청하고 그 결과를 반환하는 클래스
public class HttpGet
{
    private HttpWebRequest request;
    private HttpWebResponse response;

    private string responseBody;
    private string escapedBody;
    private int statusCode;
    private double responseTime;

    public string ResponseBody { get { return responseBody; } }
    public string EscapedBody { get { return GetEscapedBody(); } }
    public int StatusCode { get { return statusCode; } }
    public double ResponseTime { get { return responseTime; } }
    public string Headers { get { return GetHeaders(); } }
    public string StatusLine { get { return GetStatusLine(); } }


    public void Request(string url)
    {
        Stopwatch timer = new Stopwatch();
        StringBuilder respBody = new StringBuilder();

        this.request = (HttpWebRequest)WebRequest.Create(url);

        try
        {
            timer.Start();
            this.response = (HttpWebResponse)this.request.GetResponse();
            byte[] buf = new byte[8192];
            Stream respStream = this.response.GetResponseStream();
            int count = 0;
            do
            {
                count = respStream.Read(buf, 0, buf.Length);
                if (count != 0)
                    respBody.Append(Encoding.ASCII.GetString(buf, 0, count));
            }
            while (count > 0);
            timer.Stop();

            this.responseBody = respBody.ToString();
            this.statusCode = (int)(HttpStatusCode)this.response.StatusCode;
            this.responseTime = timer.ElapsedMilliseconds / 1000.0;
        }
        catch (WebException ex)
        {
            this.response = (HttpWebResponse)ex.Response;
            this.responseBody = "No Server Response";
            this.escapedBody = "No Server Response";
            this.responseTime = 0.0;
        }
    }



    private string GetEscapedBody()
    {  // HTML escaped chars
        string escapedBody = responseBody;
        escapedBody = escapedBody.Replace("&", "&");
        escapedBody = escapedBody.Replace("<", "<");
        escapedBody = escapedBody.Replace(">", ">");
        escapedBody = escapedBody.Replace("'", "&apos;");
        escapedBody = escapedBody.Replace("\"", """);
        this.escapedBody = escapedBody;

        return escapedBody;
    }



    private string GetHeaders()
    {
        if (response == null)
            return "No Server Response";
        else
        {
            StringBuilder headers = new StringBuilder();
            for (int i = 0; i < this.response.Headers.Count; ++i)
                headers.Append(String.Format("{0}: {1}\n",
                    response.Headers.Keys[i], response.Headers[i]));

            return headers.ToString();
        }
    }



    private string GetStatusLine()
    {
        if (response == null)
            return "No Server Response";
        else
            return String.Format("HTTP/{0} {1} {2}", response.ProtocolVersion,
                (int)response.StatusCode, response.StatusDescription);
    }
}

사용법:
public class Program
{
    static void Main(string[] args)
    {
        HTTPGet req = new HTTPGet();
        req.Request("http://www.google.com");
        Console.WriteLine(req.StatusLine);
        Console.WriteLine(req.ResponseTime);
        Console.WriteLine(req.ResponseBody);
    }
}


[출처] C# .NET 2.0 HTTP GET Class
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0
2010/04/20 16:38

아키텍처 / 프레임워크 / 플랫폼

- 아키텍처 : 소프트웨어의 주요 설계 구조
 
소프트웨어의 주요 특징들을 결정짓는 주요 설계 구조이다.즉, 소프트웨어의 주요 구성 요소 및 구성, 이들간의
주요 인터페이스, 중요 동작 방식 등 소프트웨어의 주요 특징들을 결정짓는 모든 설계 구조를 포함한다.
소프트웨어의 주요 특징을 결정짓고 소프트웨어 개발에 미치는 영향도 매우 커서 소프트웨어 개발에 있어서 가장 중요한 부분이라고 할 수 있다.지원 프로그램, 라이브러리, 언어, 다른 소프트웨어 구성 요소 등과 같이 구체적인 구현을 포함하지 않는다는 점에서 프레임워크나 플랫폼과는 명확히 구분된다.
 
- 프레임워크 : 소프트웨어 뼈대 구조
 
프레임워크는 다른 소프트웨어 프로젝트가 개발될 수 있는 뼈대 구조이다.지원 프로그램, 라이브러리, 언어,
다른 소프트웨어 구성 요소들을 엮어 주는 소프트웨어 등을 포함하고 있다.따라서, 플랫폼도 프레임워크의 일종이라고 볼 수 있으며, MS사에서 닷넷 플랫폼을 닷넷 프레임워크라고 지칭하는 것도 틀린 것이 아니다.또한, UI 프로그램 개발을 위한 부분 만을 떼어내서 프레임워크라고 할 수도 있다.UI 프로그램 개발을 위한 부분 만으로는 완전한 소프트웨어 실행 환경이 되지 않으므로 플랫폼은 아니지만 프레임워크이다.이러한 점에서 프레임워크와 플랫폼은 다른 경우가 많다.
 
- 플랫폼 : 소프트웨어 실행 환경
 
가장 일반적이면서도 명료한 의미는 "소프트웨어가 실행되는 환경"이다.개발 언어나 개발 환경을 플랫폼에
포함시키기도 하지만 이는 부수적 개념 혹은  확장된 개념에 불과하고, 핵심은 "소프트웨어가 실행되는 환경"이다.
각 프로그램은 아무 플랫폼에서나 실행되는 것이 아니고 특정 플랫폼에서만 실행된다.
일반적으로, O/S는 모두 플랫폼이다. Windows는 윈도우즈 프로그램만을 실행시킬 수 있는 플랫폼이고, 리눅스는 리눅스 프로그램만을 실행시킬 수 있는 플랫폼이다.자바 런타임 환경도 플랫폼이다.자바 프로그램은 O/S에 대한 종속성은 거의 없고 자바 런타임 환경없이는 실행되지 않으므로 자바 런타임 환경을 주요 플랫폼으로서 필요로 한다.마찬가지로 닷넷 프로그램도 닷넷 런타임 환경없이는 실행되지 않으므로 닷넷 런타임 환경이 플랫폼이 된다.AJAX 기술을 사용하여 개발된 웹 컨텐츠 + 웹 클라이언트 스크립트는 웹(좀 더 정확히는 웹 브라우저 및 웹 서버) 없이는 실행되지 않으므로 웹을 플랫폼으로 한다.VBA(Visual Basic for Application) 프로그램과 MS 오피스 COM API를 사용하는 프로그램은 MS 오피스가 없으면 실행되지 않으므로 MS 오피스를 플랫폼으로 한다.
플랫폼은 플랫폼위에 다른 플랫폼을 구축할 수 있는 계층적 구조를 가질 수 있다.가령, 자바 프로그램은 자바
런타임 환경이라는 플랫폼에서 실행되지만 그 플랫폼 자체는 O/S 플랫폼 계층 위에서 실행되는 프로그램에 불과하다.웹 플랫폼에 해당하는 웹 브라우저 또한 O/S 플랫폼 계층 위에서 실행되는 프로그램에 불과하다.VBA 프로그램의 플랫폼인 MS 오피스 프로그램 또한 O/S 플랫폼 계층 위에서 실행되는 프로그램에 불과하다.이들 각 계층의 각 플랫폼은 자신만의 실행 엔진과 API 및 개발 환경을 제공하며, 다른 플랫폼에 대한 부분적 접근을 허용하기도 한다. 또한, 각 플랫폼 내부는 또 다시 여러 계층으로 이루어진 구조를 갖는다.
이는 소프트웨어 구조가 그만큼 계층화되고 복잡해지고 있음을 의미한다.
역설적이지만, 소프트웨어 구조가 이렇게 다양해지고 복잡해지는 이유는 다양하고 복잡해지는 요구를 보다 적절히 만족시키기 위한 효과적인 방법이기 때문이라고 볼 수 있다.
따라서, 각 플랫폼은 나름대로의 가치와 적정 용도가 있으므로 프로그램이 성공적(경쟁 제품, 서비보다 저렴하게 개발하거나 보다 고품질을 제공하는 등)이기 위해서는 프로그램 개발 전에는 개발 목적에 가장 적합한 플랫폼을 선정하고 프로그램 개발중에는 플랫폼의 잇점을 최대한 살리는 것이 중요해진다.
그렇지 않은 제품 혹은 서비스는 경쟁력이 떨어질 수 밖에 없다.
물론, 단순하지 않은 제품/서비스에 적합한 플랫폼의 선정은 다루어야 하는 이슈가  많기 때문에 매우 어려운
문제이다.

 [출처] Devil BBong's Story

크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0
2010/04/20 16:36

이클립스 단축키

Eclipse 의 모든 단축키는 Window >> Preferences >> General >> Keys 메뉴에서 확인 및 변경이 가능하다.(3.x 기준)


Ctrl + M : 전체화면 토글
Ctrl + E : 페이지 이동
Ctrl + Q : 마지막 편집 위치로 이동
Ctrl + D : 한줄 삭제
Ctrl + O : 메소드 리스트를 확인
Ctrl + 1 : 컴파일 해결 힌트
Ctrl + L : 원하는 소스 라인으로 이동
Ctrl + .(,) : 다음(이전) 오류로 이동
Ctrl + I : 들여쓰기 자동 수정
Ctrl + /(\) : 주석(해제)
Alt + <-(->) : 이전(다음) 작업 화면
Ctrl +(Shift)+ K : 문자열 찾기(위로)
Ctrl +(Shift)+ W : 파일 닫기(전체)
Ctrl +(Shift)+ F6 : Ctrl+Tab 기능
Alt + Shift + 방향키 : 블록선택(해제)
Alt + Up(Down) : 현재 줄 이동(위)
Alt + Shift + R : 메소드 리네임
Ctrl + F7 : 뷰간 전환
Ctrl + F8 : 퍼스펙티브간 전환
F12 : 에디터로 포커스 위치
Ctrl + Shift + /(\) : 블럭주석(해제)
Ctrl + Shift + O : 자동 import
Ctrl + Shift + M : 특정 클래스 Import
Ctrl + Shift + S : 모두 저장
Ctrl + Shift + W : 모두 닫기
Ctrl + Shift + T : 클래스 찾기
Ctrl + Shift + R : 자원 열기
Ctrl + Shift + Y : 대문자를 소문자로
Ctrl + Shift + X : 소문자를 대문자로
Ctrl + Shift + E : 줄끝 까지 삭제
Ctrl + Shift + F : 코드 자동 정리
Ctrl + Shift + L :
Ctrl + Alt + H : 메소드 보기
Alt + Shift + S : 메뉴 팝업
Alt + Shift + X : 실행 단축키 보기
Ctrl + Shift + Space  : 메소드의 파라미터 목록 보기
Ctrl + Shift + G  : 메써드나 필드를 참조 하고 있는 곳


- 템플릿 사용
"sysout" + Ctrl + Space
"try" + Ctrl + Space
"for" + Ctrl + Space
템플릿을 수정하거나 추가하려면 Window >> Preferences >> Java >> Editor >> templates 에서 할 수 있다.

[출처] Devil BBong's Story

크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0
2010/04/20 10:52

MS SQL Identity 초기화

DBCC CHECKIDENT ('table_name', RESEED, 0)

크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0
2010/04/19 10:40

오라클 컬럼명 변경

컬럼명 변경에 있어 MS SQL에 sp_rename 프로시저가 있다면 오라클은 rename이라는 키워드를 이용해 가능하다.

사용법:
alter table table_name rename column old_name to new_name
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0