[[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을 사용할시 좋은 점은 코딩과 설정 담당을 분리할 수 있다는 점이 있다. 1.2 pojo기반의 프로그래밍은 모듈을 조립해서 쓰기 쉽기 떄문에 재사용성이 높아진다. 이 때 조립을 코드부분에 맡기면 조립시 코드를 바꿔야 컴파일이 가능하지만 xml에 조립을 맡기면 설정xml을 바꾸는 것만으로도 쉽게 설정을 바꿔서 조립이 가능하다. 1.3 테스트 가능한 프로그램 : 모듈화가 잘 되어있어야 함(관심사 분리) 모듈을 먼저 만들어서 테스트하고 후에 조립을 한다. TDD 개발시 TDD이전에 테스트 가능한 프로그램을 만들어야 한다. 1.4 TDD : 테스트 주도 개발. 지금 구현하는 것 하나만 테스트해라. 실패하고 바로 성공시켜라 라는 원칙의 개발방법. 1. 무조건 성공시키는 코드 작성. 2. 임시 데이터로 테스트 시 성공하는 코드를 작성. 3. 진짜로 데이터를 넣었을 시 성공하는 코드를 작성. 순으로 구현함. ===== [서민관] ===== * 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.(AbstractApplicationContext.java:160) at org.springframework.context.support.AbstractApplicationContext.(AbstractApplicationContext.java:213) at org.springframework.context.support.GenericApplicationContext.(GenericApplicationContext.java:101) at org.springframework.context.annotation.AnnotationConfigApplicationContext.(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일 === == 2월 == === 출석체크 === || || 2/4 || 2/11 || 2/18 || 2/25 || || [강성현] || O(지각) || || || || || [김수경] || O || || || || || [서민관] || O || || || || || [서영주] || O || || || || || [서지혜] || O || || || || || [강소현] || O || || || || === 4일 === * 3시 ~ @ --추워 죽겠는-- 6피 ---- [2011년활동지도], [스터디분류]