U E D R , A S I H C RSS

Spring/탐험스터디

Difference between r1.48 and the current

@@ -1,19 +1,17 @@
[[TableOfContents]]
[[pagelist(^Spring)]]
= 스터디 소개 =
* [Spring Framework 3] 탐험해보자!
* 스터디 시간 : 2011년 1월 7일부터 매주 '''금요일 7시'''. 그리고 필요하면 더 모임
= 참여자 = 
* 코치: [변형진]
* 리더: [이원희], [강성현]
* [김수경], [서지혜], [정의정], [강소현], [서민관], [서영주]
= 2012 =
== 스터디 소개 ==
* [Spring Framework 3] 작지만 유용한 프로그램을 만들어보자!
* 스터디 시간 
* 월요일 오후 4시~ 6시
== 참여자 ==
* [김수경], [서지혜]
= 목표 =
* [Spring]의 핵심 가치와 원리에 대한 이해
= 주교재 =
* [http://book.naver.com/bookdb/book_detail.nhn?bid=6330335 토비의 스프링 3] 
* 1부는 예제를 점진적으로 개선해 나가도록 구성되어 있으므로 각각의 개선이 무엇을 개선시켜나가는 것인지 이해하는 것이 중요
* [토비의스프링3]
* Spring Framework 3 다루는 다른 교재 가능
* 교재가 비싸고 매우 무거워 참여자들이 스터디에 활용할 수 있도록 ZeroPage 책장에 둘 토비의 스프링 3를 2권 주문함
= 진행 방식 =
* 세미나가 아니라 각자가 공부한 것을 바탕으로 공유하고 정답을 찾아나가는 스터디
* 코치는 리더가 아니라 네비게이터의 역할
@@ -21,126 +19,13 @@
= 규칙 =
* 코치 참석 여부와 상관없이 스터디를 정시에 시작한다.
* 스터디 대상이 매우 방대하므로 충분한 개인적인 학습과 과제 수행, 그리고 스터디 모임에서 많은 질문을 할 것
* 인원이 충분하므로 제때 따라오지 않는 사람은 부담없이 버릴수도?!
= 진행 =
== 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. 진짜로 데이터를 넣었을 시 성공하는 코드를 작성. 순으로 구현함.
4일에 한 것들
1. 배운 것
1.1 RESTful : 이기종간 통신. RESTful 웹서비스는 리소스 URI를 알면 웹서버와 웹클라이언트의 종류에 상관없이 HTTP 프로토콜만으로 접근 가능한 서비스라 할 수 있다. 리소스 하나에 하나의 URL을 할당해놓았다.
1.2 http의 4가지 method : POST, GET, PUT, DELETE
리소스 함수의 4가지 method : CRUD(Create, Read, Update, Delete)
DB의 4가지 method : Insert, Select, Update, Delete
1.3 Resttemplate : spring에서 RESTful에 접근하기 위한 template. spring에서 데이터를 받아오는 방법.
===== [서민관] =====
* 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일 ===
== 2월 ==
=== 출석체크 ===
|| || 2/4 || 2/11 || 2/18 || 2/25 ||
|| [강성현] || O(지각) || || || ||
|| [김수경] || O || || || ||
|| [서민관] || O || || || ||
|| [서영주] || O || || || ||
|| [서지혜] || O || || || ||
|| [강소현] || O || || || ||
=== 4일 ===
* 3시 ~ @ --추워 죽겠는-- 6피
== 3월 ==
* 서지혜
* 스터디를 시작한게 벌써 1년 2개월째라니..
* 그동안 스터디한게 하나도 안남아있다
== 4월 ==
=== 9일 ===
==== 것 ====
----
[2011년활동지도], [스터디분류]
[2011년활동지도], [2012년활동지도], [스터디분류]



1. 2012

1.1. 스터디 소개

  • Spring Framework 3로 작지만 유용한 프로그램을 만들어보자!
  • 스터디 시간
    • 월요일 오후 4시~ 6시

2. 목표

  • Spring의 핵심 가치와 원리에 대한 이해

3. 주교재

4. 진행 방식

  • 세미나가 아니라 각자가 공부한 것을 바탕으로 공유하고 정답을 찾아나가는 스터디
  • 코치는 리더가 아니라 네비게이터의 역할
  • 스터디 모임에서는 각자 한 주간 학습하고 과제를 수행한 경험을 공유하고 궁금증을 해결

5. 규칙

  • 코치 참석 여부와 상관없이 스터디를 정시에 시작한다.
  • 스터디 대상이 매우 방대하므로 충분한 개인적인 학습과 과제 수행, 그리고 스터디 모임에서 많은 질문을 할 것

6. 진행

6.1. 3월

  • 서지혜
    • 헐 이 스터디를 시작한게 벌써 1년 2개월째라니..
    • 그동안 스터디한게 하나도 안남아있다 망

6.2. 4월

6.2.1. 9일

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:28:05
Processing time 0.0583 sec