1-5 모델2 방식과 스프링 MVC

01)이론


- 모델2 패턴

: 화면과 데이터처리를 분리해서 재사용이 가능하도록 하는 구조

: 모델 2의 모든 요청은 기본적으로 컨트롤러를 호출, 각 컨트롤러는 자신을 호출하는 특정한 URI경로를 가지고 있다.


- 모델2 방식 특징

  • 개발자와 웹 퍼블리셔의 영역 분리
  • 컨트롤러의  URI를 통해 뷰를 제어하기 때문에, 뷰의 교체나 변경과 같은 유지보수에 유용
  • 각 컨트롤러 사이의 코드 중복적인 코드


-Front Controller 패턴

: FrontController 패턴의 가장 중요한 변화는 전체 로직의 일부만을 컨트롤러가 처리한다는 점이다. 위임(delegation)이라고하는데, 전체 로직의 일부를 컨트롤러에게 위임하고 모든 흐름제어는 앞쪽의 front controller가 담당한다. 이로서 좀더 세밀하고, 규경화된 구조가 된것이다. 


-Spring MVC 패턴

: 구조를 그려서 설명할 수 있어야함

: front controller  <-> controller <-> service <-> dao <-> mybatis <-> mysql


- Spring이 해주는 작업과 개발자가 해야하는 작업 구분

spring 

개발자 

URI 분석해서 적절한 controller 호출

controller에 필요한 메소드 호출

controller의  결과 데이터 뷰로 전달

적절한 뷰를 찾는 작업

특정 URI에 동작하는 controllerd을 설계

서비스 객체 생성

Dao 객체 생성

controller 내에 원하는 결과를 메소드로 설계

뷰에서 전달받은 데이터의 출력 


- Spring의 컨트롤러가 처리해주는 것

  • 파라미터 수집 : 사용자의 요청에 대한 응답 데이터를 적절한 Object로 변환하는 파라미터 수집작업을 controller가 자동으로해준다.
  • 애노테이션을 통한 간편설정 : 애노테이션을 사용하여 모든 처리를 할 수 있다.
  • 로직의 집중 : 기존의 모델2는 URI마다 컨트롤러를 개발하였으나, 스프링은 각 메소드마다 필요한 애노데이션을 설정할 수 있기때문에 여러메소드를 하나의 컨트롤러에 집중해서 작성할 수 있습다.
  • WAS 없이 테스트 가능
-Spring과 자바의 차이
  • 스프링 MVC컨트롤러는  상속이나 인터페이스를 구현하지 않아도된다. @Controller라는 애노테이션을 추가하면된다.
  • 메소드의 파라미터와 리턴 타입에 대한 제약이 없음. 클래스가 상속이나 인터페이스가 없기때문에 메소드에 대한 제약도 없다.
- 스프링 MVC에서 주로 사용하는 애노테이션의 종류

애노테이션 

설명  

사용 

@Controller

스프의 MVC 컨트롤러 객체임을 명시하는 애노테이션 

클래스 

@RequestMapping

특정 URI에 매칭되는 클래스나 메소드임을 명시하는 애노테이션 

클래스, 메소드 

@RequestParam 

 요청에서 특정한 파라미터의 값을 찾아낼 때 사용하는 애노테이션 

파라미터 

@RequestHeader

 요청에서 특정 HTTP 헤더 정보를 추출할때 사용 

파라미터 

@PathVariable 

현재의 URI에서 원하는 정보를 추출할 때 사용하는 애노테이션 

파라미터 

@CookiesValue

 현재 사용자의 쿠기가 존재하는 경우, 쿠키의 이름을 이용해서 쿠키의 값을 추출

파라미터 

@ModelAttribute 

 자동으로 해당 객체를 뷰까지 전달하도록 만드는 애노테이션 

 메소드, 파라미터 

 @SessionAttribte

 세션상에서 모델의 정보를 유지하고 싶은 경우에 사용

클래스 

 @InitBinder

  파라미터를 수집해서 객체로 만들 경우에 커스터마이징 

메소드 

@ResponseBody 

 리턴 타입이 HTTP의 응답 메시지로 전송

메소드, 리턴타입 

@RequestBody

 요청 문자열이 그대로 파라미터로 전달 

파라미터 

 @Repository

 DAO 객체를 스프링에 인식시킴

클래스 

 @Service

 서비스 객체를 스프링에 인식시킴

클래스 



-MyBatis를 xml을 사용하여 작성하는 과정

1. 테이블 생성 및 개발 준비

->  DB에 테이블 생성 & 도메인 객체(member)를 위한 클래스 설계 (MemberVO)


2. DAO Interface 생성

->실제로 실행해야하는 작업을 인터페이스로 정의 (MemberDAO)


3.Xml Mapper 작성

