misspattern
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
3,220
On Slideshare
2,737
From Embeds
483
Number of Embeds
8

Actions

Shares
Downloads
48
Comments
0
Likes
2

Embeds 483

http://arload.wordpress.com 468
http://www.hanrss.com 8
file:// 2
http://www.slideshare.net 1
url_unknown 1
http://183.177.70.16 1
http://localhost 1
https://arload.wordpress.com 1

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. 미워도 다시 보는 이야기. 패턴 이야기.
  • 2. 손영수 arload@live.com EvaCast 리더 http://www.evacast.net 데브피아 아키텍쳐 시삽 Blog - 아키텍트로 가는 길. http://www.arload.net
  • 3. 오늘 나눌 이야기 거리들. § 패턴의 정의 (패턴이란?) § 패턴에 대한 오해와 진실 § 패턴으로 가는 길 § 패턴 빌드 오더 § 패턴 + 생산성 두 마리 토끼 잡기
  • 4. 1. 도대체.. 패턴은 무엇일까?
  • 5. Pattern is Father
  • 6. 우리는 아버지와 비슷한 생김새, 성격, 습관 등을 가지고 있다.
  • 7. 이미 해결한 문제와 유사한 문제들은.. 유사한 방법(패턴)으로 해결 할 수 있다.
  • 8. 그럼 패턴은 과연.. 내가 왜 적용하려면 안될까?
  • 9. 2. 패턴에 대한 오해와 진실
  • 10. GoF 23개의 Pattern으로 우아한 프로그램 만들기?
  • 11. 지구상의 패턴들.. + 논문 형태로 발표된 패턴 몇 백개.
  • 12. 패턴은 섬이 아니다.
  • 13. 여러 개의 패턴이 뭉쳐서 움직인다. Common Strategy Part Variable <<CREATES>> Part (Modularity) Factory Log Security <<LINKS>> Configurable Part Component Transaction Configurator
  • 14. 여러 개의 패턴이 뭉쳐서 움직인다.
  • 15. 패턴은 소프트웨어 설계 쪽만 다룬다?
  • 16. 솔로들을 위한 패턴? http://www.amazon.com/Dating-Design-Patterns-Solveig-Haugland/dp/0974312002/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1239125189&sr=8-1
  • 17. 소프트웨어 관련된 모든 행위들을 다룬다. § 팀을 이루어 설계 대련을 수행하는 패턴 + œ http://portal.acm.org/citation.cfm?id=273484 § 팀 생산성을 향상 시키는 패턴 œ http://arload.wordpress.com/2008/09/02/teamproductivity/ 그 외에도 기타 등등…. § 지리적으로 떨어져 있는 팀 협업하는 패턴 œ http://hillside.net/plop/2006/Papers/Library/patternstoenablePLoP2006_sub mission_v4.pdf http://arload.wordpress.com/2008/04/02/plopfestival/ œ http://hillside.net/plop/2004/papers/vbricout0/PLoP2004_vbricout0_0.doc § 효율적인 회의를 이끄는 패턴 œ http://hillside.net/europlop/europlop2005/workshops/
  • 18. 패턴은 만병통치약?
  • 19. §비약적인 성능 향상 ? §생산성 증대 ? §최적화 ? §심지어 Silver Bullet ??
  • 20. 패턴의 장점은.. 유연성 확장성
  • 21. 3. 패턴으로 가는 길...
  • 22. 패턴에 대한 올바른 마음가짐
  • 23. 아키텍쳐의 이해 대상 Martin Fowler says … The expert developers working on that project have a shared understanding of the system design. This shared understanding is called ‘architecture architecture’ architecture http://www.martinfowler.com/ieeeSoftware/whoNeedsArchitect.pdf
  • 24. 역시 패턴도.. 팀 내 의사 소통의 수단이 되기 위해선, 팀원들의 이해가 필요하다.
  • 25. 과유불급
  • 26. 패턴의 남용. 리소스 제약이 심한 시스템에 유연성 추가하기?? - Pipe & Filter - Component Configurator
  • 27. 패턴의 가족관계를 찾아라!
  • 28. Compound Pattern versus Composite Pattern
  • 29. 전형적인 가족관계 Common Strategy Variable Part <<CREATES>> Part Factory Log Security <<LINKS>> Configurable Part Component Transaction Configurator
  • 30. 여러분을 위해 하나씩 나누어 설명드리겠습니다.
  • 31. Strategy 인공위성과 슈퍼 컴퓨터의 정렬 로직은 같을까요? 같을까요? Super satellite Computer
  • 32. Strategy void main() ISort { //pSort라는 인터페이스를 선언한다 ISort iSort; +Sorting() if (GetSystemInfo() == Low) { //인공위성에서는 Bubble Sorting 사용 iSort = new CBubble(); } else { //슈퍼 컴퓨터에는 Quick Sorting 사용 Bubble Quick iSort = new CQuick(); } iSort.Sorting(); +Sorting() +Sorting() }
  • 33. Template Method Application ODBC(JDBC) API ODBC (JDBC) Driver Manager MSSQL Driver Oracle Driver
  • 34. Template Method Class QueryTemplate { public void doQuery() { QueryTemplate string dbCommand; dbCommand = FormatConnect(); dbCommand = FormantSelect(sql); +doQuery() } ... #FormatConnect() } #FormatSelect() void main() { //pQT라는 인터페이스를 선언한다 Inversion of Control QueryTemplate QT; Sql sql = “select * from AA”; (Hollywood Principle) if (GetDBProductInfo() = Oracle) QT = new OracleQT(); else OracleQT SqlSvrQT QT = new SqlSvrQT(); Qt->doQuery(sql); #FormatConnect() #FormatConnect() } #FormatSelect() #FormatSelect()
  • 35. Component Configurator 설정 파일 정보가 바뀌면 소프트웨어의 코드 수정없이 속성이 변경되어라!! 변경되어라!! Text XML Based Log Component DES RSA Configuration HTTP FTP Protocol File Protocol Great Architect
  • 36. Component Configurator Component Component Repository +Init() +Fini() +Suspend() +Resume() Component +Info() Configurator Core Core Component Component 38
  • 37. Component Configurator void main() { <xml version =“1.0”> <Components> <!– Protocol 정보 선택 --> IMessage iMessage = new Message(); <Protocol> if (GetComponentInfo(“Protocol”) = HTTP) HTTP iMessage->Protocol = HTTP; </Protocol> else iMessage->Protocol = FTP; <!– Log 정보 선택 --> <Log> if (GetComponentInfo(“Log”) = XML) XML iMessage->Protocol = XML; </Log> else Advanced Topic iMessage->Protocol = TEXT; <!– 보안 알고리즘 선택 --> Reflection <SecuAlgorithm> ... DES </SecuAltorithm> iMessage->Send(“Hello”);} </Components> 39 Devpia A&D EVA 4/13/2009
  • 38. Reflection Meta Level further modifies meta- meta-level components MetaObject A MetaObject B MOP modifies retrieves information uses uses uses uses Component A further Component B UserInterface base- base-level provides components access to Base Level
  • 39. Reflection ModuleBuilder AssemblyModule = CreatedAssembly.DefineDynamicModule(quot;MathModulequot;,quot;Math.dllquot;); TypeBuilder MathType = AssemblyModule.DefineType(quot;DoMathquot;, TypeAttributes.Public | TypeAttributes.Class); System.Type [] ParamTypes = new Type[] {typeof(int),typeof(int) }; MethodBuilder SumMethod = MathType.DefineMethod(quot;Sumquot;, MethodAttributes.Public, typeof(int), ParamTypes); ParameterBuilder Param1 = SumMethod.DefineParameter(1,ParameterAttributes.In, quot;num1quot;); ParameterBuilder Param2 = SumMethod.DefineParameter(1,ParameterAttributes.In, quot;num2quot;); ... MathType.CreateType(); return CreatedAssembly;
  • 40. Reflection using System; using System.Reflection; ... public class EmitDemoTest { static void Main() { ... System.Type MathType = EmitAssembly.GetType(quot;DoMathquot;); object[] Parameters = new object [2]; Parameters[0] = (object) (5); Parameters[1] = (object) (9); MathType,false); object EmitObj = Activator.CreateInstance (MathType,false); MathType.InvokeMember(quot;Sumquot;, object Result = MathType.InvokeMember(quot;Sumquot;, BindingFlags.InvokeMethod ,null,EmitObj,Parameters); null,EmitObj,Parameters); Console.WriteLine(quot;Sum of {0}+{1} is {2}quot;, Parameters[0],Parameters[1],Result.ToString()); Console.ReadLine(); } }
  • 41. 다시 보는 가족 관계 Strategy Common Variable Part <<CREATES>> Part Factory Log Security <<LINKS>> Configurable Part Component Transaction Configurator
  • 42. 패턴 가족 이야기 2
  • 43. 스타에서의 Observer Change 1. Observation Data Starcraft 때문에 생긴 오해!! 2. Notification 45 Devpia A&D EVA 4/13/2009
  • 44. 패턴에 있는 Observer는 Observer는 통보 받는 자(Notifieer)이다. Notifieer)이다.
  • 45. Hollywood Principle Don’t Call us!! Manager Applicants
  • 46. Hollywood Principle Don’t Call us! We Call You!!! Manager Applicants
  • 47. 정확한 Observer Change 1. Change 2. Change Data Manager Client (Source) 3. Notification Observer is Notifieer Client (Type1) Client (Type2) Client (Type3)
  • 48. Observer Subject Observer +Update () +Attach (Observer o) +Detach (Observer o) +Notify() Concrete Concrete Observer Subject
  • 49. 패턴 가족 이야기 2 Get Info Change Load Handler Config File Notifiy Client A Overhead!! Configuration File App.config File I/O Web.config Client B
  • 50. 패턴 가족 이야기 2 Get Info Change Load Handler Config File Notifiy Client A FileSystemWatcher .NotifyFilter Configuration File App.config Web.config A Smart Developer
  • 51. 패턴 가족 이야기 3
  • 52. 무거운 의존관계.
  • 53. 무거운 (Heavy Dependency) 상황 // your API public class Tracer { MessageQueue mq = new MessageQueue(…); public void Trace(string message){ mq.Send(message); } } // your customer’s program that is hard to test Tracer tracer = new Tracer(); public void ProcessOrder(Order order){ tracer.Trace(order.Id); … }
  • 54. Inversion of Control // your better API public abstract class TraceListener { public abstract void Trace(string message); } public class Tracer { TraceListener listener; Template Method public Tracer(TraceListener listener){ this.listener & listener; = Publisher/Subscriber } public void Trace(string message){ listener.Trace(message); } }
  • 55. Dependency Injection // your customer’s program that is easier to test Tracer tracer = new Tracer(new FileListener()); public void ProcessOrder(Order order){ tracer.Trace(order.Id); … }
  • 56. Dependency Injection Container // customer’s program that is even easier to test Tracer tracer = container.Resolve<Tracer>(); public void ProcessOrder(Order order){ tracer.Trace(order.Id); … } Check out DI Containers (a.k.a. IoC Containers): autofac, Castle Windsor, PicoContainer.NET, Spring.NET, StructureMap, Unity, nInject and others. http://www.nInject.org http://www.springframework.net/
  • 57. 많은 가족관계 (Compound Pattern) 사례를 알아야.. 실제 설계 시 적용하기 쉽다.
  • 58. 패턴과 SoC (Separation of Concerns)
  • 59. SoC is quot;focusing one's attention upon some aspect”
  • 60. 결국 패턴은 복잡한 문제를 잘 SoC 하는 경험들을 모아놓은 산물..
  • 61. JAWS - 웹 서버의 복잡한 문제를 잘 SoC한 사례 패턴을 이용한 웹 서버 만들기 (한국어 강좌) http://www.devpia.com/NET2/EvaCast/Lecture/?cu=view&r=11
  • 62. 하지만 현실에는.. 유연성에만 초점을 맞추어 SoC 할 수 없다. 분산 객체 사례.. CORBA, Web Service..
  • 63. 그래서 발생 하는 Ripple Effect (파문 효과).
  • 64. SoC in motion. Vision statement RTM Feature complete Release Testing Planning M1 M2 Technology Preview Beta 1 Beta 2 RC1 Milestone Quality
  • 65. 4. 패턴의 올바른 빌드 오더..
  • 66. 초보를 위한 패턴 빌드오더.. 68 Devpia A&D EVA 4/13/2009
  • 67. POSA 1 (아키텍쳐 패턴) œ Layer œ Model -View-Controller œ Pipe & Filter œ Presentation -Abstraction - Control œ Broker œ Reflection œ Master Slave œ Client – Dispatcher œ Counted Pointer œ Forwarder-Receiver œ Blackboard
  • 68. POSA 2 (분산 객체를 위한 패턴)
  • 69. POSA 3 (자원 관리를 위한 패턴) § Resource Lifecycle § Resource Acquisition œ Caching œ Lookup œ Pooling œ Lazy Acquisition œ Coordinator œ Eager Acquisition œ Resource Lifecycle Manager œ Partial Acquisition § Resource Release œ Leasing œ Evictor 71 Devpia A&D EVA 4/13/2009
  • 70. 그 외 패턴들.. 72 Devpia A&D EVA 4/13/2009
  • 71. 그 외 패턴들.. 73 Devpia A&D EVA 4/13/2009
  • 72. 그 외 패턴들.. 74 Devpia A&D EVA 4/13/2009
  • 73. 5. 패턴 + 생산성 증대. 내 친구.. 를 소개합니다.
  • 74. EA의 기능 소개.. § UML 2.1 Full 지원 § 모델링 정보를 다양한 DBMS와 연동하여 저장가능 § 형식을 파괴하는 모델링 지원 œ Use Case에서도 Class Diagram의 요소들을 사용가능 § 다양한 언어를 지원 œ C++, C#, Delphi, Java, VB, VB.NET, PHP, Python § 강력한 코드 탬플릿 생성 기능 § 강력한 역공학 기능 § 다양한 Plug-in 지원 § 테스팅 생성및 관리 (기존 Unit Testing 과 연동됨) § 가장 저렴한 가격 1 Copy당 20만원 ~ 30만원 사이 76
  • 75. Code Template을 이용한 공장 만들기 77
  • 76. 1. StreoType 생성 Setting – UML – Streotypes 78
  • 77. 2. 클래스 설계 후 StreoType 할당 79
  • 78. 3. 메소드 속성에 맞는 태깅생성 예를 들어 현재 재고를 파악하는 메소드는 Database에서 데이터를 가져오는 (Get) 타입인 경우. 80
  • 79. 4. 코드 생성 탬플릿 작성 Settings – Code Generation Templates 다양한 생성할 코드 언어 선택 입력 생성할 코드 템 플릿 Namespace, Class, Operation 등 스트레오 타입 별 템플릿을 지 정 81
  • 80. 스트레오 타입 코드 템플릿 추가 82
  • 81. 스트레오 템플릿 추가 § Import Section œ DLL 이나 Namespace를 추가하는 부분 § Operation Body œ 메소드 구현 부에 사용자 코드를 추가 함 83
  • 82. 간단한 예 - OperationBody %if opTag:quot;DataAccessTypequot; ==quot;getquot; % //데이터를 얻어오는 쿼리 IDataReader reader = null; %opReturnType% retVal = new %opReturnType%(); try { // 1. Create the Database object, using the default database service. Database db = DatabaseFactory.CreateDatabase(); log.Debug(quot;Create Database Factoryquot;); // 2. Create DB Command string sqlCommand = quot;$queryNamequot;; dbCommand = db.GetStoredProcCommand(sqlCommand); log.Debug(quot;GetStoredProcCommand(quot; + sqlCommand + quot;)quot;); …. } %elseIf opTag:quot;DataAccessTypequot; ==quot;setquot;% //데이터를 쓰는 쿼리 DbConnection connection = null; UInt32 retVal = 0; try { …….. 84 84
  • 83. Reverse Engineering 85
  • 84. 통합 개발 환경 구축하기 86
  • 85. 통합 개발 환경 구축하기 87
  • 86. 개발 환경 구축 – 프로세스로 디버깅 하기 88
  • 87. 프로세스로 디버깅하기 89
  • 88. 디버깅 내용을 Sequence Diagram으로 생성 90
  • 89. 디버깅 내용을 Sequence Diagram으로 생성 91
  • 90. Unit Testing
  • 91. Unit Testing과 연동됨 § 현재 xUnit (JUnit, Nunit) 형태로 생성및 관 리가 가능함. § 다른 Unit Test는 Package Script로 연동가 능.
  • 92. Visual Studio.NET 내장 UnitTest (mstest)셋팅 법
  • 93. 연동된 Unit Test
  • 94. 참고자료 § Frank Buschmann et al, “Pattern-Oriented Software Architecture : A System of Patterns”, Volume 1, Wiley § Douglas Schmidt et al, “Pattern-Oriented Software Architecture”, Volume 2, Wiley § Eric Gamma et al, “Design Patterns : Elements of Reusable Object Oriented Software” , Addison Wesley § Pipe & Filter Pattern, http://www.codeproject.com/cs/design/PipesAndFilters.asp § Reflection Pattern, http://www.codeproject.com/csharp/introreflection.asp
  • 95. 참고자료 § “Soc in motion” http://www.betaversion.org/~stefano/linotype/news/143/ § FileSystemWatcher.NotifyFilter http://msdn2.microsoft.com/en- us/library/system.io.filesystemwatcher.notifyfilter(VS.80).aspx
  • 96. 참고자료 Douglas C. Schmidt (PLoP Editor, POSA 2, 4 Writter) JAWS: An Application Framework for High Performance Web System http://citeseer.ist.psu.edu/81775.html (En) http://www.devpia.com/net2/EvaCast/Lecture/?cu=view&r=11 (Kr) Ralph Johnson (GoF , Design Patterns) Evolving Frameworks http://st-www.cs.uiuc.edu/users/droberts/evolve.html (En) http://arload.wordpress.com/2008/09/15/evolvingframeworks/ (Kr)
  • 97. 참고자료 Robert C. Martin Principles of Package Architecture (Design Principles and Design Pattern s) http://www.objectmentor.com/resources/articles/Principles_and_Patterns. pdf (En) http://www.devpia.com/net2/EvaCast/Lecture/?cu=view&r=108 (Kr) For Korean People.. Load to Architect http://www.arload.net EvaCast (Online Free Lecture) http://www.evacast.net
  • 98. Question? 이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다. This work is licensed under Creative Commons Korea Attribution 2.0 License.