SpringMVC란?


Spring MVC의 특징

- Spring은 DI나 AOP같은 기능뿐만 아니라, 서블릿 기반의 웹 개발을 위한 MVC프레임워크를 제공한다.

- SpringMVC는 모델2 아키텍쳐와 FrontController 패턴을 프레임워크 차원에서 제공한다.


- SpringMVC프레임워크는 Spring을 기반으로 하고 있기 때문에 Spring이 제공하는 트랜잭션 처리나 DI 및 AOP등을 손쉽게 사용한다.


SpringMVC와 FrontController 패턴

어떤 연관성이 있을까?

- 대부분의 MVC 프레임워크들은 FrontController 패턴을 적용해서 구현한다.

- Spring MVC도 FrontController역할을 하는 DispatcherServlet 이라는 클래스를 계층의 맨 앞단에 놓고, 서버로 들어오는 모든 

요청을 받아서 처리하도록 구성되어있다.

DispatcherServlet이 FrontController 역할을 한다.


- 예외가 발생했을 때, 일관된 방식으로 처리하는 것도 FrontController의 역할이다.



DispatcherServlet 클래스

- FrontController 패턴 적용

- Web.xml에 설정한다.

- 클라이언트로부터의 모든 요청을 전달 받게된다.


- Controller나 View와 같은 Spring MVC의 구성요소를 이용하여 클라이언트에게 서비스를 제공한다.


DispatcherServlet은 개발자가만든 Controller에 위임한다.

개발자가만든Controller는 핸들링(처리) 하여 모델을 DispatcherServlet에 전달한다.

DispatcherServlet은 View에게 model전달한다.

view는 화면생성후 DispatcherServlet에게 전달한다.


Spring MVC의 주요 구성 요소

 

 DispatcherServlet

 - 클라이언트의 요청을 받아서 Controller에게 클라이언트의 요청을 전달하고,

리턴한 결과값을 View에게 전달하여 알맞은 응답을 생성한다.

 HandlerMapping

 - URL과 요청 정보를 기준으로 어떤 핸들러 객체를 사용할지 결정하는 객체이며,

      DispaccherServlert에게 알려준다.

 Controller

 - 클라이언트의 요청을 처리한 뒤, Model를 호출하고 그 결과를 DispatcherServlet에게 알려 준다.

 ModelAndView

 - Controller가 처리한 데이터 및 화면에 대한 정보를 보유한 객체이다.

 View

 - Controller의 처리 결과 화면에 대한 정보를 보유한 객체이다.

 ViewResolver

 - Controller가 리턴한 뷰 이름을 기반으로 Controller 처리 결과를 생성할 뷰를 결정한다.

 개발자가 주로 사용하는 클래스

 - DispatcherServlet,Controller,ModelAndView,View


Spring MVC의 주요 구성 요소의 요청 처리 과정

1. 클라이언트의 요청이 DispaccherServlet에게 전달된다.

2. DispatcherServlet은 HandlerMapping을 사용하여 클라이언트의

요청을 처리할 Controller를 획득한다.(컨트롤러를 알려줌)


3. DispatcherServlet은 Controller 객체를 이용하여 클라이언트의 요청을 처리한다.


4. Controller는 클라이언트 요청 처리결과와 View페이지 정보를 

담은 ModelAndView 객체를 반환한다.

'개발 소발 > 개발 Spring' 카테고리의 다른 글

Spring IoC(Inversion of Control),Bean,의존성주입이란?  (0) 2020.07.08
프레임워크 개념  (0) 2018.01.26
MVC패턴이란?  (0) 2018.01.11
Mybatis Mapper 인터페이스란?  (0) 2018.01.11
Mybatis 셋팅이란?  (0) 2017.12.21

MVC패턴이란?


Model - View - Controller

사용목적?

비지니스로직과 프리젠테이션 로직을 분리하기 위함이다.


프리젠테이션 로직과 비지니스로직

두가지를 분리하여 서로에 영향을 주지않는다.


Model이란?

- 애플리케이션의 정보(데이터,Business Logic 포함)


View이란?

- 사용자에게 제공할 화면(Presentation Logic)


Controller란?

- Model과 View사이의 상호 작용을 관리


MVC패턴의 개념


1. 클라이언트가 컨트롤러에게 요청한다.

2. 요청한것을 Controller가 Model에서 호출한다.

3. 결과를 Controller에게 전해준다.

4. 받은 결과를 Controller는 View에게 화면생성요청을 한다.

5. View는 결과화면을 Controller에게 전달한다.

6. Controller는 클라리언트에게 응답을함.



각각의 MVC 컴포넌트의 역할

 - 모델(Model) 컴포넌트

  1. 데이터 저장소(DB)와 연동하여 사용자가 입력한데이터나

사용자에게 출력할 데이터를 다루는 일을 한다.

2. 여러개의 데이터 변경 작업(추가,변경,삭제)를 하나의 작업으로

