SKT에서 실시했던 안드로이드 공모전의 결과분석 자료의 내용입니다.

 - 안드로이드 공모전 수상작 28선 간단한 소개자료 바로가기

생활형 유틸리티(56%) > 엔터테인먼트(30%) > 게임(5%)
• 서비스연동형 37% | 위치정보이용 21% | 카메라이용 16%
• 용량은 평균 1.17MB (17KB ~ 15MB)

핵심 keyword: 지도 SMS 소셜 센서
Application mashup도 상당한 흐름 형성
트위터를 service infra로 활용하는 경우도 다수




수상작 (더많은 내용을 보시려면 링크를 이용해서 다운로드 받으세요)



심사가 어려웠던 내용




'개발도 하냐?' 카테고리의 다른 글

소스코드만으로 부족함이 느껴질때-RAD  (0) 2010.07.14
Social Network, Social Media  (0) 2010.07.14
RAD(Rapid Application Development)  (0) 2010.07.08
디자이너에게 배우다.  (1) 2010.07.07
PHP 코딩 규약 - PEAR  (0) 2010.06.25

관련도서 : http://www.yes24.com/24/goods/380739

 

 

출처 : http://anyflow.net/397
참고 : http://neokido.tistory.com/576

RAD 도구 : http://en.wikipedia.org/wiki/Rapid_application_development#searchInput


1. 신속 S/W 개발(Rapid S/W development)
- 비즈니스 환경의 빠른 변화, 비즈니스는 새로운 기회와 도전에 신속히 응답해야. Time-to-market
- 이 경우, 신속한 개발과 인도는 종종 S/W 시스템에 관한 가장 중요한 요구사항
- 위와 같은 배경 기반의 비즈니스 영역에서는 주요 기능이 정상적으로 동작하기만 하면 빠른 인도의 장점이 낮은 품질이란 단점을 상쇄
- 요구사항
  1) 환경의 변화로 인해 안정적이고 일관적인 시스템 요구사항에 도달하기가 매우 어려움
  2) 따라서 waterfall 모델은 비현실적, 오직 반복적(iterative) 명세와 인도에 기반을 둔 개발 방법론만이 S/W를 신속하게 인도하는 유일한 방법

2. RAD 프로세스의 특성
- 명세, 설계, 구현 프로세스가 동시에 이루어짐. 상세 명세는 없으며 설계 문서는 최소화됨
- 시스템은 일련은 점증적 단계(증분; increment)를 통해 개발됨. 최종 사용자는 개발에 참여하여 각 점증 단계를 평가하며, 이후 점증 단계를 위한 제안을 함
- 시스템 UI는 일반적으로 반복적 개발 시스템을 이용하여 개발됨


점증적 개발 프로세스

3. 점증적 개발(Incremental development)의 장점
- 고객 서비스의 신속한 인도(accelerated delivery of customer services) : 각 점증 단계(증분; increment)는 고객의 가장 높은 우선순위의 기능을 인도
- 시스템에 대한 사용자의 참여 : 사용자는 개발에 참여하여 시스템이 좀더 그들의 요구에 다가서고, 사용자는 시스템에 대해 더 나은 만족을 얻을 수 있음

4. 점증적 개발의 문제점
- 관리 문제(Management problem) : 문서가 없으므로 상황 파악이 어려움
- 계약 문제(Contractual problem) : 명세가 없으므로 명세 이외의 타 형식의 문서를 사용해야
- 검증 문제(Validation problem) : 명세가 없으면, 어떤 기준으로 시스템을 테스트할 것인가
- 유지보수 문제(Maintenance problem) : 계속적인 변경은 S/W 구조에 문제를 일으키고(corrupt), 이로써 S/W는 새로운 요구에 대한 변경과 진화가 어려워짐

5. 프로토타이핑(Prototyping)
- 일부 대규모 시스템에서는 점증적 반복 개발과 인도는 비현실적. 특히 다수의 팀이 각가 다른 위치에서 일할 경우
- 실험적 시스템을 개발하는 프로토타이핑을 통해 요구사항의 타당성(실제 사용할만한지 여부 판단) 체계화(formulate)를 위한 기반을 세울 수 있음. 시스템 명세가 만들어지면(agreed) 프로토타입은 폐기됨(throw away)

6. 점증적 개발과 프로토타이핑
- 점증적 개발의 목적은 최종 사용자에게 실제 동작하는(working) 시스템을 인도함에 있음. 개발은 가장 잘 이해된 요구사항을 바탕으로 시작됨.
- 프로토타이핑의 목적은 시스템 요구사항의 검증 또는 추출임. 프로토타이핑 프로세스는 잘 이해되지 않은 이해사항에서 시작.

 

점증적 개발과 프로토타이핑의 목적

7. 애자일 기법(Agile Methods)
- 기존의 개발 접근법에 대한 불만,즉 계획 수립, 설계, 문서화에 대한 부하(overhead)에 대한 반기로 시작
- 설계와 문서화보다는 S/W 자체(특히 코드)에 초점을 두도록
- 점증적 접근법에 기반
- 빠르게 변화, 진화해가는 요구사항에 대한 신속한 S/W의 배포
- 주로 소/중규모 비즈니스 시스템이나 PC 제품이 알맞음
- XP는 가장 잘 알려진 애자일 기법 중 하나

8. 애자일의 원칙
- 고객 참여(Customer involvement) : 고객은 요구사항 개발 및 운선순위 결정, 시스템의 반복(iteration)을 평가
- 점증적 인도(Incremental delivery) : 고객이 지정한 요구사항이 포함된 점증 단계를 기반으로 s/w가 개발되고 인도됨
- 사람은 프로세스가 아님(People not process) : 기정의된 프로세스를 강요하지 않음. 개발자 및 개발팀 만의 방식, 그들의 기술을 인정
- 변화를 포용(Embrace change) : 요구사항의 변화를 받아들이고 ,변화 수용 가능한 시스템을 설계
- 단순성 유지(Maintain simplicity) : S/W 및 개발 프로세스 모두에서 단순성에 초점을. 수시로 시스템에 남겨진 복잡성을 제거하도록

