Whiteship's Note


[NullPE] SpEL 때문에 고민 해결

Java : 2010. 2. 10. 18:47


애초에 MVEL.eval() 내부에서 레퍼런스를 타고 갈 때 null 처리를 해줄 수 있는 방법을 찾았다면 Null Object 패턴까지 적용할 생각은 안 들었을테고, 그럼 Null Object 패턴을 어떻게 적용해야 깔끔한가?에 대한 고민도 안했을 텐데.. 그 실마리가 바로 MVEL 대신 SpEL을 사용하는 것이었습니다. 이론... OTL

SpEL은 스프링 3.0에 새로 추가된 기능인데 이 녀석이 할 수 있는 멋진 일들에 비해 아직 이것을 어떻게 활용해야 할지 제대로 파악이 되지 않은 상태입니다.(제가 파악이 안됐다는 것이지 일반적으로 그렇다는 것이 아니오니 오해 마시기 바랍니다.)


/**
 * Created by IntelliJ IDEA.
 * User: whiteship
 * Date: 2010. 2. 10
 * Time: 오후 6:38:11
 */
public class SpELNullTest {

    @Test
    public void SafeNavigation(){
        ExpressionParser parser = new SpelExpressionParser();

        SpringSprout ss = new SpringSprout();
        StandardEvaluationContext context = new StandardEvaluationContext(ss);

        String myName = parser.parseExpression("whiteship?.name").getValue(context, String.class);
        assertThat(myName, is(nullValue()));
    }

    class Whiteship{
        String name;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }

    class SpringSprout{
        Whiteship whiteship;

        public Whiteship getWhiteship() {
            return whiteship;
        }

        public void setWhiteship(Whiteship whiteship) {
            this.whiteship = whiteship;
        }
    }

}

흠냐.. 괜찮군요!

?. 가 아니라 그냥 . 로 연결하면 null 객체에 대고 getName()을 호출하는 격이라 에러가 납니다. ?, 연산식이 SpEL에서 지원하는 Safe Navigation이라는 녀석입니다.

이것 말고도 삼항 연산식도 제공하며 삼항 연산식에서 반복을 줄일 엘비스 연산식도 제공합니다. 아무튼 스프링은 참.. 멋지네요. +_+

덕분에 NullPE 고민 해결입니다.
top

TAG NullFE, SpEL

Write a comment.


[NullPE] NullPointerException 때문에 고민 1

Java : 2010. 2. 10. 11:46


레퍼런스를 사용하는 쪽에서 null 체크를 하면 되지만.. 그러지 못하는 경우가 있어서..

MVEL.eval(column.getPath(), entity, Integer.class)

column의 getPath()에는 item의 속성을 타고 타고 들어가는 경로도 들어옵니다. 그럴 때 타고 가는 중간에 null을 만나면 에러가 나죠. 제어할 수가 있다면 null 체크 하는 구문만 넣어서 버그를 수정하겠지만.. 지금은.. 좀.. @_@;;

그래서 Null Object Pattern이라는게 생각났고 이걸 적용해볼까 했습니다.

http://www.refactoring.com/catalog/introduceNullObject.html
http://en.wikipedia.org/wiki/Null_Object_pattern

Item 클래스의 레퍼런스 타입 변수를 반환하는 게터들이 다음과 같이 바꼈습니다.

    public Code getDelivery() {
        return NullObjectUtil.eval(delivery);
    }

    public Code getCar() {
        return NullObjectUtil.eval(car);
    }

    public Code getItemGroup() {
        return NullObjectUtil.eval(itemGroup);
    }

    public Supp getSupp() {
        return NullObjectUtil.eval(supp);
    }

public class NullObjectUtil {
   
    public static Code eval(Code code) {
        return code != null ? code : new NullCode();
    }

    public static Supp eval(Supp supp) {
        return supp != null ? supp : new NullSupp();
    }
}

그리고 domain.nullobject 패키지를 만들고

public class NullCode extends Code {
}

public class NullSupp extends Supp {
}

이렇게 NullObject 클래스들을 만들어 줬습니다.

이렇게 할지;;;

public Code getProcess(){
    return Code.basicIfNull(process);
}

이런식으로 할지. 고민입니다. 어떤게 왜 나은걸까나;; @_@


top

  1. Favicon of http://toby.epril.com BlogIcon 토비 2010.02.10 14:14 PERM. MOD/DEL REPLY

    SpEL의 null safe모드를 이용하면 간딴하지

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2010.02.10 15:20 신고 PERM MOD/DEL

    아항;; MVEL.eval(column.getPath(), entity, Integer.class) 이부분을 SpEL로 바꾸면 되는군요

Write a comment.


WEB-INF/urlrewrite.xml 파일 설정하기

Java : 2010. 2. 9. 18:02


http://tuckey.org/urlrewrite/manual/3.0/

