그동안 간간히 트윗되는 서비스 기업들의 아키텍쳐를 살펴보면서 향후 비슷한 서비스를 할 때 어떤 요소 기술들이 필요할까 생각해 보았다.
- Netflix : 온라인 VOD 서비스 Netflix의 AWS로 옮겨가기 까지의 아키텍쳐 변화 (Java 기반)
- Evernote : 자바 기반 아키텍쳐링 (Hibernate를 사용했다는 것이 흥미롭다, 참조)
- Instagram : SytleShare와 비슷한 구조인듯 하다 그리고 좀 더 세심한 아키텍쳐링 (Python 기반)
- StyleShare : AWS에서 어떤 서비스를 사용하는지 설명 (Python 기반)
- Etc Search : http://highscalability.com
향후 만들어갈 Mobile Service에 대해 Netflix 모델과 더불어 기업문화까지 본받을 필요가 있겠다. 자신의 성숙한 기술을 OSS로 공개하고 공유하는 정신을 높게 사고 싶다.
모바일 컨버젼스 서비스를 만들기 위하여 어떤 단계를 거쳐가야 하는지 생각해 본다.
- Big Picture : 서버(미들웨어) 아키텍쳐를 서비스의 요구조건에 맞게 고려한다
- Framework Picture : 어플리케이션 레벨의 구현에 필요한 Framework들을 고려한다
- Project Picture : 프로젝트를 어떻게 진행할 것인지 고려한다.
<Big Picture>
- 클라우드 서비스 이용하기 : AWS Pacific zone 이용하기 (각 서비스에 대한 이해와 사용경험을 가져야 한다)
- 미들웨어 선정 : 현재는 Virgo 위에 Tomcat + SpringDM 사용 예상 (OSGi Bundle 이용)
- 메모리 캐싱 : Redis를 고려해 보고 있다. 역시 설치와 테스트가 필요하고 어느 부분에 쓰일지도 검토해야 한다)
- 프레임워크 :
+ 통신용 프레임워크는 Vert.x 를 Bundle로 올려서 NIO 처리 (apache 대체로 생각하지만 각 필요한 요구조건에 대한 테스트가 필요하다)
+ 도메인 업무처리용 프레임워크는 Spring Roo를 통해 빠르게 개발을 진행하고 싶다
- 데이터베이스 : RDBMS를 고려한다면 MySQL, NoSQL을 본다면 Cassandra와 MongoDB를 사용하려 한다.
- 상호 연결 : Apache Trift를 통하여 서로 틀린 부분에 대한 Communication을 해소하려 한다 (ESB와 비슷하게 이용 가능할까?)
- 클라이언트 Push : Vert.x의 Socket.io를 이용한다
- 모니터링 : Netflix의 오픈소스를 이용하거나 필요시 별도로 만든다
- 개발, 테스트, 배포 : 운영서버와 유사한 AWS 클라우드 기반으로 가져가며 AMI(Amazone Machine Image)를 이용하여 만들고, 개발, 테스트, 배포 각각 별개의 인스턴스를 가져간다
+ 개발 : 운영과 동일 환경구성
+ 테스트 : JUnit 단위 테스트는 개발단계에서 수행하고, FitNeese 통하여 인수테스트 수행등 종합적인 테스트 방안을 마련한다
<Framework Picture>
모바일 컨버전스 서비스 성격에 맞는 프레임워크를 선택하는 것이 관건으로 보인다
- UI Layer : 하이브리드 웹앱으로 가고, 성능향상이 필요한 부분이 있다면 고객 확보시점에 따라 네이티브로 간다. Rapid Development를 위하여 선택
- UI Framework : Sencha Touch, JQuery Mobile, PhoneGap등을 사용, PC 버전은 Sencha의 ExtJS를 사용한다. Unit Test와 개발환경때문에 GWT를 고려해 보았으나, 기초장벽을 어느 정도 해소하면 ExtJS로 하는 것이 좋겠다는 판단임 (요즘 열심히 JavaScript 파고 있다)
- Server Framework : Vert.x, Spring, Spring roo 등을 사용할 예정
- Test Framework : JUnit, FitNeese
- Deploy : Maven 또는 Gradle 고려중, Jenkins + HuBot (GTalk 통하여 deploy 명령) 사용
- Open API 지향 설계 : Restful 서비스
<Project Picture>
프로젝트는 Agile의 Scrum 방식으로 진행을 하면 이를 위하여 다음과 같은 협업도구를 사용한다
- Issue, Wiki 는 Atlassian의 Jira와 Confluence를 SaaS로 이용
- Scrum 방식 개발위해 Atlassian GreenHopper 이용
- 소스서버는 DVC로 GitHub private 신청하여 이용
- 오프라인 정기 모임
- 온라인 협업 도구 최대하 활용 : Atlassian 제품, Podio, CaCao Agit, GMail 등
그 동안 살펴본 기능들을 잘 엮어서 프로토타입 모바일 컨버전스 서비스를 내년 초까지 만들어 볼 계획이다.