9. 애자일의 문제점
- 고객은 전적으로, 계속하여 프로세스에 참여하기 어려움
- 개발팀 구성원이 집중적인 참여를 요구하는 애자일의 특성에 맞지 않을 수도
- 다수의 이해관계자(stackholder)가 있을 경우 우선순위 변경이 어려워짐
- 단순성 유지는 추가적 작업을 요구
- 내재화된 점증적 명세화 작업으로 인해, 명사가 포함된 계약서 작성이 난해. 따라서 타 외부 개발 조직과의 co-work이 어려워질 수도

10. Extreme Programming(XP)
- 가장 잘 알려지고, 가장 많이 사용되는 애자일 기법
- 반복적 개발과 같은 좋은 실무 관행과 고객 참여을 극한(extreme)까지 밀고 나감
  1) 새로운 버전이 하루에도 몇 번씩 빌드될 수 있음
  2) 매 2주마다 각 점증적 단계가 고객에게 인도
  3) 매 빌드마다 모든 테스트가 수행되고 테스트에 성공했을 때만 해당 빌드를 인정

 

XP 릴리즈(release) 사이클

11. Extreme programming Practices
- 점증적 계획(Incremental planning) : 시토리 카드를 이용, 작업으로 분할. 이들 작업은 스케줄링과 비용 산정의 근간. 시간을 고려하여 우선순위 결정
- 소규모 릴리즈(Small releases) : 비즈니스 가치를 제공하는 최소한의 유용한 기능을 먼저 개발. 릴리즈를 자주, 점증적으로 수행
- 단순한 설계(Simple design) : 현재의 요구사항을 충족하는 충분한 설계를
- 테스트 주도 개발(Test driven development): 구현 이전에 자동화된 단위 테스트 프레임워크를 통해 테스트 킷을 먼저 작성
- 리팩토링(Refactoring) : 계속적으로, 최대한 많이 코드를 리팩토링. 단순성, 유지보수성 증가
- 짝 프로그래밍(Pair programming) : 짝으로 팀을 이뤄 함께 개발. 서로가 상대의 작업을 검사(checking)하도록. 비공식적 검토(Informal review)가 자연스럽게 이루어짐
- 집단적 소유(Collective ownership) : 짝이 시스템의 모든 영역을 맡음으로 고립된 비 개발 영역이 없도록. 누구든지 변경 코드 변경 가능
- 계속적 통합(Continuous integration) : 작업이 완료되자마자 전체 시스템에 통합되도록. 이후 모든 단위 테스트를 통과해야
- 유지 가능한 속도(Sustainable pace) : 초과 근무는 낮은 품질, 보통의 생산성 만을 양성할 뿐
- 현장의 고객(On-site customer) : 고객은 개발팀의 일원. 전적으로 개발에 시간을 할당하여 시스템 요구사항을 전달할 책임이 고객에게 존재

12. Rapid application development(RAD)
- 데이터에 집중된 비즈니스 응용(application), 즉 DB로부터의 정보를 표현하는 응용에 주로 사용
- RAD 환경 도구 : DB 프로그래밍 언어, Interface 생성기, 오피스 응용 프로그램과의 연결, 리포트 생성기, 대화식 개발에 알맞는 Visual programming 도구

13. Visual development
- 단위가 작은 재사용 가능 S/W 컴포넌트의 통합에 의존하는 RAD 기법
- Visual Basic같은 스크립트 언어를 사용
- 대규모 컴포넌트가 기정의, 기구현되어 있음
- 특정 응용 요구사항에 맞도록 재구성될(tailored) 수도
- COTS(Commercial Off-the-Shelf; 상용 기성품) 기반 개발이라 부르기도. 기성품을 재구성(configure)하고 연결
- 복합 문서(Compound documents)
  1) 사용자 조작(computation)이 가능한 능동 요소(active element)가 내장된 문서. 복합 문서 자체는 각기 다른 응용을 통합하는 역할
  2) 각각의 능동 요소는 특정 응용과 연결되어 해당 요소 선택시 활성화됨
- 문제점
  1) 팀 기반 개발에 알맞지 않음
  2) 명시적 시스템 아키텍처가 없음
  3) 프로그램 부위간 복잡한 의존성이 유지보수 문제를 일으킬 수도

14. S/W 프로토타이핑(Prototyping)
- 개념을 보여주고(demonstrate), 설계 선택사항(option)을 시험해보기 위한 개발할 시스템의 초기 버전
- 용도는,
  1) 요구공학 프로세스 : 요구사항 추출 및 검증을 위해
  2) 설계 프로세스 : 선택사항 시험 및 UI 설계 개발을 위해
  3) 테스트 프로세스 : back-to-back 테스트 수행을 위해
- 장점
  1) 시스템 사용성 향상
  2) 사용자의 실제 필요에 더욱 근접
  3) 설계 품질 향상
  4) 유지보수성 향상
  5) 개발 노력(effort)의 절감
  6) back-to-back 테스트가 가능해짐

 

back-to-back 테스트(동일 결과면 OK, 다르면 결함 존재)

프로토타이핑 프로세스

15. 폐기용 프로토타입(Throw-away prototypes)
- 프로토타입은 개발 후 폐기되어야 : 제조 시스템(production system)을 위한 적절한 기반이 되지 못하기 때문에
  1) (보안성, 신뢰성 등의) 비기능적 요구사항을 만족시키기 위해 프로토타입을 손질할(tune) 수 없음
  2) 일반적으로 프로토타입에 대한 문서는 없음
  3) 프로토타입의 구조는 보통 많은 변경으로 인해 낙후됨(degraded)
  4) 프로토타입은 조직의 품질 기준(표준)에 미치지 못하는 경우가 다반사

'개발도 하냐?' 카테고리의 다른 글

Social Network, Social Media  (0) 2010.07.14
데이터에서 배우자  (0) 2010.07.14
디자이너에게 배우다.  (1) 2010.07.07
PHP 코딩 규약 - PEAR  (0) 2010.06.25
mod_security AND fckeditor  (0) 2010.06.21
출처 : http://bit.ly/b6rGm6



