16
Copyright 2010 NEOCYON. INC. All Rights reserved Page-1 / QA Process WebDivision Mobile Experience NEO CYON API Center ProtoType 2011-05-31 Version 0.1 by 백상현

API Center ProtoType

  • View
    45

  • Download
    3

Embed Size (px)

Citation preview

Page 1: API Center ProtoType

Copyright ⓒ 2010 NEOCYON. INC. All Rights reserved Page-1 / QA Process

WebDivision Mobile Experience NEO CYON

API Center ProtoType 2011-05-31 Version 0.1 by 백상현

Page 2: API Center ProtoType

1. 계획

목 표 아키텍쳐 검증(성능, 개발 생산성 측면) 개발환경 셋팅 공통 모듈 검토 인력 양성 방법 검토

환 경 프로토타입을 하기 위한 솔루션(S/W)와 인프라 환경(H/W)을 마련해야 하나 H/W 미 지원으로 S/W 구현에 한정함. 분석, 설계, 개발, 테스트 가이드의 베타 버전이 있어야 하나 금번 프로토타입 에서는 배제 (요구사항이 없으므로 분석,설계 없음) 프로토타입의 개발환경(개발 툴, 테스트 툴, 형상관리 연동, 빌드, 배포) 중 개발 툴, 테스트 툴만 확인 (나머지는 고도화 작업 및 차후 검토에서 고려)

일 정 실 프로젝트가 있는 상태가 아니기 때문에 기술적인 아키텍쳐 검증 시간만 할당함 (05/14~05/30)

범 위 - WCF(Windows Communication Foundation) with IIS를 통한 어플리케이션 개발과 플랫폼에 상관없는 상호 운용성을 지원하는 어플리케이션을 개발 - ASP(클라이언트)에서 호출 가능한 형태의 서비스 개발 - RDBMS의 임의 테이블을 기준으로 클라이언트(ASP)에서 CRUD가능한 WCF 어플리케이션 구성 - WCF 테스트 방법 및 툴 검토 - Open Source(Logging, ORM) 사용 가능 검토

인 원 1명 (북치고 박치고~)

Page 3: API Center ProtoType

1. 계획 (구성환경)

OS : Windows 7 (IIS 7.5) DBMS : MS-SQL 2008 S/W : .Net Framework 4.0 Open Source : NHibernate-3.2.0.Alpha2 NLog v2.0 Beta 1 Tool : VS.NET 2010 Ultimate soapUI 3.6.1 개발 서버가 구성되지 않아 개발 PC에서 WCF 서버 및 MS-SQL 2008, ASP 클라이언트를 동시에 구현 테스트 함

개발 환경

Dev Servers

Windows 7

IIS 7.0

.NET 4.0

WCF + ASP

MS-SQL 2008

Open Source

Page 4: API Center ProtoType

2. 진행 (WCF IIS Hosting)

WCF는 IIS물론 Windows Service, WinForm, Console에 Self Hosting 가능함. WCF의 Binding의 종류는 HTTP, TCP. MSMQ 등의 여러 가지 전송 프로토콜과 텍스트, 이진 데이터, MTOM 등의 다양한 XML을 사용하여 메시지를 전송할 수 있음. 웹 개발자가 접근하기 쉬운 IIS의 성능을 이용한 Hosting과 HTTP Binding을 선택함. 클라이언트는 ASP 코드로 접근 가능한 방법 .Net Framework 4.0을 이용한 WCF는 Config설정이 간단함. (.Net Framework 3.5이전의 Config를 전부 설정할 필요가 없음. 설정이 간편함) 또한 VS.NET에서 제공되는 템플릿 사용하여 WCF Service 또는 WCF REST Service 로의 구현이 가능함.

Page 5: API Center ProtoType

2. 진행 (.svc WCF Service Application 구현)

