[20210806] Spring 개념 (DI, IOC 컨테이너, AOP, 추상화 계층) , jQuery.ajax()

해니·2021년 8월 6일
0

1. Spring 개념 정리

DI(Dependency Injection, 의존성 주입)

스프링이 다르 프레임워크와 차별화되어 제공하는 의존 관계 주입 기능.
객체를 직접 생성하는 게 아니라 외부로부터 의존성 객체를 주입받는 것.
DI를 통해서 모듈 간의 결합도가 낮아지고 유연성이 높아짐.

Ioc(Inversion of Control, 제어의 역전)

Ioc 컨테이너(스프링 컨테이너)가 필요에 따라 개발자 대신 Bean들을 관리(제어)해주는 행위.

일반적인 상황에서는 개발자가 직접 객체를 제어함
(new 연산자를 통해 객체를 생성하고, 객체의 의존성을 맺어주고, 초기화 해주고.. 등등..)
하지만 Spring 에서는 xml 파일 또는 Annotaion(@) 방식으로 스프링 컨테이너에 Bean(객체)를 등록만 하면, 스프링 컨테이너에서 Bean의 생명 주기(생성-의존성 설정-초기화-소멸)를 전부 관리해줌 !!
-> 객체에 대한 제어권이 컨테이너로 역전되기 때문에 제어의 역전이라고 하는 것

Ioc를 통해,
느슨한 결합으로 객체 간 의존 관계를 쉽게 변경할 수 있음
코드의 재사용성과 유지보수성을 높임

Ioc Container

Ioc 컨테이너 = 스프링 컨테이너 = 애플리케이션 컨텍스트

컨테이너는 인스턴스의 생명주기를 관리하며, 생성된 인스턴스들에게 추가적인 기능을 제공하도록 함. -> 코드의 처리과정을 위임받은 독립적인 존재 !
프로그래머가 작성한 코드를 스스로 참조한 뒤 알아서 객체의 생성과 소멸 (객체의 생애 주기)을 관리함.

Ioc 컨테이너는 객체의 생성과 관계 설정, 사용, 제거 등의 작업을 대신 해준다하여 붙여진 이름.

설정 정보를 참고하여 애플리케이션을 구성하는 오브젝트(빈)을 생성하고 관리
의존성을 갖는 객체에 대해 의존성 주입(Dependency Injection, DI)를 통해 두 객체의 결합도를 낮추도록 도와줌.

IOC 컨테이너의 핵심적인 클래스

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 등의 기능을 가진다 즉 다양한 기능을 추가적으로 가진 인터페이스

[Spring] 의존성 주입, 제어의 역전

AOP(관점 지향 프로그래밍, Aspect Oriented Programming)

-애플리케이션에 공통적으로 나타나는 부가적인 기능들을 독립적으로 모듈화하는 프로그래밍 모델
-모듈화란 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것
-AOP에서 각 관점을 기준으로 로직을 모듈화한다는 것은 코드들을 부분적으로 나누어서 모듈화하겠다는 의미
-흩어진 관심사를 Aspect로 모듈화하고 핵심적인 비즈니스 로직(업무에 필요한 데이터처리를 수행하는 응용프로그램의 일부)에서 분리하여 재사용하겠다는 것이 AOP의 취지
-나무 뿌리에서 데이터를 가져와 몸통에서 모듈화, 가지로 전달

AOP 주요 개념

  1. Aspect :흩어진 관심사를 모듈화 한 것. 주로 부가기능을 모듈화함.
  2. Target : Aspect를 적용하는 곳 (클래스, 메서드 .. )
  3. Advice : 실질적으로 어떤 일을 해야할 지에 대한 것, 실질적인 부가기능을 담은 구현체
  4. JointPoint : Advice가 적용될 위치, 끼어들 수 있는 지점. 메서드 진입 지점, 생성자 호출 시점, 필드에서 값을 꺼내올 때 등 다양한 시점에 적용가능
  5. JointPoint : Advice가 적용될 위치, 끼어들 수 있는 지점. 메서드 진입 지점, 생성자 호출 시점, 필드에서 값을 꺼내올 때 등 다양한 시점에 적용가능

참고
[Spring] 스프링 AOP (Spring AOP) 총정리 : 개념, 프록시 기반 AOP, @AOP

추상화 계층

추상화란 하위 시스템의 공통점을 뽑아내서 분리시키는 것.
일반적으로 서비스 추상화라고 하면 트랜잭션(DB의 상태를 변화시키기 해서 수행하는 작업의 단위)과 같이 기능은 유사하나 사용 방법이 다른, 로우 레벨의 다양한 기술에 대해 추상 인터페이스와 일관성 있는 접근 방법을 제공해 주는 것을 뜻함.
스프링을 사용하면 서비스 추상화를 통해 특정 환경이나 서버, 기술에 종속되지 않으며 유연한 애플리케이션을 개발을 할 수 있음.
스프링에서는 추상화 계층을 통해 구체적인 기술과 환경에 종속되지 않도록 함.
ex) MyBatis나 JPA 등 세부 기술에 종속적인 에러들을 추상화하여 기술에 종속적이지 않은 에러들로 처리할 수 있도록 도와줌

트랜잭션을 관리하기 위한 최상위 인터페이스인 PlatformTransactionManager를 선언하고 각 DB에 대한 transactionManager 클래스를 DI해주면? 트랜잭션 관련 코드는 통일되는 동시에 DB가 바뀐다면 DI설정 XML파일만 교체해주면 된다. DB가 바뀌게 되더라도 트랜잭션 관련 코드의 변경은 하나도 없는것이다.

