Spring이란?

길셔·2021년 12월 7일
0

스프링(Spring)

목록 보기
1/10
post-thumbnail

1. spring 왜 나왔을까

  • EJB는 java에서 인정한 표준기술이었는데 분산기술(ex.지금의 Dao,Service),ORM 등 놀라운 신기술이었지만 비용이 굉장히 비쌌고, 개발자가 사용하기에는 복잡하고 어렵고 느렸다.
  • 스프링:EJB 컨테이너 대체, 단순함, 현재 사실상 표준기술인 SPRING 개발
  • 하이버네이트 : EJB 엔티티빈 기술 대체, 후에 'JPA' 새로운 표준 정의
  • 요즘 표준 인터페이스는 거의 대부분 JPA, 구현체는 하이버네이트이다.

2. SPRING 역사

  • 2002년 로드 존슨(Rod Johnson) 책 출간
  • EJB의 문제점을 지적함과 동시에 EJB없이 확장 가능한 고품격 애플리케이션을 30000라인 이상의 기반 기술을 예제 코드로 선보임
  • BeanFactory, ApplicationContext,POJO, DI, IOC 등 지금의 spring 기술들
  • spring의 이름은 EJB라는 겨울을 넘어 시작하는 봄의 뜻으로 지음

3.SPRING?

1. 필수

  • Spring Framework

    1) 핵심기술 : 스프링 DI 컨테이너, AOP, 이벤트...
    2) 웹기술 : 스프링 MVC, 스프링 WebFlux
    3) 데이터 접근 기술 : 트랜잭션, JDBC, ORM 지원, XML 지원
    4) 기술 통합 : 캐시, 이메일, 원격접근, 스케줄링
    5) 테스트 : 스프링 기반 테스트 지원
    6) 언어 : 코틀린, 그루비

  • Spring Boot

    1) 스프링을 편리하게 사용할 수 있도록 지원, 최근에는 기본으로 사용
    2) 단독으로 실행할 수 있는 스프링 애플리케이션을 쉽게 생성
    3) Tomcat 같은 웹 서버를 내장해서 별도의 웹 서버를 설치할 필요 X
    4) 손쉬운 빌드 구성을 위한 starter 종속성 제공
    5) 스프링과 3rd parth(외부) 라이브러리 자동 구성
    6) 메트릭, 상태확인, 외부 구성 같은 프로덕션 준비 기능 제공
    7) 관례에 의한 간결한 설정

  • 이 둘은 다른게 아니라, 스프링 프레임워크를 기반으로 편리하게 사용 가능한 Spring Boot가 나옴

2.선택

  • Spring Data : 관계형 DB를 편리하게 사용하기 위해 많이 사용
  • Spring Session : 세션 기능을 편리하게 사용할 수 있게 도와줌
  • Spring Security : 보안 기능
  • Spring Rest Docs : API 문서를 편리하게 사용할 수 있게 해줌
  • Spring Batch : 배치처리에 특화
  • Spring Cloud : 클라우드 기술에 특화

4. spring의 핵심

  • 스프링은 자바 언어 기반의 프레임워크
  • 자바 언어의 가장 큰 특징이 객체 지향 언어인데, 스프링은 객체 지향 언어가 가진 강력한 특징을 살려내는 프레임워크이다.
  • 즉, 스프링은 좋은 객체 지향 애플리케이션을 개발할 수 있게 도와주는 프레임워크 이다.
    1) 레고 조립하듯, 키보드, 마우스, 컴퓨터 부품을 갈아 끼우듯 컴포넌트를 쉽고 유연하게 변경하며 개발할 수 있는 방법
    2) 다형성이 가장 중요하고, 스프링은 다형성을 극대화해서 이용할 수 있게 도와준다.
    3) 스프링에서 이야기하는 IOC, DI은 다형성을 활용해서 역할과 구현을 편리하게 다룰 수 있다.

5. 다형성

다형성이란,

  • 다형성은 interface를 통해 다양한 기능을 구현할 수 있다는 의미로, 역할과 구현으로 설명할 수 있다.
  • 객체를 설계할 때 역할(인터페이스)과 구현(인터페이스를 구현한 클래스, 구현 객체)을 명확히 분리하고, 객체 설계시 역할(인터페이스)을 먼저 부여하고, 그 역할을 수행하는 구현 객체를 만든다.
    즉, 인터페이스 먼저 구현한다가 point!
  • 예로 인터페이스를 구현한 객체를 실행 시점에 유연하게 변경할 수 있는 자바의 오버라이딩된 메소드가 있다.
    물론, 클래스의 상속 관계에서도 다형성과 오버라이딩이 적용 가능하다.

다형성 본질

  • 인터페이스를 구현한 객체 인스턴스를 실행 시점에 유연하게 변경할 수 있다.
  • 다형성의 본질을 이해하려면 협력이라는 객체사이의 관계에서 시작해야한다.
  • 클라이언트를 변경하지 않고, 서버의 구현 기능을 유연하게 변경할 수 있다.

역할과 구현을 분리

정의
  • 실세계의 역할과 구현이라는 편리한 컨셉을 다형성을 통해 객체 세상으로 가져올 수 있다.
  • 유연하고 변경이 용이하며 확장 가능한 설계
  • 클라이언트에 영향을 주지않는 변경 가능
  • 인터페이스를 안정적으로 잘 설계하는 것이 중요!
    한계
  • 역할(인터페이스) 자체가 변하면, 클라이언트, 서버 모두에 큰 변경 발생
  • 자동차를 비행기로 변경해야 한다면?
  • 대본 자체가 변경된다면? USB 인터페이스가 변경된다면?
  • 인터페이스를 안정적으로 잘 설계하는 것이 중요
  • 김영한님의 강의를 보고 정리하고 복습하기 위해 작성한 VELOG!
    (출처 : 김영한 강사님 강의)
profile
까먹지말자

0개의 댓글