프리랜서 액션스크립트 개발자들이여, 일해주고 돈은 제대로 받고 있습니까? – swf 날짜제한 평가판 기능 구현 AS3.0 클래스
by 세계의끝 on 11.24, 2009, under AS3.0 API
패키지로 판매되는 소프트웨어 중에는 일정 기간동안 사용해 본 후 사용 목적에 부합하거나 마음에 들면 구입할 수 있도록 시간 제한 기능을 가진 평가판 프로그램을 제공하는 경우가 있습니다. Adobe 에서 판매하는 대부분의 프로그램들 부터, 최근에는 상당히 다양한 프로그램들이 이런 평가판 방식을 채택하고 있습니다.
구매자 입장에서 보면 일단 소프트웨어를 사용한 이후로 구매 시점을 늦출 수 있기 때문에 혹시나 있을지 모르는 불필요한 지출을 방지할 수 있고, 판매자 입장에서도 프로그램의 완성도에 자신이 있는 경우 보다 많은 엔드유저 노출을 획득함으로 인하여 매출에 플러스 요인으로 작용한다고 할 수 있겠습니다.
이런 것은 마케팅 측면에서 구매자와 판매자의 이해 타산이 맞아 떨어진 것이라 할 수 있을테죠.
그렇다면 기술적으로 이런것이 가능하게 하는 요인은 무엇인가요? 소스코드가 프로그래밍 되고 패키지화 되어 날짜 제한을 걸 수 있고, 일반인들은 그것을 해제할 수 없도록 컴파일 되어있기 때문이라 할 수 있겠습니다.
swf 파일도 위와 같은 특성을 모두 가지고 있으므로, 플래시 개발자들도 산출물(아주 구체적으로는 swf 가 되겠습니다.)에서 이와 같은 장치를 사용할 수 가 있습니다.
프리랜서로 일을 하다 보면, 간혹 이런 경우가 있죠. 작업은 완료 되었고, 내가 만든 플래시 애플리케이션이 서비스되고 있는데, 아직 잔금은 지불받지 못한 경우 !
보통 작업 종료는 작업 일정에 맞춰 빠듯하게 진행되는 반면, 지불이 되려면 결재를 받아 일정 선까지(중소규모 회사의 경우 보통은 사장 까지) 올라갔다가 다시 지불계통으로 내려가 (즉시 입금해주는 것도 아니고 며칠에 한번씩 다른 처리 건들과 함께 몰아서) 처리해 주기 때문인데요, 이런 경우 아무리 빨라도 지불기간은 1~2주일 걸리게 마련입니다.
그래서 프로젝트 진행중에는 회사측에서 아쉬운 반면(플래시 개발자는 숫자가 많지 않으므로), 프로젝트가 일단락 된 상태는 프리랜서가 아쉬운 소리를 해야하는 입장에 놓이게 됩니다.
보통, 개념이 상식의 사정거리 내에 위치한 회사들은 아무리 늦어도 월말에는 지급을 해줍니다만, 간혹 프로젝트 후의 프리랜서 보수를 지급해주는 것을 중요하게 생각하지 않는 회사들도 있어서, 매우 스트레스를 받곤 합니다.
그래서 만들었습니다.
날짜제한 평가판 클래스
이 클래스는 다음과 같은 특성을 가지고 있습니다.
- 컴파일 하는 시점에서 특정 날짜를 지정하여 작동하도록 할 수 있고,
- 디자인을 fla 에서 변경해서 사용할 수 있고, (fla 의 EvaluationCopyGraphic 무비클립 디자인을 수정)
- 평가판 이미지에 url 을 지정하여 클릭하면 이동시킬 수 있습니다. (선택사항)
사용법은, 도큐먼트 클래스 또는 ui 를 담당하는 클래스 DisplayObject의 가장 상위에 위치할 수 있도록 아래와 같이 객체 생성과 addChild() 해 주기만 하면 끝.
0 1 | var ec:EvaluationCopy = new EvaluationCopy( 2009, 11, 1, 9, "http://www.ufx.kr/blog" ) addChild( ec ); |
지금 글을 읽고 계시는 시점은 2009년 11월 1일 9시 이후이므로, pc 의 시계가 엉뚱한 날짜에 설정되어 있지 않은 대부분의 여러분들 화면에 Evaluation Copy 라는 Sprite 가 나타나 있습니다. 이게 제대로 작동한 것인지 확인해보기 위해서 운영체제의 시간을 위의 시간 이전으로 바꿔 놓고 현재 페이지를 새로 고침 하면 Sprite 가 보이지 않는 것을 확인할 수 있습니다.
매우 간단하지만 확실한 기능을 하죠.
Sprite 의 크기를 좀더 크게 화면을 거의 다 덮고 싶다던가, 아니면 좀더 눈에 거슬리지 않게 디자인을 변경하고 싶다면 fla 에서 디자인을 변경한 후, 컴파일 또는 테스트 무비를 한번 해 주면, 다음번 이 클래스를 포함하여 다른 애플리케이션을 컴파일 할 때에는 변경된 디자인이 적용됩니다.
이렇게 서비스 런칭 시점에는 평가판 기능이 활성화 된 버전의 swf 를 건네주고, 잔금을 받은 이후에 평가판 기능을 제거한 후 다시 컴파일 하여 넘겨주면 되겠습니다.
소스코드는 아래와 같습니다.
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | package kr.ufx.app.evaluation { import flash.display.Sprite; import flash.events.MouseEvent; import flash.net.URLRequest; import flash.net.navigateToURL; /** * ... * @author Won, Jong-sun (cuebrick) http://ufx.kr/blog */ [ Embed ( source = "EvaluationCopy_graphic_asset.swf", symbol = "EvaluationCopyGraphic" ) ] public class EvaluationCopy extends Sprite { public var bg:Sprite; private var expireDate:Date; private var nowDate:Date; private var _request:URLRequest = new URLRequest(); public function EvaluationCopy( $year:uint, $month:uint, $day:uint, $hour:uint, $returnUrl:String = null, $x:Number = 10, $y:Number = 10 ) { expireDate = new Date( $year, $month - 1, $day, $hour );// note!! : month = 0 --> January nowDate = new Date(); this.visible = false; this.x = $x; this.y = $y; if ( expireDate < nowDate ) init( $returnUrl ); } private function init( $returnUrl:String ):void { this.visible = true; if ( $returnUrl != null ) initClickSetting( $returnUrl ); } private function initClickSetting( $returnUrl:String ):void { _request.url = $returnUrl; bg.buttonMode = true; bg.addEventListener( MouseEvent.CLICK, clickHandler ); } private function clickHandler( $e:MouseEvent ):void { navigateToURL( _request ); } } } |
Date 클래스의 달을 표시하는 숫자는 0이 January (1월), 11이 December(12월)을 나타내므로 좀더 직관적으로 사용하기 위해서 객체 생성 시점에서 날짜를 지정할때는 우리가 보통 사용하는 달로 숫자를 입력하고 생성자에서 – 1 을 해 주었습니다.
–
클래스를 사용하는데 한가지 주의할 점이 있습니다. 이런 평가판 기능을 사용할 예정이라는 것을 프로젝트 초반 또는 계약 시점에 담당자에게 알리는 것이 좋습니다. 우리의 목적은 회사를 골탕먹이는데 있는 것이 아니라 정당한 보수를 제때 받기 위함이니까요.
제한 날짜도 회사쪽의 담당자와 상의한 후 여유있게 잡는 것이 좋습니다.
만약 서비스가 중단되면 매우 곤란한 대규모 웹사이트에 사용될 경우 이 평가판 기능이 발동된다면 회사측에 미리 알리지 않은 이런 장치는 법적인 문제를 야기할 가능성이 크고, 그런 경우 사안이 크면 클수록, 상대방 회사의 규모가 크면 클수록, 잔금을 못받은것 과는 별건으로 서비스 중단등으로 입은 손해배상 청구등이 들어 올 수 있습니다.
즉, “내가 잔금을 못받았으니 서비스는 중단되도 무방하다” 일리가 없다는 것이죠. 잘 생각해 보시면 금방 답이 나올겁니다. 게다가 나중에 잔금을 받은 이후 평가판 기능을 제거한 swf 을 건넬때 어차피 담당자가 알게 될 가능성이 높은데, 그 시점에서 담당자가 비로소 사실을 알게 되면 발주한 회사와 프리랜서와의 관계가 좋게 유지되기가 힘들겠죠.
–
어쨌건 이런 사소한 아이디어로 프리랜서나 사이드잡으로 일을 해주고 돈을 못받아 속을 썩히는 일이 조금이나마 줄어들까 해서 포스팅 해보았습니다.
위의 코드가 액션스크립트의 전체 코드지만, fla, swf 파일이 포함되어 있는 전체 파일을 아래의 링크에서 받을 수 있습니다.
Blog under the Creative Commons Attribution-NoDerivs 3.0 License
11월 24th, 2009 on pm 1:21
구~~웃~~~~~~
감사합니다~ 멋지세요~ d^^b
11월 24th, 2009 on pm 2:58
네에~ 호필님 살림에 보탬이 되었으면 좋겠네요 ^^
11월 24th, 2009 on pm 3:25
살림살이 나아지겠군요
굿!!!!
11월 24th, 2009 on pm 3:47
좀 나아지겠죠? ㅎㅎ
11월 24th, 2009 on pm 4:25
앗 형님 이렇게 멋진 클래스를!!
감사합니다~
11월 24th, 2009 on pm 4:42
니케가 사용해 준다면 내가 고맙지.~
11월 26th, 2009 on am 2:12
음.. 저도 가끔 비슷한 녀석을 만들어 쓰곤 하는데,
evaluation key를 넣지 않은 채 1분 이상 지나면 화면이 하얗게 변합니다. -o-;
11월 26th, 2009 on am 8:35
오.. 그런것은 서비스 되지 않는것을 전제로 하면서 좀더 강하게 제한을 거는 형태라 할 수 있겠군요.
새로 옮기시는 블로그에 관련 내용을 포스팅 하게 되면 핑 날려주세요.~
11월 26th, 2009 on am 10:12
예 ㅎㅎ
11월 26th, 2009 on am 10:27
오 이런방법이 있었군요..
좋은정보 감사드립니다 ^^
11월 26th, 2009 on pm 12:29
젠가님 살림에도 도움이 되길 바래요. ^^
12월 3rd, 2010 on am 10:52
브라보~~~~