■ JSP Standard Tag Library


JSP 표준 태그 라이브러리로서 자주 사용하는 기능 중 반복, 조건, 데이터 포멧을 구현해 놓은 태그 라이브러리이다. 이러한 기능들을 해당 태그를 선언해서 간편하게 사용할 수 있다. 


  pom.xml 에서 Dependency 추가


1
2
3
4
5
6
7
8
9
10
<dependency>
          <groupId>jstl</groupId>
          <artifactId>jstl</artifactId>
          <version>1.2</version>
      </dependency>
<dependency>
          <groupId>taglibs</groupId>
          <artifactId>standard</artifactId>
          <version>1.1.2</version>
 </dependency>
cs


■ 자주 사용되는 라이브러리


코어 라이브러리 - 일반 프로그램 언어에서 제공하는 변수선언, 조건, 제어, 반복 기능을 제공한다.


url식별자 - http://java.sun.com/jsp/jstl/core











'Spring' 카테고리의 다른 글

MVC 패턴 & ModelAndView  (0) 2018.08.21
Dispatcher Servlet  (0) 2018.08.21
DI  (0) 2018.08.20
스프링 프로젝트 생성  (0) 2018.08.20
스프링 프레임워크 개요  (1) 2018.08.20

■ MVC 패턴


JSP / Servlet 기반의 어플리케이션을 spring으로 wrapping하여 추상화한 것을 말한다. JSP와 자바로직이 주고 받는 데이터를 모델이라고 하는데 뷰에서 모델을 만들고 컨트롤러에게 주고 컨트롤러는 그 모델을 서비스에 전달하는 일련의 과정은 통틀어서 MVC 패턴이라고 한다.


원래는 HTML 코드안에 JAVA코드가 존재 했었다. 하지만 이러한 패턴은 매우 비효율적이다. 퍼블리셔가 디자인을 할 때 개발자와 같이 하지 않으면 작업이 진행이 안되는 지경까지 이르렀다. 기존의 이러한 문제점을 개선하여 작업을 분리하였다. 



MVC패턴을 사용하면, 사용자 인터페이스로부터 비지니스 로직을 분리하여 애플리케이션의 시각적 요소나 그 이면에 실행되는 비지니스 로직을 서로 영향 없이 쉽게 고칠 수 있는 애플리케이션을 만들 수 있다.


1. Model - JSP에 전달될 데이터들 / Controller와 JSP 사이에서 서로 주고 받는 데이터

2. View - 사용자에게 제공할 화면을 포함 / 사용자가 보는 JSP

3. Controller - 모델과 뷰 사이의 상호작용을 관리 / 클라이언트에게 요청과 응답


주 목적은 비즈니스 로직과 프래젠테이션 로직을 분리하기 위해서이다.


■ @Controller


컨트롤러가 전달하는 데이터타입은 2가지가 존재한다 

1. view만 전달한다

2. view와 함께 데이터도 전달한다.


1번 같은 경우에는 데이터타입이 String이다. 사용자에게 보여줄 view 이름을 Dispatcher Servlet에게 전달하면 viewResolver가 받아서 자동으로 뷰페이지를 만든다.


2번 같은 경우에는 view와 함께 데이터를 보낸다. 이때 데이터를 model이라고 한다. 사용자에게 보여질 data set 이다. view로 전달된 model은 JSP의 EL문법을 통해서 출력할 수 있다.


■ ModelAndView 생성






detail.jsp 생성











'Spring' 카테고리의 다른 글

JSTL  (0) 2018.08.22
Dispatcher Servlet  (0) 2018.08.21
DI  (0) 2018.08.20
스프링 프로젝트 생성  (0) 2018.08.20
스프링 프레임워크 개요  (1) 2018.08.20

■ 프로세스



그림을 보면 알겠지만 Dispatcher Servlet 이하 DS는 모든 영역에서의 중간 역할을 하기 때문에 매우 핵심적이다. 그래서 DS를 이해하는 것은 필수적인 요소라고 할 수 있겠다. 


클라이언트가 요청을 하면 DS가 그 요청을 받는다. 그 요청을 HandlerMapping에게 전달해서 매핑되는 url을 검색하도록 시킨다. 검색된 결과를 다시 받아서 HandlerAdapter에게 전달해서 실행하라고 지시한다. HandlerAdpater는 Controller를 통해 실행된 결과 값을 반환하고 DS는 다시 viewResolver에게 전달한다.