->SQL문이 모여있는 Mapper xml 작성, MyBatis가 XML  Mapper를 인식할 수 있도록 root-context.xml- sqlSessionFactory-mapperLocations속성을 추가한다. DAO에서 정의된 메소드 이름을  기초로 작성한다.


4. SqlSessionTemplate 설정

-> SqlSessionTemplate은 MyBatis의 SqlSession 인터페이스를 구현한 클래스로 기본적인 트랜잭션의 관리나 쓰레드 처리의 안전성을 보장하고,  DB의 연결과 종료를 담당함


5. 구현 클래스 작성 (MemberDaoImpl)

-> 스프링에서 DAO가 있는 패키지를 스캔할 수 있도록 root-context.xml에 context package 에 dao가 있는 패키지를 추가한다.



-DAO를 사용하는 이유

:  향후 데이터베이스 관련 기술이 변경되더라고, DAO만을 변경해서 처리할 수 있도록 하기 위해서이다.



'Study > Spring' 카테고리의 다른 글

1-5 모델2 방식과 스프링 MVC  (0) 2017.05.13
1-3, 1-4 스프링 + MYSQL + MyBatis  (0) 2017.05.09
1-2 스프링에 대한 이론  (0) 2017.05.07
1-1 프로젝트의 기본구조 구성  (0) 2017.05.07
[CENTOS]Tomcat 로그보는 방법  (0) 2016.12.07
[CENTOS]Tomcat Server.xml  (0) 2016.12.07

1-3 MYSQL 설정과 스프링테스트


02) 실습하면서 해결해나갔던 점

- mysql 권한

: mysql 의 경우 외부에서 접속하려면 계정에 특정 IP를 설정하거나 '%'를 이용하여 외부에서 연결할 수 있도록 설정해야한다.

* 관련내용 : http://iamjoso.tistory.com/23




1-4 스프링 + MYSQL +  MyBatis 

01) 이론 

- 스프링은 다양한 프레임워크를 융합하여 사용할 수 있기때문에, 기존환경을 그대로 흡수 할 수 있다는 장점이 있다. 스프링은 다양한 프레임워크와의 연동작업을 위한 별도의 하위모듈을 많이 가지고 있다.  (spring-jdbc, spring-test, MyBatis, mybatis-spring)


- Mybatis

: SQL 처리에 대한 개발 생산성을 높일 수 있는 Mysql Mapper 라이브러리


- Mybatis 장점

  • 간결한 코드의 정리 : 스프링과 Mybatis를 함께 사용할 경우 소스를 줄 일 수 있다. more than JDBC
  • SQL 문의 분리 운영 : 별도의 복잡한 과정없이 XML과 애노테이션으로 SQL  처리가 가능하다.
  • Spring과의 연동으로 개발자가 직접 SQL 문 호출 없이 원하는 결과를 얻을 수 있다.
  • 동적 SQL을 이용한 제어기능 : Mybatis에서는 기본적인 제어문이나 루프처리 기능이 있기때문에, SQL와 JAVA코드를 분리시킬 수 있다.


- 일반적인 웹 프로젝트 Layer

  • presentation layer :  UI 담당하는 구성 요소들이들어감, 웹인지 모바일일 앱인지에 따라서 기술이 변경됨
  • business layer : 서비스 계층, 사용자의 환경이아닌 기능적인 요구사항을 구현한 곳, 어떤 형태의 데이터가 필요하고 반환될 것인지 결정
  • data access layer : 데이터 처리를 담당하는 계층 
  • DBMS
- 현재 진행하고 있는 프로젝트 Layer
  • presentation layer : Model, View (JSP,  HTML, CSS, JAVASCRIPT), Controller
  • Business Layer : Service
  • Data Access Layer : Dao, MyBatis
  • DBMS
- 주입(Injection)
  • control ~ service : 서비스를 컨트롤에 주입
  • service ~ dao  : 다오를 서비스에 주입
  • dao ~ myBatis : SessionTemplete dao 주입
  • 호출하는 쪽은 A, 호출당하는쪽을 B라고 했을때 A <- B, B A 주입한다고 한다.
- DataSource in root_content.xml
: 스프링과 MyBatis를 같이 사용하는 경우 DataSource라는 스프링 설정으로 JDBC를 처리한다. 

- @RunWith, @ContextConfiguration
: 현재 테스트 코드를 실행할 때, 스프링이 로딩되도록 하는 부분

- @Inject
@ContextConfiguration에서 생성한 bean 객체 생성을 스프링이 생성해서  주입해줌

- SqlSessionFactory 
: 데이터 베이스와의 연결과 SQL실행에 대한 모든 것을 가진 가장 중요한 객체이다.


02) 실습하면서 해결해나갔던 점

- DataSouceTest 실행중 아래와 같은 에러가 난경우