현재 업무는 ROA 기반의 REST 구조가 아님. REST의 개발 및 테스트 방법이 쉽지 않음. REST는 WSDL같은 WADL을 구성 해야 대부분의 Test Tool을 사용 할 수 있음. (네이버, 네이트, 다음 모두 XML-RPC의 형태 개발, ROA에 따른 설계 시 Interface만 변경 가능한 구조임) API Center는 RESTful 아키텍쳐를 구성할 환경이 아니므로 WCF Service Application으로 구성함. 참고로 REST 고려사항은 다음과 같음. 1. REST 아키텍쳐로 접근 –프로젝트에서 개발자들이 RPC 형태에 익숙해져 있음 –Operation이나Method와 같은 행위중심으로 설계에서 Resource 중심의 설계 2. DB설계고려 –Resource 가DB로 어떻게Mapping 될 것 인가에 대한 사전 고려필요 –Primary Key와 ResourceID (URI)간의 연관관계고려 –Alternative Key (AK) 고려 3. 캐쉬는 양날의검 –웹의 특징을 잘 살리고 성능을 극대화 시킴 –Last Modified 시간을 유지해야 함(클라이언트서버모두) 4. 전문설계 –REST는 표준이 없기 때문에, 내부 표준 전문 구현이 중요 –헤더에 어떤 데이터를 넣을 것 인지 –HTTP Response Code를 어떻게 사용할 것 인지 정의필요

REST 장 점 REST 단 점

자원(Noun)에 대한 행위(Verb: GET, POST, DELETE, PUT) 표현으로 사람이 이해하기가 쉬움

표준이 없기 때문에 별도의 표준을 정해야 함(개발 통제의 문제 발생)

강력한 캐쉬 기능으로 인하여 성능의 비약적 향상이 가능함 STUB이 생성되지 않기 때문에, 클라이언트 코드 구현에 별도의 노력이 필요

LINK를 이용한 자원간의 관계표현, 흐름/상태 표현이 가능함(Self descriptive)

전통적인 행위(Behavior, Operation, Method) 중심에서 자원(Resource)중심의 설계방식에 대한 전환필요.

웹 기반 이기 때문에 기존 웹 인프라를 그대로 재사용이 가능(Fire Wall, Web Caching ,Web Proxy , L4 switch, L7 switch etc)

SYNC (Request/Response) 이외의MEP (Message Exchange Pattern)의 지원이 어려움. eg) AsyncFire & Forget, Call back, Conversational Messaging etc.

자바스크립트와 함께 사용하기 편리함(JSON, XML)

Page 6: API Center ProtoType

2. 진행 (구현 클래스 선정)

붉은색 “Crazy.Apis.Member” 의 클래스 라이브러리에서 서비스의 DAC 및 BIZ 로직 처리 파란색의 WCF 인터페이스는 변경 없음 (eg: ORM을 적용 하던 안 하던, Biz 로직 변경이 되던…) 여러 방법적인 개발이 가능 하나 가장 기본적은 왼쪽 형태의 WCF Service Application + ADO.NET(Customize)을 이용한 개발을 선택함. (최우선 검토 사항인 WCF의 API Center구현) 향후 RESTful 구현에 최소의 비용으로 migration 가능 하도록 구현 모듈을 분리함.

WCF Service Application + ADO.NET

WCF REST Service Application WCF Service Application + ORM

Page 7: API Center ProtoType

2. 진행 (구현 클래스 구조)

샘플 프로젝트는 멤버 관련 테이블을 생성 CRUD하는 프로젝트임. 붉은색 “Crazy.Apis.Member” 와 같이 서비스의 DAC 및 BIZ 로직 구현. Member.cs는 파란색 MemberService의 DataContract로 공통적으로 클래스 사용. 파란색의 WCF 인터페이스는 변경 없음 (eg: ORM을 적용 하던 안하던, Biz 로직 변경이 되던…)

클라이언트(ASP) 샘플 코드

인퍼테이스 구현부

인퍼테이스

비즈니스 로직 구현

데이터 구현

DataContract 구현

Nlog 구현

WCF config File

NLog config File

참조 dll

참조 dll

Page 8: API Center ProtoType

2. 진행 (서버 코드: Service Application vs REST Service Application)

WCF REST Service Application Programming WCF Service Application Programming