일욜에 보던건데. 이제서야 다시 정리하고 싶어져서;; 쿨럭;;

    <?xml version="1.0" encoding="utf-8"?>

    <!DOCTYPE urlrewrite
        PUBLIC "-//tuckey.org//DTD UrlRewrite 3.0//EN"
        "http://tuckey.org/res/dtds/urlrewrite3.0.dtd">

    <urlrewrite>

        <rule>
           <from>^/some/olddir/(.*)$</from>
           <to type="redirect">/very/newdir/$1</to>
        </rule>

        <rule match-type="wildcard">
           <from>/blog/archive/**</from>
           <to type="redirect">/roller/history/$1</to>
        </rule>

    </urlrewrite>

파일 이름은 urlrewrite.xml로 해야하고 위와 같은 형태로 작성하면 됩니다. urlrewrite 엘리먼트가 반드시 들어있어야 하며, 그 안에는 최소한 한 개의 rule 엘리먼트가 들어있어야 합니다.

rule 엘리먼트 안에는 from과 to가 각각 하나씩 반드시 있어야 하며, condition와 set 엘리먼트는 없거나 여러 개 있어도 됩니다.

rule 안에 정의한 condition이 만족하면 from이 요청 URL에 적용되고 set 엘리먼트가 실행되고 to가 적용 됨.

아래는 수도 코드

    Pattern.compile(<from> element);
    pattern.matcher(each request url);
    matcher.replaceAll(<to> element);
    if ( <condition> elements match && pattern matched ) {
       execute <run> elements (if any)
       perform <to> element (if any)
    }




top

Write a comment.


UrlRewriterFilter 옵션

Java : 2010. 2. 7. 20:12


http://tuckey.org/urlrewrite/manual/2.6/

UrlRewriterFilter 설정 파일을 다시 읽어 들일지 확인하는 주기 설정.
0은 계속해서 확인하고, 빈 값 또는 이 속성을 설정하지 않으면 다시 읽어 들일지 확인하지 않음.

    <init-param>
    <param-name>confReloadCheckInterval</param-name>
    <param-value>60</param-value>
    </init-param>

로그 수준을 설정한다.
사용할 수 있는 값: TRACE, DEBUG, INFO, WARN, ERROR, FATAL, log4j, commons, sysout:{level} (ie, sysout:DEBUG)
기본값은 INFO

    <init-param>
    <param-name>logLevel</param-name>
    <param-value>DEBUG</param-value>
    </init-param>

status 페이지(UrlRewriter 설정 페이지 /rewrite-status)를 사용하지 않게 설정할 수 있다.
사용할 수 있는 값: true, false
기본값: true

    <init-param>
    <param-name>statusEnabled</param-name>
    <param-value>true</param-value>
    </init-param>


애플리케이션에서 필요한 경로와 중복되지 않도록 status 페이지 요청을 다른 경로로 변경할 수 있다.
반드시 /로 시작해야 한다.

    <init-param>
            <param-name>statusPath</param-name>
            <param-value>/status</param-value>
    </init-param>


top

Write a comment.


UrlRewriterFilter 설치하기

Java : 2010. 2. 7. 17:20


http://tuckey.org/urlrewrite/manual/2.6/

1. 다운로드 또는 메이븐

        <dependency>
            <groupId>org.tuckey</groupId>
            <artifactId>urlrewritefilter</artifactId>
            <version>3.1.0</version>
        </dependency>

2. web.xml에 필터 맵핑 추가하기

    <filter>
        <filter-name>UrlRewriteFilter</filter-name>
        <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>UrlRewriteFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

3. WEB-INF 폴더에 urlrewrite.xml 파일 만들기

4. 애플리케이션 재시작하고 http://127.0.0.1:8080/rewrite-status 확인하기
top

Write a comment.


"서블릿 매핑 규칙"과 "필터 순서 정하기 규칙"

Java : 2010. 2. 7. 16:36


둘 다 web.xml과 관련이 있는 것인데 '서블릿 매핑 규칙'은 /* 와 /foo 로 서블릿 매핑이 되어 있을 때 만약 http://springsprout.org/foo 라는 요청이 왔을 때 /*로 매핑되어 있는 서블릿으로 갈 것이냐... /foo로 매핑되어있는 서블릿으로 갈것이냐와 관련이 있는 규칙입니다. web.xml에 설정되어 있는 순서에 따라 달라질까요? 글쎄요..ㅋ

'필터 순서 정하기 규칙'은 위와는 다릅니다. 서블릿 매핑은 결국 어떤 것 하나를 선택하는 문제지만 이건 여러 개가 선택되어도 문제가 없기 때문이죠. 대신 그들 사이의 순서가... 중요할 수도 있을텐데 그 순서가 어떻게 정해지는지 이해해야될 것 같습니다. (스프링처럼 Ordered 인터페이스를 적용해 줄 것이지 복잡하게 이게 뭐람 @_@)

서블릿 매핑 규칙(헤드 퍼스트 서블릿과 JSP 영문판 2판 619 페이지)

1. 먼저 요청한 URL과 정확히 일치하는 매핑을 찾습니다. 그게 없다면 디렉토리가 일치하는 매핑을 찾습니다. 그게 없다면 확장자가 일치하는 매핑을 찾습니다.

2. 만약 요청이 여러 개의 디렉토리 매핑 <url-patterm> 과 일치하다면, 그 중에서 가장 긴 매핑을 선택합니다. 예를 들어 /foo/bar/myStuff.do 요청이 왔을 때 /foo/bar/* 매핑이 /foo/* 매핑을 이기게 됩니다. 가장 구체적인 것이 위너가 됩니다.

필터 순서 정하기 규칙(헤드 퍼스트 서블릿과 JSP 영문판 2판 710 페이지)

1) 해당 URL 패턴에 대응하는 모든 필터는 DD(보통 web.xml)에 정의되어 있는 순서대로 체인에 놓는다. 즉 필터 선언 중 <url-pattern>을 사용하여 해당 순서대로 필터를 놓는다.

2) 위 과정이 끝난 뒤 <servlet-name>에 대응하는 것들을 DD에 정의되어 있는 순서대로 그 뒤에 이어서 놓는다.

해당 페이지에 퀴즈도 있으니 풀어보시면... 재미납니다.ㅋ
top

  1. 양완수 2010.02.11 01:04 PERM. MOD/DEL REPLY

    항상 좋은 글입니다. 간과하고 그러러니 하고 넘기던 상황인데 이 글을 통해 잘 정리 했습니다.

    /foo/barmyStuff.do 요청이 왔을 때 /foo/bar/* 매핑이 /foo/* 매핑을 이기게 됩니다.
    =>/foo/bar/myStuff.do 요청이 왔을 때 /foo/bar/* 매핑이 /foo/* 매핑을 이기게 됩니다.

    기선 2010.02.11 07:23 PERM MOD/DEL

    감사합니다.

    오타 수정할께요~

Write a comment.


UrlRewriterFilter 소개

Java : 2010. 2. 7. 16:00


http://tuckey.org/urlrewrite/

아파치 mod_rewrite와 같은 기능을 레진, 오리온, 톰캣 같은 J2EE 호환 웹 애플리케이션 서버에서 사용할 수 있도록 해주는 자바 웹 필터이다.

URL 재작성은 아파치 웹 서버에서 매우 흔히 사용하지만 자바 웹 애플리케이션 서버에서는 이용할 수 없었다.  이것을 사용하여 할 수 있는 주요 작업들은 다음과 같다.

- URL 간편화 / URL 추상화: URL을 간단하게 구성할 수 있고 애플리케이션의 기반 프레임워크 기술을 가릴 수 있다.
- 브라우저 감지: HTTP 헤더를 기반으로 URL을 재작성 할 수 있다.
- 날짜 기반 재작성: 날짜/시간을 기반으로 다른 URL로 포워딩 또는 리다이렉트 할 수 있다.
- 이동된 컨텐츠: 컨텐츠 이동을 편리하게 할 수 있다.
- 짧고/친화적인 URL(예, blah.com/latest 를 blah.com/download/ver1.2.46.2/setup.exe로 리다이렉트 시킬 수 있다.)
- 서블릿 매핑 엔진(Method Invocation 참조)

WEB-INF 디렉토리에 있는 urlrewrite.xml 이라는 xml 파일 한 개를 사용하여 설정한다.

대부분의 매개변수는 Perl5 스타일 정규 표현식 또는 와일드카드 표현식을 사용할 수 있다. 이 점이 매우 유용하다.




top

Write a comment.


플렉스 컴폰넌트와 샘플 코드

Adobe : 2010. 2. 7. 15:34


http://www.adobe.com/devnet/flex/tourdeflex/web/#docIndex=0;illustIndex=0;sampleId=100


오호.. 액션 스크립트를 MXML에 <mx:script> 를 사용하여 포함시킬 수도 있군요. 저기서 예제 코드들을 참조하면 될 것 같습니다.

JQuery 사이트에 있는 예제 코드들도 유용하게 참조해서 썼는데.. 플렉스도 비슷한 페이지가 있네요.
top

Write a comment.


난 뉴스보다 기술에 더 관심이 많은 것 같다.

모하니?/Thinking : 2010. 2. 5. 12:36


요즘 어도비 플렉스 기술에 살짝 관심을 가지기 시작했는데 이유는 Comet 또는 Revers Ajax라 부르는 기술 때문이다.

페이지를 가만히 띄워놓고 있지만 그 내부의 데이터는 시시각각 변하기 마련이다. 극적인 예를 들자면 '경매'나 '주식'이 그렇다. 하물며 봄싹 사이트는 안그런가. 이번 주 스터디 모임에 대해 어떤 댓글을 달렸을지 궁금해서 F5키를 연타해보곤 한다. 이 얼마나 귀찮은가. 그냥 한쪽 탭에 띄워놓고 다른 일 하다가 다시 그쪽 탭을 보면 새로 등록 된 댓글이 보이면 되는데 왜 내가 귀찮게 F5키를 눌러줘야 하는건지 말이다. 게다가 실시간 데이터가 가장 중요한 '이벤트' 들은 완전 F5키의 전쟁이다. 1초 아니 1밀리초라도 더 빨리 해당 시간에 들어가서 쿠폰이라도 어떻게 받아볼까.. 인기 교양 과목 하나라도 건져볼까.. 미친듯이 F5키를 눌러대던 학창 시절의 추억까지도 지져분하게 느껴진다. 그냥 얌전히 기다리고 있으면 제시간에 브라우저에 <시작> 이라는 문구만 떠주면 그런 손가락 노가다 따위는 안해도 될텐데 말이다.

그래서 난 사용자들이 좀 더 의사소통을 신속히 그리고 얌전히 할 수 있도록 Comet이니 Revers Ajax같은 기술이 필요하다고 생각했다. 험블 프로그래머님이 번역하신 책도 읽어봤고 서블릿 3.0 스팩도 보고 HTML 5 스팩도 대충 살펴봤다. 이미 나름대로의 Comet용 서비스를 제공하는 제티, 톰캣의 구현체도 살펴봤다. Dojo와 Bayuer(배여?)까지고 들락 거려봤지만 쉽지 않아 보였다. 서버 쪽에서 해줄 일도 보통이 아니고 클라이언트 쪽에서 해줄 일도 보통이 아니다. 나름 빠져들면 재밌을 것 같다는 생각도 들었다. 하지만 당장은 야크 쉐이빙에 빠져들 여력이 없다.

그러던 중 갑자기 어도비에서 메일이 왔다. 이게 왠 일. '난 자바 개발자인데 왠 플래시??' 라고 생각하던 중에 문뜩 떠올랐다. 그래. 차라리 플래시로 하면 더 간단하지 않을까? 어차피 사용자는 그게 코멧이던 플래시던 뭔 상관이겠어. 그냥 실시간으로 데이터만 후딱 보여주면 그만이지.

그래서 플랙스라는 걸 공부하고 있는데... 요즘 ipad를 발표한 스티브 잡스가 플래시 플레이어 코드가 더럽다고 애플 휴대용 제품들에서 지원하지 않겠다니 어쩌니 했나보다. 그래서 어도비에서도 그에 대한 반응으로 글을 올리고 어쩌구 저쩌구 했나본데... 

안하면 어떻고 하면 어떤가.. 안하면 아이폰 유저들은 웹 사이트에 뜨는 플래시가 안돌아가 가니까 불편을 느낄테고 아이폰 개발자들도 귀찮아 질테고 그럼 안드로이드만 신나는거 아닐까? 뭐 어차피 개발 플랫폼도 안드로이드가 편하다고 하니... 뭐.. 몰겠다. 난 그쪽 전문이 아니라 @_@;;

솔직히 난 저런거에 하나도 관심이 없다. 난 아이폰 개발자도 아니고 플래시 개발자도 아니고 스프링 하이버에 관심은 있지만 스프링이 VMWare에서 나와서 개빈킹이랑 손잡고 JBoss에 들어가서 '씸스프링'을 만들던 말던 내가 스프링 직원이나 하이버 직원이 아닌 이상 뭔 상관인가... ('씸스프링'이 나온다면 그거에 관심은 가겠지만..)

난 그냥 빨리 플랙스 기술을 익혀서 내가 원하는 서비스를 만들고 싶을 뿐이다.
top

TAG 어도비
  1. Favicon of http://blog.lckymn.com BlogIcon Kevin 2010.02.05 22:55 PERM. MOD/DEL REPLY

    안드로이드도 플래쉬 안 돌아가더군요...ㅡ_ㅡ;;;
    아... 다른 제품은 모르겠는데,
    제가 쓰는 제품의 안드로이드 1.5 버전에서는
    지원 안 하는군요.

    애플에서 기술적인 이유로 핑계를 대고는 있지만,
    사실 뭐 이유야 많겠죠.
    기술적으로 CPU 파워를 너무 사용하는 소프트웨어쪽 가속
    때문에 배터리 소모가 심하다는 등의 이유는 차치 하고라도,

    애플에서 통제 불가능한 application 에 대해 환영할리 만무합니다.
    플래쉬가 돌아간다는 얘기는 아이폰 앱스토어를 거치지 않아도,
    플래쉬를 이용해서 만든 수많은 application과 game 들을
    사용자가 마음대로 이용할수 있다는 얘기가 되기 때문에,
    이런데서 오는 아이폰 앱 스토어의 수입감소는 물론,
    통제불능 app 들로 인한 보안문제나 기타 등등...

    이런 저런 이유로 앞으로도 힘들것 같습니다.
    server push는 대안 기술이 점점 늘어나고 있고,
    애플이 HTML5를 밀고 있는데다가
    구글도 그렇죠... 이미 Google Wave 를 HTML5를 이용해서
    제작하고 있고... 그래서 그런지
    여기저기서 플래쉬는 시한부 라는 얘기가 많이 나오고 있네요.

    개인적으로는, 리눅스에서 돌아가는 플래쉬는
    그 성능이 엄청나게 형편없기 때문에...
    별로 좋아하지는 않습니다만...
    인기도가 떨어진다고 해도, 근시일안에 사라지지야 않겠죠.


    사실 저도 sever push 기술에 관심이 있어서 좀 알아본적이 있는데,
    당장은 시간이 없어서 일단 polling 정도 쓰고,
    다음번에는 Tomcat이나 Jetty의 comet 지원이나
    HTML5 를 사용해 볼까 하고, 생각하고 있습니다.
    Servlet 3.0 에는 comet 관련된 부분도 추가된거 같은데,
    Servlet 3.0 지원하는, Tomcat 이나 Jetty 의 새버전이 나오면
    바로 갈아타는 방법도 있을것 같구요.

    그게 아니라면, Flex나 Silverlight JavaFX 같은걸 쓸수도
    있겠는데, 플래쉬야 워낙 대부분의 브라우저에 깔려 있어서
    그렇다 쳐도 나머지 두개는 사용자들이 따로 뭘 설치해야하는데다가,
    Silverlight는 MS기술이라 좀 믿음이 안 가구요...ㅡ_ㅡ;
    JavaFX는 이번에 오라클에서 지원을 많이 할것 같긴합니다만...
    거기에 뱅쿠버 올림픽 웹사이트에 사용되고 있기도 하구요.
    http://www.vancouver2010.com/olympic-medals/geo-view/
    그래도 아직 초기 단계라 좀 많이 부실해 보이구요.
    거기다가 아직 64bit OS는 지원을 안 하는거 같아서...

    일반 사용자 입장에서 보면 뭐하나
    더 설치하는게 부담이 될수 있어서, 그런게 아닌걸 찾다보니...
    뭐 사용자층이 컴퓨터 관련 지식이 좀 있다면,
    기술 고르기가 좀더 수월해 지겠지만요.

    어쨌든 제 바람은...
    HTML5 가 하루빨리 정식으로 세상에 나왔으면, 좋겠네요. :)

    기선 2010.02.06 00:11 PERM MOD/DEL

    아... 플래쉬와 애플과는 그런 이해관계과 문제들도 있었군요. @_@;;

    제 바램도 어서 HTML5와 Servlet 3.0이 나와주면 좋겠어요.

    하지만 마냥 기다리고만 있을수도 없는 노릇이구..흑흑;; 어떻게든 개념적인 기술을 적용하자니 구체적인 기술이 조금있으면 더 좋은 것으로 교체 되야 할 것 같고... 기다리자니 참... 헛헛하고... @_@;

  2. Favicon of https://helols.tistory.com BlogIcon is윤군 2010.02.05 23:57 신고 PERM. MOD/DEL REPLY

    일단 당장... 우리가 코멧서버 프로젝트를 안하고... 봄싹에 적용하고 싶다면... jetty를 이용한 .. comet 서비스를 적용하자구용!! 물론.. js 로 1분에 한번씩 request를 날릴수도 있겠지만..;; 그것보단은 약간 진보? 한 기술이니...

    나름 spring의 설정을 jetty설정을 하고... tomcat이 구동 될때 ... 자동으로 jetty도 구동되고.. tomcat랑 같은classloader 위에서 jetty가 구동되서 ... 나름 관련 lib도 따로 추가 해줄필요도 없고... ;;

    다만 아직 좀 문제라면 tomcat과 같은 세션을 바로 볼 수 있는 방법만 찾는다면..(아직 찾아보진 않았지만 나름 아이디어도 존재하는 마당이고..)jetty + tomcat을 하나로? 쓰는 그런 맛? 머;;; 그럭저럭... 쓸만 할것 같아요... flash의 힘을 빌리느니 말이죠.. ;;
    이건 내일 서버 정리하면서... 이야기 해보면 좋을듯;;ㅎㅎㅎ
    (뭐 아직까지 comet에 대한... 욕심이 남아있어서 그럴줄 모르지만..ㅎㅎ)

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2010.02.06 00:15 신고 PERM MOD/DEL

    내일 할 일과 할 얘기가 너무 많은거 아냐? ㅋㅋ

    흠... 위 댓글에도 적었지만 정말 고민이다. 그렇게까지 하면서 서버 푸쉬를 구현해야 하는것인가? 그냥 맘편히 지원되는 표준 나올때까지 기다리다가 그때가서 구현할 것인가...

    난 게을러서 그런지 후자가 편할 것 같어.. @_@;

  3. Favicon of http://blog.lckymn.com BlogIcon Kevin 2010.02.06 10:34 PERM. MOD/DEL REPLY

    기술적으로 더 나은 기술과, 현재 상황을 고려했을때 최선의 선택인
    기술에는 분명 차이가 있을껍니다.

    현재 Flex를 선택했을때의 장점과 단점
    Comet을 선택했을때의 장점과 단점을 비교해서
    고르시면 되지 않을까 싶군요.

    Flex의 장점은 Comet을 쓰는거보다 더 쉽게 sever push가
    가능하다는것이겠고, 요즘은 대부분의 브라우저에
    플래쉬 플레이어가 깔려 있다고 해도 과언이 아닐 정도로
    사실상 표준인 기술이구요.
    단점은 새로운 언어 습득과 표준 기술이 아니라서
    플러긴을 설치해야 한다는 점인데, 후자는 어차피
    사실상 표준이라는 장점 때문에 대부분 깔려 있다고 봐야겠죠.

    Comet의 장점은 사용자가 따로 뭘 설치할 필요가 없다는 것이겠고,
    단점은 구현이 Flex 사용보다 많이 복잡해 질수 있다는게
    아닐까 싶군요.

    그럼, Flex를 공부하고 구현하는데 드는 시간과
    Comet을 공부후 구현하는데 드는 시간을 비교해서
    잘 생각해 보시면 답이 나오지 않을까 합니다.
    (단순 구현이 아니라, 여러가지 상황에 대한
    테스트까지 고려되어야 하겠죠. 가령 concurrency 문제라던가
    메모리 사용량에 대한 문제라던가...)

    플래쉬를 썼을때, 아이폰이나 기타 다른 스마트폰에서
    정상적으로 동작하지 않는거야...
    어차피 이쪽에 최적화 시켜서 모바일 전용
    페이지를 따로 만들면 되겠죠.
    보통 그렇게 많이 하고 있고,
    그렇게 하는것이 더 나은것 같네요.
    화면 크기도 그렇고, 일반 웹페이지를 그냥
    폰에서 보면 많이 불편하니까요.

    그래서 구글이나, 위키페디아 (심지어 제 블로그도 :) ) 같은곳은
    모바일용은 다른 화면을 보여주죠.

    (그리고 자동으로 데이터 갱신하는걸 사용자가
    원하지 않을 가능성도 높져. 모바일 데이터 통신
    요금이나 인터넷 속도 등등의 이유로 말이죠.)

    아무튼 그래서 Flex 사용도 나쁜생각 같아 보이지는 않습니다.
    이게 지금 사라진 기술도 아니고, 오히려 인기가
    굉장히 많은 기술이고 널리 쓰이는 기술이라서...
    지금 이거 쓰다가 나중에 다른걸로 바꿔도 어차피
    사용자들은 눈치 못챌 가능성이 높겠죠.

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2010.02.07 10:43 신고 PERM MOD/DEL

    넹 요즘은 모바일 용 웹까지도 개발해야되니 고려할 것이 많군요.

    일단은 재미 삼아서라도 flex로 어느 정도 개발 가능한 만큼만 공부해보려구요.ㅋ

  4. Favicon of http://starplatina.tistory.com BlogIcon 김제준 2010.02.18 23:20 PERM. MOD/DEL REPLY

    헙..
    플렉스 안만진지 1년이 훨씬 넘었네요.
    처음에 할땐 재미 있었는데 ㅋㅋ.

    플렉스 서버 push가 블레이즈ds에서 됬었던가요??
    한 2~3년 전에 lcds라이센스 연구실에서 샀던게 천만원 좀 넘었던거 같던데..
    요즘엔 얼마나 할려낭 ㅎㅎ

    Favicon of http://whiteship.me BlogIcon 기선 2010.02.19 06:29 PERM MOD/DEL

    ㅋㅋ저도 이 뒤로는 손을 안댔네요.

Write a comment.


[Flex] "Hello, Flex" with IntelliJ IDEA

Adobe : 2010. 2. 2. 11:55


참조: http://www.adobe.com/devnet/flex/videotraining/xml/vid03.html

모든 언어나 프레임워크를 공부할 때 가장 먼저하는 일이 단순 메시지 출력인데 플렉스 강좌를 보니까 이클립스 기반의 플렉스 빌더를 가지고 설명하고 있습니다. 하지만 저는... 이클립스에 질려버렸고 요즘은 똑똑한 인텔리J랑 사이좋게 지내고 있기 때문에 인텔리J로 강의를 따라하고 있습니다.

이클립스를 사용하시는 분들은 플렉스 빌더를 받아서 위 동영상을 따라하시면 될 듯...

이 아래는 인텔리J에서 헬로우 Flex를 띄우는 과정입니다.

1. Flex SDK 다운 받기

http://opensource.adobe.com/wiki/display/flexsdk/Downloads

여기서 오픈소스가 필요하지 않다면 그냥 Free Adbove Flex SDK를 받습니다.
압축을 풀어서 적당한 위치에 놓고..

2. 인텔리J에서 Flex 프로젝트를 만듭니다.

012345


3. 실행하기

3-1. Run Configuration을 만듭니다. MXML 파일을 우클릭하고 Create "HelloWorld" .. 메뉴를 클릭합니다.


3-2. 실행합니다.

사실 3-1 건너띄고 바로 실행해도 됩니다. 실행하면 SWF 파일이 열리고 버튼이 떠있고 클릭하면 메시지가 나옵니다. 메시지를 조금 수정해서 hello flex를 띄울 수 있습니다.

Run Configuration 파일을 열어서 SWF 파일말고 wrapper.html 파일을 선택한뒤 실행하면 자동으로 브라우저에 새 탭을 열고 SWF 파일을 브라우저에서 재생해 줍니다.

http://www.adoberia.co.kr/


팁. Flex 만드는 도중에 Pure ActionScript 어쩌구 메뉴를 체크하시면 MXML이 아니라 액션스크립트로 작성된 HelloWorld 예제를 볼 수 있습니다. 동작하는 방법은 그냥 단순 출력이라 이전거랑은 좀 다릅니다.

package {

import flash.display.Sprite;
import flash.text.TextField;

public class HelloWorld extends Sprite {
    public function HelloWorld() {
        var textField:TextField = new TextField();
        textField.text = "Hello, World";
        addChild(textField);
    }
}

이런 코드네요. 흠.. 자바랑 비슷해 보이면서도 뭔가 좀..  변수 선언할 때 타입이 아니라 이름부터 적는군..


ps: 흠.. 다른 웹 애플리케이션과는 어떻게 연동해야하려나;; 차차 나오겠지;?




top

Write a comment.


나는 허접하고 비겁하다.

모하니?/Thinking : 2010. 2. 1. 22:11


오늘 정말 아주 예전에 만났던 분께 메일을 받았다. 내가 처음 다녔던 직장의 선생님이신데 그분과 나는 교차점에서 만난 인연이라 굉장히 짧은 시간 몇마디 대화만 주고 받았던 기억이 난다. 한달을 다니다보니 내가 그 회사 생활과 맞지 않다는 생각이 들었고, 지금은 다 물거품이 되버렸지만 그때당시 나에게 굉장히 좋은 조건으로 이직 요청이 들어왔다.

나는 이직을 결심하고 사표를 냈다. 쉽지 않았다. 한달만에 사표라니.. 하지만 난 그럴수밖에 없었다. 내가 아무것도 할 수 없는 곳 보다는 나를 필요로 하고 더 많은 걸 배울수 있는 곳으로 가고 싶었다. 그뒤로 나에게 그 회사를, 그 회사에 나를 들여보내주신 분에게 절교(?) 비슷한 걸 당했고, 훗날 용서를 구하는 메일도 보내봤지만 실패했다. 하긴.. (용서는 없다라는 영화에서) 용서하는게 죽는것보다 힘들다고도 하던데...고작 한달을 다니고 그만 두겠다고 했으니 그리고 그분 입장에선 내게 소개해준 회사를 내가 이러쿵 저러쿵 토 단것처럼 볼 수도 있으니.. 그런 반응도 자연스러웠던 것 같다. (사실 용서보다는 오해를 풀고 싶은 생각이 크다.)

아무튼 그렇게 힘들게 첫 직장에 사표를 낸지도 언 2년이 지났다. 어쩌면 딱 이맘때 회사를 옮겼는데 그때 생각이 나셔서 연락하신 걸지도 모르겠다. 왜 이쯤만 되면 이직을 하고 싶은지 모르겠는데 요즘도 그때와 비슷한 고민을 하고 있다. 나를 좀 더 필요로 하는 곳으로 가고 싶다는 생각이 든다. 지금 난 직원이 단 한명 나뿐인 회사에 다니고 있고 미국으로 가기로 했던 계획은 물거품이 됐다. 프로젝트가 날아갔다. 그래서 더욱 미친듯이 스터디와 커뮤니티 활동에 열을 올리고 있는지도 모르겠다. 도무지 내 자신을 써먹을 곳이 없어서.. 그게 오직 스터디 밖에 없어서.. 이러는거 아닐까? 난 이제 일보다 스터디가 좋고 커뮤니티가 좋다. 물론 일에서 배울 수 있는 것도 많다. MRP의 굉장히 복잡한 로직이며, 까다로운 원가 관리, BOM의 이력관리는 또 얼마나 변화 무쌍한지.. 다들 게시판에 비할 수 없는 주옥같은 비즈니스 로직들이다. 하지만 이 로직들은 전부 사용자에 의해 달라진다. 기본 로직은 있지만 그걸쓰는 회사 나름의 방침이나 관습이 있기 때문에 정형화 할 수 없다. 따라서 사용자와 잦은 미팅과 피드백이 필요한데, 나의 고객도 이 회사의 직원처럼 딱 한명. 지금 회사의 대표님 뿐이며 일주일에 한 번 만나 미팅을 하면 다행인 정도로 의사소통 주기가 길다. 이쯤에서 나는 고민을 안할 수가 없다.

그래도 무라도 썰어야지라는 생각과 프리랜서라도 좋으니 나를 정말로 필요로 하는 곳을 찾아가자라는 생각이 대립한다. 2년전과 똑같은 고민이다. 그때는 내가 투입된 첫 프로젝트에 누를 끼치면서까지 나와서 내가 갈 길을 갔지만 결과는 반반이었다. 개발자로보나 인간적으로보나 정말 멋진 사부님을 만났지만 미국으로 가려던 플젝은 쫑이났다. 결국 요즘은 심난한 마음에 머리까지 뒤숭숭하지만 되도록이면 이번에는 무라도 썰어볼 생각이다.

장모님 말씀따라.. 집중하기가 조금 힘들겠지만 이정도쯤은 견뎌내야하는 것 아닐까? 고작 이정도에도 흔들리는 정신력이면 난 너무 허접한거 아닐까?

잘 좀 하자 기선아... ㅠ.ㅜ
top

  1. Favicon of http://helols.pe.kr BlogIcon is윤군 2010.02.02 14:36 PERM. MOD/DEL REPLY

    세상만사 다 그런거고 .ㅎ 이정도 일로 허접하고 비겁하다면 ... 이세상에 안허접하고 안비겁한사람이 어딨겠어요;;ㅎㅎㅎ
    무튼 화이링~

    Favicon of http://whiteship.me BlogIcon 기선 2010.02.02 17:10 PERM MOD/DEL

    ㅇㅇ아.. 근데 감기때메 어지럽네;; @_@

  2. 머찐.. 2010.02.02 15:32 PERM. MOD/DEL REPLY

    일, 스터디, 커뮤니티가 따로따로가 아닌, 하나로 뭉쳐져서 갈 수 도 있고,
    스터디, 커뮤니티를 바탕으로 일로 연결시킬수도 있고,
    여러모로 환경은 갈수록 좋아지는 것 같습니다.(물론 우리나라는 물음표 일 순 있죠.)
    하지만 실전, 일과 유리된 스터디/커뮤니티는 지속하기도 쉽지 않고, 뿌리가 깊진 않을 것 같네요.
    한번에 확 좋아진다 생각말고, 이상치에 한발 한발씩 다가가시길...
    from 개발을 꽤 경험해본 10년차 회사원.^^

    Favicon of http://whiteship.me BlogIcon 기선 2010.02.02 17:10 PERM MOD/DEL

    넵. 저도 그게 걱정입니다. 한발씩 다가가도록 노력하겠습니다. 감사합니다~ :)

  3. Favicon of https://dazzilove2.tistory.com BlogIcon dazzi 2010.02.02 17:22 신고 PERM. MOD/DEL REPLY

    므흐~ 난 역마살이 꼈는지.. 6개월마다 고비 ㅡㅡㅋ 난 어쩌라고~~~~

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2010.02.04 08:05 신고 PERM MOD/DEL

    음.. 아직 맘에드는 곳을 못찾으신거겠죠. 언젠간 찾겠죠.ㅋ

  4. Favicon of http://mrtint.tistory.com BlogIcon 잇힝유후 2010.02.04 08:30 PERM. MOD/DEL REPLY

    저만 그런게 아니었군요.. 글 내용 하나하나가 공감이 가네요.. 힘내요..^^

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2010.02.04 08:57 신고 PERM MOD/DEL

    ㅇㅇ너두 힘내!

Write a comment.


플래시, 플렉스, 플래시 플레이어, 에어(Air) 비교

Adobe : 2010. 2. 1. 12:54


참조: http://www.adobe.com/devnet/flex/videotraining/xml/vid01.html

Flash: Fl

비두얼 툴과 타임라인을 사용하여 애플리케이션 레이아웃과 액션스크립트를 만든다.

플래시가 액션스크립트를 컴파일하여 SWF 파일을 만든다.

애니메이션과 비주얼 엘리먼트를 작성하는데 최적화 되어있다.

Flex: Fx

비주얼 컴포넌트와 클래스로 구성되어 있는 프레임워크를 제공하며, 비주얼 레이아웃에 사용할 MXML과 비즈니스 로직에 사용할 액션스크립트 프로그래밍 언어를 제공한다.

MXML과 액션스크립트 코드를 액션스크립트로 변환한 뒤 SWF 파일로 컴파일 한다.

Adobe Flex SDK 오픈소스로 제공한다.

Adobe Flex Builder는 SDK를 포함하고 있으며 디자인, 개발, 테스팅을 원할하게 도와준다.

=> 플래시와 플렉스 모두 사용자가 서버에 요청을 하면 동적으로 데이터를 가져와서 다시 사용자에게 보여줄 수 있다.

=> 이 둘을 같이 활용하여 플래시로 애니메이션을 만들고 플렉스로 가져와서 컴파일/편집 할 수 있다.

Flash Player

플래시나 플렉스 애플리케이션을 브라우저에서 보려면 플래시 플레이어 9 런타임이 필요하다.

AIR

어도비 에어는 데스크탑 애플리케이션 용 어도비 런타임이다.

브라우저가 아니라 데스크탑 애플리케이션으로 동작하는 RIA(리치 인터넷 애플리케이션)를 만들 수 있다,


http://www.adoberia.co.kr/
top

TAG 어도비
  1. Favicon of http://helols.pe.kr BlogIcon is윤군 2010.02.01 15:54 PERM. MOD/DEL REPLY

    왠 갑자기 flash ? '';;

    Favicon of http://whiteship.me BlogIcon 기선 2010.02.01 16:00 PERM MOD/DEL

    플렉스나 좀 봐보게..

    Comet이 쉬운가 플렉스가 쉬운가;;

  2. Miracle 2010.02.01 16:27 PERM. MOD/DEL REPLY

    플렉스는 진짜 Push가 가능하지.. 소켓 열어서.. ㅎㅎ;

    Favicon of http://whiteship.me BlogIcon 기선 2010.02.01 16:46 PERM MOD/DEL

    괜히 (현재의) Servlet 스펙으로 안 되는거 되게 하려고 복잡해지느니.. 애초에 가능한 기술로 해보는게 나을지도 몰겠단 생각에...

  3. Favicon of http://helols.pe.kr BlogIcon is윤군 2010.02.02 14:38 PERM. MOD/DEL REPLY

    플레쉬 소켓을 이용한건...
    comet으로 안쳐주는데;;ㅎㅎ

    Favicon of http://whiteship.me BlogIcon 기선 2010.02.02 15:01 PERM MOD/DEL

    그럼 Comet 말고 걍 플래시라고 하지뭐.
    사용자 한테 그게 Comet이던 플래시던 뭔 상관이겠어ㅋㅋ

Write a comment.