묶는 트랜잭션을 다루는 일도 한다.

3. DAO클래스 ,Service클래스에 해당된다.

 - 뷰(View) 컴포넌트

  1. 모델이 처리한 데이터나 그 작업 결과를 가지고 사용자에게 출력할

화면을 만드는 일을 한다.

2. 생성된 화면은 웹 브라우저가 출력하고, 뷰 컴포넌트는 HTML과 CSS,

JavaScript를 사용하여 웹브라우저가 출력할 UI를 만든다.

3. Html과 JSP를 사용하여 작성할 수 있다.

 - 컨트롤러(Controller) 컴포넌트

  1. 클라이언트가 요청을 받았을 때 그 요청에 대해 실제 업무를 수행하는

모델 컴포넌트를 호출하는 일을 한다.

2. 클라리언트가 보낸 데이터가 있다면, 모델을 호출할 때 전달하기 쉽게

데이터를 적절히 가공하는 일을 한다.

3. 모델이 업무 수행을 완료하면, 그 결과를 가지고 화면을 생성하도록

뷰에게 전달(클라이언트 요청에 대해 모델과 뷰를 결정하여 전달)한다.

4.Servlet과 JSP를 사용하여 작성할 수 있다.



모델1 아키텍쳐 

-컨트롤러 역할을JSP가 담당한다.

JSP가 복잡해지는 단점이 있다.

모델2 아키텍쳐

-컨트롤러 역할을 Servlet이 담당한다.

Spring은 모델2사용 컨트롤러가 Servlet이다.


모델2 아키텍쳐 호출순서

 1.클라이언트가 Controller(서블릿)에 요청함.

  -웹브라우저가 웹 애플리케이션 실행을 요청하면, 웹 서버가 그 요청을 받아서

서블릿 컨테이넛(ex: 톰캣서버)에 넘겨준다.

-서블릿 컨테이너는 URL을 확인하여 그 요청을 처리할 서블릿을 찾아서 실행한다.

 2.Controller가 Model을 호출

  -서블릿은 실제 업무를 처리하는 모델 자바 객체의 메서드를 호출한다.

-만약 웹 브라우저가 보낸 데이터를 저장하거나 변경해야 한다면 그데이터를 가공하여

VO 객체(Value Object)를 생성하고, 모델 객체의 메서드를 호출할 때 인자 값으로 넘긴다.

-모델 객체는 엔터프라이즈 자바빈(EJB)일 수도 있고, 

일반 자바 객체(POJO로 된 Service,DAO object)일 수도 있다.

 3.Model객체가 SQL문을 통해 결과값을가져옴

        -모델 객체는 JDBC를 사용하여 매개변수로 넘어온 값 객체를 데이터베이스에 저장하거나,

        데이터베이스로부터 질의 결과를 가져와서 VO객체로 만들어 반환한다.

 4.Controller는 View(JSP)에 결과(VO) 전달

        -서블릿은 모델 객체로부터 반환 받은 값을 JSP에 전달한다.

 5.JSP는 전달받은 결과(VO)로 화면생성

 


FrontController 패턴 아키텍쳐

- Front Controller 프로세스

                     (이부분)

클라이언트 -> FrontController -> 애플리케이션Controller -> View

- FrontController는 클라이언트가 보낸 요청을 받아서 공통적인 작업을 먼저 수행한다.

- FrontController는 적절한 세부 Controller에게 작업을 위임한다.

- 각각의 애플리케이션 Contoller는 클라이언트에게 보낼 뷰를 선택해서

최종 결과를 생성하는 작업이다.

- FrontController 패턴은 인증이나 권한 체크처럼 모든 요청에 대하여 공통적으로 처리해야 하는 로직이 있을 경우 

전체적으로 클라이언트의 요청을 중앙 집중적으로 관리하고자 할 경우에 사용한다.







'개발 소발 > 개발 Spring' 카테고리의 다른 글

프레임워크 개념  (0) 2018.01.26
SpringMVC란?  (0) 2018.01.11
Mybatis Mapper 인터페이스란?  (0) 2018.01.11
Mybatis 셋팅이란?  (0) 2017.12.21
MyBatis란?  (0) 2017.11.27

Mybatis Mapper 인터페이스란?


Mapper 인터페이스란?

여러 Mapper 인터페이스 작성시 설정한다.


Mapper 인터페이스란?

- 매핑파일에 기재된 SQL을 호출하기 위한 인터페이스이다.

- Mybatis 3.0부터 생겼다.

- 매핑파일에 있는 SQL을 인터페이스로 호출한다.


Mapper 사용하지않았을시?

- session.selectOne("userNS.selectUserById", id); 형식 이였다.

- 네임스페이스+"."+SQL ID 로 지정해야한다.

- 문자열로 작성하기때문에 버그가 생길 수 있다.

- IDE에서 제공하는 code assist를 사용할 수 없다.


