클라우드 스쿨/강의 정리

9주차 - 프로시저, 트리거, 스프링

qqlzzb 2023. 11. 27. 18:24

사진 수정하고 글 정리!!

기간 230703 - 230707
배운 내용 프로시저, 트리거, 스프링(IoC, AOP, MVC)

프로시저 / 트리거 / 사용자 정의 함수

1. 정의

1) 프로시저 : 특정 기능을 수행하는 트랜잭션 언어. 

미리 데이터베이스 서버에 일련의 SQL 명령을 해 놓고, 프로시저를 실행하여 SQL 명령을 간단하게 실행할 수 있게 한다.

 

2) 트리거 : 데이터의 입력, 갱신, 삭제 등의 이벤트가 발생하면 트리거의 SQL 문장이 자동으로 실행된다.

 

3) 사용자 정의 함수 : 프로시저와 유사하며, 처리 결과를 단일값으로 반환한다. 

 

2. 비교

  프로시저 트리거 함수(내장함수 x)
실행 직접 호출하여 실행 자동으로 호출 SQL문 안에 포함되어 실행
반환값 없거나 1개 이상 없음 1개(필수)

 

3. 저장 프로시저 쓰는 경우

1) 자주 일어나는 작업 묶을 수 있음(재사용)
2) 여러 작업 있을 때(update, delete, select... ) 한 번에 요청 가능
=> 여러 sql 있는데 자주 일어날 때

 스프링 프레임워크

1. 특징

IOC, MVC, AOP, ..

POJO (Plain Object Java Object )

경량

Open Source

ejb에 비해 평범한 자바 클래스

core container = 빈 관리(컨테이너 안에 자바 객체 담아서 관리)

2. IoC (Inversion of Control)

: 프로그램의 제어 흐름을 직접 제어하는 것이 아니라, 외부에서 관리

 

- 필요성 

기존 시스템의 변경을 최소화. 시스템 확장하기 좋음.
interface를 이용하여 객체가 추가되는 등의 변동에도 코드를 바꿀 필요가 없음(결합도 낮아짐)

- IoC의 두 가지 구현 방법

1) DL : Dependency Lookup

빈에 라이프사이클 관리 하는 컨테이너 등에서 —> map에 빈이름과 빈객체를 저장. 코드에서 빈 이름으로 lookup

2) DI :  Dependency Injection

A 클래스에서 B 클래스의 객체를 생성하여 쓰고자 할 때 A 클래스 소스에 B b= new BImpl(); 형식의 코드를 작성하게 된다. 이것은 약한 결합을 해치는 경우로 DI를 이용하여 B클래스의 생성, 소멸 등 라이프 사이클 관리를 프레임워크에 맡긴다.  DI는 다시 두 가지로 나눈다.

 

    a) Contructor Injection : 외부 빈이 또 다른 빈을 반드시 사용하는 경우에 사용

    b) Setter Injection : 외부 빈이 또 다른 빈을 반드시 사용하지는 않고, 필요한 경우에 사용될 때 사용

 


- Bean scope

Spring의 default Scope은 singleton. 다른 scope 설정 가능함.

 

Spring에서 지원하는 Scope은 singleton, prototype, request, session, globalSession

 

prototype : 매번 getbean 할 때마다 새로 만들어서 넘겨주었으면 좋겠다.
signleton : 빈을 하나만 생성해서 공유


request, session , globalsession은 웹 환경에서만 사용 가능 (XmlWebApplicationContext 를 사용하는 경우에 사용가능)
globalsession : context 단위(Web App 단위). 웹서버 죽기 전까진 계속 있음(제일 오래 살아 있음)
request : 요청 단위. 요청에 대한 응답 보내면 없어짐(제일 빨리 없어짐)
session : 세션(사용자) 단위. 해당 세션 만료되면 사라짐

- 어노테이션

스프링 컨테이너는 base-package클래스를 검색하여 자동으로 자바빈 등록.

이에 해당하는 annotation

-> @Component, @Repository, @Service, @Controller

1) @Component : 일반적인 용도의 컴포넌트들 표시

2) @Repository : DAO 컴포넌트

3) @Service : 서비스 컴포넌트

 

- 의존 관계 자동 설정

