SQL문 기록

업무중에 필요해서 작성한 쿼리문을 기록해 둡니다.

사용자 삽입 이미지
2~7번은 조회하고자 하는 필드와 알리아스(Alias)입니다. 알리아스는 단순히 이름이므로 중복이 가능합니다. 9~10번은 조회 대상이 되는 테이블과 그에 대한 알리아스입니다. 12~21번은 검색 조건입니다. 결과는 아래와 같습니다.

사용자 삽입 이미지
혹시.. 퍼포먼스를 향상시킬 수 있는 개선할 점이나.. 문제가 되는 부분이 있으면 피드백 부탁드립니다.

[Java] URL을 통한 Binary 데이터 받기

자바에서 서버가 제공하는 바이너리 데이터를 받아 저장해 주는 코드입니다. 필요할 때 찾아 보기 쉽도록 정리해 봅니다.

URL url;
try {
    url = new URL("http://somewhere/binary.zip");
  
    URLConnection connection = url.openConnection();
    int contentLength = connection.getContentLength();
    if (contentLength > 0) {
        InputStream raw = connection.getInputStream();
        InputStream in = new BufferedInputStream(raw);
        byte[] data = new byte[contentLength];
        int bytesRead = 0;
        int offset = 0;
        while (offset < contentLength) {
            bytesRead = in.read(data, offset, data.length - offset);
            if (bytesRead == -1) break;
            offset += bytesRead;
        }
        in.close();
  
        if (offset == contentLength) {
            // 바이너리 데이터 준비 완료 !
            return true;
        }
    }
} catch (MalformedURLException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

위의 코드는 사용해 보니 문제가 있습니다. 이유는 6번 코드를 통해 서버로부터 받은 데이터의 크기가 항상 옳바르지 않다는 것입니다. 예를 들어 데이터가 클 경우.. -1이 반환되기도 합니다. 이러한 이유로 위의 코드는 사용하면 않되고.. 아래의 코드를 사용하시기 바랍니다.

private boolean requestUrl(String urlString, ByteBuffer out) {
    URL url;
  
    try {
        url = new URL(urlString);
        URLConnection connection = url.openConnection();
        InputStream raw = connection.getInputStream();
        InputStream in = new BufferedInputStream(raw);
        byte[] chunk = new byte[1024];
        int bytesRead = 0;

        while((bytesRead = in.read(chunk)) != -1) {
            out.put (chunk, 0, bytesRead);
        }
   
        out.flip();
        in.close();
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }  
    
    return true;
}

크롬(Chrome)에서 플래시 디버거 기능 않될때 조치

크롬에서 플래시 빌더를 통해 개발을 할때 디버깅이 않되는 문제가 있습니다. 이에 대한 해결책입니다. 먼저 크롬을 실행하고 주소창에 about:plugins 을 입력하여 아래 창을 표시합니다.

사용자 삽입 이미지
Flash라고 되어 있는 부분에서 사용 중지를 클릭하여 해당 플러그인의 사용을 비활성화 시킨 후.. 다시 Flash PlugIn Debug를 다운받아 설치합니다. 요지는.. 개발자에게 잇어서 Flash는 2가지 버전이 있는데 하나는 Release용이고 하나는 Debug용입니다. 이중 Release는 사용하지 않고 오직 Debug용만 사용한다는 것입니다. 이렇게 하면 Flash Builder에서도 Chrome을 통해 디버깅이 가능해 집니다.

모바일 플래시 업데이트

모바일 웹에서 플래시를 더 이상 지원하지 않겠다고 했던 어도비가 안드로이드 디바이스에서는 아직도 여전히 웹 기반 플래시를 지원하고 있습니다. 어제 새롭게 릴리즈된 플래시 버전 11.1.111.5입니다.

사용자 삽입 이미지
또한 안드로이드나 iOS에서는 플래시를 이용해 앱으로 개발할 수 있는 AIR는 3.1로 버전업되었습니다. 버전업으로 향상된 기능을 살펴보면.. 속도 향상과 보안 및 안정성에 대한 버그 수정이 이뤄졌다고 하니… 한번 테스트 해봐야겠습니다.

단 한번의 개발로 PC에서.. 그리고 Android, iOS 그리고 BlackBerry에서 모두 구동 가능한 앱 개발이 가능한 어도비의 플래시입니다.

[Flex] SparkSkin을 통한 버튼 디자인

플랙스에서 컴포넌트의 스킨을 디자인하는 가장 쉬운 방법은 이미지를 이용하는 것입니다. 예를 들어 버튼의 경우.. 버튼의 up, over, down, disabled 상태에 따라 각기 다른 이미지를 만들어 주고 지정해 주면 됩니다. 디자이너의 역량에 따라 매우 높은 퀄리티를 낼 수 있습니다.

이 글은 이미지를 이용하는 방식이 아닌.. 각 상태에 따라 직접 그려주는 방법에 대한 설명입니다. 이렇게 이미지가 아닌 직접 버튼의 스킨을 그려주는 방식에 대한 장점은… 버튼의 크기가 변경이 되어도 스킨이 깨지않고 자연스럽게 표현할 수 있다는 점입니다.
사용자 삽입 이미지설명을 위해 제가 테스트 해 본 것은 버튼을 Aqua Style로 표현해 보는 것입니다. 위의 이미지가 실제 제 스스로 만들어본 버튼에 대한 Aqua 스킨입니다. SparkSkin 클래스의 파생 중에서 버튼에 대한 스킨은 SparkButtonSkin입니다.

일반적으로 SparkSkin은 레이어라는 개념으로 스킨을 입히게 됩니다. 여기서 직접 만들어 볼 버튼의 Aqua Style은 다음과 같은 레이어로 구성되어져 있으며 위의 이미지에 대한 버튼이 바로 아래의 레이어로 구성되어져 있습니다.

  1. border
  2. aqua
  3. labelDisplay
  4. blaze

좀더 고급스러운 Aqua 스타일을 제공하기 위해서는 더 많은 레이어가 필요하겠지만.. 간단이 이 정도의 레이어만을 구성해 봄으로써 Aqua 스타일의 스킨을 버튼에 입혀 보겠습니다. 위의 레이어 중 labelDisplay는 반드시 존재해야 하는 id 명으로써 버튼의 텍스트 라벨이 적용될 것으로 실제 Label 컴포넌트로 구성됩니다. 또한 위의 4개의 레이어의 순서 역시 중요합니다. 즉 가장 밑에 border가 존재하고 그 위에 aqua가.. 그리고 labelDisplay가 위치하며 가장 위에 blaze가 나타납니다.

먼저 실제 border 에 대한 FXG 코드입니다. 플렉스는 스킨에 대해 FXG(Flash XML Graphic)를 이용해 그려줍니다.


    
        
    
    
        
    

위의 FXG 코드는 다음과 같은 결과를 그려냅니다.

사용자 삽입 이미지
다음은 aqua 에 대한 FXG입니다.


    
        
            
            
    
    

    
        
    

위의 FXG 코드에 대한 결과는 다음과 같습니다.

사용자 삽입 이미지
그리고 라벨 텍스트를 표현할 코드는 다음과 같습니다.


    
        
        
    

텍스트를 표현해기 위해 Label 컴포넌트를 사용했습니다. 결과는 다음과 같습니다.

사용자 삽입 이미지
끝으로 blaze 레이어에 대한 FXG 코드는 다음과 같습니다.


    
        
            
            
        
    

이 레이어 만을 하얀색 배경의 화면상에서 보면 보이지 않는데요. 이 레이어는 버튼 위에 광택 효과를 주는 것으로 Aqua 버튼의 최정 결과를 보시면 딱! 아실 겁니다. ^^

뭐… 글로 아무리 길게 장황하게 써도.. 해당 스킨에 대한 전체 코드를 다음 url을 통해 다운로드 받으실 수 있으니 실제 플렉스에서 적용해 보시기 바랍니다.

참고로.. SparkSkin을 통한 스킨 적용은 Flash Builder 4.0 이상에서만 적용된다는 점에 유의하시기 바랍니다. 최근 4.6까지 나왔지요? 저는 4.5 버전을 쓰고 있습니다만…. 여튼.. 위의 스킨을 실제 버튼에 적용하기 위한 방법은 3가지가 있는데.. 그 중에 한가지에 대한 코드는 다음과 같습니다.

스킨을 만드는 작업은.. 코드의 길이에 비해 상당히 많은 시간이 소요되는 작업이라고 생각합니다. 또한 제대로 스킨을 만들려면 디자인 감각까지 갖춰야 하는 매우 고난위도의 작업입니다. 하지만 일단 한번만 만들어 놓으면 지속적으로 활용할 수 있으니… 스킨 제작 작업은 시간과 비용이 소요되더라도 꼭 제대로 해두는 것이 최종 프로젝트 산출물의 가치를 배가 시킬 수 있을 거라 확신합니다.