![](https://blog.kakaocdn.net/dn/bPElw4/btrm7L2sBJd/NnfyLYFnkwLrz8rzse2HWK/img.png)
FrameWork?
프레임 워크란 반쯤 만들어져 있는 프로그램으로 MyBatis의 경우 Persistence FrameWork이다.
Mybatis는 JDBC를 연결해주는 프레임 워크로서 JDBC에서의 다섯 가지 단계 중 1단계 Driver연결, 2단계 계정연결, 5단계 DB종료는 항상 공통된 부분 이었는데 이를 JDBCTemplate을 만들어 모아 두었으며 3단계인 Query준비 단계와 4단계 Query 실행 및 리턴 단계는 Dao에서 각각 따로 만들어 주었다.
따라서 MyBatis를 할때도 설정만 잡아두고 SQL만 신경을 쓰면 공통되는 부분은 MyBatis가 공통된 부분을 해결해 주었다.
즉, 항상 공통적인 부분은 프레임워크가 다 만들어둔 것이다.
Solution?
특정한 상황에 대한 해결방안으로서 사용자의 요구에 대응되는 H/W, S/W, Skill 등을 알려주는 것으로 라이브러리 보다 더 큰 개념이다.
(스타트업에서 부족한 부분들을 알려주고 도와주는 솔루션 업체도 있음)
(ex. ERP, DBMS, POS 등...)
Library?
특정 목적을 위해 사용하는 함수들을 모듈화 시킨 것.
필요한 부분들을 구현해놓고 가져다 쓸 수 있는 것.
(*.jar / FullCalendar.js 등)
Spring Framework?
웹 개발이 EJB(Enterprise JavaBean) 기반 개발 에서 POJO(Plain Old Java Object)기반 개발로 바뀌었다.
EJB는 각각에 대응되는 기술이 필요하다면 POJO는 순수하게 자바의 기술로만 만들자는 뜻으로 자바 기반으로 만들겠다는 뜻이다.
즉, 엔터프라이즈(Enterprise) 애플리케이션 개발을 복잡한 EJB가 아닌 POJO를 통해서 개발 할 수 있도록 돕는다.
- 어플리케이션 프레임워크로 불리며, 웹 어플리케이션은 물론 콘솔 어플리케이션이나 스윙과 같은 GUI 어플리케이션 등 어떤 어플리케이션에도 적용 가능한 프레임워크이다.
- 스프링은 EJB와 같이 복잡한 순서를 거치지 않아도 간단하게 이용할 수 있기 때문에 '경량 컨테이너'라고도 부른다. ( Django, Node.js 등이 나온후 경량 컨테이너가 아니라고 할수도 있으나 당시에는 경량 컨테이너였음 )
- DI(Dependency Injection)과 AOP(Aspect Oriented Programming), OCP(Open-Closed Principle)을 중점 기술로 사용하고 있지만, 이 외에도 여러가지 기능을 제공한다.
![](https://blog.kakaocdn.net/dn/cdlnrF/btrnhA5Fo15/GFGCXG59CeNUQApL2YKnQk/img.png)
해당 그림은 스프링4버전에서 나왔던 그림이다.
스프링프레임 워크는 Data Access/integration, Web, AOP, Aspects, Core Container 등 다양한 컨테이너가 하나하나 만들어져있다.
스프링의 특징
DI(Dependency Injection) / IoC(Inversion of Control)
- IoC : 제어 역전(제어 반전), 생성(Spring IoC Container)과 사용의 분리
- DI : 의존 주입, 값을 넣어주자. <constructor-arg> / <property> / @Autowired
AOP(Aspect Oriented Programming) : 관점 지향 프로그래밍
cc(core concern) -> 주 관심사항
ccc(cross cutting concern) -> 공통 관심사항
결합점(joinpoint) : ccc가 결합될 수 있는 모든 상황(메소드 호출 등)
-인스턴스의 생성시점으로 메소드를 호출하는 시점이다. Exception이 발생하는 시점과 같이 애플리케이션이 실행될 때 특정 작업이 실행되는 시점을 의미한다.(Aspect를 플러그인 할 수 있는 애플리케이션의 실행 시점)
교차점(pointcut) : ccc가 결합될 특정 joinpoint를 선언
-충고가 어떤 결합점에 적용되어야 하는지 정의한다. 명시적인 클래스의 이름, 메소드의 이름이나 클래스나 메소드의 이름과 패턴이 일치하는 결합점을 지정 가능토록 해준다.(스프링 설정파일 안에 XML로 작성)
충고(advice) : ccc 실제 구현 코드(target 전, 후에 공통 관심사 ccc 붙여줌)
-교차점에서 지정한 결합점에서 실행(삽입)되어야 하는 코드로 Aspect의 실제 구현체이다.
advisor(aspect) : pointcut+advice
-AOP의 중심단위로 Advice와 pointcut을 합친 것으로 구현하고자 하는 횡단 관심사의 기능, 애플리케이션의 모듈화 하고자 하는 부분이다.
엮기(weaving) : 프로그램이 묶여서 잘 실행되게 하는 것
-에스펙트를 대상 객체에 적용하여 새로운 프록시 객체를 생성하는 과정을 말한다.
Aspect는 대상 객체의 지정된 결합점에 엮인다.
proxy:타겟인척 하는 애, 신호를 대신받아줌, 프록시가 인터셉트 해서 강탈해와서 응답해준다.
OCP(Open Closed Principle)
-인터페이스를 통해 제공되는 확장 포인트는 확장을 위해 개방되어 있고, 인터페이스를 이용하는 클래스는 자신의 변화가 불필요하게 일어나지 않도록 굳게 폐쇄되어 있다.
즉, A가 B를 의존 한다면, B를 가져다 쓰는 A는 변화가 없게 폐쇄 시키고, 공개 되어 있는 B는 언제든 다른 기능으로 변화를 줄 수 있는 확장성이 좋게 개방시켜 두는 게 좋다.
'Java 관련 > Spring Legecy' 카테고리의 다른 글
[Spring] DI / IoC (Bean 객체 생성_04) - Singleton (0) | 2022.03.13 |
---|---|
[Spring] DI / IoC (Bean 객체 생성_03) - setter 주입 (0) | 2022.03.12 |
[Spring] DI / IoC (Bean 객체 생성_02) - 생성자 주입 (0) | 2022.03.11 |
[Spring] DI / IoC (Bean 객체 생성_01) (0) | 2022.03.10 |
[Spring] 기본세팅(Maven / pom.xml) (0) | 2022.03.09 |