Mapper 사용했을때

- Mapper 인터페이스 개발자가 직접작성한다.

- 패키지 이름+"."+인터페이스이름+"."+메서드이름이 네임스페이스+"."+SQL의 ID를 설정해야 한다.

- 네임스페이스 속성에는 패키지를 포함한 Mapper 인터페이스 이름 형식이다.

- SQL ID 에는 매핑하는 메서드 이름을 지정하는 것.


Mapper 인터페이스 작성

반드시 인터페이스로 선언해주어야한다.

네임스페이스 명은 패키지포함 인터페이스이름으로 작성. 

ex)<mapper namespace="myspring.user.dao.UserMapper">

메서드명은 SQLID와 동일하게작성.


사용하는법

-bean 추가

-xml네임스페이스 설정


-DAO에 autowired



-Mapper인터페이스 메소드명은 네임스페이스 ID랑 맞출것.

인터페이스

XML


여러개의 Mapper 설정 방법

- MapperScannerConfigurer사용한다.

- 위에 org.mybatis.spring.mapper.MapperFactoryBean 을 이용시 Mapper등록시 갯수가 많아지면일일이 정의해야하는 단점이 있다.

- DI컨테이너에 등록된다.

- MapperScannerConfigurer 이용하면 지정한 패키지 아래 모든 인터페이스가 Mapper 인터페이스로 간주된다.

dao등 인터페이스도 등록되어 에러가 생길 수 있다.


다른 인터페이스는 등록안되게 하는법

빈에 등록하기


annotation파일생성


기존 Mapper에 어노테이션 등록



'개발 소발 > 개발 Spring' 카테고리의 다른 글

SpringMVC란?  (0) 2018.01.11
MVC패턴이란?  (0) 2018.01.11
Mybatis 셋팅이란?  (0) 2017.12.21
MyBatis란?  (0) 2017.11.27
AOP어플리케이션 작성 (annotation)이란?  (0) 2017.11.27

Mybatis 셋팅이란?


pom.xml에 추가한다.



1.설정해줘야한다. SqlSessionFactoryBean 

SqlSessionFactoryBean 

-DataSource(데이터베이스 커넥션)

-MyBatisConfig File(Mybatis 파일 위치정보)

(sqlMapConfig.xml)

-mapping File(쿼리SQL문을 포함)

(user.xml)



2.컴포넌트생성

(Mybatis제공 컴포넌트)

SqlSessionFactory 생성방법.




<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">

<constructor-arg ref="sqlSessionFactory" />

</bean>



3.SqlSessionFactory정보를 전달

SqlSessionTemplate(인터페이스 구현)


4.이 인터페이스를 구현한게 SqlSessionTemplate이다.

(Mybatis제공)

SqlSession(인터페이스)



SqlMapConfig.xml

vo클래스명 정리해준다.


User.xml

쿼리 포함된 mapping파일

namespace 이름 설정해준다. 


'개발 소발 > 개발 Spring' 카테고리의 다른 글

MVC패턴이란?  (0) 2018.01.11
Mybatis Mapper 인터페이스란?  (0) 2018.01.11
MyBatis란?  (0) 2017.11.27
AOP어플리케이션 작성 (annotation)이란?  (0) 2017.11.27
AOP어플리케이션 작성 (XML)이란?  (0) 2017.11.24

MyBatis란?


MyBatis의 개요와 특징

MYbatis와 Mybatis-Spring의 주요 컴포넌트

MyBatis-Spring 예제


MyBatis란?

- 자바 오브젝트와 SQL문 사이의 자동 Mapping 기능을 지원하는 ORM 프레임워크이다.

(Object relational Mapping)

- MyBatis는 SQL을 별도의 파일로 분리해서 관리하게 해준다.

- 객체-SQL 사이의 파라미터 Mapping 작업을 자동으로 해주기 때문에 많은 인기를 얻고있다.

- 새로우 DB프로그래밍 패러다임을 익혀야하는 부담없다.

- SQL문 그대로 이용하면서 JDBC 코드작성의 불편함도 제거해준다.

- 도메인 객체나 VO객체를 중심으로 개발이 가능한 장점있다.


MyBatis의 특징


쉬운 접근성과 코드의 간결함

- 가장 간단한 퍼시턴스 프레임워크(ORM)

- XML형태로 서술된 JDBC코드라고 생각해도 될만큼 JDBC의 모든 기능을 MyBatis가 대부분 제공한다.

- 복잡한 JDBC코드를 걷어내며 깔끔한 소스코드를 유지할 수 있다.

- 수동적인 파라미터 설정과 쿼리 결과에 대한 맵핑 구문을 제거할 수 있다.


SQL문과 프로그래밍 코드의 분리

- SQL에 변경이 있을 때마다 자바 코드를 수정하거나 컴파일 하지 않아도 된다.

- SQL작성과 관리 또는 검토를 DBA와 같은 개발자가 아닌 사람에게 맡길 수도 있다.


