Server Side Software Development Server Side Architect Group http://www.facebook.com/groups/serverside 조대협 (bwcho75@gmail.com)
필자소개 조대협 개발자 웹로직기술지원 장애진단, 성능튜닝 컨설턴트 (SOA,EAI,ALM) 아키텍트 ( 대용량분산시스템 ) 클라우드컴퓨팅 APAC 아키텍트 프리렌서 지금은 Chief(Cheap?) 아키텍트 지금은수원으로출근해요 블로그 : http://bcho.tistory.com 서버사이드아키텍트그룹 : http://www.facebook.com/groups/serverside 이메일 : bwcho75@gmail.com
오늘이야기할것은? 서버사이드개발
시간관계상 4 가지 개발프로세스개발도구아키텍쳐테스트 시간이짧아서, 요점만간단히!!
요즘트랜드는? 요즘잘나가는실리콘밸리 START UP No more vendor 소규모조직 [10~20명] 스스로하자!! 클라우드컴퓨팅오픈소스 잘하는것부터해서발전 애자일 Devops
Software Development Life Cycle 개발프로세스
개발프로세스 소프트웨어개발현실? 개발자의현실 요구사항추가변경 문서, 교육, 미팅, 보고 야근 티도안나는일 관리자의현실 항상 99.999 % 완료 항상야근, 근데모하는지? 릴리즈는언제? 위험요소는모지? 이슈는모야? 일의우선순위? 소프트웨어결과물 짚으로만든집 낮은품질. 버그투성이 실패한프로젝트는없다. 끝나고바로고도화프로젝트시작 결과물.
개발프로세스 <Insert Picture Here> 그래서 저명한박사님들께서.. 방법론을만드시니.. RUP,CBD,CMMI
개발프로세스 But 그러나현실은 방법론은방법론 우리는조금더현실적인방법론이필요합니다.
개발프로세스 실용주의방법론 실용주의방법론 Erich Gamma, Joel Spolsky, Kent beck, Andrew Hunt Iterative & Incremental 애자일기반 기존방법론과차이 요구사항이변화할것을가정 에러가있을것을가정하여, 자주테스트 협업과커뮤니케이션
개발프로세스 대표적인개발방법론 스크럼이대세!! http://agilescout.com/learn-more-agile-softwaredevelopment-methods-this-year/ 관리자입장에서는예측불가조직에맞게바꿔서쓰세요
개발프로세스 대안 - Big Umbrella 방법론 전체개발은 WATERFALL 등전통적인방법론사용 각단계를세분화하여애자일방법론적용 관리층에는예측성, 실무진에게는실용성
개발프로세스 어떻게? 분석설계개발테스팅 Iteration N Iteration N+1 Iteration N+2 분석설계개발테스팅분석설계개발테스팅분석설계개발테스팅 어려운것중요한것 성능테스트 성능테스트 쉬운것없어도되는것 이건주요단계마다!!
개발프로세스 태스크흐름 Open Assigned In Progress Resolved Closed PL PL creates detail task for developer. Task is usually finished 1~4 day. (1~2 days are recommended) Developer Developer Developer Developer PL Discuss with developer and estimate time. Assign the time to task Need more Information PL Postponed Developer discuss with PL PL lets developer to postpone the sub task. The postponed task should be finished in same iteration phase. Or closed
개발프로세스 도구들 Atlassian JIRA ** + Green Hopper Redmine (Open source) * Trac Mantis Off Site 개발에유리 도구는도구일뿐, 프로세스를정립하고실천하는것이우선!! 내가휴가를떠나더라도, 다른사람이태스크노트만보고일을할수있도록
개발프로세스 액셀부터시작하세요 JIRA 가멋지긴하지만, 액셀로도 10~15 명팀프로젝트관리는충분합니다. 프로세스가성숙되면툴을고민하세요
Development Environment 개발환경
개발환경 흔한개발환경시나리오 개발자가아침에출근해서 이클립스를키고, 소스코드를 Git 에서 Check Out 한후 JIRA 를통해서오늘할당된작업을확인한후에코딩을하고 PC 에서 Junit 등을이용하여단위테스트등을모두끝마치고 코드를 Git 에 Commit 하면 Jekins 에서코드변경을감지하여, 자동으로 Check Out 해서 mvn 을이용해서컴파일하고, 테스트서버에배포해서단위테스트를모두수행하고, 코드의라인커버리지를분석하여리포팅한다. 팀장은빌드가완료되었음을확인하고, 단위테스트 100% 완료및라인커버리지 80% 완료를확인한다. 릴리즈날짜가오면, 배포엔지니어는별도의작업없이 Jekins 에서빌드된그날 WAR 를확인하고, Fabric 으로된배포스크립트를수행하면, 자동으로개발,QA 환경으로배포가되고, 환경별로필요한 resource 파일들이자동으로 customization 해서배포가완료된후, Junit 기반의단위테스트, SOAP UI 기반의 REST API 테스트, Seleniuem 기반의 UI 테스트까지자동으로완료한다. 만약에배포나테스트가실패하면, 이전버전으로자동롤백한다. 다들이정도는하시져?
개발환경 툴셋업보다는실천 일일빌드 80% 라인커버리지 테스트자동화 daily check out & commit 빌드태깅
개발환경 DEV,QA & STAGE 자동빌드 배포시스템 Python Fabric Ruby Capistrano 릴리즈 테스트完 DEV QA STAGE 가상화 or 클라우드필요할때만전개 연계시스템 클라이언트 단말 ( 모바일 )
Server Side Architecture 서버아키텍쳐
아키텍쳐 기술트랜드의변화 예전의기술트랜드기업중심의벤더주도형 IBM,HP,Oracle,MS 현재의기술트랜드 SNS 중심의서비스회사주도형 Google,Facebook,Amazon,Apache 웹로직, 오라클,EJB,J2EE 몇몇기술만알던시대 수많은오픈소스조합 HP 수퍼돔같은소수의대형서버 x86 기반분산시스템, 클라우드컴퓨팅 (Devops) 뉴타입? 벤더지원 구글링
아키텍쳐 아키텍쳐설계순서
아키텍쳐 일반적인서버아키텍쳐 내부트렌젝션처리 ( 동기 / 비동기 ) 계정계시스템 OLTP 비지니스로직 시스템간연동 대외계 EAI (Enterprise Application Integration), AIA, 시스템간, 컴포넌트간, 데이타센터간연계 통계분석, 리포팅 정보계 OLAP,BI, 빅데이타 운영
아키텍쳐 레퍼런스아키텍쳐
아키텍쳐 컴포넌트
아키텍쳐 솔루션 분류컴포넌트솔루션 User Interface Layer JQuery,bootstrap,ExtJs,HighChart Reverse Proxy Apache, NginX,HAProxy Enterprise Service Bus Mule, ServiceMix Message Queue Rabbit MQ,Active MQ,Zero MQ Data Grid memcached,redis,oracle coherence Internal Business Logic Sync Transaction Processing Tomcat,Jboss,Netty,Jetty Working Space Gluster FS RDBMS MySQL, MariaDB File System Openstack Swift NoSQL mongodb,cassandra,hbase Protocol REST JSON/HTTP, Thrift, Protocol Buffer External Integration Integration Apache Camel Log Gathering Flume, Pentaho (ETL) Reporting CEP Esper Transform & Analysis Hadoop, Hive, Pig,Sqoop,R, Mahout Reporting Postgres,Redshift Coordinator Zookeeper Operation Monitoring Nagios,Ganglia,Zabbix,Cacti Configuration mgmt Puppet,Chef,Fabric
아키텍쳐 Global roll out 시스템의설계 1. 위치선정 법적이슈 회선속도 세금 3 센터 : 미서부, 영국, 중국 2. API 라우팅 ESB (Enterprise Service Bus) 를이용한라우팅 3. 데이타복제 ETL, CDC 과연데이타복제가필요할까? ( 한국에서미국출장간사용자 )
아키텍쳐 클라우드컴퓨팅상의아키텍쳐설계 클라우드컴퓨팅의장점 빠른시장진입 설계시고려사항 느려요 IO Performance 운영비절감 싸지않아요 초기투자비절감 기존솔루션이안돌아요 유연한자원사용 (Auto Scale Out) 장애가납니다. ( 멀티데이타센타설계 )
아키텍쳐 그리고 스크립트언어하나정도는더해놔야 Python,Ruby,Scala,Clojure,Erlang.
Testing 테스트
테스트 테스팅모델 단계 개발단계 제품출시전 주체 타입 개발자 화이트박스 테스트팀 블랙박스 레벨 단위테스트통합테스트시스템테스트인수테스트 기능중심 컴포넌트간연계성 비기능 1 성능 2 장애 3 확장성 4 안정성 UX & VOC 법률체크운영성
테스트 테스트레벨별키포인트 단위테스트 컴포넌트기능검증 회귀 (regression) 테스트 라인커버리지 통합테스트 End2End 시나리오검증 인터페이스검증 ( 메세지 ) + 기능검증 ( 다른사람이!!) 시스템테스트 성능및비기능 ( 장애 ) 최대용량 인수테스트 UX 출시여부결정
테스트 시스템테스트는짚고넘어갑시다. 언제? 주요릴리즈때마다. ( 한달에한번? 두달에한번?) 기능검증 ( 통합테스트를포함가능 ) + 비기능검증 비기능검증 종류테스트방법측정가능항목 성능 장애 단일거래테스트복합거래테스트 ** WAS 장애 kill -9 tomcat DB 장애 kill -9 mysqld 서버장애전원끄기네트워크장애랜선뽑기 성능및용량측정병목발견 장애대응성복구시간 확장성부하주면서톰캣늘리기증설에필요한용량산정 안정성 7 일동안부하주기메모리누수, 디스크용량체크
테스트 마이크로벤치마크테스트 기술검증 1~2일소요 30 vuser 정도의부하 SOAP UI, Python
테스트 테스트절차 테스트계획 ** 테스트분석및디자인구현및수행평가및리포팅 * 테스트범위및목표정의 조직및스케쥴정의 ** 테스트도구결정 테스트대상시스템분석 ( 리버스엔지니어링 ) 테스트환경디자인및구성 상세테스트시나리오정의 개통 ** [ 오래걸림 ] 수행 로깅 [ 중요 ] 결과정리 문서화 개선사항리포팅
테스트 코드리뷰 투자대비효율최고 코드리뷰는문화 ( 정기적으로수행, 자유로운의견교환, 창던지기금지 ) 캐주얼 정식 Peer review Walk Through Team review Inspection 사수와부사수 서로돌아가면서발표와의견교환이목적 팀장이나시니어가주도 전문 inspector 사용 발표자가스스로주제를정함 사회자가리뷰대상을지정하여수행. 리뷰의결과는다음태스크에반영
테스트 테스트도구 종류테스트방법측정가능항목 단위테스트 JUnit **, TestNG 커버리지분석 Cobertura,EMMA Mock up EasyMock, Mockito 단위테스트 인터페이스테스트 SOAPUI ** 단위테스트, 통합테스트 부하생성 ngrinder (Jython) ** Multi-mechanize (Python) 모니터링 Cacti,Gaglia ( 인프라 ) Jennifer (APM) Jconsole, Visual VM (JVM) 시스템테스트 시스템테스트
더자세한이야기는 http://bcho.tistory.com/category/ 조대협의 %20 소프트웨어 %20 개발 AND 사람뽑습니다. 이렇게서버개발해보고싶으신분들은 bwcho75@gmail.com 단.. 수원출퇴근입니다. ( 강남까지 30 분통근버스다녀요 ~ 그리고세끼무료식사제공 )