애플(Apple)이 내놓은 최초의 컴퓨터 마우스, PDA 열풍의 주역이 된 미국 팜(Palm)사의 '팜V', 폴라로이드의 즉석카메라….
기술 혁명을 이끈 이들 혁신 제품들엔 또 하나의 공통점이 있다.
바로 미국의 디자인 기업 아이디오(IDEO)가 낳은 작품들이라는 점이다.
http://www.ideo.com/

아이디오는 약관 스물일곱살의 청년이 1978년 창업했다. 카네기멜런대학에서 전자공학 학사를 따고 보잉사에서 근무하던 데이비드 켈리(Kelley)가 주인공이다. 그는 "개인의 창의성을 무시한 채 하루 10시간씩 일하는 조직에서 평생 일할 수 없다"면서 회사를 박차고 나왔다.

스탠포드 대학의 디자인 과정을 이수한 뒤 그는 실리콘밸리의 심장부인 팔로알토의 의류 상가 2층에 두 칸짜리 사무실을 얻어 창업했다. 뒤에 세계 최초로 노트북 컴퓨터를 디자인한 아이디 투(ID Two)를 비롯해 세 개의 디자인 회사와 합병하면서 지금의 아이디오가 됐다. 아이디오란 이름은 'ideology'의 앞 글자(ideo)에서 따왔다.

창립 이후 총 350개의 디자인 상을 수상했고, 1000개 이상의 특허를 갖고 있다. 2008년 3월 미국 경영 잡지 '패스트 컴퍼니(Fast Company)'는 이 회사를 구글과 애플, 페이스북, GE에 이어 세계에서 '가장 혁신적인(innovative) 기업' 랭킹 5위로 꼽았다.

창업자 데이비드 켈리는 현재 스탠퍼드대 교수이자 아이디오의 이사회 의장으로 있다. 현 CEO인 팀 브라운은 런던 왕립예술학교(Royal College of Art)에서 석사 학위를 받았고, 아이디오의 샌프란시스코 지사와 유럽 지사에서 일했다. 전 CEO인 톰 켈리는 창업자 데이비드 켈리의 동생이며, 현재 아이디오 이사로 있다. 톰 켈리는 〈유쾌한 이노베이션〉, 〈이노베이터의 10가지 얼굴〉 등 디자인 혁신에 대한 여러 책을 썼다.

출처 : http://bit.ly/b6rGm6

아디이오에서 배울 점 - 브레인스토밍의 규칙

①판단을 늦춰라(Defer judgement): 그 어떤 아이디어도 무시 마라.

②남의 아이디어를 발전시켜라(Build on the ideas of others): '그러나'라고 하지 말고 '그리고'라고 말하라.

③ 거친 아이디어라도 장려하라(Encourage wild ideas): 기존의 틀을 벗어난 아이디어에 해답의 열쇠가 있을 가능성이 높다.

④많을수록 좋다(Go for quantity): 가능한 한 많은 아이디어가 나오도록 하라.

⑤쓰고 그려라(Be visual): 벽에 쓰거나 그려가면서 회의하라.

⑥주제에 집중하라(Be focused on the topic): 토론의 주제를 벗어나지 마라.

⑦한번에 한 가지 이야기만(One conversation at a time): 중간에 끼어들거나 남의 말을 무시하지말라.


창의적인 기업은 소비자에 대해 훨씬 더 많이 알고 있어야 한다.
소비자들의 니즈를 알고, 그들과 가까우며, 시간을 함께 보낸다. 현장에 나가서 질문을 던지는 게 문화의 일부가 되어 있다.
또한 이런 기업은 문제를 프로젝트로 전환하는 데 매우 능숙하다. 여러 분야에서 팀원을 모아서 효과적으로 프로젝트를 수행한다.
그리고 프로토타입을 만드는 게 문화가 되어 있다.

디자이너가 일하는 방식?
"간단하다. 통찰력과 아이디어를 머릿속에서만 구해서는 안 되고, 실제로 밖으로 나가 세상에서 구한다. 사람을 이해해야 한다. 그러기 위해선 관찰해야 한다. 사람들이 말하는 것만으로는 잘 이해할 수 없다. 그들의 세계를 관찰하고 경험해야 한다. 이것이 위대한 디자인의 출발점이다.

다음 단계는 이 관찰을 토대로 어떤 전략적인 기회가 있을 수 있는지 도출하는 것이다. 가능성을 비주얼화하는 능력이다. 아이디에이션(ideation) 단계로, 가능한 한 많은 아이디어를 신속하게 탐색한다. 이 단계에선 팀이 필요하다. 서로 다른 배경을 지닌 팀원들이 한데 모여야 한다. 사회과학·디자인·경영·기술 등 서로 다른 분야가 섞여야 한다."

"중요한 것은 스피드이다. 그래서 프로토타입이 중요하다. 단지 머릿속으로 생각하거나 스케치하는 데 머물지 않고 실제로 만들어 보는 게 결과적으로 훨씬 빠른 길이다. 아무리 조악한 것이라도 좋다. 프로토타입은 물리적 제품뿐만 아니라 서비스, 소프트웨어, 사용자 체험 등에 모두 적용된다. 프로토타입은 팀 내부에서 검토해 볼 수도 있고, 경영진과 함께해 볼 수도 있으며, 시장에 나가서 테스트해 볼 수도 있다. '손으로' 생각해 보는 게 중요하다. 디자인을 많이 다뤄보지 않은 회사의 경영진은 이를 잘 이해하지 못해서 최종 단계에서 프로토타입을 가져오길 원한다. 온갖 과정을 다 거쳐서 마지막으로 거의 완성된 제품을 가져오라는 것이다. 그러나 이렇게 할 경우 피드백을 줘도 고치기엔 너무 늦어 버리고 만다. 경영진은 초기 단계에 프로토타입을 봐야 한다. 경영진의 지혜와 지원이 초기 단계에 투입되어야 한다."

SW개발의 관점에서 보면 RAD(Rapid Application Development) 를 디자인으로 이야기하는 듯하다.
문제를 해결하기 위해서 문제를 세분화하고, 이미 있는 솔루션 가운데 해당 기업에 효과적인 것을 제시하는 분석적인 해결방법에 익숙한 우리에게 사고를 확장하기 위한 방안을 제시해주고 있으니 생각해볼 문제이다.