다양한 프로그래밍언어로 구현가능

- java,C#, .NET등


MyBatis3와 MyBatis-Spring의 주요 컴포넌트

Application     

 O/R

 JDBC

 JDBC

 Persistence

 Modules

 Mapper

 Interfaces

 Implementations

 Layer



JDBC는 저수준의 API

- JDBC를 MyBatis로 맵핑해서 사용(개발자가 사용편리)한다.


Data Access Layer에서 사용(DAO)



MyBatis3의 주요 컴포넌트

Mybatis설정파일(SqlMapCongif.xml)

- 데이터베이스의 접속 주소 정보나 Mapping파일의 경로(SQL포함한파일)등의 고정된 환경정보를 설정한다.

SqlSession Factory Builder(호출)

- 정보를 읽어온다.

- 읽어온 정보로 SqlSession Factory생성한다.

SqlSession Factory

- 읽어온 정보로 SqlSession 생성한다.

SqlSession(핵심역할)

- 컴포넌트 생성 개발자에게 리턴해준다.

- SQL문을 호출해주는 기능,트랜잭션 관리도 실행한다.




Beans.xml에서 설정해야하는 것.

SqlSessionFactoryBean


SqlSessionTemplate


MyBatis-Spring의주요 컴포넌트 역할이다.


Mybatis 설정파일

sqlMapConfig.xml

 - VO객체의 정보를 설정한다.

 SqlSessionFactoryBean

 - MyBatis설정파일을 바탕으로 SqlSessionFactory를 생성한다.

 - SpringBean으로 등록해야함

 SqlSessionTemplate

 - 핵심적인 역할을 하는 클래스로서 SQL실행이나 프랜잭션 관리를 실행한다.

 - SqlSession 인터페이스를 구현하며, Thread-safe하다(멀티스레드환경에서도 안전하게사용가능)

 - Sqpring Bean으로 등록해야한다.


 Mapping파일

 - SQL문과 OR Mapping을 설정한다.

 Spring Bean

 - SqlSessionFactoryBean을 Bean에 등록할 때

  DataSource정보와 MyBatis Config파일정보,Mapping파일의 정보를 함께 설정

 - SqlSessionTemplate을 Bean으로 등록



'개발 소발 > 개발 Spring' 카테고리의 다른 글

Mybatis Mapper 인터페이스란?  (0) 2018.01.11
Mybatis 셋팅이란?  (0) 2017.12.21
AOP어플리케이션 작성 (annotation)이란?  (0) 2017.11.27
AOP어플리케이션 작성 (XML)이란?  (0) 2017.11.24
AOP란?  (0) 2017.11.24

AOP어플리케이션 작성 (annotation)이란?


Aspect 클래스 선언 및 설정

Aspect 클래스 구현의 이해

Aspect 테스트


SpringAOP 구현방식

- XML

- Annotion


annotation 방식

- @Aspect 사용한다.

- XML설정파일에 <aop:aspectj-autoproxy />를 설정한다.


@Aspect 란?

- Aspect 클래스 선언할 때 사용한다.

- AspectJ 5버전에 새롭게 추가된 어노테이션이다.

- @Aspect 어노테이션을 이용할 경우 XML 설정 파일에 어드바이스와

포인트컷을 설정하는 것이 아니라 클래스 내부에 정의할 수 있다.

- <aop:aspectj-autoproxy />태그를 설정파일에 추가해서 사용한다.



xml설정파일에 추가



@Before("pointcut")

- 타겟 객체의 메서드가 실행되기 전에 호출되는 어드바이스이다.

- JoinPoint를 통해 파라미터 정보를 참조한다.


@After("pointcut")

- 타겟 객체의 메서드가 정상 종료됐을 때와 예외가 발생했을 때 모두 호출되는 어드바이스이다.

- 리턴값이나 예외를 직접 전달받을 수는 없다.


@Around("pointcut")

- 타겟 객체의 메서드가 호출되는 전,후 모든 과정을 담을수있는 강력한기능을 가진 어드바이스이다.


@AfterReturning(pointcut="",returning="")

- 타겟 객체의 메서드가 정상적으로 실행을 마친 후에 호출되는 어드바이스이다.

- 리턴값을 참조할 때는 returning 속성에 리턴 값을 저장할 변수 이름을 지정해야한다.


@AfterThrowing(pointcut="",throwing="")

- 타겟 객체의 메서드가 예외가 발생하면 호출되는 어드바이스이다.

- 발생된 예외를 참조할 때는 throwing속성에 발생한 예외를 저장할 변수이름을 지정해야한다.


@Before 어드바이스

- @Before 어드바이스를 이용해서 실행되는 타겟 객체의 메서드명과 파라미터를 출력하는 어드바이스이다.

- 아래의 before 메서드는 myspring 패키지 또는 그 하위 패키지에 있는 모든

