10월 13일 D+54 [스프링 강의 노트001, 004]
스프링 5 version은 어렵고,
스프링3로 먼저 작업을 한 다음에 5로 업그레이드 할 것 : 두번한다는 생각으로 공부해라.
책 : 토비의 스프링 3.1 세트 : 대신에 예제가 없음
http://www.yes24.com/Product/Goods/7516911
토비의 스프링 3.1 세트 - YES24
『토비의 스프링 3.1』은 스프링을 처음 접하거나 스프링을 경험했지만 스프링이 어렵게 느껴지는 개발자부터 스프링을 활용한 아키텍처를 설계하고 프레임워크를 개발하려고 하는 아키텍트에
www.yes24.com
공부 순서
스프링강의노트 1 > 스프링강의노트 4 > 다시 1장부터 제대로 확인할 것
스프링 강의 노트 1 : SPRING의 Fundmental
SPRING Framework 소개
* 스프링 : Enterprise Application에서 필요로 하는 기능을 제공하는 Framework다.
* 스프링 사용하는 이유 : 대규모 기업 환경에서 프로그램을 제작하기 위해서 사용한다.
* Enterprise시장 : 대규모 시장 ==> 큰 규모의 회사에서 사용
* EJB : 스프링전에 사용하던거. 짱어려움~_~ : 개발과정이 편하지 않음 : 톰캣에서 돌지 않고, 비싼 WAS를 써야 했다.
* 스프링은 오픈소스 : spring.io
* 스프링만 알면, 전자정부프레임워크를 이용해서 가져다 써서 사용할 수 있다 : 근데 오류 개많음 ㅋ
* 스프링부트 : 스프링프레임워크보다 쉽게 설정해줄 수 있고, 버전관리도 자동으로 해줌
- 스프링부트와 스프링프레임워크의 차이점은 간단히 말해 설정의 차이점
- 프레임워크부터 잘하고, 부트를 볼 생각을 해야함
*스프링 공부할 땐, DI(Dependency Injection)를 잘 알아둬야 함!
1. SPRING Framework 란?
* 경량 Container이다 : 스프링은 여러 개의 모듈로 구성되어 있으며, 각 모듈은 하나 이상의 JAR 파일로 구성되어있다. 그리고 이 몇 개의 JAR 파일만 있으면 개발과 실행이 모두 가능하고 크기도 작다. 따라서 스프링을 이용해서 만든 애플리케이션의 배포 역시 매우 빠르고 쉽다. // SPRING은 JAVA 객체를 담고 있는 콘테이너다. 스프링 컨테이너는 자바 객체의 생성, 소멸을 관리한다. 또한 스프링 컨테이너로부터 필요한 객체를 가져와 사용할 수 있다.
* DI(Dependency Injection) : 의존성 주입 : 내 코드 A 클래스에서 남의 B 클래스를 가져와 쓸때, 상속이나 구현을 하는데, B 클래스의 이름이 변해버리면 A 클래스는 망함! 그러니까 의존성도 높다고 볼 수 있다 .스프링안에서는 클래스를 만들어서 객체로 만들고, 메모리 공간에 생성된 객체를 넣어서 필요할 때 객체만 사용하면 되기 때문에 의존성이 높지 않다. // 스프링은 설정 파일이나 어노테이션을 통해 객체 사이에 의존 관계를 설정할 수 있다. 그래서 객체는 자기가 의존하고 있는 객체를 직접 생성하거나 검색할 필요가 없기 때문에, 의존성이 낮다.
* AOP(Aspect Oriented Programming) : 특정 패키지의 특정 클래스의 모든 메소드에 공통적인 내용들을 모두 넣을 수 있다 : 관점지향적 프로그래밍 : 짱편함 // 트랜잭션, 로그(프로그램실행동안 일어나는 일 기록), 보안과 같은 여러 모듈에서 공통으로 필요로 하지만, 핵심은 아닌 기능들을 분리해서 각 모듈에 적용할 수 있음
* POJO(Plain Old Java Object) : 그냥 클래스 : 내가 만든 클래스 : 일반 클래스 // 특정한 인터페이스를 구현하거나 클래스를 상속받지 않아도 된다. ==> 기존에 작성한 코드를 수정할 필요 없이 스프링에서 사용할 수 있음
* Transaction처리 : 코드에 넣지 않고, 설정에서 자동으로 사용되도록 할 수 있음 ==> 트랜잭션 구현에 상관없이 동일한 코드를 여러 환경에서 사용할 수 있음
* 영속성 : 영구보존 : DB 관련 : DB처리를 위해 널리 사용되는 Library와 연동한다 : DB관련된 모든 로직을 xml에서 설정으로 한다. // 데이터베이스 처리를 위해 널리 사용되는 라이브러리와의 연동을 지원하고 있다.
* 다양한 API에 대한 연동을 지원함
=> 기존의 것과 많이 다르진 않지만, 새로운 용어들이 많이 나오므로 용어 정리가 필수필수!
2. SPRING Framework 설치와 Module 구성
==> 앞으로는 library 카피 하지 않을 것 : 3.0 버전 할때까지만 일단 때려넣기~ 스프링에 익숙해질때까진
==>.jar 라이브러리들 그냥 일단 넣기
* Maven : 설정을 xml형태로 해야함 : 프레임워크쪽
* Gradle : 설정을 txt 형태로 해야함 : 부트쪽
==> dependency ojdbc8 같이 검색을 해서, xml에 설정 복붙해서 넣어놓으면 바로 사용가능! => 5.0version에서 사용할 것
https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc8/21.7.0.0
3.Dependency Injection과 SPRING Framework
아직 보기엔 어려우니까 나중에 보기로 하기~
스프링 강의 노트4 : SPRING의 MVC
* 스프링프레임워크는 MVC Framework도 함께 제공함
1. SPRING MVC의 주요 구성 요소 및 처리 흐름 : 외울것!!!!
1. SPRING MVC의 주요 구성 요소 및 처리 흐름 :중요함! 외울것!⭐️⭐️
구성요소 | 설명 |
DispacherServlet | 클라이언트의 요청을 전달받음. 컨트롤러에게 클라이언트의 요청을 전달. 컨트롤러가 리턴한 결과값을 View에 전달. 알맞은 응답을 생성하도록 함. |
HandlerMapping | 클라이언트의 요청 URL을 어떤 컨트롤러가 처리할지 결정. |
Controller | 클라이언트의 요청을 처리한 뒤, 그 결과를 DispatcherServlet에 알려줌. Struts의 Action과 동일한 역할 수행. |
ModelAndView | 컨트롤러가 처리한 결과 정보 및 뷰 선택에 필요한 정보 담기 |
ViewResolver | 컨트롤러의 처리 결과를 생성할 뷰를 결정함 |
View | 컨트롤러의 처리 결과 화면을 생성. JSP나 Velocity 템플릿 파일 등을 뷰로 사용함. |
흐름 설명
클라이언트의 요청이 DispatcherServlet에 전달
=> DispatcherServlet은 HandlerMapping을 사용해 클라이언트의 요청을 처리할 컨트롤러 객체 구함
=> DispatcherServlet은 컨트롤러 객체를 이용해 클라이언트의 요청을 처리함
=> 컨트롤러는 클라이언트의 요청 처리 결과 정보를 담은 ModelAndView 객체를 리턴
=> DispatcherServlet은 ViewResolver로부터 응답 결과를 생성할 뷰 객체를 구함
=> 뷰는 클라이언트에 전송할 응답을 생성
※ 개발자가 직접 개발해야 할 부분 : 컨트롤러(클라이언트 요청 처리) / 뷰(응답 결과 화면을 전송할 JSP, Velocity 템플릿 등)
나머지 DispatcherServlet, HandlerMapping, ViewResolver 등은 SPRING이 기본적으로 제공하는 구현 Class 사용
2. SPRING MVC Hello World
Spring MVC를 이용하여 WEB Application을 개발하는 과정
1) 클라이언트의 요청을 받을 DispatcherServlet을 web.xml 파일에 설정
2) 클라이언트의 요청을 처리할 컨트롤러 작성
3) ViewResolver 설정 => 컨트롤러가 전달한 값을 이용해 응답 화면을 생성할 뷰를 결정함
4) JSP나 Velocity를 이용해 뷰 영역의 Code 작성
5) 실행
1)DispatcherServlet 설정 및 SPRING 컨텍스트 설정
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
* 어노테이션 : @ 뒤에 정보가 들어있는 것
- 내가 만든 클래스는 Controller이다.라고 정보를 알려줌 : 메모리공간에 컨트롤러의 내용을 올려주기 위해 꼭 사용해야함
- @RequestMapping : url에 hello.do라는 요청이 오면 hello 메소드를 실행시켜라는 것 : 액션을 하나하나 만들 필요 없이 얘가 알아서 다 해줌!
- getGreeting : 캘린더 객체생성해서 시간 가져오기, 6~10시 / 12~15 / 18~22 사이에 맞게 인사말 리턴, 걸리지 않으면 '안녕하세요' 나오게 하기
- 모든 요청은 dispatcher가 받고, 처리는 controller가 함
* Dispatcher servlet의 xml파일 은 규칙이 있다.
- 정확한 코딩이 필요!
- new 연산자로 객체 생성하는 것이 아니고,xml에서 설정을 하여 객체를 생성함
- viewResolver는 어디가서 jsp를 찾아야해!! 라고 알려주는 것
* 실행방법 : 프로젝트 채로 실행하고, 뒤에 주소 hello.do넣기
* pdf에 있는 그림으로 확인해서 공부하기 : 처리되는 순서 제대로 기억하기!
3번씩 읽어보기! : 어디까지 할게!라고 알려주실테니까 수업하기 전에 미리 읽고, 수업하고, 복습하기
3. DispatcherServlet 설정과 ApplicationContext와의 관계
* 스프링 강의 노트 2txt. 파일
* applicationContext : Container 만드는 것
<bean> 이라는 것이 객체를 말함
아아~ 어렵다 @_@ 머가 먼지 모르겠다!!
내일은 강의노트004의
5.4(컨트롤러 메서드의 파라미터 타입) 부터 7.4 @ModelAttribute Annotation을 이용한 모델 데이터 처리
까지! 진도 나갈듯
미리 읽어오기~~