1) @Autowired :의존관계 자동 설정. 타입을 이용하여 의존하는 객체를 주입. 생성자, 필드, 메서드(setter 메서드가 아니어도 됨)의 세 곳에 적용가능

2) @Autowired(required=false)이면, 자동 연결할 때 필요한 타입을 찾지 못해도 예외 발생 안 함. (디폴트로는 true)

3. AOP (Aspect Oriented Programming)

: 관점을 기준으로 다양한 기능을 분리하여 보는 프로그래밍

핵심모듈만 있게 하자
응집도 높게(하나의 모듈이 자기 일만 하게)
=> AOP

 

- AOP의 주요 기법

1) Advice : 횡단 모듈 구현 메서드

2) Point cut : 횡단 모듈이 어느 위치에서 호출 것인지 위치 선정 룰.

3) Aspect : Point cut(어디에서)과 Advice(무엇을 할 것인지)를 합쳐 놓은 클래스

- Advice
AfterReturnin은 정상종료 시, AfterThrowing은 에러발생 시, After는 정상종료/예외 상관없이 호출되는 횡단 모듈

AfterReturning에서 return 값을 횡단모듈에서 얻을 수 있음
AfterThrowing에서 예외객체를 횡단모듈에서 받을 수 있음

- Pointcut 표현식

execution 명시자를 통한 Advice가 적용될 Pointcut 설정

execution(수식어패턴 리턴타입패턴 패키지패턴. 이름패턴(파라미터패턴) )

 

◇ 수식어 패턴 : public, protected 등 생략가능함.

 리턴 타입 패턴 : 리턴타입 명시.

 이름 패턴 : 클래스 이름 및 메서드 이름

 '*'     : 모든 값을 의미(1개)

 '..'     : 0개 이상을 의미

 

예) 

execution(public void set*(..))
   리턴 타입이 void이고 메서드 이름이 set으로 시작하고, 파라미터가 0개 이상인 메서드  

execution(* aaa.bbb.*.*())         
	모든 리턴 타입
  aaa.bbb팩키지의 모든 클래스의 파라미터가 없는 모든 메서드

execution(Integer aaa.bbb.TestService.write(..))    
	리턴 타입이 Integer인  aaa.bbb.TestService.write(..) 메서드  
  모든 파리미터

execution(* get*(*)) 
  모든 리턴 타입     
	이름이 get으로 시작하고 1개의 파라미터를 갖는 메서드  

execution(* get*(*,*))
	모든 리턴 타입, 이름이 get으로 시작하고 2개의 파라미터를 갖는 메서드  

execution(* read*(Integer,..))
  이름이 read로 시작하고, 첫번째 파라미터 타입이 Integer이며,
   그 뒤 0개 이상의 파라미터를 갖는 메서드



4. MVC (Model, View, Controller)

: 하나의 애플리케이션, 프로젝트를 구성할 때 그 구성요소를 세 가지의 역할로 구분한 패턴.

 

-Spring MVC의 사용자 요청 흐름

 

 

1) 사용자의 요청을 프런트 컨트롤러 DispatcherServlet 받아 핸들러 매핑에 의해 적절한 핸들러를 찾은 후 사용자 요청을 전달한다.

2) 핸들러(보통은 Controller)는 서비스 계층의 인터페이스를 호출하여 적절한 비즈니스 로직을 수행한 후 도메인 모델 객체를 리턴 받는다. 리턴된 모델과 뷰이름을 ModelAndView 객체에 저장하여 리턴한다.

3) 뷰이름과 모델을 넘겨받은 DispatcherServlet 뷰 Resolver를 통해 뷰를 결정하고 일반뷰( jsp)에 모델을 넘겨준다.

4) 뷰는 모델을 이용하여 화면 렌더링하여 결과를 DispatcherServlet으로 넘긴다.

5) DispatcherServlet은 랜더링 된 결과를 사용자에게 응답한다.

'클라우드 스쿨 > 강의 정리' 카테고리의 다른 글

11주차 - AWS  (0) 2023.11.29
10주차 - Spring Boot, AWS  (0) 2023.11.28
8주차 - DB  (0) 2023.11.24
7주차 - JAVA  (0) 2023.11.23
6주차 - JAVA  (0) 2023.11.22