public 메서드가 호출되기 이전에 호출된다.

ex)


@AfterReturning 어드바이스(정상적으로 종료되었을때)

- @AfterReturning어드바이스를 이용해서 실행되는 타겟 객체의 메서드명과 리턴값을 출력하는 어드바이스이다.

- 아래의 afterReturning 메서드는 myspring.user.service 패키지 하위에 있는 모든 public 메서드가 정상 종료된 이후에 호출된다.

- 리턴값을 참조할 때는 returning 속성을 이용해서 리턴 값을 담을 변수 이름을 지정해야한다.



@AfterThrowing 어드바이스(예외가 발생하였을때)

- @AfterThrowing 어드바이스를 이용해서 실행되는 타겟 객체의 메서드명과 예외메시지를 출력하는 어드바이스이다.

- 아래의 afterThrowing 메서드는 클래스명이 UserService로 시작되는 클래스에 속한 모든 메서드가 예외가 발생된 이후에 호출된다.

- 발생된 예외를 참조할 때는throwing 속성을 이용해서 예외객체를 담을 변수이름을 지정해야한다.



@After 어드바이스(정상적,예외 둘다 모두 호출)

- @After 어드바이스를 이용해서 실행되는 타겟 객체의 메서드명을 출력하는 어드바이스이다.

- afterFinally 메서드는 메서드명이 User로 끝나는 메서드들이 정상 종료됐을 때와 예외가 발생했을때 모두호출된다.

- 반드시 반환해야 하는 리소스가 있거나 메서드 실행 결과를 항상 로그로 남겨야하는 경우에 사용할 수 있다.

하지만 리턴 값이나 예외를 직접 전달받을 수는 없다.



'개발 소발 > 개발 Spring' 카테고리의 다른 글

Mybatis 셋팅이란?  (0) 2017.12.21
MyBatis란?  (0) 2017.11.27
AOP어플리케이션 작성 (XML)이란?  (0) 2017.11.24
AOP란?  (0) 2017.11.24
jdbc환경설정(mysql)이란?  (0) 2017.11.21

AOP어플리케이션 작성 (XML)이란?


Advice 클래스 작성에 대하여 이해

AOP 설정 및 테스트

PointCut 문법



SpringAOP의 구현방식

xml방식

@Aspect(어노테이션)방식


xml구현방식 절차

- Advice(부가기능)클래스 작성한다.

- xml파일에 <aop:config>를 이용해서 애스펙트를 설정한다.

(aspect애스펙트란? 어드바이스+포인트컷)


Advice의 종류

- Around어드바이스

타겟(핵심로직)메서드가 호출되기 이전(before) 시점과 이후(after) 시점에

모두 처리해야할 필요가 있는 부가기능을 정의한다.

Joinpoint 앞과 뒤에서 실행되는 Advice 이다.

- Before어드바이스

타겟(핵심로직)메서드가 호출되기 이전(before) 시점에 처리해야 할 

필요가 있는 부가기능을 정의한다.

Joinpoint 앞에서 실행되는 Advice 이다.

- After어드바이스

타겟(핵심로직)메서드가 정상적으로 실행된 이후(After)시점에 처리해야 할 

필요가 있는 부가기능을 정의한다.

Joinpoint 메서드호출이 정상적으로 종료된뒤 실행되는Advice 이다.

- AfterThrowing어드바이스

타겟(핵심로직)메서드가 예외를 발생된 이후(after)시점에 처리해야할 필요가 있는 부가기능을 정의한다.

예외가 던져질 때 실행되는 Advice 이다.


Advice클래스의 정보

클래스명 : PerformanceTraceAdvice.java

클래스 기능 : 이 어드바이스는 타겟 객체의 메서드 실행시간을 계산해서 출력해주는 부가기능을 제공한다.

advice유형 : Around 어드바이스

(타겟 객체의 메서드 실행 전, 후의 시간을 측정하여 계산하면 타겟객체의 메서드 실행시간을 알 수 있다.)

구현 메서드명:trace(ProceedingJoinPoint joinPoint)


JoinPoint인터페이스

- JoinPoint는 SpringAOP혹은 AspectJ에서 AOP가 적용되는 지점을 뜻한다.

- 해당지점을 AspectJ에서 JoinPoin라는 인터페이스로 나타낸다.

- JoinPoint에서 제공하는 메소드

 getArgs

 메소드 아큐먼트를 반환(오브젝트배열)

 getThis

 프록시 객체를 반환

 getTarget

 대상 객체를 반환(오브젝트형태)

 getSignature

 어드바이즈되는 메서드의 설명을 반환(메소드명,리턴타입)

 toString

 어드바이즈되는 메서드의 설명을 출력


- 모든 어드바이스는 org.aspectj.lang.JoinPoint 타입의 파라미터를 어드바이스 메서드에 첫 번째 매개변수로 선언해야한다.

