Applications

January 18, 2010

July 23, 2009

July 14, 2009

June 29, 2009

May 11, 2009

May 08, 2009

May 01, 2009

April 19, 2009

April 16, 2009

April 09, 2009

'기본 카테고리' 카테고리의 다른 글

랭킹 옴니아 어플리케이션...  (0) 2010.06.13
옴니아 用 추천 어플...  (0) 2010.06.13
MDA, CIM, PIM, PSM  (0) 2010.04.11
starcraft II 베타 플레이....  (0) 2010.03.27
소프트웨어 기술 경력증 고급  (0) 2010.03.17

MDA, CIM, PIM, PSM

MDA( Model Driven Architecture) 의 약자

개발 프로세스는 다음과 같음

1. 애플리케이션에 대한 비즈니스 요구사항을 수집한다.

2. 도메인 모델에 대한 UML 다이어그램을 작성한다. 먼저 J2EE, 닷넷, CORBA와 간은 특정 기술에 종속적이지 않은 모델을 먼저 만든다. 이?품? 작성된 UML모델은 핵심 비즈니스 서비스와 컴포넌트를 나타내게 되는데, 예를 들면 가격 결정 엔진이라든지 쇼핑 카트 모델이라든지 주문 모델 같은 것이 될 것이다. 이러한 UML모델을 PIM이라고 한다.

3. 애플리케이션에 대한 특정 기술과 관련한 UML모델을 작성한다. 이와 같이 특정 기술에 종속적인 UML모델을 PSM이라고 한다. PSM은 직접 작성할 수도 있고 MDA 지원 툴을 이용해서 PIM에서 자동으로 만들어내거나 또는 만들어진 모델을 수정하는 방식으로 작업할 수 있을 것이다.

4. 마지막으로 MDA 툴을 이용해서 애플리케이션 코드를 만들어낸다. 현재 이미 J2EE의 경우에는 MDA 툴들이 대부분의 서블릿, JSP, EJB와 관련한 코드를 자동으로 생성해 준다.

Computation independent model (CIM)

->

Platform independent Model (PIM)

->

Platform specific Model ( PSM )

->

CODE

전문가 분의 의견===>

MDA는 전혀 새로운 기술은 아니다 기존에 해왔던 일에 대한 새로운 개념적 정립이다.

과거 모델링 도구가 그래왔듯이 모델에서 코드의 자동 생성은 예전에도 존재하였다.

다만 코드의 정도가 내부 로직의 전개가 아니라 구조적인 범위에 국한 되었기 때문이다. 이제 9월이면 UML2.0 이 발표된다. 이는 MDA 등의 Architecture관점에서의 많은 기능 향상이 있다. 즉, 모델에서 완벽하게 실행 가능한 프로그램을 작성할 수 있다는 것이다.

MDA기술 자체보다는 이를 어떻게 이용할 것인가에 대한 프로세스의 정립이 무었보다 중요하리라 본다.

이러한 측면에서 과거 RUP(Ratioal Unified Process) 지금은 UP라고 그런다고 한다. 한국래쇼날을 그만둔지 1년이 지나 경과 과정은 모르겠지만 가장 이상적인 프로세스라고 생각된다.

프로세스를 명확하게 이해하고 접근한다면 MDA에 대한 접근도 어렵지 않을 것이라고 생각된다.

현재 자동으로 코드화가 가장 많이 진보된 도구는 Telelogic(현재 근무중) 사의 TAU G2 와 IBM rational 사의 RoseRT 그리고 Borland의 Together가 있다.


starcraft II 베타 플레이....

조금 무겁네요.....

정발에 최적화가 되어 있을 라나....


소프트웨어 기술 경력증 고급

- 공부좀 해서 기술사나 되야 할텐데....



2009년도 적용 SW기술자 노임단가 공표

소프트웨어산업진흥법 시행령 제16조(SW기술자의 등급별 노임단가)의 규정에 의한 소프트웨어사업의 대가기준에 적용할 소프트웨어기술자 일 노임단가를 통계법 제23조에 의거 다음과 같이 공표합니다.


2009년 SW기술자 등급별 일 노임단가 (단위:명,원,%)

구 분
2009년
조사인원
일 노임단가
전년대비
2007년도
2008년도
2009년도
증가액
증가율
기술사

231

290,938

339,988

356,999

17,011

5.0%

특급기술자

6,734

273,664

300,570

314,773

14,203

4.7%

고급기술자

5,990

215,166

225,306

228,833

3,527

1.6%

중급기술자

5,378

174,432

187,566

190,248

2,682

1.4%

초급기술자

8,254

136,290

140,198

141,761

1,563

1.1%

고급기능사

1,763

112,910

116,845

126,106

9,261

7.9%

중급기능사

1,549

99,834

101,158

109,777

8,619

8.5%

초급기능사

1,143

75,128

80,993

86,961

5,968

7.4%

자료입력원

1,108

48,493

2009년 조사결과는 3σ적용후 산출한 인원가중평균치임.
자료입력원의 노임단가는 2009년 최초 조사로서 ‘기본급여’만을 산정한 수치이며, 기본급여+제수당+상여금을
모두 포함할 경우의 노임단가는 67,032원임.
노임단가는 일 급여 기준이며, 2009년의 월평균 근무일수는 21.6일임.
SW기술자 공인노임단가는 2008년 대비 평균 0.84% 증가함.


<시행일> 2009년 9월 1일부터

2009년 8월 31일


한국소프트웨어산업협회장

Before Microsoft gets around to finally launching Windows Marketplace for Mobile we thought it would be a good idea to do a round up of some of our favourite Windows smartphone apps. One of the big advantages of the Windows Mobile platform is that because it's been around so long it's well understood by developers and as a result there's a huge range of software available covering everything from serious business applications to cool 3D driving games and everything in-between. Naturally with so many to choose from this list can't hope to cover all of the best apps. Instead it represents a selection of our current favourites, so feel free to add your own must-haves in the comments section.

CoreCodec CorePlayer Mobile



It may be an obvious choice, but CorePlayer Mobile is one of the most useful add-ons for any Windows Mobile device. It puts Microsoft's own Windows Media Player to shame not just by the quality of its playback, but also in the sheer number of formats supported. Along with the likes of Xvid and Divx, new formats such as Matroska are being added all the time. It can also take advantage of the GPU chips in several of the latest devices to off load processing from the main CPU and speed up playback.
www.coreplayer.com
Price: $29.95

Opera Mobile



Microsoft's Pocket Internet Explorer is OK as far as it goes, but if you really want to make the most of your phone's web browsing capabilities then you owe it to yourself to use Opera Mobile. Opera is faster, has better panning and zooming features and a much better user interface than Pocket IE. In fact, it's so good, many manufacturers, such as HTC and Samsung, now bundled it as standard with their handsets. However, if your phone hasn't got it preloaded head over to Opera.com and download a copy pronto.
www.opera.com
Price: Free

SPB Mobile Shell



The drawbacks of the native Windows Mobile interface are well d0cumented so we won't go over them again here. Luckily there are many applications that you can use to give your phone's interface a bit of a facelift. One of the most user-friendly in our opinion is SPB Mobile Shell. Not only does it present you with a great looking and informative home screen, but it also gives you finger-friendly access to commonly used applications, settings and contacts.
www.spbsoftwarehouse.com
Price; $29.95

Intermorphic Mixtikl Mobile



It might not appeal to everyone, but if you're into music making then you'll find that Mixtikl is a little gem of an application. It's a replacement for the much loved, but now discontinued MiniMixa app and is essentially a music creation program that lets you mix together up to 12 tracks of audio. However, what really impresses is the way Mixtikl lets you tweak pretty much every aspect of the music from synth sounds to audio effects. It even includes its own automatic music composition engine and there's also a companion PC application so you can ferry songs back and forth between your phone and desktop PC.
www.intermorphic.com
Price: $9.99

PocketCultMAME



Sure there are tons of native games that can show off your phone's muscle with amazing 3D graphics and stunning sound. However, games are like jokes in that sometimes it's the oldest ones that are the best. If you fancy a blast on classics like 1942 or Tempest then you need a copy of the MAME arcade emulator. Unfortunately there aren't many good ports of Mame for Windows Mobile. However, even though it hasn't been updated for yonks, PocketcultMAME is still one of the better ones around so it's worth giving it a whirl to see if it'll work on your phone.
www.pocketcult.com
Price: Free

NewsGator Go!



If you're a news feed junkie (you are subscribed to the TrustedReviews feeds, aren't you?) then you'll want a decent RSS news reader app for your phone. NewsGator Go! is one of the best around because it integrates with the online NewsGator service. You create an account online and use the web-based interface to select the feeds you want to track. Then it's simply a matter of entering your username and password into the NewsGator Go! software to have your feeds sync to your mobile. The navigation is excellent and you can also clip articles to store them for reading later.
www.newsgator.com
Price: Free

Google Sync



If you're a heavy user of Gmail, then chances are that you also use its calendar function to remind you of meetings, birthdays and other important appointments along with its online contacts book. Well, guess what Google Sync is for? Yes you've got it. It's a simple, no nonsense way of synchronising your Google calendar and contacts to your Windows powered smartphone. That's pretty much it, but for some it'll be a crucial addition to their smartphone.
Google Mobile - Sync
Price: Free

Dashwire



Dashwire is a web service that lets you back up your contacts, text messages, photos and videos online and then access them via your computer's web browser. However, there's more to Dashwire than merely backing up data; it also lets you share photos and videos with friends or send them to Flickr or Facebook accounts. There's also a cool messaging app built in as well as lots of other goodies.
www.dashwire.com
Price: Free

Orb Networks Orb



Orb isn't exactly a native Windows Mobile application, but it works brilliantly with Windows smartphones so we're taking the liberty of including it here. The application actually runs on your desktop PC, but the clever bit is that you can use it to broadcast the media content stored on your PC across the Internet to your smartphone. The key to the system is that the Orb software on your PC transcodes files on the fly to make sure they're playable on your handset.
www.orb.com
Price: Free

Shape Services IM+



If you make heavy use of instant messaging then you've probably got different friends using different services with the result that you have to either mess around with multiple clients or plumb for a unified instant messaging app instead. If you want to take the latter route then IM+ is a great option. It currently works with a pretty comprehensive range of IM services including iChat, MSN Messenger, Yahoo! and Google Talk. There's also a handy IM+ panel available for the Sony Ericsson Xperia X1 handset that can be used to display unread messages.
www.shapeservices.com
Price: $39.95

http://www.trustedreviews.com/software/review/2009/03/04/10-of-the-Best-Windows-Mobile-Applications/p1


정보시스템감리사 수검전략

www.serigamrisa.com

6회 정보시스템감리사 이훈


1. 정보시스템감리사 의미 및 시험방식

1.1. 정보시스템감리사의 의미

정보시스템감리사 자격이란?

2001년부터 시행된 국가공인 자격시험으로서, 최근 급증하고 있는 감리수요의 충족과 민간부문의 감리 활성화를 위하여 한국정보사회진흥원(구 한국전산원)에서 주관하여 실시하고 국가공인을 받은 정보시스템감리와 관련한 전문 자격시험으로 매년 1회 실시하고 있습니다.

국가공인 정보시스템감리사 시험 이전에는 한국정보사회진흥원(구 한국전산원) 인정 '정보시스템감리인'이라는 자격이 있었습니다. 이 자격은 국가공인은 아니었고, 한국정보사회진흥원에서 인정하는 '감리인 인정서'에 해당하는 것이었습니다.

