spring IOC AOP가 중요함.
라이브러리란?
로그인 라이브러리, 뱅킹 시스템 라이브러리 - 회사만의 특화된 라이브러리
제이쿼리, 자바유틸 - 범용적인 라이브러리
라이브러리로만 인터넷뱅킹을 구축하기는 어려웠다! -> 프레임워크가 나옴.
EJB가 있었으나, Spring이 오픈소스로 나오면서 대부분 Spring을 씀.
프레임워크의 특징
프레임워크의 장점
spring framework
업무 분야에 국한되지 않고 애플리케이션 전 영역을 포괄
로우레벨 개발에 덜 신경을 쓰면서 비즈니스 로직 개발에 전념.
안드로이드 프레임워크 위에서 안드로이드가 돌아간다.
자바 프로그램들을 만들어서 spring container위에 올리면 동작한다.
어떻게 컨테이너 위에서 동작시킬 수 있을지! 를 공부해야한다.
컨테이너 만드는 규칙은 없다.
IoC(Inversion of Control)지원 : 컨테이너를 지원한다는 의미.
A -> B를 new B()로 A안에서 B를 사용했다고 한다면,(A가 B를 제어했다)
스프링에서는
B에서 XML로 컨테이너에 보내고 A에서는 의존성 주입을 통해 사용함.
Dependency lookup : 컨테이너 안에서 B를 찾는 것.
Dependency injection : 찾아서 A에 넣어주는 것.
스프링 IoC가 뭐야? 개발자 입장에서 new로 사용하는 게 아니라, DI와 DL을 이용해서 역주입을 해주며 관계를 맺어주는 것이다.
클래스와 클래스의 관계를 맺어주는 것
Interface는 spring말고 클래스간의 관계를 루즈커플링 한 것.
POM : 모든 클래스, 컴파일러 및 정보들을 정의한 문서가 POM. 빌더파일.
컴파일하고 실행해주는 역할을 기입하는 문서. 어떤 정보로 실행을 할건데. 이게 나와있음. JDK에선 기능 지원이 안됨.
프로퍼티스 : 컴파일러, 정보들을 정의할 문서.
디펜던시 : 어떤 클래스들, 라이브러리들이 들어가는지 작성된다. 탑재한다.

maven은 pom.xml파일을 건들이고 gradle은 gradle파일을 건들인다.
왜 해야해? -> JDK에 없으니깐.
디펜던시의 클래스, 라이브러리를 역주입하라고 xml에 기록하는 것.

xml판때기를 만드는 과정임.
TV tv = (TV) factory.getBean("stv"); //룩업
tv.turnOn(); //의존성주입
모든 A, B는 독립적이며, xml에 모든 것을 기록한다.
xml로 하는 것과, 어노테이션을 이용하는 방법이 있다.
어노테이션 이용방식을 쓰게 될텐데, 우선 구조파악을 하고나서 -> 추가적인 것을 배우기.
maven파일로 빌드를 하기 위해 pom.xml을 쓴다.
깃 푸쉬 후
모든 로직에 Date 찍어야 한다?
객체지향프로그래밍을 하다보니 클래스가 많아지고 함수가 많아진다.
Date를 찍는 것은 비즈니스로직 안의, 비즈니스(회원가입 등)와는 다른 관점(aspect)다.
회원가입에 데이트를 넣는거? -> 별개다.
(자바로 개발하는입장에서 클래스가 많아지고 함수가 많아지면)
유지보수, 관점추가가 어렵다.
이걸 지향하는 프로그램을 해보자(Aspect oriented programming)
IoC와 AOP를 이용해 단점을 줄이자.

로그어드바이저 복사 -> 프레임에 붙여넣기. 프레임 파일경로 수정하기.

하나씩 주석 풀어보면서 되나 확인하기.
로그들은 DB에 저장 안되고, 찾으려면 로그를 다운받아야한다?

로그 찍는 것들은 없어. 깔끔함.
하지만 관점지향 프로그래밍을 통해 아래와 같이 로그를 찍을 수 있다.
객체지향에서는 관점지향을 신경쓸 수가 없어.
하지만 스프링 컨테이너를 통해서 관점지향을 할 수 있다. 스프링을 해야하는 이유
IOC, AOP. 역주입과 관점지향프로그래밍

AOP 글
https://velog.io/@backtony/Spring-AOP-%EC%B4%9D%EC%A0%95%EB%A6%AC
시험은 17페이지까지