SQL GROUP BY
> GROUP BY(그룹)
- 어떤 기준을 두고 해당 기준에 따라 집합으로 구분하여 결과 표시
- ㅇㅇ별 데이터 추출 시
- 집계함수와 결합하여 사용
GROUP BY
의 항목이 여러 개일 경우 SELECT 대상에 모두 적어야함
사용 예시
SELECT ATTRIBUTE, 집계함수
FROM TALBE_NAME
GROUP BY ATTRIBUTE;
SELECT TO_CHAR(MADE,'YYYY') AS 연도, COUNT(*)
FROM PRODUCT
GROUP BY TO_CHAR(MADE,'YYYY');
SELECT EXTRACT(YEAR FROM MADE), COUNT(*) AS 개수
FROM PRODUCT
GROUP BY EXTRACT(YEAR FROM MADE)
ORDER BY 개수 DESC;
> HAVING 절
SELECT TYPE
FROM PRODUCT
GROUP BY TYPE HAVING COUNT(*) >= 3;
VIEW
- 자주 사용하는 조회 구문을 테이블화
- logical table(논리 테이블) or virtual table(가상 테이블)
- sql문만 저장되어 disk 공간 할당 X
- view에 대한 수정 결과는 기본 테이블에 적용됨
- 조회만 하고 등록, 수정, 삭제는 가급적 지양
> 장점
- 논리적 독립성 제공
- 데이터의 접근 제어(보안)
- 사용자의 데이터 관리 단순화
- 여러사용자의 다양한 데이터 요구 지원
> 사용
grant
GRANT CREATE VIEW TO kh11;
사용 예시
CREATE VIEW POCKETMON_STAT AS
SELECT TYPE, COUNT(*) CNT
FROM POCKETMON
GROUP BY TYPE
ORDER BY CNT DESC, TYPE ASC;
CREATE OR REPLACE
CREATE OR REPLACE VIEW SUBJECT_STAT AS
SELECT
TYPE,
AVG(PRICE) AS AVG_PRICE,
COUNT(*) AS CNT
FROM SUBJECT
GROUP BY TYPE
ORDER BY CNT DESC, AVG_PRICE DESC;
AOP
> AOP
Aspect Oriented Programming(관점 지향 프로그래밍)
- reference: https://engkimbs.tistory.com/746
- OOP에서 발전, 객체 관리
- 핵심적인 관점(비즈니스 로직), 부가적인 관점(DB연결, Loging, FILE I/O, ...)으로 나누어서 보고 그 관점을 기준으로 각각 모듈화
- Crosscutting Concerns(흩어진 관심사)
- 다른 부분들에서 반복적으로 쓰이는 공통된 코드들
> AOP 주요개념
Aspect(관점)
- 흩어진 관심사를 모듈화, 주로 부가기능 모듈화
Target
- Aspect를 적용하는 곳(Class, method, ...)
Advice
- 실질적으로 어떤 일을 해야할 지에 대한 것, 실질적인 부가기능을 담은 구현체
JointPoint
- Advice가 적용될 위치, 끼어들 수 있는 지점.
- method 진입 지점, constructor 호출 시점, field에서 값을 꺼내올 때 등 다양한 시점에 적용 가능
PointCut
- JointPoint의 상세한 스펙을 정의한 것.
- 'A란 method의 진입 시점에 호출할 것' 같이 더욱 구체적으로 Advice가 실행될 지점 정함
> Spring MVC Request Lifecycle
간섭
- 해당 시점의 진행 상황을 살펴보거나 변조할 수 있도록 가로채는 것
- 직접 구현(Spring AOP, AspectJ)
- 만들어진 구현체로 처리(filter - Java web기술, intercepter)
Spring AOP Weaving(위빙)
> interceptor
- 각각의 시점들을 간섭할 수 있도록 만들어진 AOP 객체
- Spring 실행과정에 개입하여 변화를 일으킬 수 있는 도구
- 등록만으로 사용할 수 없음
- HandlerInterceptor 상속, 자격 획득 및 Spring에 사용 설정
HandlerInterceptor
+ default method
상속 시 구현을 하지 않아도 error 발생 X
- preHandle
- Controller 실행되기 직전 시점에 간섭
- postHandle
- Controller 실행 직후 시점에 간섭(화면 생성 X)
- Model에 담긴 정보 확인
- afterCompletion - Controller 실행, 화면 생성 후 간섭
IntercepterConfiguration
- Spring의 초기 설정 수행
@Configuration
등록
- project 실행 시 application.properties와 합쳐져서 설정 수행
- project의 구조를 변경하는 설정이라면 특정 class를 상속받아서 자격까지 확인
관심사 분리
관리자 INTERCEPTOR