[[TableOfContents]] [[pagelist(^Spring)]] = 스터디 소개 = * [Spring Framework 3]를 íƒí—˜í•´ë³´ìž! * 스터디 시간 : 2011ë…„ 1ì›” 7ì¼ë¶€í„° 매주 '''ê¸ˆìš”ì¼ 7시'''. ê·¸ë¦¬ê³ í•„ìš”í•˜ë©´ ë” ëª¨ìž„ = ì°¸ì—¬ìž = * 코치: [변형진] * 리ë”: [ì´ì›í¬], [강성현] * [김수경], [서지혜], [ì •ì˜ì •], [강소현], [서민관], [서ì˜ì£¼] = 목표 = * [Spring]ì˜ í•µì‹¬ 가치와 ì›ë¦¬ì— 대한 ì´í•´ = 주êµìž¬ = * [http://book.naver.com/bookdb/book_detail.nhn?bid=6330335 í† ë¹„ì˜ ìŠ¤í”„ë§ 3] * 1부는 ì˜ˆì œë¥¼ ì ì§„ì 으로 ê°œì„ í•´ 나가ë„ë¡ êµ¬ì„±ë˜ì–´ 있으므로 ê°ê°ì˜ ê°œì„ ì´ ë¬´ì—‡ì„ ê°œì„ ì‹œì¼œë‚˜ê°€ëŠ” 것ì¸ì§€ ì´í•´í•˜ëŠ” ê²ƒì´ ì¤‘ìš” * Spring Framework 3 다루는 다른 êµìž¬ 가능 * êµìž¬ê°€ ë¹„ì‹¸ê³ ë§¤ìš° 무거워 참여ìžë“¤ì´ ìŠ¤í„°ë””ì— í™œìš©í• ìˆ˜ 있ë„ë¡ ZeroPage ì±…ìž¥ì— ë‘˜ í† ë¹„ì˜ ìŠ¤í”„ë§ 3를 2ê¶Œ 주문함 = ì§„í–‰ ë°©ì‹ = * 세미나가 ì•„ë‹ˆë¼ ê°ìžê°€ 공부한 ê²ƒì„ ë°”íƒ•ìœ¼ë¡œ ê³µìœ í•˜ê³ ì •ë‹µì„ ì°¾ì•„ë‚˜ê°€ëŠ” 스터디 * 코치는 리ë”ê°€ ì•„ë‹ˆë¼ ë„¤ë¹„ê²Œì´í„°ì˜ ì—í• * 스터디 모임ì—서는 ê°ìž 한 주간 í•™ìŠµí•˜ê³ ê³¼ì œë¥¼ 수행한 ê²½í—˜ì„ ê³µìœ í•˜ê³ ê¶ê¸ˆì¦ì„ í•´ê²° = 규칙 = * 코치 ì°¸ì„ ì—¬ë¶€ì™€ ìƒê´€ì—†ì´ 스터디를 ì •ì‹œì— ì‹œìž‘í•œë‹¤. * 스터디 대ìƒì´ 매우 방대하므로 충분한 ê°œì¸ì ì¸ í•™ìŠµê³¼ ê³¼ì œ 수행, ê·¸ë¦¬ê³ ìŠ¤í„°ë”” 모임ì—서 ë§Žì€ ì§ˆë¬¸ì„ í• ê²ƒ * ì¸ì›ì´ 충분하므로 ì œë•Œ ë”°ë¼ì˜¤ì§€ 않는 ì‚¬ëžŒì€ ë¶€ë‹´ì—†ì´ ë²„ë¦´ìˆ˜ë„?! = ì§„í–‰ = == 1ì›” == === ì¶œì„ì²´í¬ === || || 1/7 || 1/14 || 1/21 || 1/28 || || [ì´ì›í¬] || O || O |||| - || || [강성현] || O || O || O || O || || [김수경] || O || O || O || O || || [서민관] || O || O || O || O || || [서ì˜ì£¼] || O || O || O || O || || [서지혜] || O || O || O || O || || [강소현] || O || X || O || X || || [ì •ì˜ì •] |||||||| - || === 7ì¼ === * 7시 ~ 9시 30ë¶„ @ 6피 * 킥오프 * ë¦¬ë” ì„ ì • * êµìž¬ 소개 * ì§„í–‰ ë°©ì‹ ê²°ì • * 들어가며 * 피드백 === 14ì¼ === * ê³¼ì œ: SpringSource Tool Suiteì—서 Spring MVC Template 프로ì 트 ìƒì„± * í† ìµì„¬ìœ¼ë¡œ ê°„... [강소현]... ==== íšŒê³ ==== ===== [서ì˜ì£¼] ===== 21ì¼ì— 한 것들 1. ë°°ìš´ 것 1.1 ApplicationContext를 ìƒì„±í• 시 xmlì„ ì‚¬ìš©í•˜ëŠ” ë°©ë²•ë„ ìžˆê³ ì§ì ‘ ì„¤ì •í•´ì£¼ëŠ” ë°©ë²•ë„ ìžˆëŠ”ë° xmlì„ ì‚¬ìš©í• ì‹œ ì¢‹ì€ ì ì€ ì½”ë”©ê³¼ ì„¤ì • ë‹´ë‹¹ì„ ë¶„ë¦¬í• ìˆ˜ 있다는 ì ì´ ìžˆë‹¤. ===== [서민관] ===== * 14ì¼ì— 한 것들 1. ë°°ìš´ 것 1.1. ì „ëžµ 패턴 : ì „ëžµ(ì•Œê³ ë¦¬ì¦˜)ì˜ ë¶„ë¦¬ë¥¼ 한다는 ì˜ë¯¸. ì–¸ì–´ì— ë”°ë¼ íŒ¨í„´ì„ ì 용하는 ë°©ë²•ì´ ì¡°ê¸ˆì”© 다를 ìˆ˜ë„ ìžˆë‹¤. ì±…ì—서는 interface를 사용해서 ì „ëžµì„ ë¶„ë¦¬í•˜ì˜€ëŠ”ë°, ì´ê²ƒì€ ìžë°”ì— ì–´ìš¸ë¦¬ëŠ” ì „ëžµì˜ ë¶„ë¦¬ë¼ê³ 한다. 1.2. Runtime Injection : ë‹¤í˜•ì„±ì„ ë§Œë“¤ê¸° 위해서 사용한 방법. ê°œì¸ì 으로 ì½”ë”©í• ë•Œ ë‹¤í˜•ì„±ì˜ ì‚¬ìš©ì´ ì¢€ ë¶€ì¡±í•˜ë‹¤ê³ ëŠê¼ˆëŠ”ë°, Runtimeì‹œì— ì˜¤ë¸Œì íŠ¸ê°„ì˜ ê´€ê³„ë¥¼ 맺게 하지 ì•Šê³ ê·¸ëƒ¥ í´ëž˜ìŠ¤ì— ë§žì¶˜ ì½”ë”©ì„ í–ˆê¸° ë•Œë¬¸ì¸ ê²ƒ 같다. 앞으로 ì½”ë”©ì„ í•˜ëŠ”ë° ë¨¸ë¦¿ì†ì— 넣어ë‘ê³ ìžì£¼ ì¨ ë³´ëŠ” ê²ƒì´ ì¢‹ì„ ê²ƒì´ë¼ ìƒê°ëœë‹¤. 2. ë¬¸ì œì 2.1. Class.forName() ì—러 : í•´ê²° ë°©ë²•ì€ ì•„ëž˜ì— ì„œìˆ . 3. MVC 프로ì 트 - HomeController.javaì˜ home()ì—서 Welcome home!ì„ í•˜ê³ return "home";ì„ í•˜ëŠ”ë° í”„ë¡œì 트를 실행해보면 Hello world!ê°€ 나온다. 어떻게 ëœ ê²ƒì¸ê°€. - HomeController는 MVC 모ë¸ì˜ 컨트롤러로 ë·°ì— ëª¨ë¸ì„ ë°”ì¸ë”©í•˜ëŠ” ì—í• ì„ ë‹´ë‹¹í•œë‹¤. home() 메소드 ë‚´ë¶€ì˜ Welcome home!ì€ loggerì— ì°ížˆëŠ” 문ìžì—´ì´ê¸° ë•Œë¬¸ì— ì‹¤ì œë¡œ ì‹¤í–‰ì‹œì— ë³´ì´ëŠ” ê²ƒì€ ì•„ë‹ˆë‹¤. HomeControllerê°€ 하는 ì£¼ëœ ì—í• ì€ return "home";ì„ í•¨ìœ¼ë¡œì¨ HomeController를 사용하는 쪽ì—서 home.jsp(ë·°)를 ì°¾ì„ ìˆ˜ 있게 하는 것ì´ë‹¤. - ê²°êµ í™”ë©´ì— ë‚˜íƒ€ë‚˜ëŠ” ê²ƒì€ ë·°ì¸ home.jspì´ë¯€ë¡œ Hello world!는 ì´ìª½ì— 들어있다. * ì´í›„ì— í•œ 것 1. Class.forName() ì—러 í•´ê²°(p.59, 60ì˜ ì˜ˆì œ 실행). 1.1. ìš°ì„ MySQLì„ ë°›ì•„ì„œ 설치한다. 1.2. MySQL 실행 후 test í…Œì´ë¸” ì„ íƒ. ì±…ì˜ ì˜ˆì œëŒ€ë¡œ users를 ë§Œë“ ë‹¤. 1.3. ì±…ì˜ ì†ŒìŠ¤ë¥¼ 그대로 ì³¤ì„ ê²½ìš° Class.forName("com.mysql.jdbc.Driver"); 문장ì—서 ì—러가 ë‚˜ëŠ”ë° ì¸í„°ë„·ì—서 mysql-connector-java-X.X.X.jar 를 받아서 참조 ë¼ì´ë¸ŒëŸ¬ë¦¬ì— 추가한다. 1.4. Connection c = DriverManager.getConnection(...); 문장ì—서 ì—러가 ë‚˜ëŠ”ë° ë¬¸ìžì—´ì˜ localhost/springbook ë¶€ë¶„ì„ ìžì‹ ì´ ì‚¬ìš©í• í…Œì´ë¸”ì˜ ì´ë¦„으로 바꾸어 주어야 한다. localhost/test로 바꿔준다. ì´í›„ì˜ ë¬¸ìžì—´ ë‘ ê°œëŠ” ê°ê° ìžì‹ ì˜ MySQL ê³„ì • ì´ë¦„(기본값 root), MySQL 비밀번호를 ì 어주면 ëœë‹¤. 1.5. 실행 -> 완료. 2. ìŠ¤í”„ë§ í”„ë ˆìž„ì›Œí¬ ì‚¬ìš©í•˜ê¸°(p.99ì˜ ì˜ˆì œ) 2.1. ìš°ì„ ì±…ì—서 외부 ë¼ì´ë¸ŒëŸ¬ë¦¬ë¥¼ ì‚¬ìš©í•˜ê³ ìžˆëŠ”ë°, STSì—는 필요한 ë¼ì´ë¸ŒëŸ¬ë¦¬ê°€ 들어있지 ì•Šì€ ê²ƒ 같다. ì´ìª½ 페ì´ì§€(http://www.tutorials4u.net/spring-tutorial/spring_install.html)를 ë³´ê³ ë¼ì´ë¸ŒëŸ¬ë¦¬ë¥¼ 받아야 한다. 받아서 ì••ì¶•ì„ í’€ê³ spring-framework-3.0.5.RELEASE/dist í´ë”ì— ìžˆëŠ” jar 파ì¼ë“¤ì„ 프로ì íŠ¸ì— í¬í•¨ì‹œì¼œì£¼ë©´ AnnotationContext, AnnotationConfigApplicationContext, @Configuration, @Bean ë“±ì„ ì‚¬ìš©í• ìˆ˜ 있게 ëœë‹¤. * 21ì¼ì— 한 것들 1. ë°°ìš´ 것 1.1. DIP : 멤버 변수를 외부ì—서 주입 ë°›ì„ ë•ŒëŠ” 구체 í´ëž˜ìŠ¤ê°€ 아닌 ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ ì´ìš©í•œë‹¤. 최대한 í´ëž˜ìФ ë‚´ë¶€ì—서 변수를 í• ë‹¹í•˜ì§€ ë§ê³ (new를 사용하지 ë§ê³ ) ì£¼ìž…ì„ ë°›ë„ë¡ í•œë‹¤. 1.1.1. Context : 스프ë§ì€ DI ê¸°ìˆ ì„ ë§Žì´ ì‚¬ìš©í•˜ê³ ìžˆëŠ”ë°, 스프ë§ì—서 ê°ì²´ê°„ì˜ ì˜ì¡´ê´€ê³„ ì£¼ìž…ì„ ì½”ë“œë¡œë¶€í„° 분리하는 ì—í• ì„ Contextê°€ ë‹´ë‹¹í•˜ê³ ìžˆë‹¤. 1.2. 불변ê°ì²´ì™€ 가변ê°ì²´ : 불변ê°ì²´ëŠ” ìƒì„±ëœ ì´í›„ì— ë‚´ë¶€ì˜ í•„ë“œì— ëŒ€í•œ ìˆ˜ì •ìžê°€ 없는 ê°ì²´ë¥¼ ë§í•œë‹¤. ë‚´ë¶€ í•„ë“œì— ì ‘ê·¼ì´ ë¶ˆê°€ëŠ¥í•˜ê¸° ë•Œë¬¸ì— ê°’ì´ ë³€í•˜ì§€ 않는다. ë”°ë¼ì„œ 한 번 ìƒì„±í•œ ì´í›„ì—는 필요한 ê³³ì— ê°™ì€ ê°ì²´ë¥¼ ìž¬ì‚¬ìš©í• ìˆ˜ 있다. 가변ê°ì²´ëŠ” ë‚´ë¶€ì˜ ê°’ì— ì ‘ê·¼í• ìˆ˜ 있는 메소드를 공하는 ê°ì²´ë¥¼ ë§í•œë‹¤. 가변ê°ì²´ë¥¼ 불변ê°ì²´ì²˜ëŸ¼ 한 번 ìƒì„±í•œ í›„ì— ì—¬ëŸ¬ ê³³ì—서 ì‚¬ìš©í• ê²½ìš° 한 ê³³ì—서만 ê°’ì´ ë°”ë€Œì–´ë„ ëª¨ë“ ê°’ì´ ë‹¤ 바뀌므로 가변ê°ì²´ëŠ” 매번 ì‚¬ìš©í• ë•Œ 마다 새로 ìƒì„±(new)ì„ í•´ 주어야 한다. 2. 해결한 것 2.1. 스프ë§ì˜ ConfigurationContext ë‚´ë¶€ì˜ Beanì—서 Context를 ìƒì„±í•´ì„œ DI를 í•˜ë ¤ê³ í–ˆì„ ë•Œ 오류 ë°œìƒ : Context ë‚´ë¶€ì—서 Context를 ìƒì„±í•˜ëŠ” 코드를 사용했기 ë•Œë¬¸ì— ìƒì„±ì´ 재귀ì 으로 ì´ë£¨ì–´ì ¸ì„œ 무한 반복ëœë‹¤. ê·¸ë¦¬ê³ ë””ë²„ê·¸ 시 main ì´ì „ì— ì—러가 ì¼ì–´ë‚¬ëŠ”ë°, ê·¸ê²ƒì€ ìŠ¤í”„ë§ì˜ Context는 시작 ì „ì— Beanë“¤ì„ ìƒì„±í•˜ê¸° 때문ì´ë‹¤. mainì— ì§„ìž…í•˜ê¸° ì´ì „ì˜ ìŠ¤í”„ë§ ì´ˆê¸°í™” 단계ì—서 오류가 ì¼ì–´ë‚¬ë‹¤ëŠ” 얘기. ===== [김수경] ===== * ì§€ë‚œì£¼ì— í•œ 것 1. Spring MVC Template Project ìƒì„±í•˜ì—¬ ì‹¤í–‰í•´ë³´ë ¤ë‹¤ 실패. 1. í† ë¹„ì˜ ìŠ¤í”„ë§ 1.2까지 ì½ìŒ. * ë§‰í˜”ë˜ ê²ƒ 1. Spring Project를 ìƒì„±í•˜ê³ ì‹¤í–‰í•˜ëŠ”ë° Tomcat 설치가 필요하여 í”ŒëŸ¬ê·¸ì¸ ì„¤ì¹˜í•¨. 1. Spring Project를 ìƒì„±í•˜ê³ ì‹¤í–‰í•˜ëŠ”ë° í¬íŠ¸ê°€ ì´ë¯¸ 사용중ì´ë¼ ë˜ì§€ 않ìŒ. 1. ì±… 1장ì—서 Statement와 PreparedStatement를 ë´¤ëŠ”ë° ë‘ ê°œì˜ ì°¨ì´ì ì„ ìž˜ ëª¨ë¥´ê² ë‹¤. ===== [강성현] ===== ===== [서지혜] ===== ===== [ì´ì›í¬] ===== 95page frameworkì— ëŒ€í•œ 해설. library와 frameworkì˜ ì°¨ì´ì . - Framework ì œì–´ì˜ ì—ì „ ê°œë…ì´ ì ìš©ëœ ëŒ€í‘œì ì¸ ê¸°ìˆ - Framework 와 libraryê°€ ê°™ì€ê²ƒì€ 아님 - ë¼ì´ë¸ŒëŸ¬ë¦¬ë¥¼ 사용하는 ì• í”Œë¦¬ì¼€ì´ì…˜ 코드는 ì• í”Œë¦¬ì¼€ì´ì…˜ íë¦„ì„ ì§ì ‘ ì œì–´í•œë‹¤. - í”„ë ˆìž„ì›Œí¬ëŠ” 거꾸로 ì• í”Œë¦¬ì¼€ì´ì…˜ 코드가 í”„ë ˆìž„ì›Œí¬ì— ì˜í•´ 사용ëœë‹¤. ===== [강소현] ===== Ioc로 DaoFactory를 만드는 것까지 했습니다 ã… ã… spring-framework-3.0.5.RELEASE/dist í´ë”ì— ìžˆëŠ” jar 파ì¼ë“¤ì„ 프로ì íŠ¸ì— í¬í•¨ì‹œì¼°ëŠ”ë°, ì±…ì— jar íŒŒì¼ ëª©ë¡ì— ìžˆë˜ ê²ƒ 중 org.springframework.~~ ê°€ 아닌 ê²ƒë“¤ì´ ë¹ ì ¸ìžˆì–´ì„œ 그런가 아래와 ê°™ì€ ì˜¤ë¥˜ê°€ 나는.. 아니면 pom.xmlì— í¬í•¨ ì•ˆì‹œí‚¤ê³ , ë¼ì´ë¸ŒëŸ¬ë¦¬ë¡œ 추가해서 그런 걸지ë„?? Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory at org.springframework.context.support.AbstractApplicationContext.<init>(AbstractApplicationContext.java:160) at org.springframework.context.support.AbstractApplicationContext.<init>(AbstractApplicationContext.java:213) at org.springframework.context.support.GenericApplicationContext.<init>(GenericApplicationContext.java:101) at org.springframework.context.annotation.AnnotationConfigApplicationContext.<init>(AnnotationConfigApplicationContext.java:63) at springbook.user.dao.UserDaoTest.main(UserDaoTest.java:13) Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory at java.net.URLClassLoader$1.run(URLClassLoader.java:202) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:307) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:248) ... 5 more === 17ì¼ === ---- [2011년활ë™ì§€ë„], [스터디분류]