viewResolver는 결과 값에다가 prefix 접두사와 suffix 접미사를 붙이는 작업을 하게 되면 그 이하는 자동적으로 JSP파일을 클라이언트에게 응답하는 과정이다.





■ DispatcherServlet 생성






DS는 모든 요청을 받고 응답을 받는다. SpringFramewok를 실행하여 applicationContext.xml 파일을 읽어 bean을 생성하고 Bean Container에 적재한다. 코드를 보면 applicationContext.xml 파일의 경로가 보이고 url패턴은 / 으로 정의되어 있다. 이 부분 설명은 뒤에게 하기로 하고 브라우저와 서블릿 사이에서 다국어 처리하는 작업을 해야한다. 



 다국어 처리 필터 만들기



브라우저와 DispatcherServlet 사이에서 요청과 응답을 할 때 마다 다국어 처리를 해주는 필터링이다.



/*는 모든 응답과 요청을 필터링해주는 의미이다.

DS가 완성 되었으니 Bean 객체를 생성하는 applicationContext.xml 파일을 살펴보자.



 applicationContext.xml 생성






스프링 폴더와 applicationContext.xml 파일 생성








하단 NameSpaces로 가서 Context와 mvc 체크






추가된 빈 확인




viewResolver는 저 문구를 기입하고 Ctrl + space를 누르면 자동 완성된다.





 1. context:component-scan은 base-package 경로 안에 있는 어노테이션들을 스캔하고 Bean Container안에 적재하는 역할을 한다. 동일한 인터페이스로 등록된 클래스를 찾아 자동으로 주입한다. Setter 혹은 생성자가 없어도 자동으로 등록한다. 


◆Layered Architecture

1. Presentation Layer - Controller @Controller관리

2. Business Layer - Service @Service 관리

3. Data Access Layer / Persistence Layer - Dao @Repository 관리 


각각 레이어는 의존관계로 묶여있고 클래스로 만들어져 Component 자동 등록을 위해 다양한 Annotation을 지원한다. 이러한 클래스는 Annotation이 등록되었을 경우 자동으로 Bean Container에 추가한다. 추후에 트랜젝션에 영향을 받기 때문에 3개의 레이어로 구분을 하였다.


2.  mvc:annotation-driven은 HandlerMapping 스프링 빈과 HandlerAdapter 스프링 빈을 생성한다. 


3. HandlerAdpater가 실행된 반환값을 DS에게 전달하고 그 결과를 viewResolver가 받아서 앞에다가 prefix를 붙이고 뒤에다가 Suffix를 붙인다. 만약 board/list 라는 값을 전달 받았다면 


WEB-INF/view/board/list.jsp 와 같이 되는 것이다.



DS에 의해서 BeanContainer 적재된 객체들은 아래와 같다.

1. @Controller

2. @Service

3. @Repository

4. HandlerMapping

5. HandlerAdapter

6. viewResolver



■ Controller




@Controller 어노테이션을 추가한다.





@RequestMapping("클라이언트가 요청하는 url주소가 들어갈 자리")







BoardController는 BoardService와 의존관계를 갖고 있기 때문에 @Autowired 어노테이션을 추가하면 생성자를 생성하거나 setter를 만들 필요가 없어진다.




list.jsp



list.jsp 를 viewReolver에 정의된 경로와 일치하도록 생성해준다.





인코딩 작업을 해준다



'Spring' 카테고리의 다른 글

JSTL  (0) 2018.08.22
MVC 패턴 & ModelAndView  (0) 2018.08.21
DI  (0) 2018.08.20
스프링 프로젝트 생성  (0) 2018.08.20
스프링 프레임워크 개요  (1) 2018.08.20

■ Spring DI


필요한 객체의 의존을 주입하는 것이다. Bean Container에 각종 클래스들을 넣어둔다.

기존에는 의존성 관계를 갖고 있는 Controller, Service, Dao 객체들을 생성하고 관계를 맺어 줄 때 사용자가 직접 new 를 이용하여 직접 생성하는 작업을 했지만 스프링에서 DI가 그런 작업을 자동으로 해준다.

Java의 클래스 상속 혹은 interface를 이용한 추상화 기반 개발 방법을 의미한다.


■ IOC (Inversion of Control)


사용자가 아닌 스프링이 오브젝트를 제어한다.

외부에서 객체의 생성에서 소멸까지 Life Cycle을 제어한다.


Container는 스프링이 만든 객체를 생성과 소멸될까지 적재하는 개념으로  IOC와 차이가 있다.


Spring은 DI framework 혹은 IOC freamework라고 부른다.


■ Strong Coupling


A클래스는  B클래스를 멤버변수로 갖고 있다. 이 둘은 의존성 관계를 맺고 있다. 이러한 관계를

Strong Coupling이라 한다. 직역을 하자면 강한 결합이라고 한다.


SOLID 원칙에 근거해서 이러한 관계가 맺어져야 한다.

1. SRP 

2. OCP 

3. LSP 

4. ISP 

5. DIP 



■ Loosing Coupling  약한 결합


A클래스는  B인터페이스를 멤버변수로 갖고 있다. 클래스 대신 인터페이스를 갖고 있는 것을 약한 결합이라고 한다. 


■ DI - 개발자는 객체의 생성을 직접 할 필요가 없다



소스코드 영역은 인터페이스로 만들어야 한다. 약한 결합의 핵심은 인터페이스이기 때문이다.  













'Spring' 카테고리의 다른 글

JSTL  (0) 2018.08.22
MVC 패턴 & ModelAndView  (0) 2018.08.21
Dispatcher Servlet  (0) 2018.08.21
스프링 프로젝트 생성  (0) 2018.08.20
스프링 프레임워크 개요  (1) 2018.08.20

■ Maven Repository 설정






해당 5개 항목을 체크를 한다.


■ Maven Repository index 빌드하기









Maven Repository 창을 오픈한다.




Global Repository 항목에서 Full index를 빌드한다

다소 시간이 소요되며 짧게는 10분 많게는 30분까지 소요될 수 도 있다.




■ Spring 프로젝트 생성



Project Explorer 창에서 우클릭을 한다음 Web Dynamic Web Project를 생성한다.


Working Sets에서 전에 보이지 않던 스프링이 보일 것이다.






폴더를 생성해준다.








Content directory 경로를 src/main/webapp으로 지정해 준다.






■ dependency 추가




Configure >> Convert to maven Project를 클릭한다.






검색창에 spring-webmvc를 검색 한 다음 

org.springframework spring-webmvc 중에 가장 최신 버전을 선택한다. 




참고로 이 버전은 자바 9 이상버전을 지원한다.

 




Ctrl + S를 눌러서 Save를 한다. 그 다음 Dependency Hierarchy를 클릭하면 추가된 라이브러리를 확인할 수 있다. spring-webmvc를 사용하기 위하여 5개 항목이 필요로 하는데 자동으로 생성해 주니 사용자 입장에서는 매우 간편하다.




pom.xml을 확인해보니 추가된 dependency를 확인 할 수 있다.





Maven dependencies 항목도 추가 되었고 열거했을 때 필요에 의해서 의존성 있는 라이브러리들이 자동으로 생성되었음을 확인할 수 있다.


■ 다운로드 확인


C:\Users\Chang\.m2\repository\org\springframework


경로로 들어가면 다운로드된 것을 확인할 수 있다.





'Spring' 카테고리의 다른 글

JSTL  (0) 2018.08.22
MVC 패턴 & ModelAndView  (0) 2018.08.21
Dispatcher Servlet  (0) 2018.08.21
DI  (0) 2018.08.20
스프링 프레임워크 개요  (1) 2018.08.20

■ 스프링 프레임워크 개요


자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크이다. 모듈 별로 나눠서 필요한 부분만 사용하도록 개선하였다. 개발자가 복잡하고 실수하기 쉬운 로우레벨에 많이 신경쓰지 않으면서 비즈니스 로직 개발에 전념할 수 있도록 해준다. 스프링은 오픈소스의 장점을 충분히 취하면서 동시에 오픈소스 재품의 단점과 한계를 잘 극복한다.


경량급 애플리케이션 - 다소 가벼운 애플리케이션을 의미한다. 엔터프라이즈 개발을 굉장히 무겁다. WAS 같은 무거운 애플리케이션에서만 개발이 가능했지만 스프링은 웹 컨테이너 처럼 다소 작은 것에도 동작이 가능하다


로우레벨 - 레벨이 낮을 수록 하드웨어랑 가까워진다. 서블릿을 만들지 않고 url 맵핑을 자유롭게 할 수 있다. 애플레케이션이 담당하는 업무에 집중하고 그 외적인 것은 스프링이 대신해준다. 


오픈소스 - 스프링은 사용자 마음대로 사용할 수 있는 라이선스 기반이다. 오픈소스를 수정을 하든 상업적 목적으로 사용하든 비용이 발생하지 않는다. 누구나 참여 가능하고 자유롭게 쓸 수 있다.



EJB


Enterprise Java Bean 프레임워크를 사용해서 개발을 했던 당시에 불편한 점들을 해소하기 위하여 2002년 로드존슨이 출한 도서 Expert One-on-One J2EE Design and Delvelopment 도서를 출판하게 되었고 이것이 스프링 프레임워크 탄생의 초석이 되었다.



■ 스프링 역할


1. 컨테이너 역할 - 자바 객체를 담는 컨테이너 역할을 한다. 자바 객체가 생성이 되고 소멸 될 때까지 모든 Life-Cycle을 관리해준다. 컨테이너에는 메모리를 갖고 있는 객체들이 있다. 사용자가 원하는 객체를 사용하고 싶을 때 스프링은 사용자에게 메모리 주소를 할당한다.


2. DI (Dependency Injection) 지원 - Dependency 의존이란 A라는 클래스에 B라는 클래스가 멤버변수로 정의 되어 있다고 하는 관계를 의존관계라고 설명하는데 이러한 관계를 스프링이 사용자 대신하여 만들어 준다. 컨트롤러는 DAO에게 의존하고 DAO는 DTO에게 의존한 관계


3. AOP - 관점지향 프로그램 어떤 상황이 발생했을 때 제 3자의 눈으로 바라보는 것을 관점이라 한다. 관점은 전체, 에러, 실행전, 실행후, 트랜잭션 이러한 관점으로 상황에 집중하여 트랜잭션이나 로깅, 보안과 같이 공통적으로 필요로 하는 모듈들을 실제 핵심 모듈에서 분리해서 적용할 수 있다. 


4. POJO 지원 - 스프링 컨테이너에 저장되어 있는 자바 객체는 인터페이스를 구현하거나, 상속받지 않아도 되게끔 순수한 자바 객체만으로 사용할 수 있게끔 지원한다.


5. 트랜잭션 처리를 위한 일관된 방법을 지원 -  어떤 쿼리가 실행 되었을 때 commit을 할지 rollback을 할지 결정해야 한다. oracle, mySql이든 jdbc, jta 든지 문제없이 일관된 트랜잭션 처리를 자동으로 해주기 때문에 사용자는 개발에만 집중할 수 있다.


6.  영속성관 관련된 다양한 API지원 - 스프링은 myBatis. Hibernate, Spring Jdbc 등 데이터베이스 처리를 위한  ORM 프르엠워크들과의 연동을 자동으로 지원해 준다. 



스프링 프레임워크 모듈


이 모든 모듈들을 다 사용하지 않고 필요한 것들만 골라서 사용할 수 있다. 그렇기 때문에 무거운 프레임워크는 맞지만 경량급 프레임워크라고 말하는 것이다.



■ Maven


스프링의 의존 라이브러리를 간편하게 추가할 수 있도록 의존성 주입을 제공한다. 필요한 모듈을 사용할 때 그것에 의존성을 갖고 있는 모든 라이브러리들을 자동으로 빌드해 주는 것을 의미한다. 

1. 빌드를 통해서 배포를 위한 파일 생성

2. 라이브러리를 자동으로 구성함





'Spring' 카테고리의 다른 글

JSTL  (0) 2018.08.22
MVC 패턴 & ModelAndView  (0) 2018.08.21
Dispatcher Servlet  (0) 2018.08.21
DI  (0) 2018.08.20
스프링 프로젝트 생성  (0) 2018.08.20

+ Recent posts