자격검정홍보, 지원서 배포 및 접수는 한국정보사회진흥원 홈페이지에 응시원서접수 1~2개월 전부터 관련내용을 게재하게 되며, 지원서는 한국정보사회진흥원 정보시스템 감리사 홈페이지(http://auditor.nia.or.kr)를 통해 접수를 받고 있습니다.

필기 및 면접전형을 통해 정보통신 분야의 고급기술자 이상의 자격을 갖춘 지원자를 선발하여 1주간의 감리 이론교육 및 개인별 1주간의 감리 실무교육을 실시한 후 정보시스템 감리관련 전문가로 구성된 정보시스템감리사 평가위원회의 심사를 거쳐 최종적으로 정보시스템 감리사 자격증을 수여하게 됩니다.

2001년도에 제1회 국가공인 정보시스템감리사 자격시험이 실시된 이후 매년 1회씩 실시되어 2007년도까지 공식시험이 7회에 걸쳐서 실시되었고, 2006년도에는 이전의 한국정보사회진흥원에서 인정하는 감리인들에 대한 감리사로의 이행을 위한 특별전형 시험(일반경쟁이 아닌 인정감리인만 응시가능하며 인정감리인끼리만 경쟁)이 실시되어, 특별전형 시험까지 포함하여 2007년까지 총 8회의 시험이 실시되었다고 볼 수 있습니다.

선발인원은 2001년도~2005년도에는 40명씩 선발되어 오다가, 2006년도~2007년도에는 80명씩 선발로 합격인원에 대한 변경이 이루어졌습니다. 그 이유는 감리사에 대한 수요가 급속히 증대되었기 때문입니다.

경쟁률도 계속 증가하여 2001년도의 제1회 국가공인 정보시스템감리사 자격시험에 4.7 : 1 정도의 경쟁을 보이다가 2007년도의 제7회 국가공인 정보시스템감리사 자격시험에서는 10:1 이 넘는 경쟁률을 보여 7년 만에 약 2배가 넘게 증가하였습니다.

2006년도부터 ITA법이 발효되고 2007년도 7월부터 감리원 자격요건이 강화되어, 수석감리원으로 국가공인 정보시스템감리사와 정보처리분야 기술사(정보관리기술사, 전자계산조직응용기술사)만 인정됨에 따라, 국가공인 정보시스템감리사 시험은 정보처리분야 기술사 시험과 더불어 IT분야의 최고 수준의 난이도 높은 자격시험으로서 합격자의 명예와 업무 영역을 보장받게 해주는 최고의 전문가를 배출하는 시험으로 인정받고 있습니다.

수석감리원 자격이란?

정보시스템감리사와 수석감리원을 많이들 혼동스러워 하는 것 같아서 정리를 해 보면 아래와 같다. ITA법에서 명시하는 다음과 같이 감리원 제도를 두고 있다. 당초에 이전 감리제도에 문제에 대한 해결책으로 ITA법에서는 정보시스템 감리원의 자격기준을 2개의 등급으로 구분하여 요건을 명확히 규정하고, 감리원이 되고자 하는 경우, 각 등급별로 필요한 교육의 이수를 의무화하였으며, 신기술에 대한 전문역량의 유지를 위하여 계속교육의 이수를 권고하고 있다. 따라서 구 정보통신부 장관(관할 체신청장)으로부터 감리원증을 발급받지 않은 자는 감리업무를 수행할 수 없다.라고 명기하고 있다.

아래 법문을 살펴보면 다음과 같다
.
감리원은 수석감리원/감리원 2등급이 있으며, 자격기준을 만족하는 자에게 교육을 통해 감리원증이 발급이 된다.

국가공인 정보시스템감리사 자격증은 수석감리원 자격이 주어지며, 이론/실습 교육등이 면제가 된다. 정보처리기술사(정보관리기술사,전자계산조직응용기술사)는 이론/교육 수료 후 수석감리원 증이 발급이 된다. 실제 감리현장에서 수석감리원과 감리원의 감리 업무 차이는 각 자 영역내에서 고유한 업무 영역을 보장받는다. 다만, 실제 감리현장에서 감리원들의 수장역할을 하는 총괄감리원(과거 주관감리인) 1명 두게 되는 데, 총괄감리원은 수석감리원 중에서 임명할 수 있게 되어 있다.

그 외에 보수에서도 수석감리원과 감리원 간의 차이가 있는 걸로 알고 있으며, 해당 프로젝트에 총괄감리인 수행을 하시는 감리원은 추가로 수당을 더 받는 걸로 알고 있다.

감리원 등급별 자격기준과 교육 이수 요건은 다음과 같다.

감리원 자격과 관련하여 주의하여야 할 사항으로는 자격기준표에서 보는 바와 같이 학력, 경력에 의한 기술자의 감리원 참여가 배제되었다는 점이다. 따라서 앞으로는 정보처리 관련 학력, 경력이 충분히 인정되는 경우라고 하더라도 감리원증을 교부받아 감리업무를 수행할 수 없으며, 수석감리원이 되기 위해서는 반드시 국가공인 정보시스템 감리사 자격증 또는 정보처리분야 기술사 자격증을 취득해야만 한다. , 감리원으로서 경력을 쌓아도 경력만으로는 수석감리원 등급으로 올라갈 수 없게 되었다는 것이다. 상기의 표에서 감리원 등급에 해당하는 기사, 산업기사 등 자격증의 경우에는정보처리직무분야인 경우로 한정된다. 또한, 감리인력 수급과 특정 기술분야 전문인력의 활용을 위하여 정보통신기술사, 정보보호전문가, CISA 등 자격을 소지한 경우에도 교육을 통하여 감리원으로 활동할 수 있는 근거가 마련되었다. , 정보보호전문가(SIS) 1, CISA 정식자격자의 경우에는 별도의 정보처리 경력 5년 이상(자격 취득 전후 경력 무관)이 확인되어야 한다. 또한, 수석감리원 등급에 해당하는 기술사의 경우에는정보처리직무분야, 정보관리”, “전자계산기 조직응용기술사인 경우만 인정되며, “정보통신기술사의 경우에는 전문 분야의 차이에 따라 감리원 등급으로만 인정된다.

각 등급별로 이수해야 하는 교육종류별 내용과 교육과목의 구성 등은 다음 표와 같으며, 2007 4월 현재로서는 ITA법 시행령 제15 2항에 근거하여 한국정보사회진흥원이 교육기관으로 지정되어 교육업무를 수행하고 있다. 한국정보사회진흥원은 매년 초에 당해연도에 추진할 정보시스템 감리원 교육일정 등 계획을 한국정보사회진흥원 홈페이지(http://www.nia.or.kr)에 공지하고 있으므로 이를 참조하여, 자신의 자격등급에 맞는 교육을 신청하여 이수하면 된다. , 한국정보사회진흥원은 감리원 교육 대상자에 대하여 이론 또는 실습과목의 면제 여부는 판단하고 있으나, 교육 당사자의 자격요건, 정보처리 경력 등에 따라 어떤 감리원 등급에 해당하는지 여부를 판단할 권한이 없기 때문에 교육 당사자가 본인의 책임 하에 직접 판단하여 적정한 교육을 신청하여야 함을 주의해야 한다. 본인의 경력이 자격 기준에 합당한지 여부를 판단하기 어려운 경우에는 감리원 자격고시 제5 3항에 근거하여 관할 체신청장에게 경력증명서류를 제출함으로써 충족 여부를 확인받을 수 있다.

앞서 언급된 바와 같이, 자격증, 정보처리 경력, 감리경력 등을 토대로 본인의 자격등급을 확인하고, 해당 등급에 대한 감리원 교육을 이수 또는 면제 받은 다음, 관할 체신청장에게 필요 서류를 제출하게 되면 감리원증을 발급받을 수 있다. 감리원증을 발급받기 위한 절차를 간략히 표시하면 다음 그림과 같다.

<!--[if !vml]--><!--[endif]-->

절차에서 보는 바와 같이, 감리원증을 교부받기 위해서는 교육기관(한국정보사회진흥원)으로부터 교육을 이수하고, 교육수료증을 받아야 한다. 앞서 알아본 바와 같이, 감리원의 기술능력 및 감리관련 능력을 확보하기 위하여 모든 감리원에게 교육 의무를 부과하고 있으나, 이미 동일한 교육 또는 유사한 교육을 이수하였거나, 감리업무를 수행한 충분한 경험이 있는 등의 경우에는 교육의 일부 또는 전부를 면제받을 수 있다. 교육 면제대상 기준과 제출서류는 다음과 같다.

<!--[if !vml]--><!--[endif]-->

교육을 이수하거나 면제받은 경우, 교육기관으로부터 교육수료증이나 면제확인서를 취득하게 되는데, 이와 함께 다음의 제출서류를 포함하여 관할체신청에 감리원증교부신청서를 제출하면 된다.

<!--[if !vml]--><!--[endif]-->

, 정보시스템 감리 업무를 수행하려면 수석감리원 혹은 감리원 증을 국가에서 발급받아야 감리 업무를 수행할 수 있는 데, 정보시스템감리사 자격을 취득하면, 간단한 서류 제출 및 심사 과정만을 거쳐서 이론/실습 교육 없이 수석감리원증을 발급받을 수 있다. 참고로, 기술사 중에서 정보통신분야 기술사는 감리원 수행을 하는 자격이 주어진다.

1.2. 정보시스템감리사 시험방식

◈ 응시자 자격기준

정보시스템감리사 자격수여 기준은 아래의 전문기술을 가진 다음 각 호에 해당하는 자입니다.

① 기술사

② 기사자격을 가진 자로서 정보처리분야의 실무경력 7년 이상인 자

③ 산업기사자격을 가진 자로서 정보처리분야의 실무경력 10년 이상인 자

④ 박사학위를 가진 자(정보처리분야 학위소지자)

⑤ 석사학위를 가진 자로서 정보처리분야의 실무경력 6년 이상인 자

⑥ 학사학위를 가진 자로서 정보처리분야의 실무경력 9년 이상인 자

⑦ 전문대학을 졸업한 자로서 정보처리분야의 실무경력 12년 이상인 자

⑧ 고등학교를 졸업한 자로서 정보처리분야의 실무경력 15년 이상인 자

※ 기술사 자격명 : 정보관리, 전자계산조직응용, 정보통신 기술사

※ 기사 자격명 : 정보처리, 전자계산기조직응용, 정보통신 기사

※ 산업기사 자격명 : 정보처리, 정보기술, 전자계산기조직응용, 사무자동화(컴퓨터 활용능력 자격은 해당없음), 정보통신 산업기사

※ 경력은 자격 또는 학위 취득 후부터 산정함.

※ 응시자 자격기준일은 해마다 시험접수 마감일 기준으로 산정하는 데, 2008년의 경우 는 2008 619()로 함.

◈ 필기합격 예정자 제출 서류

정보시스템감리사 자격검정에서 필기검정의 상위고득점순으로 필기합격 예정자(40)과 예비합격자를 공지합니다. 공지된 합격예정자는 자격검증 서류를 제출하게 됩니다. 필기시험 합격예정자는 합격예정자 발표일로부터 통상 1주일 이내에 증빙서류 제출 안내를 받는 데, 2008년의 경우 2008.7.28까지 제출로 자격검정 안내문에 공고되었습니다. 예상하면 필기합격 예정 공지는 최소한 7.20 ~ 7.22일 경에 이루어지는 걸로 판단을 할 수 있습니다. 이 부분은 필기시험 후별도 공지를 하게 됩니다.

필기합격예정자가 제출할 서류로는 아래와 같은 서류가 있습니다.

응시자격 구분

제 출 서 류

기술사

1. 응시원서

2. 자격증 사본

기사/산업기사 자격소지자로서

실무경력자

1. 응시원서

2. 자격증 사본

3. 경력(또는 재직)증명서

박사학위 소지자

1. 응시원서

2. 졸업증명서 (또는 학위기 사본)

석사 이하 학위 소지자로서

실무경력자

1. 응시원서

2. 졸업증명서(또는 학위기 사본)

3. 경력(또는 재직) 증명서

※ 상기 제출서류 외에 응시자격 증명에 필요한 경우 한국정보사회진흥원에서 요구하는 자료를 제출하셔야 합니다.

필기전형 및 합격자 선정

정보시스템감리사 자격절차는 필기, 면접 및 이론교육과 실습교육을 통해 최종 자격증을 수여하는 엄격한 절차가 존재합니다. 하지만 사실상 필기전형에 합격하게 되면 정보시스템감리사로서 90% 이상을 달성했다고 생각해도 거의 무리가 없습니다. 따라서 예비감리사분들은 1차 필기전형에서 최선을 다해 꿈을 이루시게 되기를 기원합니다.

시험은 이미 알고 계시겠지만, 100분 간 100문제를 풀어야 하는 객관식 형태의 시험을 봅니다. 2008년 필기전형은 아래와 같이 실시됩니다.

시험 일시

2008 7 12() (15:00 16:40)(실제 시험시간)

고사실 입실

시험시작 20분전(14:40)까지 고사실 입실을

시험장소

장소 : 동마중학교(왕십리 소재)(

시험 시간

100

정보시스템감리사 자격 검정절차

<!--[if !vml]--><!--[endif]-->

<!--[if !supportLists]-->l <!--[endif]-->공고방법

- 한국정보사회진흥원 홈페이지 및 정보시스템 감리사 홈페이지(http://auditor.nia.or.kr)를 통하여 자격검정 공고

<!--[if !vml]--><!--[endif]-->

<!--[if !supportLists]-->l <!--[endif]-->접수방법

- 정보시스템 감리사 홈페이지(http://auditor.nia.or.kr)를 통하여 접수(방문접수는 없슴)

<!--[if !supportLists]-->l <!--[endif]-->증빙서류

- 응시자격 확인을 위한 증빙서류(경력증명서, 최종학력증명서, 자격증 사본)는 필기시험 합격예정자만 추후 제출

<!--[if !supportLists]-->l <!--[endif]-->시험과목(4개 과목 : 100문항/ 100 : 객관식 4지 선다형)

- 감리 및 사업관리(25문항), 소프트웨어공학(25문항)
-
데이터베이스(25문항), 시스템 구조 및 보안(25문항)

<!--[if !supportLists]-->l <!--[endif]-->필기전형 합격자 선정 방법

- 전형 과목별 100점 만점에 과목별 40점 이상인자 중 고득점자 순으로 합격자 선정(40점 미만 과락)

- 감리 및 사업관리 과목 우수자 → 소프트웨어공학 과목 우수자 → 데이터베이스 과목 우수자 → 시스템 구조 및 보안 과목 우수자 → 생년월일 연소자

<!--[if !supportLists]-->l <!--[endif]-->필기전형 합격자 통보

- 한국정보사회진흥원 홈페이지 및 정보시스템 감리사 홈페- 이지(http://auditor.nia.or.kr)에 합격자 명단 게재
-
합격자에 한하여 개별통보(전화, E-Mail )

<!--[if !vml]--><!--[endif]-->

<!--[if !supportLists]-->l <!--[endif]-->면접전형 대상자

- 해당 회차의 필기전형 합격자
-
이전 회차의 면접전형 탈락자로 1회의 면접전형 기회 부여자

<!--[if !supportLists]-->l <!--[endif]-->면접전형 합격자 선정

- 면접전형 평가에 따라 합격자 선정

<!--[if !vml]--><!--[endif]-->

<!--[if !supportLists]-->l <!--[endif]-->이론교육 대상자

- 해당 회차 면접전형 합격자
-
이전 이론교육 탈락자 1회에 한하여 재교육 기회 부여자

<!--[if !supportLists]-->l <!--[endif]-->이론교육 방법 및 과목

- 이론강의 및 감리사례 실습을 병행하여 실시
-
이론강의 : 정보시스템 감리를 위해 필수적인 감리관련
----------- 전문지식을 중점적으로 교육
-
사례실습 : 각 과목별로 사례 중심으로 팀별 또는 개인별
----------- 실습교육 시행 및 보고서 작성

<!--[if !supportLists]-->l <!--[endif]-->이론교육 합격자의 선정

- 이론강의 평가, 사례실습평가, 출석결과를 토대로 결정

<!--[if !vml]--><!--[endif]-->

<!--[if !supportLists]-->l <!--[endif]-->현장 실무교육 상자

- 해당 회차의 이론교육 합격자
-
이전 회차의 현장 실무교육 탈락자 1회 재교육 기회 부여자

<!--[if !supportLists]-->l <!--[endif]-->교육방법

- 개인의 희망분야, 전문분야를 고려하여 감리가능 분야 선정
-
감리실무교육 기간 개인별 현장실무 결과보고서 작성제출

<!--[if !supportLists]-->l <!--[endif]-->현장실무교육 합격자 선정
-
현장실무교육 평가에 따라 합격자 선정

<!--[if !vml]--><!--[endif]-->

<!--[if !supportLists]-->l <!--[endif]-->자격증 수여대상자
-
각 단계별 교육과정을 모두 합격한 자
-
특별한 결격 사유가 없는 자

출처 : 한국정보시스템감리사협회

1.3. 정보시스템감리사 응시자/합격자 현황

정보시스템감리사 경쟁률 및 합격 커트라인의 현황

2007년도 감리사 시험의 커트라인은 71점이었습니다.

2005년도 감리사 시험의 커트라인은 67, 2006년도 감리사 시험은 커트라인은 69점이었음을 감안해 볼 때, 매년 2점 내외 정도씩 커트라인 점수가 올라가고 있습니다.

따라서, 2008년도 감리사 시험에서의 커트라인은 73점 정도는 될 것으로 예상되고 있습니다. 전체적으로 합격을 위한 경쟁이 점점 치열해 지고 있다는 것이 분석결과입니다.

년도

경쟁률

최저점

최고점

2001(1)

4.7:1

2002(2)

5.2:!

2003(3)

6.3:1

2004(4)

7:1

65

모름

2005(5)

8:1

67

78

2006(6)

8:1

69

모름

2006(특별전형)

0.7:1

모름

모름

2007(8)

10:1

72

모름

정보시스템감리사 응시현황 통계

2001년을 시작으로 1회가 시행되었다. 회차마다 약 40명 선발이 되었고, 2006년과 2007년에는 정보시스템감리사의 수요를 반영하고자 80명씩 선발을 하였다. 특히 2006년 하반기에는 특별시험을 실시하여 40명을 추가 선발하였는 데, 감리업무를 수행하는 감리원들을 대상으로 실시하여, 일반 응시자에겐 응시자격이 없었던 시험으로 시행이 시행되어, 2007년 까지 약 400여명의 감리사를 배출하였다.

경쟁률과 최저 합격점이 해마다 상승 추세에 있으며, 문제 난이도도 해마다 어려워 지는 경향을 보인다.

년도

경쟁률

최저점

최고점

2004(4)

7:1

64

모름

2005(5)

8:1

66

78

2006(6)

10:1

68

모름

2007(7)

9:1

72

모름

정보시스템감리사 감리사 현황

정보시스템감리사협회에서 제공되는 회원 수치를 기준으로 살펴보면 다음과 같다.

자료:정보시스템감리사협회

기수

년도

감리사현황

1

2001

39

2

2002

39

3

2003

41

4

2004

40

5

2005

41

6

2006

76

7

2006(특별)

47

8

2007

83

총 계

406

2. 정보시스템감리사 필승 수험전략

2.1. 최근 기출문제 분석

시험과목

정보시스템감리사는 객관식 100문제 4지 선다형으로 출제가 되고 있다. 정보시스템감리사의 시험과목이 4과목의 각 영역은 어떻게 결정을 되었을 까? 궁금한 예비감리사분들이 있을 것으로 보이는 데, 출제 경향의 전체를 살펴보는 데도 나름대로 의미가 있을 것 같아서 필자의 견해를 보이고자 한다.

정보시스템 감리점검 해설서를 보면 감리 프레임워크가 제시되어 있다. 정보시스템 감리는 1987년 국내에 도입되어 현재에 이르기까지 정보시스템에 대한 관리적/기술적 위험요인을 조기에 발견하여 개선할 수 있도록 제3자적인 관점에서 방안을 제시함으로써 정보화사업의 실패를 미연에 방지하고, 향후 발생 가능한 위험을 줄이는 효과성이 인정되어 공공부문에서 그 중요성이 높아지고 있다. 이러한 정보시스템감리를 수행함에 있어 기본이 되는 지침은 정보시스템의 효율적 도입 및 운영 등에 관한 법률 제11조 제4항에 의거하여 2006년 10월 24 정보통신부고시 제2006-42호로 고시된 정보시스템감리기준(이하 감리기준)이다.

이러한 감리기준에서 기본점검표를 중심으로 감리 대상이 되는 정보화사업의 유형에 따라 감리를 시행하기 위한 점검체계를 프레임워크 형태로 제공을 하고 있다. 여기서 사업유형이라고 함은 계획-실행-통제의 생명주기를 기반으로 구분한 것으로, 계획에 해당하는 정보화전략계획수립사업, 실행에 해당하는 시스템개발사업, 데이터베이스구축사업, 통제에 해당하는 시스템운영과 유지보수 사업으로 구성된다.

출처:정보시스템감리점검해설서(v3.0)-한국정보사회진흥원

<!--[if !vml]--><!--[endif]-->

그림1 감리점검프레임워크

정보시스템의 사업유형에서 거의 대부분을 차지하는 시스템 개발(SD) 영역은 감리영역이 단계별로 시스템 아키텍처, 응용시스템, 데이터베이스, 품질보증활동 및 사업관리 영역으로 나눠져 있음을 볼 수 있다. 이에 품질 및 보증활동은 프로젝트관리 과목으로, 데이터베이스는 데이터베이스, 응용시스템은 소프트웨어공학, 시스템 아키텍처는 시스템구조 및 보안과목으로 감리사의 기본 역량을 판단하고자 하는 것이 목적임을 알 수 있다.

2007년 감리 과목이 감리사 시험 과목으로 추가되기 전까지는 한국정보사회진흥원에서는 기본적으로 감리에 대한 내용은 필기합격자들에게 2주간의 이론교육으로 충분히 교육을 통해 감리사 역할을 충분히 수행할 수 있다고 판단이 되었던 것으로 판단이 되었다고 한다.

그러는 와중에 저의 개인적인 판단으로는 감리사 필기 합격자들의 경력상 연속 2주동안의 교육은 현실적으로 무리가 있는 일정이었다. 실제로 필자가 교육을 받았던 6기 감리사 교육에서도 1주일은 부서에서 교육으로 참가를 하였지만, 그 후 1주는 개인의 휴가를 내가면서 교육에 참석했던 분들이 계셨다. 따라서 이러한 과정에서 2007년부터 이론 교육은 1주로 줄게 되면서, 아예 필기과목에서 프로젝트 관리를 줄이면서 8문항을 감리부분에서 추가가 되었다. 그리고 이미 예비감리인들도 감리의 기본적인 지식을 보유하고 있음을 인식하고, 필기 전형으로 포함하면서 실제로 이론 교육을 1주일로 당기는 제도로 변경이 되었다.

감리 및 사업관리

감리 및 사업관리에서 감리 부분을 먼저 살펴보면, 감리 부문은 2006년 까지 감리사 시험영역에서 출제되지 않았던 영역으로, 2007년에 신규로 추가된 영역이다. 8문제 정도 출제 비율로 보면 100문제 중에 8%이고, 사업관리 25문제 중에서는 28%에 해당되는출제비중이다. 주로 감리기준(정통부고시 제2006-42)에서 대부분 출제되었으며, 정보시스템의 효율적 도입 및 운영 등에 관한 법률(ITA/EA 도입법)에서 감리에 대한 법적 기준에서 출제되었다. 한국정보사회진흥원에서 운영하고 있는 정보시스템감리 홈페이지(http://www.itaf.or.kr/) 에 접속하여 상위 메뉴 감리기준해설서 내용을 숙지하면 문제가 없는 영역이다.

사업관리 영역은 프로젝트 관리 부문으로 기존의 PMP 자격을 위한 학습서인 PMBOK 을 숙지하여야 한다. 2004(4) 부터 2007(8)까지 기출문제를 분석한 결과 일정관리, 품질관리, 형상관리, 의사소통, 위험관리, 조직관리, 비용관리, 프로젝트 특성, WBS, SW법령, 범위관리, 인력관리 등에서 출제되었다. 일정관리, 품질, 형상 및 위험관리 등이 전통적으로 출제빈도가 높은 편이다.

소프트웨어공학

소프트웨어 공학은 최근의 경향이 정보처리기술사에서도 출제비중이 높은 테스트 부분에서 단연 출제가 많이 되었으며, 실무적인 기법으로 UML , 개발방법론, ITA, 디자인패턴, 유지보수, 개발모형(SDLC), CMMI, CASE 도구, 요구공학, CMM, 기능점수, 모듈화, 객체지향, 일정관리, 위험관리, 품질 관련 SPICE(IS0 15504), CBD 개발 등에서 80% 이상이 출제되었는 데, 특이 사항은 SW 공학에서 다루는 부문과 프로젝트 관리 부분에서 다루는 토픽 중에서 형상관리 부분은 소프트웨어 공학에서는 상대적으로 적은 빈도로 출제가 되었다. 최신 경향의 소프트웨어 공학 기법이 간혹 출제는 되지만 전통적으로 현장에서 많이 발생되는 이슈 위주로 출제되는 것을 볼 수 있다.

데이터베이스

데이터베이스 분야에서는 무엇보다도 데이터 모델링이 출제빈도가 상당히 높은 편이다. ERD 에서 사용되는 관계 및 엔티티 표현 방식에서부터 실제 테이블로 전환되는 것을 묻는 문제가 매년 출제되고 있으며, SQL 구사 능력을 묻는 문제도 매해 출제되고 있다. 데이터 모델링, 회복기법, SQL, 데이터 마이닝, 인덱스, 객체지향 DB, , XML DB, 관계대수, 정규화, DB 성능, 함수종속성, DW, DBMS 특성, 관계형 DB, 질의 최적화, DB연동, 분산 데이터베이스, 병행제어, 트랜잭션 처리, 데이터 사전 등에서 80% 이상 출제되었다. 데이터베이스는 이론적 근거를 바탕으로 정확한 원리 이해 중심의 학습을 요구하는 전략이 필요하다.

시스템구조 및 보안

이 과목은 정보시스템감리사 과목에서 학습하기가 제일 까다로운 과목인 것으로 파악이 된다. 필자의 경우에도 이 과목은 출제범위가 넓어서 최소한의 방어전략으로 학습에 임했던 부분이다.

최근의 이슈가 되고 있는 부분에서 출제가 되는 경향이 강하다. 최근의 보안적 이슈를 반영하듯이 공개키구조(PKI), 보안, 연속성계획(BCP), 시스템 용량산정, ITIL/ITSM, 보안프로토콜 IPSec, 해킹/악성프로그램, IPv6, SOAP, 위험관리, RAID 등에서 약 70% 이상이 출제되었다.

용어 자체가 낯선 부분이 많은 영역으로 접근하기기 쉽지 않지만, 기본 학습은 네트웍과 보안 분야로서 학습자료로는 정보처리기술사 학습을 위한 자료들을 주위에 기술사 학습을 하는 지인들에게서 구해서 보는 학습 전략이 필요하다.

2.2. 과목별 학습전략

감리 및 사업관리

아래는 필자가 2004~2007년 까지 기출문제를 분석한 출제 영역이다.

해당 토픽

2004

2005

2006

2007

출제비중(%)

일정관리

1

6

3

3

13%

품질관리

2

3

6

1

12%

형상관리

4

1

2

2

9%

의사소통

1

3

2

1

7%

위험관리

2

1

2

2

7%

조직관리

1

1

3

1

6%

감리기준(정통부고시 제2006-42)

-

-

-

5

5%

비용관리

1

1

2

 

4%

프로젝트

1

 

 

3

4%

WBS

 

2

 

1

3%

통합관리

2

 

1

 

3%

ITA/EA

 

 

 

3

3%

SW법령

 

2

1

 

3%

범위관리

3

 

 

 

3%

프로젝트 특성

 

 

1

1

2%

프로젝트 추정

1

 

 

1

2%

인력관리

 

2

 

 

2%

CBD 개발

 

2

 

 

2%

프로젝트 통제

1

 

 

 

1%

ITA/EA

1

 

 

 

1%

기능점수

1

 

 

 

1%

문제결함관리

 

 

1

 

1%

개발방법론

1

 

 

 

1%

SW측정

 

1

 

 

1%

개발프로젝트

1

 

 

 

1%

PMO

 

 

 

1

1%

변경관리

 

 

1

 

1%

법관련

1

 

 

 

1%

기본적으로 감리는 감리점검기준해설서를 기초로 학습을 요한다. 법 문구 그대로 출제되었으며, 올해는 한 depth 깊게 들어갈 것으로 전망이 된다. 한국정보사회진흥원에서 운영하는 감리사이트(http://www.itaf.or.kr/) 에 접속하여 상위 메뉴 감리기준해설서 내용을 숙지하여야 한다.

사업관리는 PMP 영역으로 실제로 PMP 자격을 학습할 때 사용하는 PM+P 교재를 이용하여 학습을 해야 한다. 출제영역은 현실적으로 잘 안되지만 가장 중요한 일정/범위/품질/위험관리 및 의사소통관리 영역에서 집중 출제됨을 알 수 있다. 기성고 부문과 PERT 는 계산이 가능한 수준까지 학습을 요한다.

올해부터는 동점자 처리기준이 변경이 되어 우선순위 과목별 고득점자 순으로 합격자를 정하므로 이 과목은 전략 과목으로 선정하여 고득점을 해야 유리하다고 볼 수 있다. 철저한 객관식 문제에 대비하여 많은 문제풀이를 통해서 실전 감각을 키워야 한다.

소프트웨어공학

아래는 필자가 2004~2007년 까지 기출문제를 분석한 출제 영역이다.

해당 토픽

2004

2005

2006

2007

출제비중(%)

테스트

2

4

3

3

12%

UML

1

3

2

2

8%

개발방법론

2

1

1

2

6%

ITA

 

 

4

 

4%

디자인패턴

 

1

1

2

4%

유지보수

3

 

 

1

4%

SDLC

1

2

1

 

4%

CMMI

 

 

2

1

3%

CASE 도구

1

1

 

1

3%

요구공학

 

1

 

2

3%

CMM

1

2

 

 

3%

기능점수

 

 

2

1

3%

SW모듈

1

2

 

 

3%

객체지향

2

 

1

 

3%

일정관리

1

1

 

 

2%

위험관리

 

 

2

 

2%

품질

1

 

1

 

2%

SPICE(IS0 15504)

1

1

 

 

2%

CBD 개발

 

1

1

 

2%

유즈케이스

 

 

 

1

1%

품질보증

1

 

 

 

1%

제품 평가

 

 

1

 

1%

ISO 12207

 

 

1

 

1%

ATAM 기법

 

 

 

1

1%

프로그램 코딩

1

 

 

 

1%

SW공학 위기

 

 

 

1

1%

형상관리

1

 

 

 

1%

SA

 

 

1

 

1%

갭슐화

 

 

 

1

1%

언어

 

1

 

 

1%

계층형 팀구조

 

1

 

 

1%

SW공학 기법

 

 

 

1

1%

ISO 9126

 

 

 

1

1%

ITGI거버넌스

 

 

 

1

1%

ISP

1

 

 

 

1%

정형적 명세화

 

 

 

1

1%

비용관리

 

1

 

 

1%

클래스다이어그램

1

 

 

 

1%

품질표준

 

1

 

 

1%

CobiT

 

 

1

 

1%

설계기법-추상화

1

 

 

 

1%

COCOMO

 

 

 

1

1%

시스템 모듈화

 

 

 

1

1%

설계

 

1

 

 

1%

3R

1

 

 

 

1%

객체통신

1

 

 

 

1%

기본적으로 소프트웨어 공학은 학계에서 중요하다고 여겨지는 부문에서 다수 출제됨을 보이고, 최근 테스팅 영역에서 매우 높은 비중으로 출제되고 있다. 정보처리기술사 기출문제를 분석해도 테스팅은 부분은 최근에 다량 출제되는 영역이다. 실제로 복잡도 구하는 계산 문제를 포함하여 블랙박스/화이트박스 기법을 포함한 폭넓은 학습이 요구된다. 교재로는 학습시 체계적으로 장기간 계획을 하시는 분들은 최은만 교수님의 소프트웨어 공학을 학습하시고, 최근의 소프트웨어 공학까지 학습이 요구되는 데, 한국맥그로힐 출판사의 소프트웨어 공학 (5) Software engineering : a practitioner's approach 도 권할 만 하다. 번역본인데, 해당 서적은 현재 제6판이 원서로 나왔지만, 아쉽게도 번역본은 아직 출판되지 않고 있다.

필자가 알기로는 정보시스템감리사 출제위원님들이 대개 학계에 계시는 교수님들이 들어가시는 데, 교수님들이 최근 교재로 사용하시는 서적에서 출제를 내게 된다. 소프트웨어 공학과 데이터베이스 과목은 철저하게 아카데믹하게 접근을 하여야 고득점을 얻을 수 있다.

단기간에 문제풀이 위주로 하면서 이론을 정리하실 분들은 제7급 공무원 수험서를 보기를 권한다. 방송통신대학교 교재도 있지만, 필자가 본 바로는 탑스팟 출판사의 소프트웨어 공학 교재가 볼 만하다. 7급 전산직 공무원 출제위원님들로 대개는 교수님들이 들어가시는 데, 아무래도 출제경향이 유사한 문제가 다수 출제가 되므로 시험 감각을 익히기엔 더없이 좋다고 볼 수 있다. 이러한 전산직 공무원 수험교재의 바이블은 최은만 교수님의 소프트웨어 공학 책을 근간으로 하고 있고, 목차를 그대로 따라간다. 탑스팟 교재에서 앞 부분에서 행시/고시 등의 출제 경향 분석이 자세히 나와 있는 데, 단기간에 정리를 효과적으로 하고자 하는 예비감리사 분들은 출제경향에서 분석된 부분 위주로 학습시 우선순위를 선정하여 학습할 필요가 있다.

데이터베이스

아래는 필자가 2004~2007년 까지 기출문제를 분석한 출제 영역이다.

해당 토픽

2004

2005

2006

2007

출제비중(%)

데이터 모델링

6

4

5

3

18

회복기법

3

2

1

1

7

SQL

2

2

1

2

7

데이터 마이닝

1

3

 

2

6

인덱스

 

1

1

3

5

객체지향 DB

1

1

1

1

4

1

1

1

1

4

XML DB

 

3

 

1

4

관계대수

 

3

1

 

4

정규화

1

1

1

 

3

DB 성능

 

 

2

1

3

함수종속성

 

1

 

2

3

DW

 

 

2

1

3

DBMS 특성

1

 

2

 

3

관계형 DB

2

 

 

 

2

질의 최적화

 

 

1

1

2

DB연동

1

1

 

 

2

분산 DB

 

 

1

1

2

병행제어

 

1

1

 

2

트랜잭션 처리

 

1

1

 

2

데이터 사전

1

 

 

1

2

동시성제어

 

 

2

 

2

외래키 옵션

 

 

 

1

1

(Key)

 

 

1

 

1

충돌 직렬가능 스케쥴

 

 

 

1

1

해싱기법

 

 

 

1

1

연쇄복귀

1

 

 

 

1

조인

1

 

 

 

1

DB보안

1

 

 

 

1

성능튜닝

 

 

 

1

1

2PL 락킹

1

 

 

 

1

병렬DBMS

1

 

 

 

1

데이터베이스 부분은 예비감리사 분들 대부분이 전략적으로 고득점을 노리는 과목으로 보여진다. 하지만 실제적으로 직장에서 경험한 실무 경험과 이론적인 지식의 gap 으로 인하여 실제로 데이터베이스를 잘 안다고 등한시 하다가 당황하게 되는 과목이기도 한 것 같다. 실제로 데이터베이스 원론 위주로 학습을 요한다. 튜플, 애트리뷰트 와 같은 이론적인 용어와 친숙해 져야 한다.

데이터모델링 분야에서 집중 출제되었는 데, E-R 에서 테이블 생성 원리, E-R 표기와 같은 이론적인 부분들이 다수 출제가 되고 있고, 약 엔티티 처리 등도 출제가 되고 있다.

그리고 실무적으로 SQL 이 출제되는 데, 주로 Group by 구문과 NOT EXISTS 구문등이 자주 출제되고 있으며, GRANT, REVOKE 와 외래키 설정 시 DELETE 문장이 실행되는 경우에 테이블 결과등 다수 실무적인 레벨까지 출제되고 있다.

데이터베이스 부문 역시 대학교재로 사용되는 이석호 교수님의 데이터베이스 시스템이 바이블이며, 탑스팟의 전산직 공무원 수험서를 이용하여 문제풀이를 많이 해 보아야 할 과목이다.

시스템구조 및 보안

PKI

2

1

2

2

7

보안

 

1

3

2

6

BCP

 

1

2

1

4

용량산정

2

1

 

1

4

ITIL/ITSM

 

1

1

1

3

IPSec

1

 

1

1

3

해킹/악성프로그램

 

2

 

1

3

IPv6

1

 

2

 

3

SOAP

1

 

 

2

3

위험관리

 

 

2

1

3

RAID

 

 

2

1

3

SSL프로토콜

1

1

 

1

3

인터넷 트랙픽

1

1

 

 

2

네트웍 스토리지

1

1

 

 

2

가용성 계산

1

1

 

 

2

RFID

 

1

1

 

2

ITA/EA

 

2

 

 

2

SLA

 

1

1

 

2

전자서명

1

1

 

 

2

L4스위치

 

1

1

 

2

XML

1

 

 

1

2

전자상거래

1

 

 

 

1

아키텍쳐

 

 

1

 

1

백업

 

 

1

 

1

RMI

 

 

 

1

1

위험분석

 

1

 

 

1

RPC

1

 

 

 

1

RIP

 

 

1

 

1

S/MIME

1

 

 

 

1

서버 call 계산

1

 

 

 

1

NAT

 

 

 

1

1

웹서비스

 

 

1

 

1

HA

 

 

 

1

1

자바기술

 

1

 

 

1

IDS

 

1

 

 

1

패킷 필터링

 

 

 

1

1

IP 시스템

 

 

1

 

1

모발일 IP

 

 

1

 

1

TRM(기술참조모델)

 

 

 

1

1

DNS

 

1

 

 

1

UDP

1

 

 

 

1

스위치 종류

1

 

 

 

1

USN

 

 

 

1

1

DOM

 

1

 

 

1

WAP

1

 

 

 

1

EJB

 

 

 

1

1

NMS

1

 

 

 

1

RDF

 

 

 

1

1

EAI

1

 

 

 

1

전송방식

1

 

 

 

1

QoS

 

1

 

 

1

Mobile IP

1

 

 

 

1

닷넷과 J2EE

 

 

 

1

1

프로토콜

 

 

1

 

1

데이터통신방식

1

 

 

 

1

디자인 패턴

 

1

 

 

1

AJAX

 

 

 

1

1

TCP/IP

 

1

 

 

1

시스템 구조 및 보안은 출제경향 분석자료를 보시면 아시겠지만, 범위가 상당히 넓다필자도 수검당시에 이 과목이 제일 난해한 과목으로 기억된다. 실제로 수험장에서 지문에 처음보는 용어들이 마구 튀어 나왔던 기억이 있다. 그 당시에는 딱히 교재도 없을 뿐 더러, 범위가 마냥 넓어 보였던 것이 사실이다.

이 과목은 주변에 정보처리 기술사 학습을 하셨거나 하시고 계시는 분이 있다면, 최신/보안 분야등의 학습자료를 구해서 스터디를 해야 할 필요가 있다. 자료를 구하기 힘들면 본인이 가진 자료와 맞교환 형태로 물물교환을 통해서 자료를 교환하는 방식으로 자료를 입수하면 좋을 것 같다. 수없이 쏟아지는 용어에 일단 친숙해 질 필요가 있으며, 빠른 반복을 통해 익숙치 않은 용어와 친숙해 져야 한다.

범위가 한 없이 넓은 듯 하지만, 출제경향을 살펴보면 암호화/PKI/보안/해킹/ITIL 등에서 출제되고, 최근의 경향을 반영한 문제가 출제가 됨을 알 수 있다.

감리사 시험이 객관식으로 출제되다 보니 지문에서 특정 단어만을 교체하여 오답을 유도하는 문제 형식이 많이 출제된다.

IPSec SSL 을 비교하는 문제에서 틀린 것을 골라라 하는 문제가 출제될 경우 4개의 지문에서 3개의 지문이 옳은 문장을 기술하고, 답이 되는 지문은 앞 부분이 올바른 문장으로 서술되다가 끝부분에서 단어 하나를 살짝 바꿔서 틀린 말이 되게끔 해서 정답으로 만들어 내는 식이다. 따라서 철저한 학습이 요구된다.

2.3. 학습전략 세우기

◈ 본인이 학습한 감리사 수험교재 및 시험후기

2006 1월 공부를 시작하여 총3개월 정도를 주말에 시간을 할애하여 응시를 하였다. 는 데, 과목별로 학습했던 교재 및 범위입니다.

과목

학습 교재

학습 내용

프로젝트

관리

- PM+P 학습서(소동출판사, 김병호,정승원 저)

- 교재내용 정독, 연습문제 풀이(오답문제 복습)

소프트웨어

공학

- 소프트웨어공학(정익사, 최은만 저)

- 정보처리기사 문제풀이집

- 기술사 학습교재(방동서 기술사님 자료)

- 문제 풀이

- 교재 3회 정독

데이터

베이스

- 데이타베이스 시스템(정익사, 이석호)

- 전산직 7급 공무원 수험서(탑스팟,

- 1회 정독

- 문제풀이

시스템 구조 및 보안

- 핵심기술총서(한울, 삼성SDS 공저)

- 사내 교육자료(ppt 문서)

- CISA 교육 교재

- 1회 정독

모의고사

- 사내 양성반 모의고사 자료

- 문제풀이(이해 안 되는 문제 암기)

먼저 삼성SDS 기술사회에서 나온 정보기술총서를 도서관에서 대여하여 읽었습니다. 1번 정도를 정독했던 걸로 기억 됩니다.

PMP 교재는 Chapter 별로 문제를 모두 풀었습니다. 그리고 오답으로 된 문제를 다시정리를 하였습니다.

데이터베이스 과목은 탑스팟의 교재를 기본으로 역시 문제를 모조리 풀었습니다. 그리고 이해가 필요한 부분은 철저히 이해를 바탕으로 학습을 하였습니다. 관계대수 및 정규화/회복기법을 자세히 학습하였습니다.

소프트웨어 공학은 기술사 학습교재를 3회 정독하고, 정보처리 기사 시험문제를 풀고,사내에서 제공된 모의시험을 통해 정리를 하였습니다.

시스템 구조 및 보안 과목이 당시 가장 어려운 과목이었습니다. 모의문제에서 제시디는 용어들이 워낙 생소하여, 모르는 문제는 암기를 한다고 했으나, 잘 외워지지 않았고, 힘들었던 기억이 납니다.

그 나마 CISA 에 나오는 암호화/PKI/해킹 기법 등을 정리하였고, 그 동안 출제된 기출과 보안/CISA 교재를 중심으로 모르는 용어는 암기를 하고, 학습을 하였습니다.

시험을 치르는 당일 날 오전까지 도서관에서 최종 마무리를 하였다. 과목별로 암기가 필요한 내용을 최종 숙지하고, 확실하게 맞출 수 있는 문제를 실수하지 않도록 하였다. 가볍게 점심을 먹고, 오후 1 가 지나서 시험장에 입실 하였는 데, 시험을 보러 오시는 분들의 연령대가 매우 많아 보였다. 시험지를 받았는 데, 지문들도 길어서 제법 페이지 수가 되었다. 1번 문제를 풀고, 시험지에 답안을 체크한 개수를 세어보니 50개 채 되지 않았던 것 같았다. 아직 답을 정하지 못한 문제 위주로 다시 2회 문제를 풀어나가니, 어느 덧 시간이 흘러 75분 정도 흘렀던 것 같았다. 전반적으로 100분 동안 100문제를 풀어야 하는 데, 시간이 넉넉하지 않았다. 이제는 답이 확실하다 싶은 항목만 OMR 답안지에 마킹하기 시작했다. 아직 답을 결정하지 못한 것은 시험지에 짐작으로 정해놓고, 나만의 전략을 시도했다. 저 같은 경우는 객관식 시험의 자격시험을 볼 때면 사용하는 방법이 있다. 일단 답이 확실하다고 생각하는 문제를 집중 검토합니다. 제가 확실하게 맞힌 답안을 가지고 예상정답 개수를 확정해 나간다. 대략 확실하다고 예상한 갯수가 65개 정도를 간신히 넘었던 것 같았다. 정말 내가 안다고 하는 문제에서 문제를 거꾸로 읽지는 않았는 지 등을 확인하는 과정을 거치고, 이제 그냥 찍은 문제까지 천천히 마킹을 해 나갔다. 정답을 다 표시하고 시간을 보니 이제 2-3분 정도 남았고, 이젠 수정도 못하니 최종적으로 답안을 검토하면서, 퇴실만을 기다리면서 마무리를 하였다.

문제는 정말 잘 내는구나 라는 것을 많이 느끼면서 시험장을 나왔다. 시험을 치루고 나오는데 정말 올해는 안되겠구나 하고 자신이 없더군요. 그래서 7회 때 다시 응시를 해야겠구나 하고 나름대로 전략을 세웠습니다.

◈ 필기시험전략

객관식 문제로 출제되는 시험이므로, 이해를 바탕으로 학습하되, 암기가 필요한 부분은 암기를 적당히 해야 한다. 예를 들면 소프트웨어 공학에서 설계기법으로 응집도와 결합도를 학습할 때, 기본적으로 응집도와 결합도가 설계기본원칙에서 강한 응집도와 약한 결합도가 바람직하다는 것은 이해를 하였다. 하지만 자주 출제도는 응집도의 강한 순서부터 차례대로 나열해 보면, 흔히 우------기 로 외우는 것이 필요하다. 이해없는 암기는 문제라고 하지만,거의 40초 이내에 1문제를 마킹해야 하는 시험이므로 빠른 시간안에 정답을 찾아내야 하는 시험이므로, 이러한 암기는 필요악이라고 생각이 된다.

모의고사/실전문제를 기본으로 많은 문제를 접해야 한다. 객관식 시험의 특성상 많은연습문제 풀이가 합격의 열쇠라 볼 수 있다고 하겠다. 자료/교재를 통해 학습한 내용은 반드시 문제를 통해 확인하는 과정이 필요하다. 기술사 시험과는 달리 객관식 시험이라고 해서 내용만 알면 되겠지라는 안이한 생각으로 접근을 하게 되면, 실패할 확률이 높다. 기출문제를 분석해 보면 알겠지만, 해마다 문제 난이도는 어려워 지고 있으며, 매년 합격을 위한 커트라인 점수는 올라가고 있는 것을 감안하면 결코 쉽다고만 볼 수 는 없는 이다.

<!--[if !supportLists]--> <!--[endif]-->출제 범위가 당해 년도 이슈 부분에서 많이 출제되고, 원래 중요한 부분에서 다량 출제된다.

<!--[if !supportLists]--> <!--[endif]-->문제 유형이 해마다 다양해서 이해 위주로 학습을 해야 한다. 작년의 경우 데이터베이스 분야에서는 E-R 모델에서 테이블 변환하는 문제에서 해마다 출제되었던 영역인데, 파생테이블(이중 동그라미로 표기)를 모르고서는 정답을 찾지 못하는 문제까지 출제가 되었다.

<!--[if !supportLists]--> <!--[endif]-->문제 또는 보기가 서술문장, , 그림 들이 많고, 특정 단어를 바꿔치기 하여함정을 만들므로 확실한 이해 없이는 틀리기 쉬운 문제들을 출제한다.

(객관식 100문항의 문제가 A4 28장에 인쇄되어 있음)

<!--[if !supportLists]--> <!--[endif]-->문제 난이도별 전략을 수립하도록 해야 한다. 이 시험은 성적순으로 합격자를 가리는 상대평가이므로, 문제 난이도에 따른 전략을 나름대로 세워야 한다.

올해는 사상 최대 경쟁률로 커트라인이 72~75점으로 예상되므로, 안정적인 합격권은 76점 이상으로 상향 조정이 필요하다.

예를 들면 아래 처럼 본인이 알고 있는 문제와 모르는 문제를 정답으로 맞혀야 하는 문항 수를 표로 표현해 보았다.

난이도

예상 문항수

수험 전략

취득 목표 점수

모르는 문제

20 문항

통계학에 의존

6

조금 아는 문제

30 문항

2/3은 맞춤

25

알고 있는 문제

50 문항

모두 맞춤

50

100 문항

76

<!--[if !supportLists]--> <!--[endif]-->과목별 우선순위에 따라 감리 및 사업관리 > 소프트웨어 공학 > 데이터베이스 > 시스템구조 및 보안 순으로 고득점을 해야 하고, 과락은 당연히 없어야 한다. 실제로 고득점(커트라인을 넘는 점수)를 받고도 40%(과목당 10문항)이하로 받아서 합격하지 못한 분이 실제로 계셨다.

<!--[if !supportLists]--> <!--[endif]-->누구나 알고 있고, 맞추는 기본적인 문제는 당연히 자신도 맞아줘야 하는데 따라서 기사 수준의 문제는 모두 맞어야 한다. , 문제를 차분히 읽고 틀린 것을 골라야 하는 데, 맞는 것을 고르는 등의 실수를 최대한 조심해야 함은 물론이다. 초기에는 확실히 알고 있는 문제의 비율을 50%대로 끌어 올리고 틀리지 않게 하는 것이 중요할 것으로 판단하여 기초적인 부분을 여러 번 반복해서 암기 하는 방법으로 학습을 하시기를 권한다.

<!--[if !supportLists]--> <!--[endif]-->후기에는 전체적인 복습 및 기초부분을 재 암기 하는 식으로 빠른 반복을 하도록 한다.

2.4. 필기합격을 하고 나서

◈ 면접전형

면접은 필기 합격 이후에 시행이 되었다. 소양면접과 기술면접으로 구분되어 있으며 소양면접에서는 말 그대로 소양에 관한 질문 감리에 관한 가치관을 주로 질문 하였으며 기술면접에서는 본인이 참여한 현장교육에 관한 질문과 기술적인 질문을 섞어서 하였으며, 전체적인 분위기는 약간의 긴장감 속에 평이한 면접이었던 것으로 기억이 된다. 면접 전형은 크게 부담이 되지 않는 선에서 치러졌고, 실제로 당일에 못 오신 분이 면접을 통과하지 못했고, 대부분이 전부 합격하였다.

<!--[if !supportLists]--> <!--[endif]-->현장교육에 관한 질문

<!--[if !supportLists]-->ü <!--[endif]-->PJT, 개발기관, 감리업체, 발주기관, 본인의 역할, 어려웠던 점 등

<!--[if !supportLists]--> <!--[endif]-->현재 회사에서의 맡은 직무는 무엇인가?

<!--[if !supportLists]--> <!--[endif]-->경력사항을 보시고 경력사항에 대하여 질문을 함

<!--[if !supportLists]--> <!--[endif]-->감리사 자격 취득 동기는 무엇인가?

<!--[if !supportLists]--> <!--[endif]-->실제 감리시 PJT PM과 대립하게 될 경우 어떻게 해결할 것인가?

◈ 이론교육

이론 교육은 면접 전형 이후에 한국정보사회진흥원(, 한국전산원) 지하1층 교육장에서 이루어 졌다. 80명 인원을 1/2 40명 씩 나누어서 이론 교육이 각 각 다른 일정으로 진행이 되었다. 실제로 1주는 기본 교재를 기본으로 외부 강사님들이 오셔서 40시간 정도 이론 강의가 시행되었다. 이론 교육 후에 간단하게 필기 시험이 치러졌는 데, 이 또한 점수화 하여, 이론 교육 수료 과정을 거친다. 이론 시험 점수 50% 1주간 실습을 통해 50% 점수가 합산이 되어 최종 이론교육 점수가 발표되고, 절차상 이론교육에서 불합격/합격을 결정한다. 대부분 교육에 참석하면 거의 합격을 하므로 부담을 느끼실 필요는 없고, 실제로 감리에 대한 실무 경험을 쌓을 수 있는 좋은 경험이 되었던 시간이었다.

<!--[if !supportLists]--> <!--[endif]-->교육 개요

<!--[if !supportLists]-->ü <!--[endif]-->기간 – 2

<!--[if !supportLists]-->ü <!--[endif]-->내용 감리 이론교육 5, 감리실습 1

<!--[if !supportLists]-->ü <!--[endif]-->감리실습은 실제로 한국전산원에서 프로젝트 진행했던 산출물을 제공하고, 산출물을 검토하고 실습을 하게됨.

<!--[if !supportLists]-->ü <!--[endif]-->주관기관과 피감리기관은 한국정보사회진흥원 담당과 실제 감리사 이신 분이 피감리자 역할을 수행하고, 인터뷰를 실시하여 현장에서 감리하는 분위기를 느끼게 됨.

<!--[if !supportLists]-->ü <!--[endif]-->종합시험 - 1시간

<!--[if !supportLists]--> <!--[endif]-->소감

<!--[if !supportLists]-->ü <!--[endif]-->이론 교육 및 실습은 감리를 익히는데 유익한 교육이었음

◈ 현장교육 후기

현장실무 교육은 2006넌 까지는 실제 공공기관 감리 프로젝트에 투입이 되어, 감리 실습을 하게 된다. 지금은 실제로 감리 실습이 시행되지 않는 데, 한국정보사회진흥원에서 모의 감리 실습을 통해 진행이 된다. 필자가 경험한 감리현장 교육은 모 공공기관 사이트의 정보시스템 구축 프로젝트 최종 감리 단계에 1주일 간 실습을 경험하였다.

필자는 데이터베이스 부분을 진행하여 실제 감리보고서를 작성하여 실급과제물로 한국정보사회진흥원에 제출을 하였다.

<!--[if !supportLists]--> <!--[endif]-->실제 PJT에 교육생 자격으로 현업 감리인들과 함께 감리 업무를 수행하고 감리 보고서를 작성하여 감리총괄과 한국정보사회진흥원에 제출하게 됨

<!--[if !supportLists]--> <!--[endif]-->현장에서 감리인 4명에 저와 1분이 교육생 자격으로 실습에 참가하여 감리 업무를 1주간 수행하였음

<!--[if !supportLists]--> <!--[endif]-->4개 분야 중 저 같은 경우는 1개 분야 데이터베이스를 맡아서 감리를 수행한 후 감리업체의 감리총괄로부터 평가 받게 됨

<!--[if !supportLists]--> <!--[endif]-->실제 감리 현장의 분위기를 익히는데 도움이 되었음

<!--[if !supportLists]--> <!--[endif]-->프로젝트 규모가 크지 않아서 영세업체가 개발을 하였고, 오픈 전 최종감리여서 산출물 위주의 감리 수행보다는 실제적인 부분을 집중적으로 감리를 수행하였음

출처 : http://www.dal.kr/col/recruit/recruit20030526.html
정보시스템감리사 직종이 최고 직종으로 조사되었다.

중앙고용정보원의 보고서에 수록된 IT 직종의 급여는 다음과 같다.


* IT 직종별 급여(단위: 만원. 월 기준. 상위 25% - 평균 - 하위 25%로 표시)

전자출판편집원: 100 - 87 - 60
컴퓨터 애니메이터: 167 - 133 - 80
네트웍시스템개발자: 292 - 239 - 175
데이터베이스관리자: 200 - 168- 100
시스템운영관리자 : 200-174-117
시스템소프트웨어개발자: 250 -203 - 130
응용소프트웨어개발자: 250 - 203 - 130
정보시스템감리사 : 442 - 345- 247
컴퓨터보안전문가 ; 500 - 316 - 90
컴퓨터시스템설계분석가: 292 - 218 - 140
컴퓨터하드웨어기술자: 225 - 216 - 130
웹개발자 : 160 - 141 - 100
전자상거래전문가 : 247 - 215 - 159
정보기술 컨설턴트 : 308 - 275 - 167
지리정보시스템 전문가: 265 - 210 - 159
컨텐츠제공자 : 265 - 207 - 151
컴퓨터 게임 개발자 : 194 - 175 - 127


이 보고서에 따르면 가장 많은 연봉을 받는 직종은 정보시스템감리사로 평균 연봉이 거의 4천 만원 가까이 된다. 반면 편집원과 애니메이터는 저소득층에 속한다.

많은 사람들이 진출하는 웹개발자 역시 급여가 적은 편이다. 웹개발자는 상위 25%조차 월 160만원에 불과해 전문직이라는 이름이 무색할 정도다. 최고의 경력자조차 연봉 2천 만원을 넘지 못한다는 뜻이다. 요즘 많은 사람이 관심을 가지는 DB관리자와 시스템관리자, 게임 개발자도 상위 25%의 급여가 월 200만원 이하에 불과하다. 최고 경력자의 연봉이 1년에 2,400만원 이하라면 급여가 정말 낮은 것이다. 이 정도 연봉이라면 대기업의 초임 수준도 안되는 급여다. IT 직종에서 가장 많이 관심을 받고 있고, 또한 많은 사람들이 진출하는 이들 직종의 평균 연봉과 상위 25%의 연봉이 매우 낮은 이유는 이들 직종이 중소기업 종사자들이 주로 종사하는 직종이기 때문이다. 대기업에서는 웹개발자나 게임 개발자를 고용하지 않기 때문에 평균 연봉이나 상위층 평균 연봉이 매우 낮은 것이다.

DB관리자, 게임개발자는 요즘 취업 희망자들이 손꼽는 직종으로 IT 직종에서도 발전성이 높고, 급여도 많으며, 전문직이라고 생각하지만 실제로는 이렇게 적은 급여를 받는 단순 업무로 인식되고 있는 상황이다.


대기업의 주력 직종으로 진출해야 높은 급여를 받는다.

요즘 내가 가장 많이 상담받는 분야 중 하나는 정보 보안 계통이다. 많은 취업 준비생이 안철수 연구소나 하우리 등의 백신 개발자를 비롯한 정보 보안 업종으로 진출하고 싶다고 상담을 신청하고 있다. 이들 직종은 IT 업계에서도 고액 연봉에 발전성 있는 전문직으로 손꼽고 있다.

물론 백신 개발자가 전문직이라는 점은 분명하다. 그렇지만 연봉은 높지 않다. 그 이유는 이들 직종 역시 대기업에서 다루는 직종이 아니기 때문이다. 백신 개발자의 경우 전문 인력이기 때문에 많은 연봉을 받을 것 같지만 실제로는 그렇지 않은 것이다. 현재 국내의 백신개발자는 아직 30여명이 안되는 진짜 전문 인력 집단이다. 그렇지만 신입은 2,000만원, 경력 2~3년 차의 평균 연봉은 3,000만원 정도에 불과하다. 전문성과 기술력에 비해 급여는 높지 않은 것이다. 이처럼 IT 직종이라 하더라도 대기업 직종이 아닐 경우 높은 급여를 기대하기 힘들다.

이는 컴퓨터보안전문가의 급여 분포를 보면 알 수 있다. 컴퓨터보안전문가의 평균 급여는 316만원으로 높은 편이다. 특히 상위 25%의 급여는 500만원으로 매우 높다. 연봉 평균이 6천 만원이나 되는 셈이다. 반면 하위 25%는 90만원에 불과하다. 1천 만원 겨우 넘는 수준인 것이다. 상위층과 하위층 사이에 엄청난 차이를 보이고 있다.

그 이유는 컴퓨터보안전문가 직종이 대기업과 중소기업의 급여 차이가 심한 직종이기 때문이다. 대기업의 보안 전문가는 다른 기업을 상대로 보안에 대해 자문을 해주는 업무이기 때문에 고액을 받는다. 반면 중소기업의 보안전문가는 주로 자체 서버의 보안을 책임지는 업무를 맡는데, 보안 전문가라는 인식보다는 서버나 네트웍 관리자라는 인식이 강하다. 이러한 차이 때문에 상위층과 하위층의 급여 차이가 큰 것이다.

이와는 달리 게임개발자의 경우 194~127만원으로 상위층과 하위층 사이의 급여 차이가 거의 없다. 이는 전문직면서도 대기업에 없는 직종이기 때문이다. 우리나라 대기업은 게임개발자를 채용해 게임을 개발하지 않는다. 이 때문에 게임 개발자는 프로그래머 중에서도 인정받는 실력을 가졌기에 초임이 아주 낮지는 않지만, 대부분 중소기업에서 근무하기 때문에 최고 경력자조차 월 급여가 200만원을 넘지 않는 것이다.

IT 직종으로 진출하고자 하는 취업 지망생은 이러한 차이를 분명하게 인식해야 한다. 게임 개발자라고 하면 전문직에 프로그램 실력도 뛰어나고 발전성 있는 직종으로 알고 있지만 실제 급여는 매우 낮은 편이다. 반면 네트웍시스템개발자는 박봉에 과중한 업무에 시달리는 직종으로 인식하고 있지만 실제 급여는 292 - 239 - 175만원으로 게임 개발자보다 훨씬 많이 받는다. 그 이유는 대기업에서 많이 채용하는 직종이기 때문이다. 네트웍시스템개발자들이 박봉에 과중한 업무를 호소하는 경우가 많은데 이는 직종의 문제가 아니라 근무 환경이 좋지 않은 기업에서 근무하기 때문이다. 따라서 고액 연봉과 안정적인 직장 생활을 원한다면 중소기업 전문 직종보다는 대기업 전문 직종을 선택하는 것이 좋은 방법이다.

교육인적자원부와 한국직업능력개발원이 펴낸 [미래의 직업세계 2003(직업편·학과편)]을 보면 이공계 직업군이 인문계 전문직에 비해 상대적으로 저소득인 것으로 드러났다. 그렇지만 상위와 하위 급여 차이가 적어 안정적인 직업으로 나타났다. IT 직종 역시 이공계로 분류되는 전문직으로 다른 업종에 비하면 급여가 안정적인 편이라 할 수 있다.

그렇지만 같은 IT 직종 내에서도 직종 별 급여 차이가 매우 심하다는 사실과 직종별 급여 차이는 전문직 여부보다는 대기업 분야 여부에 많이 좌우된다는 점도 알아두는 것이 좋겠다. 즉 전문직이라는 인식만으로 고액 연봉이 보장되는 것은 아니다.

똑 같이 프로그램을 배워 개발자로 나선다고 해도 어떤 직종으로 진출할 것이냐에 따라서 급여 차이가 크게 나타난다. 높은 급여를 희망한다면 사람들의 인식론에 기대지 말고 매년 발간되는 직종별 평균 연봉에 대한 정보를 잘 살펴보는 것이 중요하다. 어떤 직종으로 진출하는 것이 자신에게 도움이 될 지 알 수 있다.


Basic framework for creating user interface

http://wiki.forum.nokia.com/index.php/Basic_framework_for_creating_user_interface

http://wiki.forum.nokia.com/index.php/Basic_framework_for_creating_user_interface

http://wiki.forum.nokia.com/index.php/Basic_framework_for_creating_user_interface

From Forum Nokia Wiki

Reviewer Approved


ID Creation date January 27, 2009
Platform S60 3rd Edition Tested on devices Nokia E71, Nokia N95
Category Python Subcategory UI


Keywords (APIs, classes, methods, functions): appuifw

Introduction

The API for writing applications using Python for S60 is very straightforward. Once you have decided what kind of body your application will use (canvas, listbox, or text), you need to define your main menu, application title, and default callback handler for exiting. The user interface (UI) is based on events, and there is a special mechanism that relies on a semaphore for indicating if the application is closing. The user must obtain the semaphore and wait for any signal on it. Once signaled, the application may close properly. The UI allows tabs as well, but in this case a body must be defined for each tab. A routine for handling tabs changing is required in such a situation.

However, if your application has more than one window, meaning more than one set of body, menu, and exit handler, you will need to change these elements each time a new window is displayed, giving the user the impression that s/he is using a multiple-window application. Although this solution is possible, some problems arise:

  • The strategy for exiting, based on semaphores, must be unique across your application.
  • You cannot make any mistakes when switching the UI, that is, the set body+menu+exit handler must be consistently changed.
  • There must be a unified strategy for blocking the UI when a time-consuming operation is pending. For instance, when downloading a file, you may want to disable all menu options, otherwise they will be available for the user during the download operation.


For unifying this process, three additional classes are suggested in this article. The first, called Window, is responsible for holding UI contents such as menu, body, and exit handler, and properly exchanging all UI elements for the derived classes. Moreover, it may lock/unlock the UI when necessary. The second class is named Application. It represents the running application itself and is responsible for handling the termination semaphore. Only one Application class must be instantiated per application. The third class is called Dialog. As its name suggests, it is in charge of showing/hiding dialogues when necessary. Many dialogues are allowed, each with its own set of body+menu+exit handler.

Application and Dialog inherit from Window the content handler ability, while each has different ways of finishing itself (finishing the application or just the dialogue).

Code examples

All behaviours described in the previous section are implemented for the script window.py, given below, where Window, Application, and Dialog are depicted.

# -*- coding: utf-8 -*-
#
# Marcelo Barros de Almeida
# marcelobarrosalmeida (at) gmail.com
# License: GPL3

from appuifw import *
import e32
import key_codes

__all__ = [ "Application", "Dialog" ]

class Window(object):
""" This class is responsible for holding UI contents like menu, body
and exit handler and exchanging properly all UI elements for
the derived classes. Moreover, it may lock/unlock the UI when necessary.
"""

__ui_lock = False

def __init__(self, title, body, global_menu = None, exit_handler = None):
""" Creates a new window given a title, body or a set of bodies (for tabbed
window) and optional global_menu and exit handler. Global menu is
available for all tabs at bottom or it is used as the default
menu for non tabbed window

The list of bodies must have the following format:
[(tab_text, body, menu),(tab_text, body, menu),...]

where:
tab_text: unicode string used in tab
body: a valid body (Listbox, Text or Canvas)
menu: typical menu
"""

self.title = title

if isinstance(body,list):
self.tabbed = True
self.bodies = body
self.body = None
else:
self.tabbed = False
self.bodies = None
self.body = body

if global_menu is None:
global_menu = [(LABELS.loc.wi_info_exit, self.close_app)]

if exit_handler is None:
exit_handler = self.close_app

self.global_menu = global_menu
self.exit_handler = exit_handler
self.last_tab = 0

def set_title(self,title):
" Sets the current application title "
app.title = self.title = title

def get_title(self):
" Returns the current application title "
return self.title

def bind(self, key, cbk):
" Bind a key to the body. A callback must be provided."
self.body.bind(key,cbk)

def refresh(self):
" Update the application itens (menu, body and exit handler) "
if self.tabbed:
app.set_tabs([b[0] for b in self.bodies],self.tab_handler)
app.activate_tab(self.last_tab)
self.tab_handler(self.last_tab)
else:
app.set_tabs([], None)
app.menu = self.global_menu
app.body = self.body
app.title = self.title
app.exit_key_handler = self.exit_handler

def tab_handler(self,idx):
" Update tab and its related contents "
self.last_tab = idx
self.body = self.bodies[idx][1]
self.menu = self.bodies[idx][2] + self.global_menu
app.title = self.title
app.menu = self.menu
app.body = self.body

def run(self):
" Show the dialog/application "
self.refresh()

def lock_ui(self,title = u""):
""" Lock UI (menu, body and exit handler are disabled).
You may set a string to be shown in the title area.
"""

Window.__ui_lock = True
app.menu = []
app.set_tabs([], None)
app.exit_key_handler = lambda: None
if title:
app.title = title

def unlock_ui(self):
"Unlock UI. Call refresh() for restoring menu, body and exit handler."
Window.__ui_lock = False

def ui_is_locked(self):
"Chech if UI is locked or not, return True or False"
return Window.__ui_lock

class Application(Window):
""" This class represents the running application itself
and it is responsible for handling the termination semaphore.
Only one Application class must be instantiated per application.
"""

__highlander = None
__lock = None

def __init__(self, title, body, menu = None, exit_handler = None):
""" Only one application is allowed. It is responsible for starting
and finishing the program.
run() is override for controlling this behavior.
"""

if Application.__highlander:
raise "Only one Application() allowed"
Application.__highlander = self

if not Application.__lock:
Application.__lock = e32.Ao_lock()

Window.__init__(self, title, body, menu, exit_handler)

def close_app(self):
""" Signalize the application lock, allowing run() to terminate the application.
"""

Application.__lock.signal()

def run(self):
""" Show the the application and wait until application lock is
signalized. After that, make all necessary cleanup.
"""

old_title = app.title
self.refresh()
Application.__lock.wait()
# restore everything!
app.set_tabs( [], None )
app.title = old_title
app.menu = []
app.body = None
app.set_exit()

class Dialog(Window):
""" This class is in the charge of showing/hiding dialogs when necessary.
Many dialogs are allowed, each one with their own set of body+menu+exit
handler.
"""

def __init__(self, cbk, title, body, menu = None, exit_handler = None):
""" Create a dialog. cbk is called when dialog is closing.
Dialog contents, like title and body need
to be specified. If menu or exit_handler are not specified,
defautl values for dialog class are used.
"""

self.cbk = cbk
self.cancel = False
Window.__init__(self, title, body, menu, exit_handler)

def close_app(self):
""" When closing the dialog, a call do self.cbk() is done.
If this function returns True the dialog is not refreshed
and the latest dialog/window takes control. If something fails
during callback execution, callback function should return False
and does not call refresh(). Using self.cancel it is possible
to determine when the dialog was canceled or not.
"""

if self.cbk() == False:
self.refresh()

def cancel_app(self):
""" Close the dialog but turn the cancel flag on.
"""

self.cancel = True
self.close_app()

Usage examples

Using this framework, user attention is focused on the application and not on appuifw issues. Consider this first example, with only one window (no dialogues). Since your program inherits from Application, default actions for some specific appuifw are already defined:

  • The termination semaphore is controlled by the Application class, being properly initialized inside its constructor (Application.__lock = e32.Ao_lock()). Only one Application object per program is allowed.
  • exit_default_handler is set to Application.close_app(), where the termination semaphore is set (Application.__lock.signal()).
  • Application.run() initializes the application, calling refresh() for updating the UI and waits for the termination semaphore. When signalized, all necessary cleanup is done and the application is closed.


We can see one simple example in action:

# -*- coding: utf-8 -*-
#
# Marcelo Barros de Almeida
# marcelobarrosalmeida (at) gmail.com
# License: GPL3

from window import Application
from appuifw import Listbox, note

class MyApp(Application):
def __init__(self):
items = [ u"Option A",
u"Option B",
u"Option C" ]
menu = [ (u"Menu A", self.option_a),
(u"Menu B", self.option_b),
(u"Menu C", self.option_c) ]
body = Listbox(items, self.check_items )
Application.__init__(self,
u"MyApp title",
body,
menu)

def check_items(self):
idx = self.body.current()
( self.option_a, self.option_b, self.option_c )[idx]()

def option_a(self): note(u"A","info")
def option_b(self): note(u"B","info")
def option_c(self): note(u"C","info")

if __name__ == "__main__":

app = MyApp()
app.run()

First example in action:

Image:MBA_BFUI_Example1.jpg

Of course, if you need special actions, such as a confirmation when exiting, this can be implemented simply by overriding close_app():

# -*- coding: utf-8 -*-
#
# Marcelo Barros de Almeida
# marcelobarrosalmeida (at) gmail.com
# License: GPL3

from window import Application
from appuifw import Listbox, note, popup_menu

class MyApp(Application):
def __init__(self):
items = [ u"Option A",
u"Option B",
u"Option C" ]
menu = [ (u"Menu A", self.option_a),
(u"Menu B", self.option_b),
(u"Menu C", self.option_c) ]
body = Listbox(items, self.check_items )
Application.__init__(self,
u"MyApp title",
body,
menu)

def check_items(self):
idx = self.body.current()
( self.option_a, self.option_b, self.option_c )[idx]()

def option_a(self): note(u"A","info")
def option_b(self): note(u"B","info")
def option_c(self): note(u"C","info")

def close_app(self):
ny = popup_menu( [u"No", u"Yes"], u"Exit?")
if ny is not None:
if ny == 1:
Application.close_app(self)

if __name__ == "__main__":

app = MyApp()
app.run()

Second example, with customized exit function:

Image:MBA_BFUI_Example2.jpg

Dialogues

Suppose that the user wants to add a dialogue call. Here is a simple solution that also hides all appuifw issues.

# -*- coding: utf-8 -*-
#
# Marcelo Barros de Almeida
# marcelobarrosalmeida (at) gmail.com
# License: GPL3

from window import Application, Dialog
from appuifw import Listbox, note, popup_menu, Text

class Notepad(Dialog):
def __init__(self, cbk, txt=u""):
menu = [(u"Save", self.close_app),
(u"Discard", self.cancel_app)]
Dialog.__init__(self, cbk, u"MyDlg title", Text(txt), menu)

class MyApp(Application):
def __init__(self):
self.txt = u""
items = [ u"Text editor",
u"Option B",
u"Option C" ]
menu = [ (u"Text editor", self.text_editor),
(u"Menu B", self.option_b),
(u"Menu C", self.option_c) ]
body = Listbox(items, self.check_items )
Application.__init__(self,
u"MyApp title",
body,
menu)

def check_items(self):
idx = self.body.current()
( self.text_editor, self.option_b, self.option_c )[idx]()

def text_editor(self):
def cbk():
if not self.dlg.cancel:
self.txt = self.dlg.body.get()
note(self.txt, "info")
self.refresh()
return True

self.dlg = Notepad(cbk, self.txt)
self.dlg.run()

def option_b(self): note(u"B","info")
def option_c(self): note(u"C","info")

def close_app(self):
ny = popup_menu( [u"No", u"Yes"], u"Exit?")
if ny is not None:
if ny == 1:
Application.close_app(self)

if __name__ == "__main__":

app = MyApp()
app.run()

Notepad added to menu:

Image:MBA_BFUI_Example31.jpg

Notepad in action:

Image:MBA_BFUI_Example32.jpg

Notepad data:

Image:MBA_BFUI_Example33.jpg

When a dialogue is created, a callback function needs to be defined. This callback is called when the user cancels or closes the dialogue. Inside the callback body, it is possible to check if the dialogue was canceled just by verifying the cancel variable. Dialogue variables may be accessed in a similar way as in any other Python object and this is the way of retrieving dialogue data.

The callback function must return either True or False, before finishing. If it returns True, self.refresh() must be called before, inside callback body. This way, the menu, body and exit handler will be updated using the context of the dialogue caller (MyApp, in this case). If it returns False, self.refresh() is called inside dialogue context and the dialogue is restored. This is an excellent way to check dialogue data and to avoid data loss. A better example with this feature is given below (see the number_sel() method).

# -*- coding: utf-8 -*-
#
# Marcelo Barros de Almeida
# marcelobarrosalmeida (at) gmail.com
# License: GPL3

from window import Application, Dialog
from appuifw import Listbox, note, popup_menu, Text

class Notepad(Dialog):
def __init__(self, cbk, txt=u""):
menu = [(u"Save", self.close_app),
(u"Discard", self.cancel_app)]
Dialog.__init__(self, cbk, u"MyDlg title", Text(txt), menu)

class NumSel(Dialog):
def __init__(self, cbk):
self.items = [ u"1", u"2", u"a", u"b" ]
Dialog.__init__(self, cbk,
u"Select a number",
Listbox(self.items, self.close_app))

class MyApp(Application):
def __init__(self):
self.txt = u""
items = [ u"Text editor",
u"Number selection",
u"Option C" ]
menu = [ (u"Text editor", self.text_editor),
(u"Number selection", self.number_sel),
(u"Menu C", self.option_c) ]
body = Listbox(items, self.check_items )
Application.__init__(self,
u"MyApp title",
body,
menu)

def check_items(self):
idx = self.body.current()
( self.text_editor, self.number_sel, self.option_c )[idx]()

def text_editor(self):
def cbk():
if not self.dlg.cancel:
self.txt = self.dlg.body.get()
note(self.txt, "info")
self.refresh()
return True

self.dlg = Notepad(cbk, self.txt)
self.dlg.run()

def number_sel(self):
def cbk():
if not self.dlg.cancel:
val = self.dlg.items[self.dlg.body.current()]
try:
n = int(val)
except:
note(u"Invalid number. Try again.", "info")
return False
note(u"Valid number", "info")
self.refresh()
return True

self.dlg = NumSel(cbk)
self.dlg.run()

def option_c(self): note(u"C","info")

def close_app(self):
ny = popup_menu( [u"No", u"Yes"], u"Exit?")
if ny is not None:
if ny == 1:
Application.close_app(self)

if __name__ == "__main__":

app = MyApp()
app.run()

Number selection added to menu:

Image:MBA_BFUI_Example41.jpg

Number selection in action:

Image:MBA_BFUI_Example42.jpg

Handling invalid entries (return False and do not call refresh() inside dialogue caller context):

Image:MBA_BFUI_Example43.jpg

Valid entry accepted (return True and call refresh() inside dialogue caller context):

Image:MBA_BFUI_Example44.jpg

Finally, what about changing the menu and body dynamically? This can be accomplished simply by overriding refresh(). refresh() is responsible for all UI updates, assigning desired values for menu, body, and exit_handler. If you made changes to a UI element, it is necessary to redraw it. In the next example, the menu and body contents of the NameList() dialogue are changed dynamically.

# -*- coding: utf-8 -*-
#
# Marcelo Barros de Almeida
# marcelobarrosalmeida (at) gmail.com
# License: GPL3

from window import Application, Dialog
from appuifw import Listbox, note, popup_menu, Text, query, app

class Notepad(Dialog):
def __init__(self, cbk, txt=u""):
menu = [(u"Save", self.close_app),
(u"Discard", self.cancel_app)]
Dialog.__init__(self, cbk, u"MyDlg title", Text(txt), menu)

class NumSel(Dialog):
def __init__(self, cbk):
self.items = [ u"1", u"2", u"a", u"b" ]
Dialog.__init__(self, cbk,
u"Select a number",
Listbox(self.items, self.close_app))

class NameList(Dialog):
def __init__(self, cbk, names=[]):
self.names = names
self.body = Listbox([(u"")],self.options)
# Do not populate Listbox()! Refresh will do this.
Dialog.__init__(self, cbk, u"Name list", self.body)

def options(self):
op = popup_menu( [u"Insert", u"Del"] , u"Names:")
if op is not None:
if op == 0:
name = query(u"New name:", "text", u"" )
if name is not None:
self.names.append(name)
print self.names
elif self.names:
del self.names[self.body.current()]
# Menu and body are changing!
# You need to refresh the interface.
self.refresh()

def refresh(self):
menu = []
if self.names:
menu = map(lambda x: (x, lambda: None), self.names)
items = self.names
else:
items = [u"<empty>"]
self.menu = menu + [(u"Exit", self.close_app)]
self.body.set_list(items,0)
# Since your self.menu and self.body have already defined their
# new values, call base class refresh()
# PSZY:Another way to refresh the body,in this way ,you can even change the body to another type
#appuifw.app.body = None
#del self.body
#self.body = appuifw.Listbox(self.items,self.options)
#Dialog.refresh(self)

Dialog.refresh(self)

class MyApp(Application):
def __init__(self):
self.txt = u""
self.names = []
items = [ u"Text editor",
u"Number selection",
u"Name list" ]
menu = [ (u"Text editor", self.text_editor),
(u"Number selection", self.number_sel),
(u"Name list", self.name_list) ]
body = Listbox(items, self.check_items )
Application.__init__(self,
u"MyApp title",
body,
menu)

def check_items(self):
idx = self.body.current()
( self.text_editor, self.number_sel, self.name_list )[idx]()

def text_editor(self):
def cbk():
if not self.dlg.cancel:
self.txt = self.dlg.body.get()
note(self.txt, "info")
self.refresh()
return True

self.dlg = Notepad(cbk, self.txt)
self.dlg.run()

def number_sel(self):
def cbk():
if not self.dlg.cancel:
val = self.dlg.items[self.dlg.body.current()]
try:
n = int(val)
except:
note(u"Invalid number", "info")
return False
note(u"Valid number", "info")
self.refresh()
return True

self.dlg = NumSel(cbk)
self.dlg.run()

def name_list(self):
def cbk():
if not self.dlg.cancel:
self.names = self.dlg.names
self.refresh()
return True

self.dlg = NameList(cbk, self.names)
self.dlg.run()

def close_app(self):
ny = popup_menu( [u"No", u"Yes"], u"Exit?")
if ny is not None:
if ny == 1:
Application.close_app(self)

if __name__ == "__main__":

app = MyApp()
app.run()

Name list added to menu:

Image:MBA_BFUI_Example51.jpg

Names added to menu and body:

Image:MBA_BFUI_Example52.jpg . Image:MBA_BFUI_Example53.jpg . Image:MBA_BFUI_Example54.jpg

Download source code: Media:MBA_ui_demo.zip

Go to another Dialog from a Dialog

# -*- coding: utf-8 -*-
# Marcelo Barros de Almeida
# marcelobarrosalmeida (at) gmail.com
# Edited by Zhang Yu (PSZY)
# cn.psz.zhangy*gmail.com(Replace * by @)
# LICENSE: GPL3

from window import *
import appuifw

class Notepad(Dialog):
def __init__(self,cbk,txt=u''):
menu = [(u'Go to Dlg2',self.GotoList),\
(u'Save',self.close_app),\
(u'Discard',self.cancel_app)]
Dialog.__init__(self,cbk,u'MyDlg title',appuifw.Text(txt),menu)
def GotoList(self):
def cbk():
self.refresh()
self.dlg = List(cbk)
self.dlg.run()

class List(Dialog):
def __init__(self,cbk,title=u'Second Dlg'):
self.ListExample = [u'P',u'S',u'Z',u'Z']
self.body2 = appuifw.Listbox(self.ListExample,self.sayHello)
menu = [(u'Back to Dlg1',self.close_app)]
Dialog.__init__(self,cbk,title,self.body2,menu)
def sayHello(self):
num = self.body.current()
if num == 0:
appuifw.note(u'Peng','conf')
if num == 1:
appuifw.note(u'Su','conf')
if num == 2 or num ==3:
appuifw.note(u'Zhang','conf')
class MyApp(Application):
def __init__(self):
self.txt = u''
items = [ u'Text editor',u'Option B',u'Option C']
menu = [(u'Text editor',self.text_editor),\
(u'Menu B',self.option_b),\
(u'Menu C',self.option_c)]
body = appuifw.Listbox(items,self.check_items)
Application.__init__(self,u'MyApp title',body,menu)
def check_items(self):
idx = self.body.current()
( self.text_editor,self.option_b,self.option_c)[idx]()
def text_editor(self):
def cbk():
if not self.dlg.cancel:
self.txt = self.dlg.body.get()
appuifw.note(self.txt,'info')
self.refresh()
return True
self.dlg = Notepad(cbk,self.txt)
self.dlg.run()
def option_b(self):appuifw.note(u'B','conf')
def option_c(self):appuifw.note(u'C','conf')

def close_app(self):
ny = appuifw.popup_menu([u'No',u'Yes'],u'Exit?')
if ny is not None:
if ny == 1:
Application.close_app(self)
if __name__ == '__main__':
app = MyApp()
app.run()


Tabbed applications

Tabbed applications are supporting as well. In this case, the body must be replaced by a list of bodies with the following format:

[(tab_text, body, menu),(tab_text, body, menu),...]

where:

* tab_text: unicode string used in tab* body: a valid body (Listbox, Text or Canvas)* menu: menu for that body

Each entry in this list will be displayed in a tab. You can specify a global menu to be added to the bottom of each tab menu. This way, it is simple to share common function (like exit) among all tabs. Just specify this menu when calling Dialog() or Application.

# -*- coding: utf-8 -*-
#
# Marcelo Barros de Almeida
# marcelobarrosalmeida (at) gmail.com
# License: GPL3

from window import Application
from appuifw import *

class MyApp(Application):
def __init__(self):
# defining menus for each tab/body
ma=[(u"menu a",lambda:self.msg(u"menu a"))]
mb=[(u"menu b",lambda:self.msg(u"menu b"))]
mc=[(u"menu c",lambda:self.msg(u"menu c"))]
md=[(u"menu d",lambda:self.msg(u"menu d"))]
# common menu for all tabs
common_menu=[(u"common menu",lambda:self.msg(u"common menu"))]
# bodies
ba=Listbox([u"a",u"b",u"c"])
bb=Canvas()
bc=Text(u"Text")
bd=Listbox([u"1",u"2",u"3"])

Application.__init__(self,
u"MyApp title",
[(u"Tab a",ba,ma),(u"Tab b",bb,mb),
(u"Tab c",bc,mc),(u"Tab d",bd,md)],
common_menu)

def msg(self,m):
note(m,"info")

if __name__ == "__main__":
app = MyApp()
app.run()

Tabbed application in action:

Image:MBA_BFUI_Screenshot0067.png . Image:MBA_BFUI_Screenshot0068.png

Locking UI

For time-consuming operations, such as network connections, one interesting option is to lock the user interface to avoid undesired user actions. Two methods are used in such a situation: lock_ui() and unlock_ui(). Simply lock the UI, do whatever you want to do, and unlock the UI. If you wish, change the application title during this locking to indicate some operation status, and do not forget to call refresh() just after unlocking the UI.

self.lock_ui(u"Connecting...")
#
# your stuff here
#
self.unlock_ui()
self.set_title(u"My app")

Conclusion

The framework presented here, although simple, is powerful and easy to use, allowing rapid prototyping of applications with multiple dialogues. It is used in the project Wordmobi, where more use cases can be found.

Related links

착용형 컴퓨터를 위한 햅택 기술 동향

착용형 컴퓨터를 위한 햅택 기술 동향

1260714609_착용형 컴퓨터를 위한 햅틱기술 동향 20-5_149_155.pdf

'기본 카테고리' 카테고리의 다른 글

IT관련 직종의 평균연봉....  (0) 2010.02.28
Basic framework for creating user interface  (0) 2009.12.25
웨어러블 컴퓨터의 연구동향  (0) 2009.12.13
Android 기본정리  (0) 2009.12.13
미래 네트워크 연구동향  (0) 2009.12.13

+ Recent posts