BackEnd/Spring

Spring 학습 Day1_개요 및 특징

Leo.K 2022. 6. 18. 21:03

[ Spring의 개요 및 특징 ]

  • 스프링 프레임워크 (Spring FrameWork)
    • 프레임 워크는 개발자가 맨 손으로 개발을 시작하지 않도록 기본적인 골조를 제공해주는 것이다. 
    • 자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크로 줄여서 스프링이라고 불린다. 
    • 애플리케이션 프레임워크
      • 특정 계층이나, 기술, 업무 분야에 국한되지 않고 전 영역을 포괄하는 범용적인 프레임워크를 뜻한다. 
    • 경량급 프레임 워크 
      • 단순한 웹 컨테이너에서도 엔터프라이즈 개발의 고급기술을 대부분 사용할 수 있다.
      • 이전 세대에서 사용하던 EJB를 주 프레임 워크로 사용할 때 불편했던 점들을 해소했다.
    • 엔터프라이즈 개발에 용이 
      • 개발자가 복잡하고 실수하기 쉬운 low level에 대한 관심을 줄이고, 비즈니스 로직(실제 컨트롤러의 역할) 개발에 전념할 수 있도록 지원한다. ex 로깅 처리, 트랜잭션 처리등은 스프링이 해준다!
    • 오픈소스
      • 스프링은 오픈 소스 기반으로 소스코드가 공개되어 있고, 기능을 추가하거나 수정하는 것이 가능하다. 
      • 국내의 전자정부 프레임워크가 스프링을 기반으로 제작되어 있다.
  • 스프링의 주요 구성 요소 
    • AOP
      •  관점 지향 프로그래밍
      • 프로그래머는 비즈니스 로직에 집중할 수 있도록 하는 것
    • IoC / DI
      • IoC :  제어의 역전 
      • DI : 의존 관계 주입
    • PSA
      • Portable Servie Abstraction
      • 쉬운 서비스 추상화
        • 동일한 기능을 한 데 모아서 추상화하기가 쉬움
    • POJO
      • Plain Old Java Object로 별 다른 뜻이 아닌 단순히 자바 객체를 사용하겠다는 뜻
      • 특정 규약에 종속되서는 안된다. -> 자바 언어와 꼭 필요한 API를 제외하고는 종속되면 안 된다.
      • 특정 환경에 종속되서는 안된다. -> 특정 환경에 종속되어야만 동작하는 객체는 POJO가 아니다.
  • POJO의 장점
    • 객체지향적인 설계를 자유롭게 적용할 수 있다. 
    • POJO로 개발된 코드는 자동화된 테스트에 매우 유리하다.
    • 특정 기술과 환경에 종속되지 않는 오브젝트는 그만큼 깔끔한 코드가 될 수 있다.
  • AOP(Aspect-Oriented Programming)
    • 기능의 관심사를 종단 관심사와 횡단 관심사로 구분하여 핵심 관심사에 집중하고, 횡단 관심사는 시스템(Spring)에서 담당하게 하는 것
    • 전자상거래의 핵심 관심사는 상품, 결제 등등 일 것이다. 이러한 핵심 관심사만 프로그래머가 집중할 수 있도록 지원해주는 기술이다. 
  • IoC(Inversion of Control) : 제어의 역전 
    • 프로그램의 흐름을 개발자가 아닌 프렘임워크가 주도한다는 의미로 스프링 컨테이너가 프로그램의 흐름을 제어한다는 의미.
    • 기존에 객체를 생성할 때는 프로그래머가 new예약어를 사용함으로써 만들었다. 이때 객체를 만드는 주체는 개발자다. 하지만 스프링에서는 프로그램의 흐름을 개발자가 아닌 스프링이 주도하겠다는 의미이다.
    • 라이프 사이클의 제어권을 개발자가 아닌 스프링이 갖는다.
    • 스프링 컨테이너가 제어권을 가짐으로써 DI, AOP등이 가능해졌다.
  • DI(Dependency Injection) : 의존성 주입
    • 객체간의 의존성을 자신의 내부 코드가 아닌 외부의 주입으로 가능하게 하는 것으로 외부의 설정파일 등을 통해 정의한다. 
    • 스프링의 외부의 설정파일을 통해 객체를 생성한 후 외부에서 주입할 수 있는 기능
    • 의존 관계 설정이 컴파일 시에 발생하는 것이 아니라  실행 시에 이루어져 모듈간의 결합도를 낮출 수 있다
    • 코드의 재사용을 높여서 작성된 모듈을 여러 곳에서 소스코드의 수정없이 사용이 가능하다.
  • PSA(Portable Service Abstraction): (쉬운)서비스 추상화
    • 환경의 변화와 관계없이 일관된 방식의 기술로 접근 환경을 제공하 려는 추상화 구조를 뜻한다.
      • 추상화란 하위 시스템의 공통점을 뽑아내서 분리시키는 것
      • 추상화를 하면 하위 시스템이 어떤 것인지 알지 못하거나 하위 시스템이 변 해도 일관된 방법으로 접근이 가능함
      • ex) 일반적인 Mybatis는 다른 Java Framework에서 사용가능한 라이브러 리들과 Spring에서 지원하는 Mybatis 라이브러리는 다르다. Spring에서는 기본적으로 제공되는 MyBatis 라이브러리를 다시 한번 스프링 자체에서 추상화하여 Mybatis 라이브러리를 제공하므로 일반적인 Mybatis라이브러리가 변경이 되더라도 Spring에서 제공하는 추상화한 라이브러리를 사용하기 때문에 라이브러리의 사용법은 변하지 않음

스프링 프레임워크의 구성요소
AOP

 

[ 구동원리 ]

클라이언트가 서블릿에게 요청을 보낸다. 그러면 이 서블릿은 해당하는 요청이랑 매핑이되는 컨트롤러가 있는지 확인해본다. 있다면 다시 서블릿을 거쳐서 그 컨트롤러에게 요청을 보낸다. 컨트롤러 측에서 비즈니스 로직을 처리한 이후에 결과물을 서블릿으로 보낸다. 이후에 뷰 resolver를 통해서 어느 뷰를 보여줄지 결정을 하고 뷰를 결정했다면 컨트롤러가 처리한 데이터를 뷰에 담아서 클라이언트에게 응답한다. 

 

[ 구성도 ]

Spring Core : IoC, DI 기능 지원 담당, Bean 팩토리를 기반으로 Bean 클래스를 제공할 수 있음

Spring AOP : 관점지향 프로그래밍

Spring DAO : JDBC 좀 더 쉽게 지원

Spring ORM : ORM프레임워크와의 쉬운 연결을 제공

Spring Context : JNDI, EJB 서브 지원, 외부 라이브러리와의 통합 지원

Spring Web : 다른 프레임 워크와의 통합을 지원

Spring Web MVC: 사용자에게 화면(View)을 보여줄 수 있는 기술을 지원

'BackEnd > Spring' 카테고리의 다른 글

SpringCollection_국비Day82  (0) 2022.06.28
Spring학습_Day4_AOP  (0) 2022.06.28
Spring_국비Day81  (0) 2022.06.27
Spring 학습_Day3_IoC_DI  (0) 2022.06.20
Spring 학습 Day2_개발환경 구축  (0) 2022.06.18