- Around 어드바이스는 JoinPoint의 하위 클래스인 ProceedingJoinPorint를 필수적으로 선언해야한다.



JoinPoint(인터페이스)before,after사용한다.

    ↑

proccedingJoinPoint(상속받은 인터페이스) around사용한다.


proccedingJoinPoint 인터페이스란?

- around 조인포인트에서 사용한다.

- 계속해서 진행하다를 뜻이다.

- 타겟객체 앞뒤에서 모두사용할떄 사용한다.

- procced메서드 : 요청을 가로채 실행하고 타겟을 실행시킨다.

(아규먼트가 있는 메서드와 없는메서드가있음)



PerformanceTraceAdvice.class



bean설정방법

AOP설정




Advice를 정의하는 태그

<aop:before>

- 메서드 실행 전에 적요오디는 어드바이스를 정의한다.

<aop:after-returning>

- 메서드가 정상적으로 실행된 후에 적요오디는 어드바이스를 정의한다.

<aop:after-throwing>

- 메서드가 예외를 발생시킬 때 적용되는 어드바이스를 정의한다.

<aop:after>

- 메서드가 정상적으로 실행되는지 또는 예외를 발생시키는지 여부에 상관없이 어드바이스를 정의한다.

try-catch-finally에서 finally블록과 비슷하다.

<aop:aroung>

- 메서드 호출 이전, 이후, 예외발생 등 모든 시점에 적용가능한 어드바이스를 정의한다.



PointCut표현식



예제

execution([접근제한제 패턴] 타입패턴 [타입패턴.]이름패턴 (타입패턴|"..",...)


execution(* hello(..))

- hello라는 이름을 가진 메서드를 선정하는 것이다.

파라미터는 모든종류를 다허용한다.

execution(* hello())

- 위와동일하나 파라미터가없는것이다.


execution(* myspring.user.service.UserServiceImpl.*(..))

- myspring.user.service.UserServiceImpl 클래스를 직접 지정하여 

이 클래스가 가진 모든 메서드를 선택한다.


execution(* myspring.user.service.*.*(..))

- myspring.user.service 패키지의 모든 클래스에 적용한다.

하지만 서브패키지의 클래스는 포함되지 않는다.


execution(* myspring.user.service..*.*(..))

- myspring.user.service 패키지의 모든 클래스에 적용된다.

그리고 '..'를 사용해서 서브패키지의 모든 클래스까지 포함한다.


execution(* *..Target.*(..))

- 패키지에 상관없이 Target이라는 이름의 모든 클래스에 적용한다.

다른 패키지에 같은 이름의 클래스가 있어도 적용이 된다는 점에 유의해야한다.

'개발 소발 > 개발 Spring' 카테고리의 다른 글

MyBatis란?  (0) 2017.11.27
AOP어플리케이션 작성 (annotation)이란?  (0) 2017.11.27
AOP란?  (0) 2017.11.24
jdbc환경설정(mysql)이란?  (0) 2017.11.21
데이터엑세스개념(jdbc,springjdbc)이란?  (0) 2017.11.21

AOP란?


AOP의 개요와 용어

AOP의 특징 및 구현방식

Aspect와 SpringAOP설치


AOP의 개요와 용어

- 핵심기능(Core Concerns)

업무로직을 포함하는 기능이다.

- 부가기능(Cross-cutting Concerns)

로깅,보안등 부가기능이다.


객체지향의 기본 원칙을 적용하여도 핵심기능에서 부가기능을 분리해서 모듈화하는것은 어렵다.

하지만 AOP 개념을 적용하면 부가기능을 쉽게 분리할 수 있다.


AOP 개요

- 애플리케이션에서의 관심사의 분리(기능의분리)를 말한다.

- 즉, 핵심적인 기능에서 부가적인 기능을 분리하는 것.

- 분리한 부가기능을 애스펙트(Aspect)라는 독특한 모듈형태로 만들어서 설계하고 개발하는 방법이다.

- OOP를 적용하여 핵심기능에서 부가기능을 쉽게 분리된 모듈로 작성하기 어려운 문제점을 AOP가 해결해준다.

- 핵심기능과 부가기능을 분리하여 객체지향적인 가치를 지킬수 있도록 도와주는 개념이다.


Aspect란?

- 부가기능을 정의한 코드 어드바이스이다.(Advice와 어디바이스를 어디에 적용할지 정하는 포인트컷(PointCut)을 합친개념)

- Advice + PointCut = Aspect

- 핵심기능 코드 사이에 침투된 부가기능을 독립적인 애스펙트로 구분가능하다.

- 런타임시점에 필요한 부분에 동적으로 참여하게 가능이다.


AOP용어

- 타겟Target(핵심기능)

핵심기능을 담고 있는 모듈로, 타겟은 부가기능을 부여할 대상이 된다.

- 어드바이스(Advice)

어드바이스는 타겟에 제공할 부가기능을 담고 있는 모듈이다.

- 조인 포인트(Join Point)

어드바이스가 적용될 수 있는 위치를 말한다.

즉, 타겟 객체가 구현한 인터페이스의 모든 메서드는 조인 포인트가된다.

- 포인트 컷(PointCut)

어드바이스를 적용할 타겟의 메서드를 선별하는 정규표현식이다.

포인트컷 표현식은 execution으로 시작하고, 메서드의 Signature를 비교하는 방법을 주로 이용한다.

- 애스펙트(aspect)

애스펙트는 AOP의 기본 모듈이다.

애스펙트 = 어드바이스 + 포인트컷

애스펙트는 싱글톤 형태의 객체로 존재한다.

- 어드바이저(Advisor)

어드바이저 = 어드바이스 + 포인트컷

어드바이저는 Spring AOP에서만 사용되는 특별한 용어이다.

- 위빙(Weaving)

위빙은 포인트컷에 의해서 결정된 카겟의 조인포인트에 부가기능(어드바이스)를 삽입하는과정이다.

위빙은 AOP가 핵심기능(타겟)의 코드에 영향을 주지않으면서 필요한 부가기능(어드바이스)을 추가할 수 

있도록 해주는 핵심적인 처리과정이다.


기존(핵심,부가기능이 같이잇음)

한 로직 안에 PrimaryConcern,(핵심기능),Cross_cutting(부가기능) 두가지 모두 같이 있다

ex)로그인체크(부가기능), 회원리스트가져오기(핵심기능)