―당신이 리더십에 대해 배운 것 중 가장 중요한 것을 꼽는다면.

"우리가 지금 나누고 있는 이야기들은 사실 내가 처음으로 CEO가 됐을 때 매우 불안하게 생각했던 것들이다.
나는 경영학을 전공하지도 않았고, 스프레드시트나 회계 같은 것에 대해서도 잘 모른다.
하지만 나는 경영도 디자인을 다루는 것과 마찬가지로 할 수 있다는 것을 깨달았다.
비즈니스 문제를 디자인 문제처럼 다루자 매우 편안해졌다. 디자이너로서 발전시켰던 기술을 비즈니스를 운영하는 데 사용할 수 있었다.
내게 매우 중요한 교훈이었다."

그는 혁신을 위해서는 기업이 늘 프로젝트 기반으로 일하는 방법을 배워야 한다고 강조한다. "기업들이 갖는 공통적인 착각 중 하나는 마치 기계처럼 이 물건이 들어오고 저 물건이 나가고, 이것을 구매하고 저것을 판매하는 과정(프로세스)이 영원히 반복될 것이라고 생각하는 것이죠. 하지만 혁신은 이런 식으로는 생겨나지 않습니다."

그가 생각하는 혁신은 시작과 끝이 있는 단속적인 개념이다. 일정한 목적을 가지고 시작돼 그 목적이 완수되면 끝을 맺는 프로젝트와 같다. 그는 "프로세스는 연속적이지만, 프로젝트는 단속적이며, 프로세스는 효율적이어야 하지만, 프로젝트는 창의적이어야 한다"고 말했다.

그러기 위해서는 회사의 경영 방식이 달라져야 한다. 브라운 사장은 "프로세스와 프로젝트는 멘털리티(mentality)가 완전히 다르고, 관리도 달라야 하며, 예산도 다르게 짜야 한다"고 했다. 매 시즌 새로운 디자인을 내놓아야 하는 패션회사 같은 기업은 프로젝트 방식으로 일하는 데 익숙하다. 반면 금융회사나 R&D에 별 관심이 없는 제조업체는 프로세스 중심이다.

―일상적인 프로세스와 혁신을 위한 프로젝트 사이에 적절한 균형 비율이 있는가.

"업종에 따라 다르다. R&D 기업이라면 90%를 프로젝트에 쓰고 10%를 일상적인 프로세스에 배정하지만, 일반 제조업체라면 60~70%를 프로세스에 쓸 것이고, 회계 파트라면 10% 정도만 프로젝트에 배정할 것이다. 하지만 어떤 경우에도 최소한 10%는 혁신을 위한 프로젝트에 써야 한다. 프로세스를 더 효율적으로 만들기 위해서라도 이를 위한 이노베이션적 프로젝트는 필요하다.".

프로세스와 프로젝트에 대한 이해.
그리고 숙련된 SW개발능력을 경영에 접목할때의 기회

'개발도 하냐?' 카테고리의 다른 글

데이터에서 배우자  (0) 2010.07.14
RAD(Rapid Application Development)  (0) 2010.07.08
PHP 코딩 규약 - PEAR  (0) 2010.06.25
mod_security AND fckeditor  (0) 2010.06.21
Prototype URL encode, decode  (0) 2010.06.19

들여쓰기와 줄 길이
공백 4개의 들여쓰기를 사용하되 탭은 사용하지 않습니다.
탭 대신 공백을 사용해야 글씨체에 상관없이 일정하게 보입니다.
(개인이 같은 에디터 툴, 폰트를 사용한다면 탭을 사용해도 상관 없습니다만 소스 코드 공유, 호환을 위해 공백을 사용하는 것을 권장합니다.)


제 어 구조

제어 구조에는 if, for, while, switch 등이 있습니다. 아래는 if 예제입니다.
<?php
if ((condition1) || (condition2)) {
    action1;
} elseif ((condition3) && (condition4)) {
    action2;
} else {
    defaultaction;
}
?>