출처: https://coding-start.tistory.com/12 [코딩스타트]
참고
[Spring] Spring에 대한 이해와 입문, 3가지 계층 구조
스프링(Spring) - 서비스 추상화

2. jQuery.ajax()

: 비동기 HTTP(Ajax) 요청을 수행

url

  • 타입: String
  • 요청이 전송되는 URL이 포함되는 문자열

async (default: true)

  • 타입: Boolean
  • 기본적으로 모든 요청은 비동기식으로 전송됩니다(즉 true, 기본적 으로 로 설정됨).
  • 도메인 간 요청 및 dataType: "jsonp" 요청은 동기 작업을 지원하지 않음
  • false 값을 주게 되면, 동기식 처리를 하게 되므로, ajax 통신의 결과를 받은 후 다음 스크립트 코드로 차례대로 실행하게 됨

beforeSend

  • 타입: function ( jqXHR jqXHR, PlainObject settings )
  • jqXHR(jQuery 1.4.x에서는 XMLHTTPRequest) 객체가 전송되기 전에 수정하는 데 사용할 수 있는 사전 요청 콜백 함수
  • 사용자 정의 헤더 등 설정
  • jqXHR 및 설정 객체는 인수(argument)로 전달됨
  • jQuery 1.5 이후로 beforeSend옵션에 관계없이 요청 유형의 호출됨

♣ 콜백함수
-나중에 호출되는 함수
-개발자가 단순히 등록만 하고, 어떤 이벤트가 발생했거나 특정 시점에 도달했을 때 시스템에서 호출하는 함수
♣ 매개변수(parameter)는 변수이고, 그 변수에 들어가는 값이 인자(argument)!
♣ jqXHR 객체
-브라우저의 기본 XMLHttpRequest 객체의 상위 집합

cache (default: true, false for dataType 'script' and 'jsonp')

  • 타입: Boolean
  • IE 브라우저에서 Ajax를 사용하다 보면, 데이터 갱신이 안 되고, 이전 데이터가 그대로 남는 경우가 있음 -> IE 브라우저에서 Ajax 통신 시, 새로 url을 호출하지 않고, 가지고 있는 캐시값을 그대로 노출시키기 때문
  • false로 설정하면, 요청된 페이지가 브라우저에서 캐시를 막아서 캐시값이 아닌 혀재값을 호출해 올 수 있음. (HEAD 및 GET 요청에서만 올바르게 작동함.)

complete

  • 타입: Function( jqXHR, String)
  • 요청이 완료되면 호출될 함수 (success및 error콜백이 실행된 후)
  • jQuery 1.5 이후로 complete 설정은 함수 배열을 허용할 수 있음. 각 함수는 차례로 호출됨.

contents

  • 타입: PlainObject
  • 콘텐츠 유형이 주어지면 jQuery가 응답을 구문 분석하는 방법을 결정하는 문자열/정규식 쌍의 개체

♣ PlainObject: key(키)-value(값) 쌍을 포함하는 JavaSript 객체

contentType (default: 'application/x-www-form-urlencoded; charset=UTF-8')

  • 서버에 데이터를 보낼 때 이 콘텐츠 유형을 사용
  • $.ajax()로 contentType을 명시적으로 전달하면, 데이터가 전송되지 않은 경우에도 항상 서버로 전송됨.
  • jQuery 1.6 이후부터 jQuery에 콘텐츠 유형 헤더를 설정하지 않도록(false) 전달할 수 있음

context

  • 타입: PlainObject
  • 이 객체는 모든 Ajax 관련 콜백의 context가 됨
  • 호출에 사용된 Ajax 설정을 나타내는 객체
<!-- DOM 요소를 context로 지정하는 경우 -->
$.ajax({
  url: "test.html",
  context: document.body
}).done(function() {
  $( this ).addClass( "done" );
});

data

  • 타입: 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에 의해 생성된 값으로 대체

dataType

  • 타입: String
  • 아무 것도 지정하지 않으면 jQuery는 응답의 MIME 유형을 기반으로 데이터 타입을 설정함. (XML MIME 유형은 XML을 생성하고 1.4에서는 JSON을 생성하고 1.4에서는 스크립트를 실행하고 다른 모든 것은 문자열로 반환됨)
  • 사용 가능한 데이터 타입: xml, html, script, json, text 등

success

  • 타입: function (모든 데이터, String, jqXHR)
  • 요청이 성공하면 호출되는 함수

error

  • 타입: function (모든 데이터, String, jqXHR)
  • 요청이 실패하면 호출되는 함수

method (default: 'GET')

  • 타입: String
  • 요청에 사용할 HTTP 메서드(예: "POST", "GET", "PUT")

processData (default: true)

  • 타입: Boolean
  • ajax로 데이터를 보내게 되면 key value로 보내게 되는데, 이때 Query String으로 전달됨. -> 즉, key=value&key=value 혹은 (key:value,key:value)
  • 전달하는 데이터 유형이 String이 아닌 경우 query String으로 변환됨

♣ Query String
-사용자가 입력 데이터를 전달하는 방법 중 하나로, url 주소에 미리 협의된 데이터를 파라미터를 통해 넘기는 것
-query parameters(물음표 뒤에 =로 연결된 key value pair 부분)을 url 뒤에 덧붙여서 추가적인 정보를 서버 측에 전달함.

timeout

  • 타입: Number
  • 요청에 대한 시간 초과(밀리초)를 설정
  • 시간 초과 기간은 $.ajax호출이 이루어진 시점부터 시작
  • 스크립트는 시간 초과 기간 이후에 도착하더라도 실행

참고 사이트 :: ajax api 문서

0개의 댓글