에러내용 
 :Caused by: java.lang.IllegalStateException: Failed to find class [org.junit.runners.model.MultipleFailureException]: SpringJUnit4ClassRunner requires JUnit 4.9 or higher.


해결방법

:  처음에 에러메세지에 Juni 버전이 4.9 이상이 필요하다고해서,  버전없 하였으나 오류해결이안됐다. 그러다 sof에서 spring  버전이 높아서 문제라는 댓글을 보고 pom.xml의 스프링 버전을 4.3.8에서 4.2.4으로 수정하였다.



- 실행중 root_context.xml file 를 포함한 문구가 에러로그에 나올 경우

에러내용

: @ContextConfiguration("파일 위치") 안에 파일 경로가 잘못됐다는 것. 


해결방법

: 파일 경로를 변경함

변경전 

변경후 

 "file:src/main/webapp/WEB-INF/spring/**/*.xml"

 "file:src/main/webapp/WEB-INF/spring/root-context.xml"

or 절대경로





'Study > Spring' 카테고리의 다른 글

1-5 모델2 방식과 스프링 MVC  (0) 2017.05.13
1-3, 1-4 스프링 + MYSQL + MyBatis  (0) 2017.05.09
1-2 스프링에 대한 이론  (0) 2017.05.07
1-1 프로젝트의 기본구조 구성  (0) 2017.05.07
[CENTOS]Tomcat 로그보는 방법  (0) 2016.12.07
[CENTOS]Tomcat Server.xml  (0) 2016.12.07


1-2 스프링에 대한 소개

01) 이론


- 프레임워크

: 뼈대나 근간을 이루는 코드들의 묶음

: 프레임워크를 이용한다는 의미는 프로그램의 기본 구조를 정하고, 팀원들이 이 구조에 자신의 코드를 추가하는 방식으로 개발하는 것

: 개발에 필요한 구조를 이미 만들어 놓았기 때문에 일정수준의 품질을 보장하고, 빠른 개발 속도를 낼 수 있다.


- 스프링의 차별성

: 경량화된 프레임워크

: 전체를 설계하는 용도로 사용되는 프레임워크

: 여러 종류의 프레임워크를 혼용해서 사용할 수 있음

: 개발 생산성과 개발 도구지원



- 스프링의 특징

  1. POJO (Plain Old Java Object)기반의 구성
    • 스프링은 자바처럼 객체간의 관계를 구성할 수 있는 특징이있다. 이는 코드작성 시 개발자가 특정 라이브러리나 컨테이너의 기술에 종속적이지 않다는 것을 의미한다. 따라서 생산성에서도 유리하고, 유연하게 작업할 수 있다는 장점이 있다.
  2. 제어의 역행 (IoC- Inversion of Control)
    • 개발자가 작성한 코드의 호출은 개발자에 의해 이루어지는 것이 아니라, 프레임워크의 내부에서 결정된 대로 이뤄지는 것을 말한다. 이는 스프링이 구조를 설계하기 위해 만들어졌다는 것을 의미하며, 개발자가 부품을 만들어 조립하는 형태의 개발이 가능하다는 것을 의미한다.
  3. 의존성 주입(DI- Dependency Injection)을 통한 객체 간의 관계 구성
    • 의존성 주입은 제어의 역행으로 특정 객체에 필요한 객체를  직접 제어하거나 생성하는 방식이 아니라, 외부에서 결정하여 연결시키는 것을 의미한다. 따라서 개발자는 객체간의 관계를 직접 처리할 필요가 없고, 인터페이스를 활용하여 유연한 구조를 사용할 수 있다.
    • 의존성 주입의 종류 1) 생성자를 통한 주입 2) set 메서드를 이용한 주입 
  4. AOP 지원
    • 반복적인 코드를 줄이고, 핵심 비즈니스 로직에만 집중할 수 있는 방법 제공
    • 사스템이 공통으로 가지는 보안, 로그, 트랜잭션과 같이 비즈니스 로직은 아니지만 반드시 처리가 필요한 부분을 모듈로 분리하여 처리하는  패러다임을 AOP라한다.
  5. 트랜잭션 지원 
    • 트랜잭션 처리를 코드를 이용하여 처리하지 않고, 에노테이션(@)이나 XML로 설정할 수 있기때문에 간편


'Study > Spring' 카테고리의 다른 글

1-5 모델2 방식과 스프링 MVC  (0) 2017.05.13
1-3, 1-4 스프링 + MYSQL + MyBatis  (0) 2017.05.09
1-2 스프링에 대한 이론  (0) 2017.05.07
1-1 프로젝트의 기본구조 구성  (0) 2017.05.07
[CENTOS]Tomcat 로그보는 방법  (0) 2016.12.07
[CENTOS]Tomcat Server.xml  (0) 2016.12.07

+ Recent posts