스프링이 다르 프레임워크와 차별화되어 제공하는 의존 관계 주입 기능.
객체를 직접 생성하는 게 아니라 외부로부터 의존성 객체를 주입받는 것.
DI를 통해서 모듈 간의 결합도가 낮아지고 유연성이 높아짐.
Ioc 컨테이너(스프링 컨테이너)가 필요에 따라 개발자 대신 Bean들을 관리(제어)해주는 행위.
일반적인 상황에서는 개발자가 직접 객체를 제어함
(new 연산자를 통해 객체를 생성하고, 객체의 의존성을 맺어주고, 초기화 해주고.. 등등..)
하지만 Spring 에서는 xml 파일 또는 Annotaion(@) 방식으로 스프링 컨테이너에 Bean(객체)를 등록만 하면, 스프링 컨테이너에서 Bean의 생명 주기(생성-의존성 설정-초기화-소멸)를 전부 관리해줌 !!
-> 객체에 대한 제어권이 컨테이너로 역전되기 때문에 제어의 역전이라고 하는 것
Ioc를 통해,
느슨한 결합으로 객체 간 의존 관계를 쉽게 변경할 수 있음
코드의 재사용성과 유지보수성을 높임
Ioc 컨테이너 = 스프링 컨테이너 = 애플리케이션 컨텍스트
컨테이너는 인스턴스의 생명주기를 관리하며, 생성된 인스턴스들에게 추가적인 기능을 제공하도록 함. -> 코드의 처리과정을 위임받은 독립적인 존재 !
프로그래머가 작성한 코드를 스스로 참조한 뒤 알아서 객체의 생성과 소멸 (객체의 생애 주기)을 관리함.
Ioc 컨테이너는 객체의 생성과 관계 설정, 사용, 제거 등의 작업을 대신 해준다하여 붙여진 이름.
설정 정보를 참고하여 애플리케이션을 구성하는 오브젝트(빈)을 생성하고 관리
의존성을 갖는 객체에 대해 의존성 주입(Dependency Injection, DI)를 통해 두 객체의 결합도를 낮추도록 도와줌.
1. 빈 팩토리 BeanFactory (org.springframework.beans.factory.BeanFactory)
-DI의 기본사항을 제공하는 가장 단순한 컨테이너.
-Ioc 컨테이너는 Bean을 저장한다고 하여, BeanFactory라고도 불림.
-Bean:Ioc 컨테이너에 의해 관리되는 오브젝트들
2. 애플리케이션 콘텍스트 ApplicationContext (org.springframework.context.factory.BeanFactory)
-beanfactory를 상속받은 인터페이스
-> 빈 팩토리와 유사한 기능을 제공하지만 좀 더 많은 기능을 제공
-> ioc 컨테이너로서의 기능과 추가적으로 Environmentcapable,
eventpublisher, MessageSource, ResoureLoader 등의 기능을 가진다 즉 다양한 기능을 추가적으로 가진 인터페이스
-애플리케이션에 공통적으로 나타나는 부가적인 기능들을 독립적으로 모듈화하는 프로그래밍 모델
-모듈화란 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것
-AOP에서 각 관점을 기준으로 로직을 모듈화한다는 것은 코드들을 부분적으로 나누어서 모듈화하겠다는 의미
-흩어진 관심사를 Aspect로 모듈화하고 핵심적인 비즈니스 로직(업무에 필요한 데이터처리를 수행하는 응용프로그램의 일부)에서 분리하여 재사용하겠다는 것이 AOP의 취지
-나무 뿌리에서 데이터를 가져와 몸통에서 모듈화, 가지로 전달
참고
[Spring] 스프링 AOP (Spring AOP) 총정리 : 개념, 프록시 기반 AOP, @AOP
추상화란 하위 시스템의 공통점을 뽑아내서 분리시키는 것.
일반적으로 서비스 추상화라고 하면 트랜잭션(DB의 상태를 변화시키기 해서 수행하는 작업의 단위)과 같이 기능은 유사하나 사용 방법이 다른, 로우 레벨의 다양한 기술에 대해 추상 인터페이스와 일관성 있는 접근 방법을 제공해 주는 것을 뜻함.
스프링을 사용하면 서비스 추상화를 통해 특정 환경이나 서버, 기술에 종속되지 않으며 유연한 애플리케이션을 개발을 할 수 있음.
스프링에서는 추상화 계층을 통해 구체적인 기술과 환경에 종속되지 않도록 함.
ex) MyBatis나 JPA 등 세부 기술에 종속적인 에러들을 추상화하여 기술에 종속적이지 않은 에러들로 처리할 수 있도록 도와줌
출처: https://coding-start.tistory.com/12 [코딩스타트]
참고
[Spring] Spring에 대한 이해와 입문, 3가지 계층 구조
스프링(Spring) - 서비스 추상화
: 비동기 HTTP(Ajax) 요청을 수행
♣ 콜백함수
-나중에 호출되는 함수
-개발자가 단순히 등록만 하고, 어떤 이벤트가 발생했거나 특정 시점에 도달했을 때 시스템에서 호출하는 함수
♣ 매개변수(parameter)는 변수이고, 그 변수에 들어가는 값이 인자(argument)!
♣ jqXHR 객체
-브라우저의 기본 XMLHttpRequest 객체의 상위 집합
♣ PlainObject: key(키)-value(값) 쌍을 포함하는 JavaSript 객체
<!-- DOM 요소를 context로 지정하는 경우 -->
$.ajax({
url: "test.html",
context: document.body
}).done(function() {
$( this ).addClass( "done" );
});
타입: PlainObject / String / Array
서버로 보낼 데이터
HTTP 메소드가 GET 방식인 경우 dataURL에 추가됨.
data type이 Object인 경우, jQuery는 객체의 key-value 쌍에서 String을 생성함 (processData 옵션이 false로 설정되지 않은 경우)
ex) { a: "bc", d: "e,f" }은 "a=bc&d=e%2Cf"(문자열)로 변환
data 값이 배열인 경우, jQuery는 기존 설정의 값을 기반으로 동일한 키로 여러 값을 직렬화함.
ex) traditional: false{ a: [1,2] }은 "a%5B%5D=1&a%5B%5D=2"로 변환 (traditional: false 로 설정된 경우)
데이터가 String으로 전달되면, 기본적으로 올바른 인코딩을 사용하여 이미 인코딩 되어있어야 함. (contentTypeapplication/x-www-form-urlencoded)
dataType: "json" 또는 dataType: "jsonp"인 요청에서, 문자열에 URL의 임의의 위치에 이중 물음표(??)가 포함되거나 쿼리 문자열의 단일 물음표(?)가 포함된 경우, 해당 라이브러리의 각 복사본에 대해 고유한 jQuery에 의해 생성된 값으로 대체
♣ Query String
-사용자가 입력 데이터를 전달하는 방법 중 하나로, url 주소에 미리 협의된 데이터를 파라미터를 통해 넘기는 것
-query parameters(물음표 뒤에 =로 연결된 key value pair 부분)을 url 뒤에 덧붙여서 추가적인 정보를 서버 측에 전달함.
참고 사이트 :: ajax api 문서