AOP

Weaving(핵심기능에 적용하는과정)

Pointcout (advice를 적용할 대상을 선별하는식) --------------> PrimaryConcern(핵심기능)

↑(advice)<=부가기능지칭

Cross_cutting(부가기능)


위에 Pointcut+advice = Aspect


로그인체크와 회원리스트가져오기를 분리한다.

회원리스트가져오기(핵심기능)

로그인체크(부가기능)

두가지로 분리하게된다.


Spring AOP의 특징

- Spring은 프록시(Proxy)기반 AOP를 지원한다.

타겟객체에 대한 프록시를 만들어 제공한다.

타겟을 감싸는 프록시는 실행시간(runTime)에 생성된다.

프록시는 어드바이스를 타겟객체에 적용하면서 생성되는 객체이다.    

- 프록시(Proxy)가 호출을 가로챈다.

프록시는 타겟 객체에 대한 호출을 가로챈 다음 어드바이스의 부가기능 로직을 수행하고

난 후에 타겟의 핵심기능 로직을 호출한다.(전처리 어드바이스)

또는 타겟의 핵심기능 로직 메서드를 호출한 후에 부가기능(어드바이스)를 수행하는 경우도 있다.(후처리어드바이스)


- 메서드 조인 포인트만 지원한다.

Spring은 동적 프록시를 기반으로 AOP를 구현하므로 메서드 조인 포인트만 지원한다.

즉, 핵심기능(타겟)의 메서드가 호출되는 런타임 시점에만 부가기능(어드바이스)을 적용할 수 있다.

반면에 AspectJ 같은 고급 AOP 프레임워크를 사용하면

객체의 생성, 필드값의 조회와 조작,static메서드 호출 및 초기화 등의 다양한 작업에 부가기능을 적용할 수 있다.


Spring AOP의 구현방식

XML의 기반의 POJO 클래스를 이용한 AOP구현

-부가기능을 제공하는 Advice클래스를 작성한다.

-XML 설정 파일에 Maop:config>를 이용해서 애스펙트를 설정한다.

(즉,어드바이스와 포인트컷을 설정함)

@Aspect 어노테이션을 이용한AOP 구현

-@Aspect어노테이션을 이용해서 부가기능을 제공하는 Aspect클래스를 작성한다.

Aspect클래스는 어드바이스를 구현하는 메서드와 포인트컷을 포함한다.

