[Spring] 스프링 기본
★스프링은 자바기반 프레임워크이다.
★스프링은 기본적으로 Maven이라는 빌드 플러그인에 의해 빌드된다. Gradle이나 다른거 쓸 수도 있음
★Spring에서는 스프링 컨테이너라는 큰 그릇안에 객체들을 전부 모아놓는다(Beans객체). 스프링 설정파일에 설정만 해두면 컨테이너가 알아서 생성한다. src/main/resources/applicationContext.xml파일이 그 역할을 담당한다.
★apache.org에서 maven을 설치하면 maven명령을 직접 사용할 수 있다.
★mvn compile : 스프링 설정파일에 명시된 외부라이브러리를 ~/.m2/repository경로에 다운로드 받는다.
★메이븐 레파지토리 저장소에서, 참조내용을 pom.xml에 복붙하는 방식으로 의존 모듈을 사용할 수 있게 한다.
★스프링 설정파일에서 객체를 생성해 놓으면 객체의 생성과 관리는 스프링 컨테이너가 대신 하고, 소스코드에서는 꺼내 사용하기만 하는 형태가 되는데 이런 방식을 IoC(제어역전)이라고 한다.
★스프링의 핵심 개념
-
IOC, DI(제어역전, 의존주입) : 일반적인 자바 소스의 경우 한 클래스(A)가 사용해야할 의존 객체(B)는 A클래스가 포함된 애플리케이션이 스스로 만들어서 관리하고 사용한다. 그러나 스프링 프레임워크에서는 이 객체들을 애플리케이션이 직접 관리하지 않고 스프링 프레임워크가 각각 관리하며 A클래스에 B클래스를 주입하게끔 제어 하는 데 제어권이 애플리케이션에서 스프링 컨테이너로 넘어갔다고 해서 제어 역전이라고 한다. 스프링 프레임워크에서는 스프링 컨테이너가 이러한 객체들을 만들어 적절하게 생성하고 생명주기를 관리하며 주입해주는 제어역할을 한다. 이로써 애플리케이션 개발자는 스스로 사용해야할 A클래스와 B클래스의 객체를 직접 제어하는 것이 아니라 스프링 컨테이너(ApplicationContext)에게 맡길 수 있게 되었고, 의존성 B를 외부에서 주입 받는 것을 의존 주입이라고 한다. B클래스를 인터페이스를 구현하도록 만들면 B클래스를 같은 인터페이스를 구현한 C클래스로 대체해야 하는 상황이 발생했을 때, 자바 코드를 직접 수정하지 않고 스프링 컨테이너에서 환경 설정만 바꿔주는 방법으로 프로그램을 제어할 수 있게 된다.
-
AOP(관점 지향 프로그래밍) : 비즈니스 로직 수행 과정에서 여러 메소드가 유사한 과정을 반복적으로 거치는 경우, 과정들을 핵심 기능(메소드만의 고유한 기능)과 공통 기능(다른 메소드에서도 반복적으로 사용되는 기능, 예를 들어 로그인 체크와 같은)으로 분리한다. 스프링 프레임워크에서는 AOP를 프록시 패턴으로 구현하였다. 프록시 패턴이란 쉽게 말해 A객체의 멤버로 또 다른 A’객체를 두고, 공통 기능은 바깥 A객체가, 핵심 기능은 내부의 A’객체가 수행 하도록 하는 패턴이다. 즉 AOP란 이러한 기능을 공통 기능과, 핵심 기능으로 나눠서 핵심 기능에 어떤 공통 기능(Aspect)을 언제(Advice), 어디에(JoinPoint) 끼워 넣는가(Weaving)에 대한 프로그래밍 방식이다.
-
PSA(서비스 추상화) : 환경의 변화와 관계 없이 일관된 방식으로 어떠한 기술에 접근할 수 있도록 추상화한 구조를 말한다. 즉 외부의 라이브러리나 패키지를 Spring에서 POJO화 시키기 위해 가공하는 것을 말한다. 일반적인 자바 라이브러리와 스프링에서 사용하는 라이브러리는 같지만 서로 다르다. 외부 패키지를 가공해 내부 패키지로 쓴 것이다.