day30(미완)

두윤기·2023년 2월 9일
0
post-thumbnail

SQL GROUP BY

> GROUP BY(그룹)

  • 어떤 기준을 두고 해당 기준에 따라 집합으로 구분하여 결과 표시
  • ㅇㅇ별 데이터 추출 시
  • 집계함수와 결합하여 사용
  • GROUP BY의 항목이 여러 개일 경우 SELECT 대상에 모두 적어야함

사용 예시

  • 형식
-- 사용 폼
SELECT ATTRIBUTE, 집계함수 
FROM TALBE_NAME 
GROUP BY ATTRIBUTE;
  • ex
-- 연도별 제품 개수
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 절

  • GROUP BY 이후 조건으로 데이터 선별
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

  • filter: Java Web 기능

간섭

  • 해당 시점의 진행 상황을 살펴보거나 변조할 수 있도록 가로채는 것
  • 직접 구현(Spring AOP, AspectJ)
  • 만들어진 구현체로 처리(filter - Java web기술, intercepter)

Spring AOP Weaving(위빙)

  • reference: https://velog.io/@dnjwm8612/AOP-Weaving-Proxy
  • 간섭을 하는 행위
  • Pointcut에 의해서 결정된 target의 join point에 부가기능(advice)를 삽입하는 과정
  • AOP가 핵심기능(target)의 code에 영향을 주지 않으면서 필요한 부가기능(advice)를 추가

> interceptor

  • 각각의 시점들을 간섭할 수 있도록 만들어진 AOP 객체
  • Spring 실행과정에 개입하여 변화를 일으킬 수 있는 도구
  • 등록만으로 사용할 수 없음
  • HandlerInterceptor 상속, 자격 획득 및 Spring에 사용 설정

HandlerInterceptor

+ default method
상속 시 구현을 하지 않아도 error 발생 X

  • preHandle
    • Controller 실행되기 직전 시점에 간섭
  • postHandle
    • Controller 실행 직후 시점에 간섭(화면 생성 X)
    • Model에 담긴 정보 확인
  • afterCompletion - Controller 실행, 화면 생성 후 간섭
    • error 확인

IntercepterConfiguration

  • Spring의 초기 설정 수행
  • @Configuration 등록
  • project 실행 시 application.properties와 합쳐져서 설정 수행
  • project의 구조를 변경하는 설정이라면 특정 class를 상속받아서 자격까지 확인
    • WebMvcConfigurer

관심사 분리

관리자 INTERCEPTOR

profile
programmerD

0개의 댓글