-XML설정파일에 (aop:aspectj-autoproxy />를 설정한다.



AspectJ와 SpringAOP 라이브러리 설치

Pom.xml에 추가



jdbc환경설정(mysql)이란?


JDBC 실행

실행전 환경설정(드라이버설치,라이브러리설치,Bean설정)


pom.xml(mysql과Spring-jdbc추가)




프로퍼티파일에 추가하기.


bean.xml에 추가하기.


Test 클래스 코드작성.


연결된것 확인방법.

콘솔로그에 com.mysql.jdbc.JDBC4Connection@31368b99 출력되는 것 확인한다.

데이터엑세스개념(jdbc,springjdbc)이란?


데이터엑세스공통개념

SpringJDBC


DAO(data access Object)패턴

- 데이터 액세스 계층은 DAO 패턴을 적용하여 비지니스 로직과 데이터엑세스 로직을 분리하는것이 원칙이다.

- 비지니스로직이 단순하다면 DAO와 Service를 통합할수도있지만 비지니스로직을 가지고있다면 반드시 분리한다.

- 서비스계층에 영향을 주지않고 데이터엑세스 가능하다.


컨넥션 풀링을 지원하는 DataSource

컨넥션풀링이란?

-미리정해진 개수만큼의 DB 컨넥션을 풀(Pool)에 준비해두고, 애플리케이션이 요청할때마나 꺼내서 할당하고 돌려받아 Pool에 넣는 기법이다.

다중사용자를 갖는 엔터프라이즈시스템 즉 웹어플리케이션에서는 반드시 DB컨넥션 풀링 기능을 지원하는DataSource를 사용해한다.

(실제 SQL실행시간보다 컨넥션객체 생성시간이 더걸리게됌)

스프링에서는 DataSource를 공유가능한 SpringBean으로 등록해 주어 사용할 수 있도록 해준다.


DataSource 구현클래스 종류

테스트환경을 위한DataSource

-SimpleDriverDataSource

스프링이 제공하는 가장 단순한 DataSource구현클래스이다.

getConnection()을 호출할 때마다 배번 DB 컨넥션을 새로만들고 따로 풀(pool)을 관리하지 않으므로

단순한 테스트용으로만 사용해야 한다.

-SingleConnectionDriverDataSource

순차적으로 진행되는 통합테스트에서는 사용가능하다.(멀티스레드 적합하지않음)

매번 생성하지않게때문에 SimpleDriverDataSource보단 빠르다.


DataSource종류

오픈소스 DataSource

-Apache Commons DBCP

가장유명한 오픈소스 DB커넥션 풀 라이브러리이다.

-c3p0 jdbc

c3p0는 jdbc3.0 스펙을 준수하는 Connection 과 Statement풀(pool)을 제공하는 라이브러리 이다.


두가지 모두 수정자(setter)메서드 제공 SpringBean으로 등록해서 사용하기편리하다.



JDBC란?

- 모든 자바의 데이터 액세스 기술의 근간이된다.

- 엔티티클래스와 애노테이션을 이용하는 최신 ORM기술이다.(Mybatis,hibernate등)

내부적으로는DB와 연동을 위해 JDBC를 이용한다.

- 안정적이고 유연한 기술이지만, 로우레벨기술이다.

    (WHY? 중복된 코드가 반복적으로 사용,DB에따라 일관성없는 정보를 가진채로 Checked Exception로 처리)



SpringJDBC란?

- JDBC의 장점과 단순성을 그대로 유지하면서도 기존JDBC의 단점을 극복한다.

- 단순한,간결한 형태의 API사용법을 제공한다.

- JDBCAPI에서 지원되지않는 편리한기능이다.

즉, JDBC를 개발자들이 사용하기쉽게 만든라이브러리


반복해야하는 작업을 대신 처리해준다.(실행할 SQL정의,실행될시 바인딩될 파라미터,넘겨받을 객체만설정해주면된다)

사용하려면 먼저 DB컨넥션을 가져오는 DataSource를 Bean으로 등록한후 사용해야한다.



Spring JDBC가해주는 작업

- Connection열기와 닫기

예외발생해도 Connection을 닫아준다.

- statement준비와 닫기

SQL정보가 담기는 Statement또는 PreparedStatement를 생성하고 필요한 준비작업을 해주는것도 해준다.

statement도 알아서 닫아준다.

- statament실행

sql던지고 다양한객체로 받아올수있게해준다.

- ResultSetLoop처리

ResultSet에 담김 쿼리 실행결과가 한건 이상이면 ResultSet루프를 만들어 반복해준다.

- Exception 처리와 반환

작업중 발생되는 모든 예외는 SpringJDBC예외변환기가 처리해준다.

즉 DataAccessException타입으로 변환해준다.

jdbc는 반드시 맞는 예외처리를 해주어야하는데 SpringJDBC는 안해도된다.

- Transaction처리

transaction와 관련된 작업을 알아서해준다.(커밋,롤백)


jdbcTemplate클래스

SpringJDBC의 모든 기능을 최대한 활용할 수 있는 유연성을 제공한다.

- 실행,조회,배치 세가지 작업이 있다.

실행

-INSERT UPDATE

조회

-SELECT

배치

-여러개의 쿼리를 한꺼번에 수행하게해준다.


JdbcTemplate클래스생성

- DataSource는 보통 Bean으로 등록해서 사용하므로 jdbcTemplate이 필요한 DAO클래스에서 DataSourceBean을 DI받아서

jdbcTemplate을 생성할때 인자로 넘겨주면된다.

- 멀티스레드환경해서도 안전하게사용가능하다.


업데이트 메서드

파라미터갯수는 가변인자(한개든 여러개든)가능하다.

결과값은 반영된 갯수이다.



queryForObject()메서드 (SELECT)

여러개의 칼럼,한개의 로우로 반환될때 사용한다.


query()

여러개의 칼럼,여러개의 로우로 반환될때 사용한다.



+ Recent posts