제어 구조에서는 함수 호출과 구별하기 위해서 키워드와 ( 사이에 공백을 1개 둡니다.
블록을 감싸는 { 는 끝에 입력합니다. 또한 아래와 같이 블록 내용이 한줄이라도 { 로 감싸는 것이 좋습니다.
if(condition)
    action1;
이 아닌
if(condition) {
    action1;
}
으로 입력합니다.


switch 문장의 경우는 다음과 같이 합니다.
<?php
switch (condition) {
case 1:
    action1;
    break;

case 2:
    action2;
    break;

default:
    defaultaction;
    break;
}
?>

함수 호출
함수명과 (및 최초의 파라미터 각각의 사이에는 공백을 두지 않고, ,(쉼표)와 파라미터 사이에는 공백을 두며, 마지막 파라미터와 ); 사이에는 공백을 두지 않습니다.
<?php
$var = foo($bar, $baz, $quux);
?>

위와 같이 함수의 리턴 값을 변수에 대입할 때에 사용하는 =(등호)의 좌우에는 공백을 1개씩 둡니다. 아래와 같이 관련된 문장은 가독성을 향상시키기 위해 여러 공백을 두면 좋습니다.
<?php
$short             = foo($bar);
$long_variable = foo($baz);
?>


함 수 정의
함수 정의는 아래와 같이 "one true brace" 로 불리는 표기에 따릅니다.
<?php
function fooFunction($arg1, $arg2 = '')
{
    if (condition) {
        statement;
    }
    return $val;
}
?>

기 본값을 가지는 인수는 목록의 마지막에 둡니다. 특별한 경우를 제외하고는 함수가 리턴값을 돌려주도록 합니다. 아래 예제를 봅시다.
<?php
function connect(&$dsn, $persistent = false)
{
    if (is_array($dsn)) {
        $dsninfo = &$dsn;
    } else {
        $dsninfo = DB::parseDSN($dsn);
    }
    if (!$dsninfo || !$dsninfo['phptype']) {
        return $this->raiseError();
    }

    return true;
}
?>


주석
주석 기호는 C언어 형식의 /**/ 와 표준 C++ 주석인 //를 사용합니다.
Perl 형식의 #는 사용하지 않습니다.
<?php
/* comment */

/**
* comment
*
* comment
*
* comment
* comment
*/


// comment
?>


코드 연결
어디든지 클래스 파일을 무제한으로 연결을 하려면 require_once를 사용합니다.
팩토리 메소드등의 클래스 파일을 제한적으로 연결하려면 include_once를 사용합니다.
어디든 클래스 파일을 오직 한번만 연결하게 될 것입니다. 같은 파일을 공유하므로 중복될까봐 걱정하지 않아도 됩니다. require_once로 연결된 파일은 include_once에 의해 다시 연결되지 않을 것입니다.


PHP 코드 태그
PHP 코드 범위는 항상 <?php ?>을 사용합니다. <? ?>같 은 짧은 태그는 안됩니다.
그 래야 다른 운영체제와 환경에서도 PHP 코드를 옮겨 사용할 수 있습니다.


헤더 주석 블록
주 석의 자세한 설명은 생략


명명
클래스에는 내용을 이해할 수 있는 이름을 지정해야 합니다. 단축어의 사용은 가능한 한 피합니다. 클래스명은 항상 대문자로 시작해야 합니다. 상위 클래스의 확장 클래스는 _(언더 스코어)로 연결 합니다. 아래는 클래스 명의 예제입니다.
Log
Net_Finger
HTML_Upload_Error


함수와 메소드
함 수와 메소드는 "studly caps" 형식을 사용해 이름을 붙여야 합니다. 함수는 패키지 이름의 충돌을 피하기 위해서 접두사로 패키지명을 추가해야 합니다. 이름의 첫글자는 소문자로, 새로운 단어를 시작할 때의 각 첫글자는 대문자로 합니다. 아래 예제가 있습니다.
connect()
getData()
buildSomeWidget()
XML_RPC_serializeData()

내부에서 사용되는 클래스 멤버는 _(언 더 스코어) 1개를 앞에 붙입니다. 아래 예제가 있습니다.
_sort()
_initTree()
$this->_status


상수
상 수는 항상 모두 대문자로 단어의 끝에는 _(언더 스코어)를 사용해야 합니다. 예를 들면 DB:: 패키지로 사용하는 상수는 모두 DB_ 로 시작합니다.
주의: true, falsenull 은 예외로, 항상 소문자여야 합니다.
상수 정의 예제
define('ROOT_DIR', './');


전역 변수

패 키지에서 전역 변수를 정의할 필요가 있는 경우, 그 이름은 _(언 더 스코어)를 앞뒤에 붙인 패키지명으로 시작해야 합니다. 예를 들면, PEAR 패키지는 $_PEAR_destructor_object_list 이라는 이름 의 전역 변수를 사용합니다.
정의되어 있는 전역 변수 예제
$_COOKIE
$_SERVER
$_REQUEST

파일 형식
아스키 텍스트로 저장 합니다.
ISO-8859-1 문자 인코딩을 사용합니다.
PHP 태그를 닫는 ?> 아래에 1개의 줄이 있어야 합니다.


에러 처리
PHP를 실행하면 예기치 않은 에러가 발생할 수 있습니다. 어떤 에러가 왜 발생했는지 알기 위해 에러 처리 코드를 삽입합니다. 아래는 오류발생시 메시지를 보여주는 예제입니다.
<?php
function connectDB($dsn) {
    $this->db =& DB::connect($dsn);
    if (DB::isError($this->db)) {
        throw new Example_Datasource_Exception(
                "$dsn에 연결할 수 없습니다:" . $this->db->getMessage()
        );
    }
}
?>

원문: http://pear.php.net/manual/en/
번 역: © simulz

'개발도 하냐?' 카테고리의 다른 글

RAD(Rapid Application Development)  (0) 2010.07.08
디자이너에게 배우다.  (1) 2010.07.07
mod_security AND fckeditor  (0) 2010.06.21
Prototype URL encode, decode  (0) 2010.06.19
정규표현식(regular expressions)  (0) 2010.06.16
fckeditor 사용하면서 보안상 이슈가 있어서 수정.

절대경로를 상태경로로 변경해야 방화벽 룰셋을 통과하는 부분에 대한 링크
http://dev.fckeditor.net/ticket/2875
http://www.geeklog.net/forum/viewtopic.php?showtopic=86782

mod_security 의 htaccess Tip
- 회사서버에는 적용되지 않는 상태
http://www.askapache.com/htaccess/mod_security-htaccess-tricks.html#menu0-el9

구글링
http://www.google.co.kr/search?hl=ko&newwindow=1&q=fckeditor+file+browser+modsecurity+error&aq=f&aqi=&aql=&oq=&gs_rfai=


mod_security 룰셋 추가설정
KISA에서 받은 룰셋중 fckeditor 를 사용하면서 오류가 나는 부분이 있어서 아래와 같이 수정

# dir|page 가 들어가 있으면서 https가 요청되는 경우가 fckeditor 에서 발생하기 때문에 수정
SecRule REQUEST_URI "(dir|page|)" chain
#SecRule REQUEST_URI "=(http|https|ftp)\:/"
SecRule REQUEST_URI "=(https|ftp)\:/"
SecRule REQUEST_URI "shell_exec\(" "msg:'PHP Injection Attacks'"

'개발도 하냐?' 카테고리의 다른 글

디자이너에게 배우다.  (1) 2010.07.07
PHP 코딩 규약 - PEAR  (0) 2010.06.25
Prototype URL encode, decode  (0) 2010.06.19
정규표현식(regular expressions)  (0) 2010.06.16
HTTP 응답코드  (0) 2010.06.13
Prototype URL encode, decode 
    String.prototype.URLEncode = function URLEncode() {
        var SAFECHARS = "0123456789" +     // Numeric
     "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + // Alphabetic
     "abcdefghijklmnopqrstuvwxyz" +
     "-_.!~*'()";     // RFC2396 Mark characters
        var HEX = "0123456789ABCDEF";
        var plaintext = this;
        var encoded = "";
        for (var i = 0; i < plaintext.length; i++) {
            var ch = plaintext.charAt(i);
            if (ch == " ") {
                encoded += "+";    // x-www-urlencoded, rather than %20
            } else if (SAFECHARS.indexOf(ch) != -1) {
                encoded += ch;
            } else {
                var charCode = ch.charCodeAt(0);
                if (charCode > 255) {
                    alert("Unicode Character '"
                        + ch
                        + "' cannot be encoded using standard URL encoding.\n" +
              "(URL encoding only supports 8-bit characters.)\n" +
        "A space (+) will be substituted.");
                    encoded += "+";
                } else {
                    encoded += "%";
                    encoded += HEX.charAt((charCode >> 4) & 0xF);
                    encoded += HEX.charAt(charCode & 0xF);
                }
            }
        } // for
        return encoded;
    };




    String.prototype.URLDecode = function URLDecode() {
        var HEXCHARS = "0123456789ABCDEFabcdef";
        var encoded = this;
        var plaintext = "";
        var i = 0;
        while (i < encoded.length) {
            var ch = encoded.charAt(i);
            if (ch == "+") {
                plaintext += " ";
                i++;
            } else if (ch == "%") {
                if (i < (encoded.length - 2)
     && HEXCHARS.indexOf(encoded.charAt(i + 1)) != -1
     && HEXCHARS.indexOf(encoded.charAt(i + 2)) != -1) {
                    plaintext += unescape(encoded.substr(i, 3));
                    i += 3;
                } else {
                    alert('Bad escape combination near ...' + encoded.substr(i));
                    plaintext += "%[ERROR]";
                    i++;
                }
            } else {
                plaintext += ch;
                i++;
            }
        } // while
        return plaintext;
    };

'개발도 하냐?' 카테고리의 다른 글

PHP 코딩 규약 - PEAR  (0) 2010.06.25
mod_security AND fckeditor  (0) 2010.06.21
정규표현식(regular expressions)  (0) 2010.06.16
HTTP 응답코드  (0) 2010.06.13
CakePHP Framework  (0) 2010.06.09


외부사이트의 조회수를 가져와야 하는경우 정규식

유투브 :  \d+(\,*)\d+
플리커 : Viewed (\d+) times




출처 : http://user.chollian.net/~spacekan/source/string/regExp.htm

Special characters in regular expressions

특수문자 의미
\
다음 글자가 일반적인 글자가 아니고 특수문자로 사용된다는 지정이다. 특수문자로 사용할 문자앞에 backslash(\)를 붙여준다. \w는 w가 특수문자로 사용됨을 나타낸다. \w의 의미는 모든 문자를 가리킨다.

또는 반대로 특수문자를 일반적인 문자로 지정하게 한다. \\는 backslash(\)문자를 나타낸다. \\\/는 slash(/) 문자를 나타낸다.

^
input이나 line의 시작문자. /^A/는 "Amatch"와는 맞지만 "an Amatch"와는 맞지 않는다.
$
input이나 line의 끝문자. /A$/는 "abA"와는 맞지만 "aAb"와는 맞지 않는다.
*
앞 문자가 0번 이상 있으면 맞다. 없어도 되고 여러개 있어도 된다. /ab*c/는 "abbbc"와 맞다. "ac"와도 맞다. 하지만, "ax"와는 맞지 않는다.
+
앞 문자가 1번 이상 있으면 맞다. 1개 이상 있어야 하고 여러개 있어도 된다. /ab+c/는 "abbbc"와 맞다. 하지만, "ac"와는 맞지 않는다.
?
앞 문자가 0번이나 1번은 있어야 맞다. /ab?c/는 "abc"와 맞고 "ac"와도 맞다. 하지만, "abbc"와는 맞지 않는다.
.
개행문자(\n)외에 모든 문자이면 맞다. /.c/는 "Xc", "1c"와 맞다. 하지만, "ca", "\\nc"와는 맞지 않는다. (\\n은 \n의 뜻이다. 특수문자로 사용되는 \를 문자로 표현하기 위해서 앞에 \를 붙여준다. )
(x)
문자 'x'를 검색하고 맞으면 'x'를 기억한다. /a(bc)/는 "abcd"에서 검색되고 "bc"를 기억한다. 이 기억된 것은 RegExp 객체의 $1에서 $9까지로 또는 배열 [1]에서 기억된 숫자 [n]개 까지로 호출될 수 있다.
x|y
'x'나 'y'가 있으면 맞다. /abc|xx/는 "abc ZZZ"나 "xx ZZZ"와 맞다.
{n}
앞 문자가 n개 있으면 맞다. n은 양수 정수이다. /X{2}/는 "abcXX"와 맞다. "abcXXX"와도 맞고 처음 2개의 "XX"가 검색된다.
{n,}
앞 문자가 최소한 n개 있으면 맞다. n은 양수 정수이다. /X{2,}/는 "abcXX"와 맞다. "abcXXX"와도 맞고 3개의 "XXX"가 검색된다.
{n,m}
앞 문자가 최소한 n번에서 m번까지 있다면 맞다. /a{1,3}/은 "ab", "aaab"와 맞다.
[xyz]
xyz 중에서 아무런 문자가 있어도 맞다. 이것은 [x-z]과 같은 지정이다.
[^xyz]
xyz 중에서 하나의 문자라도 없으면 맞다. 이것은 [^x-z]과 같은 지정이다.
[\b]
backspace
\b
공백같은 것으로 단어의 경계되는 부분에 있는 문자이다. /\bX/는 "Xxx"와 맞다. /X\b/는 "xxX"와 맞다.
\B
\b와 반대이다. 단어 경계에 있지 않은 문자만 맞다. /X\Bz/는 "XXz Xzz"에서 두번째의 "Xz"가 검색된다.
\cX
control-X 문자와 맞다. /\cM/은 control-M 문자이다.
\d
숫자는 맞다. [0-9]와 같은 지정이다. /\d/는 "hi5"에서 "5"를 검색한다.
\D
숫자가 아닌 것은 맞다. [^0-9]와 같은 지정이다. /\D/는 "hi5"에서 "h"를 검색한다.
\f
form-feed(\f) 문자와 맞다.
\n
linefeed(\n) 문자와 맞다.
\r
carriage return(\c) 문자와 맞다.
\s
space, tab, form feed, line feed를 가지고 있는 white space 문자와 맞다.[ \f\n\r\t\v]와 같은 지정이다. /\s\w*/는 "abc Xz"에서 "Xz"를 검색한다.
\S
white space 문자가 아닌 하나의 문자이다. [^ \f\n\r\t\v]와 같은 지정이다. /\S\w*/는 "abc Xz"에서 "abc"를 검색한다.
\t
tab 문자
\v
vertical tab 문자
\w
underscore(_)문자를 포함하는 알파벳과 숫자 0에서 9까지의 문자. [A-Za-z0-9_]와 같은 지정이다.
\W
\w의 반대이다. [^A-Za-z0-9_]와 같은 지정이다. /\W/는 "50%"에서 "%"를 검색한다.
\n
n은 양수 정수이다. ()로 묵은 것을 지정한다. \1은 RegExp.$1, \2는 RegExp.$2의 값을 사용한다. /ab(c)de\1/은 "abcdec"와 맞다.
\o숫자, \x숫자
escape문자로 ASCII codes 값을 넣을 수 있게한다. 8진, 16진 10진수를 넣을 수 있다.

'개발도 하냐?' 카테고리의 다른 글

mod_security AND fckeditor  (0) 2010.06.21
Prototype URL encode, decode  (0) 2010.06.19
HTTP 응답코드  (0) 2010.06.13
CakePHP Framework  (0) 2010.06.09
editplus setting  (0) 2010.06.06
http://www.faqs.org/rfcs/rfc2616.html

- 200
[OK]  클라이언트의 request가 성공적으로 수행됐다.
request처리결과로 클라이 언트에게 전달되는 정보는 사용된 method에 따라서 달라진다.
[GET] request가 지정한 자원이 response메세 지로 전달 된다.
[HEAD] response메세지에는 요청된 자원에 관한 정보를 나타내는 header만이 포함된다.
[POST] 지 정된 동작의 수행결과를 포함하거나 결과를 설명하는 엔터티가 전달된다.

- 201
[ Created] request 가 처리되었고 그 결과로 새로운 자원이
생성되었다. 생성된 새로운 자원을 나타내는 URI값이 response메시지로 전달된 다. 서버가 이와 같은 status code를 클라이언트에게 전달하기 위해서는 새로운 자원을 먼저 생성시켜야 한다.
response 메시지를 전달 할때까지 새로운 자원이 생성되지 못하면 status code 202(Accepted)를 보내야 한 다. POST method만이 서버에 새로운 자원을 생성시킬 수 있다.

- 202
[Accepted] request 가 수락되었으나 response메시지를 전달할
때까지 그 프로세싱이 완료되지 못했으며 또한 언제까지 request의 수행결과 를 사용자가 볼 수 있을지를 확실히 판단할 수 없다. 이와 같은 status code는 request가 수락된 것 (accepted)만을 나타낼뿐 궁극적으로 그 request가 처리될 것이라는 보장
할 수 없을 때 사용된 다. status code 202는 Web브라우저와 같이 서버의 처리결과를 전달받을 때까지계속 기다리게 되는 클라이언트를 위한 것 은 아니다.
WEb브라우저와는 다른 일종의 batch프로세서(하루에 한번정도 실행되는)의 request를 서버가 받아들 일 수 있도록 하기위한 것이다.

- 204
[No Content] 서버가 request를 처리했지만 클라이언트에 게 전달할 새로운 정보가 없다. 이 status code를 전달받는 Web브라우저는 현재 디스플레이 중인 내용을 변경시키지 않아 야 한다. 이 code를 정의한 주된 목적은 현재 디스플레이 중인 문서의 내용을 변경시키지 않으면서 CGI스크립트 등에 입력을 전 달할 수 있도록하기 위해서이다.

- 300
[Multiple] HTTP/1.0을 사용하는 경우에는 이 code 가 직접적으로Choices 사용되지는 않는다. 다만, 3xx클래스에 속하는 status
code의 디폴트값으로 사용된 다. 그 의미는 301, 302, 304만이 HTTP/1.0에 정의되어 있으므로 그 외의 status code값을 전달받는 경우에 는 300으로 간주한다는 의미가 되는 것이다.

- 301
[Moved] 요청된 자원의 URI값이 완전히 변경되었 으므로 앞으
Permanently 로는 새로운 URI값을 사용하여야 한다. 새로운 URI값은 Location헤더를 통해서 클 라이언트에게 전달된다. 또한
HEAD method를 제외한 모든 경우에 response메시지의 entity body를 통해 서 새로운 URI의 하이퍼링크를 포함하는 짧은 메시지를 전달해 주어야 한다. Web브라우저는 POST method를 사용 한 request의 결과로 301 status code를 전달받는 경우에는 자동으로 새로운 URI에 접속해서는 안된다. 반드 시, 사용자의확인을 거쳐야 한다.

- 302
[Moved] 요청된 자원의 URI값이 임시로 변경되었다. 따라 서 추후
Temporarily 에도 현재의 URI값을 계속 사용하여야 한다. 새로운 URI값은 Location헤더를 통해 서 클라이언트에게 전달된다.
또, HEAD method를 제외한 모든 경우에 response메시지의 entity body 를 통해서 새로운 URI의 하이퍼링크를 포함하는 짧은 메시지를 전달해 주어야 한다. Web브라우저는 POST method를 사용 한 response의 결과로 302 status code를 전달받는 경우에는 자동으로 새로운 URI에 접속을 해서는 안된다. 반드 시 사용자의 확인을 거쳐야 한다.

- 304
[Not] conditional GET method가 사용된 경우 에 전달된다.
[Modified] request를 처리한 결과 If-Modified-Since헤더에 지정된 날짜/시간 이래 로 지정된 문서가 변경된 사실이 없는 경우
서버는 이 status code로 응답해야 한다. 이때, entity body 는 전송되지 않는다. reseponse메시지로 전달되는 헤더들은 주로 cache와 관련된 정보를 포함하게 된다.
cache manager(대 개의 경우는 Web브라우저 자체에 그 기능이 포함된다)는 304 response에 포함된 헤더의 값을 cache된 entity들 에 반영할 수 있도록 하여야 한다.

- 400 
[Bad Request] request메시지의 syntax가 잘 못되어서 서버가 request를 처리할 수 없다. 재접속을 하는 경우에 클라이언트는
반드시 올바른 request메시지를 사용 해야 한다.

- 401
[Unauthorized] request가 user quthentication을 필요 로 한다는 것을 클라이언트에게 알려주기 위해서 사용된다.
WWW-Authenticate헤더를 통해서 요청된 자원에 적용되 는 hallenge를 전달한다. 401 response를 받은 클라이언트는 적절한 Authorization credentials 를 포함하는 Authorization헤더와 함께 다시 request메시지를 전송한다.
request메시지에 그와 같 은 Authorization credentials이
포함된 경우에 401 status code가 전달되 면 user authentication이 실패한 것을 나타낸다.

- 403 
[Forbidden] 서버 가 request의 처리를 거절하는 것을 나타낸다. 이와 같은 응답을 받은 경우에는 동일한 request를 반복하지
말아 야 한다. 왜냐하면 무조건 request가 거절되는 것이기
때문이다. 403 status code는 request를 거절하 는 이유를
명시적으로 밝히고 싶지 않거나 달리 대응할 적절한 status code가 없을때 사용된다.

- 404
[Not Found] Request- URI에 해당하는 자원을 찾을 수 없을 경우에 사용된다. 그런 상태가 일시적인 것인지 아니면 언제나 그렇게되는지를 나타내는 어 떤 정보도 전달되지 않는다. 이런 상태를 클라이언트에게 알리고 싶지 않은 경우에는 403code를 대신 사용해도 된다.

- 500 
[Internal] 서 버프로그램에서 예기치 않은 오류가 발생하여서 request Srever Error  를 처리할 수 없다.

- 501
[Not] request 를 처리하기 위해서는 필요한 기능을 서버가 갖추고 Implemented  있지 못하다.

- 502
[Bad] gateway 나 proxy로 동작하는 서버가 사용하는 것으로 자신
Gateway 의 위쪽에 있는 서버로 부터 잘못된 response메시지 를 전송 받았다는 것을 나타낸다.

- 503
[Service] 과부하나 서버 maintenance때문에 서버 가 잠시동안 request Unavailable 를 처리해 줄수 없는 상태에 있다.
 

'개발도 하냐?' 카테고리의 다른 글

Prototype URL encode, decode  (0) 2010.06.19
정규표현식(regular expressions)  (0) 2010.06.16
CakePHP Framework  (0) 2010.06.09
editplus setting  (0) 2010.06.06
hidden frame  (0) 2009.12.27

MVC 기반의 PHP Framework CakePHP 홈페이지 : http://cakephp.org/

매뉴얼 : http://book.cakephp.org/

한글 매뉴얼 :http://manual.cakephp.co.kr/


CakePHP의 장점

  • 스키마를 만들면 자동으로 HTML 폼(뷰, 수정, 삭제, 업데이트)을 생성 :  [스케폴딩]
  • HTML 폼의 벨리데이션을 할 경우, 폼 이름과 규칙을 선언만 하고 나머지 귀찮은 일들을 알아서 해 준다 : [벨리데이션과 헬퍼]
  • 기존의 많은 URL들을 통합하고 관리할 수 있다 : [라우터]
  • 비즈니스 로직에서 회원과 관련된 부분을 더 이상 신경 쓰지 않아도 된다 : [ACL]
  • 관리자 페이지를 따로 만들 필요가 없고, RSS와 같은, 말하자면 콘텐츠는 같지만 뷰만 다른 부분을 간단히 구현할 수 있다 : [렌더]
  • 소스를 체계적으로 관리할 수 있다 : [콤포넌트와 벤더, 그리고 플러그인]


INSTALL

최신 버전을 다운로드 받아서 cake 라는 폴더에 모두 풀었다.

http://자신의도메인/cake 로 접속해보면 해야할 일들이 표시된다.

(charset 관련 메세지와 simpletest를 이용한 테스트를 구동하기 위해서 php.ini  설정을 변경해야 했다.)

#php.ini File의 변경내용

memory_limit = 64M 

default_charset = "UTF-8"

시키는대로 진행하고 예제를 따라해보면 쉽게 이해가능하다.


참고 URL

Cake PHP API Document
- http://api13.cakephp.org/classes

Cake PHP 소개
-http://www.imaso.co.kr/?doc=bbs/gnuboard.php&bo_table=article&keywords=%C0%D0%C0%BB%B0%C5%B8%AE%3B%C6%AF%C1%FD&page=4&wr_id=32017

Cake PHP Google Groups
- http://groups.google.com/group/cake-php

CakePHP와 Template_
- http://coolengineer.com/409
- http://www.xtac.net/


Demo : http://db.garada.co.cc/cake/


'개발도 하냐?' 카테고리의 다른 글

정규표현식(regular expressions)  (0) 2010.06.16
HTTP 응답코드  (0) 2010.06.13
editplus setting  (0) 2010.06.06
hidden frame  (0) 2009.12.27
SI프로젝트 산출물  (0) 2009.12.14
editplus 3.1 version에 맞는 컬러 및 stx파일들 셋팅.
http://850219.com/142 에서 다운로드


공개용 글꼴들을 이용해서 새로 제작한 코딩용 폰트

이 폰트는 영문글꼴 Bitstream Vera Fonts 와
네이버에서 배포하는 나눔고딕코디용 글꼴을 합쳐서 새롭게 만들었다.

폰트제작법은 http://gyuha.tistory.com/245 에서 자세히 설명하고 있다.


제작에 사용한 SW는 쉐어웨어 FontCreator_5.5_Setup.exe

폰트들의  홈페이지 라이센스 정보
 http://dev.naver.com/projects/nanumfont
 http://www.gnome.org/fonts/


  참고

코딩용 폰트를 사용하는 다른방법 : http://westzero.net/47

'개발도 하냐?' 카테고리의 다른 글

HTTP 응답코드  (0) 2010.06.13
CakePHP Framework  (0) 2010.06.09
hidden frame  (0) 2009.12.27
SI프로젝트 산출물  (0) 2009.12.14
BitTorrent 의 정리  (0) 2009.12.12

+ Recent posts