사진 수정하고 글 정리!!
기간 | 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 |