Page 9: API Center ProtoType

2. 진행 (클라이언트 ASP 코드)

Page 10: API Center ProtoType

2. 진행 (Logging)

Logging 프레임워크 또는 라이브러리는 기존 개발된 소스 또는 오픈 소스 등이 많이 있다. 다양한 기능을 제공하는 Open Source를 기반으로 라이브러리화 검토. 검토대상 : Log4Net ,Nlog 1. Log4Net : 적용 Appender (http://logging.apache.org/log4net/) JAVA 진영에서도 많이 씀 ADONetAppender, MS SQL Server, MS Access, Oracle9i, ASPNetTraceAppender BufferingForwardingAppender, ColoredConsoleAppender, ConsoleAppender, EventLogAppender FileAppender, ForwardingAppender, MemoryAppender, NetSendAppender, OutputDebugStringAppender RemotingAppender, RollingFileAppender, SmtpAppender, SmtpPickupDirAppender, TraceAppender, UdpAppender 2. Nlog : (http://nlog-project.org/) 말 그대로 advanced 한 기능을 가지고 있다. Files - single file or multiple, with automatic file naming and archival Event Log - local or remote Database - store your logs in databases supported by .NET Network - using TCP, UDP, SOAP, MSMQ protocols Command-line console - including color coding of messages E-mail - you can receive emails whenever application errors occur ASP.NET trace ... and many more 결정사항 : Nlog -> 좀 더 다양한 adapter가 있다. 궁극적으로 File or MSMQ 로깅을 사용할 예정 이기 때문에 선택.

Page 11: API Center ProtoType

2. 진행 (ORM)

향후 고려되어 가져갈 부분이나 현재는 관련 경험 인력이 없고, 작은 프로젝트 부터 적용해 봐야 한다. 많은 종류가 있으나 Open Source or MS Product(Entity Framework)를 고려. 그러나 Open Source의 경험 측면으로 선정. 성능 차이는 고려하지 않음. (게임 웹사이트에서의 CURD는 대용량이 없음.) ORM은 ProtoType에서 검토 대상 이였으나, 자사 플랫폼의 NoSQL을 고려해야 하는 부분이 있어 이번 검토 사항은 적용 가능함만 확인. 검토대상 : Nhibernate, Mybatis, Entity Framework 1. Nhibernate : (http://nhforge.org/) ORM. 많은 기능을 가지고 있다. (LINQ 같은 기능...) 2. Mybatis.NET : (http://www.mybatis.org/dotnet.html) iBatis.NET에서 변경됨. 최근 업데이트가 잘 되었다. ORM이라기 보단 Data Mapper Framework의 역할 정도. 개발자 학습은 쉬운 편… 3. LINQ & Entity Framework : (http://msdn.microsoft.com/ko-kr/library/bb399567.aspx) MS의 Entity Framework VS.NET과 잘 어울릴 수 있으나 LINQ to SQL처럼 사양길로 될 수 있음. LINQ는 사용성 (결과에 대한 select, order)이 많으므로 권장. 결정사항 : Nhibernate -> 성능, 확장성 등 검토사항으로 보면 이슈 사항이 많으나, JAVA와 호환되는 Open Source를 기준으로 검토함.

Page 12: API Center ProtoType

2. 진행 (Testing Tool)

개발된 WCF의 테스팅 도구로 편의성 및 load Test의 중점을 둠. ( OpenSTA, ACT, Grinder, soapUI 3.6.1, SOACleaner, WcfStorm-Lite-1.3 ) Web Application Stress Test - OpenSTA, ACT 1. OpenSTA : (http://opensta.org/) Load Runner에 근접한 제품, 문제는 업데이트가… 2. ACT(Application Center Test) : 요즘은 잘 안 쓰는 듯… WCF Test - soapUI 3.6.1, SOACleaner, WcfStorm-Lite-1.3 1. soapUI : (http://www.soapui.org/) Stub 클래스를 만들어서 Client 모듈을 만들어서 테스트도 가능하지만 급한 테스트 및 디버깅용으로 하기에는 적합한 툴, 기능이 많은 대신 조금 복잡하고, 그래프가 조잡함. 2. SOACleaner : (http://xyrow.com/) Web service, WCF and Rest testing tool. 테스트 작동법이 단순하고 직관적 인 듯 하나 돈 주고 사기엔 무리인 듯. 3. WcfStorm : (http://www.wcfstorm.com/wcf/home.aspx) WCF 테스트용. Performance Test도 되나 역시 돈 주고 사야 한다는… 번외 - 어떠한 어플리케이션 이던 개발 시 활용하는 것으로 권고 VS.NET 2010 : 기본적으로 unit, load, performance Test에 대한 템플릿 및 프로젝트를 제공 결정사항 : soapUI -> Open Source 기반의 웹서비스 테스트 Stub 자동 생성, performance 테스트 등 기능에 충실. VS.NET 2010 Load Test, Web Performance Test -> VS.NET의 기본 제공되는 기능으로 UNIT Test와 함께 유용한 툴임.

Page 13: API Center ProtoType

2. 진행 (Testing Tool, UI)

soapUI 3.6.1

WcfStorm

SOACleaner

VS.NET 2010

Page 14: API Center ProtoType

3. 결과

ProtoType을 통한 아키텍쳐 검증 : API Center 구현을 .NET 4.0 WCF(Windows Communication Foundation)로 구현 하여 이슈 사항 및 문제점이 없는지 검토함. -> 개발 가능 적용 가능한 Open Source 및 테스트 툴 검토 : -> 단계별 적용 필요 (Log, ORM, Ioc) 프로토타입 결과시연: (클라이언트에서 WCF Service 호출) 1. WCF 프로젝트 생성 2. VS.NET에서 WCF 테스트 3. 웹 브라우저에서 ASP로 WCF 호출 4. WCF Stub Test And Load Test 이슈 & 체크 사항 : 1. Windows 2003에서 테스트 (이슈사항은 아니나 실 환경 구성상 테스트는 해야 함.) 2. ASP와 Exception Handling 규칙 3. 클라이언트 개발 생산성을 위한 ASP 코드 템플릿 or CodeDOM or Code Generation 검토 필요 4. 개발 프로세스 및 QA(UI가 없는 데이터 서비스) 방법 검토 필요 4. 개발 가이드 필요

Page 15: API Center ProtoType

4. 참고

ASP.NET과 함께 WCF 호스팅 http://msdn.microsoft.com/ko-kr/library/aa702682.aspx WCF를 사용한 RESTful 서비스 소개 http://msdn.microsoft.com/ko-kr/magazine/dd315413.aspx WCF 성능 카운터 http://msdn.microsoft.com/ko-kr/library/ms735098.aspx ASP.NET 프로파일러 데이터를 수집하는 웹 성능 테스트가 포함된 부하 테스트 실행 http://msdn.microsoft.com/ko-kr/library/ff805009.aspx Comparison of REST Vs XML-RPC http://md314159265.wordpress.com/2006/10/30/comparison-of-rest-vs-xml-rpc/ SOA (Service Oriented Architecture) vs WOA (Web Oriented Architecture) 비교 http://blogs.msdn.com/b/hsshin/archive/2008/09/10/soa-service-oriented-architecture-vs-woa-web-oriented-architecture.aspx open source testing tools http://www.opensourcetesting.org/performance.php Grinder http://grinder.sourceforge.net/ OpenSTA http://opensta.org/ NHibernate http://nhforge.org/ iBatis.NET http://ibatis.apache.org/ mybatis.NET http://www.mybatis.org/dotnet.html LINQ & Entity Framework : http://msdn.microsoft.com/ko-kr/magazine/dd263098.aspx http://msdn.microsoft.com/ko-kr/library/bb399567.aspx Log4Net http://logging.apache.org/log4net/index.html Nlog http://nlog.codeplex.com/ What is your DIP/IOC Container of choice? http://www.dominicpettifer.co.uk/?showResults=True CruiseControl.net http://confluence.public.thoughtworks.org/display/CCNET/Welcome+to+CruiseControl.NET