스프링 기본원리 -기본편

김슬기·2022년 9월 23일
0

스프링의 핵심 가치

1. 스프링의 탄생 배경

  • 2000년대 초반 자바 기술의 표준인 EJB가 널리쓰였음
  • EJB는 여러 기술들이 다 들어가서 종합적으로 사용 가능했다.
  • 하지만, 그만큼 비싸고, 복잡하고, 어렵고, 느렸다.
  • 그래서 불편한점이 발견되다보니 순수한 자바로 돌아가자는 의견이 나옴
  • 그래서 오픈소스를 만들기 시작
  • 그 중하나가 로드존슨이 만든 스프링
    • 스프링은 단순하고, 사실상 표준기술이며, EJB 컨테이너를 대체가능했다.
  • 다른 하나는 게빈 킹이 만든 하이버네이트
    • EJB 엔티티빈 기술을 대체
    • 하이버네이트를 기반으로 표준 인터페이스인 JPA(Java Persistence API)를 만듦(새로운 표준 정의)

2. 스프링이란?

  • 스프링은 특정한 하나가 아니라 여러가지 기술의 모음
    • 스프링의 핵심이 되는 스프링 프레임워크
    • 여러기술들을 굉장히 편하게 사용할 수 있게 도와주는 스프링 부트
    • 스프링 데이터, 스프링 세션, 스프링 시큐리티 등등
  • 기술
    • 핵심기술 : 스프링 DI 컨테이너 , AOP, 이벤트 기타…
    • 웹기술 : 스프링 MVC, 스프링 WebFlux
    • 데이터 접근 기술 : 트랜젝션, JDBC, ORM지원 ,XML지원
    • 기술 통합 : 캐시, 이메일, 원격접근, 스줄링
    • 테스트: 스프링 기반 테스트 지원
    • 언어: 코틀린 ,그루비
  • 스프링 이란 단어는 문맥에 따라 다르게 사용
    • 스프링 프레임워크 그 생태계 자체
    • 스프링 DI 컨테이너
    • 스프링 부트

3. 스프링부트란?

  • 스프링을 편리하게 사용할 수 있도록 지원, 최근에는 기본으로 사용한다.
  • 단독으로 실행할 수 있는 스프링 애플리케이션을 쉽게 생성
  • Tomcat 같은 웹서버를 내장해서 별도의 웹 서버를 설치하지 않아도 된다.
  • 손쉬은 빌들 구성을 위한 starter 종속성 제공
  • 스프링과 3rd parth (외부) 라이브러리 자동 구성 ( 외부 라이브러리와 호환 및 궁합을 보고 버전 지정을 해줘서 다운받게해줌)
  • 메트릭, 상태 확인, 외부 구성 같은 프로덕션 준비 기능 제공
  • 관례에 의한 간결한 설정 (설정이 정말 편한다)
  • 스프링 부트는 스프링 프레임워크와 별도로 사용 가능한 것이 아님) - 스프링 프레임워크를 편하게 사용하게 해주는 것이다.

4. 스프링 핵심 기술 , 개념, 컨셉

  • 스프링은 자바 언어 기반의 프레임워크 - 가장 큰 특징 = > 객체 지향 언어!!
  • 스프링은 객체 지향 언어가 가진 강력한 특징을 살려내는 프레임워크
  • 스프링은 좋은 객체 지향 어플리케이션을 개발할 수 있도록 해주는 프레임워크!!!!!!!!!
  • 결국 핵심은 객체지향이다.

5. 좋은 객체 지향 프로그래밍이란?

  • 객체 지향 프로그래밍은 객체들의 모임이고, 그 각각의 객체끼리 메시지를 주고받고, 데이터를 처리하도록 함
  • 유연 & 변경이 용이
    • 레고 블럭 조립하듯 (블록하나하나가 객체) 컴포넌트를 쉽고 유연하게 변경하면서 개발할 수 있는 방법
  • 스프링과 객체 지향
    • 다형성이 가장 중요!
    • 스프링은 다형성을 극대화해서 사용할 수 있게 도와준다
      • 스프링에서는 이야기하는 제어의 역전 (IoC), 의존관계 주입(DI)은 다형성을 활용헤서 역할과 구현을 편리하게 다룰 수 있도록 지원한다.

6. 다형성 !!!!!!!!!

  • 세상을 역할과 구현으로 세상을 구분하자(역할은 인터페이스, 구현은 그 인터페이스를 따라서 구현한 객체)
  • 역할을 인터페이스로 구현을 클래스, 객체로 봐보자
  • 각각의 클래스와 객체는 바뀌어도 다른 것들에 영향을 미치지않음 - 독립적 = >변경이 쉽고 유연하다.
  • 세상을 무한히 확장 가능하다.
  • 즉, 클라이언트에 영향을 주지 않고, 새로운 기능을 제공할 수 있다.
    • ⇒ 새로운 기능이 나와도 클라이언트는 이 기능을 굳이 배울 필요없이 사용하면 된다. (영향을 주지 않기때문)
    • ex ) 로미오 역할과 줄리엣 역할이 있다 했을때, 줄리엣 역할을 하는 사람이 상관없이 로미오 역할을 하는 사람은 다른사람으로 대체가 가능하다. (다른 인터페이스에 영향을 미치지 않고 독립적으로 존재 )
  • 다형성이 뛰어나면 장점
    1. 클라이언트는 대상의 역할(인터페이스)만 알면 된다.
    2. 클라이언트는 구현 대상의 내부 구조를 몰라도 되고, 내부 구조가 변경되어도 영향받지않음
    3. 클라이언트는 구현 대상 자체를 변경해도 영향을 받지 않는다.
  • 객체를 설계할 때 역할과 구현을 명확히 분리하여라.
  • 객체 설계 시 역할(인터페이스) 먼저 부여 후, 그 역할을 수행하는 구현 객체 만들기.
  • 객체의 협력이라는 관계부터 생각해라
    • 객체는 혼자 존재하지않는다
    • 클라이언트 = 요청, 서버 = 응답
    • 수많은 객체 클라이언트와 객체 서버는 서로 협력 관계를 가진다.
  • 자바 언어의 다형성
    • 오버라이딩
    • 다형성으로 인터페이스를 구현한 객체를 실행 시점에 유연하게 변경가능
    • 클래스 상속 관계도 다형성, 오버라이딩 적용 가능
    • 하지만 상속 관계에 없는 클래스는 오버라이딩 불가능
  • 결국 다형성의 본질은 클라이언트를 변경하지 않고, 서버의 구현 기능을 유연하게 변경 가능하게 하는것
  • 한계점
    • 역할 (인터페이스) 자체가 변하면 , 클라이언트, 서버 모두 큰변경이 발생
      • 자동차를 비행기로 변경해야한다면??
      • 역할의 대본 자체가 변경된다면?
    • 그러므로 인터페이스를 안정적으로 잘 설계하는것이 중요
profile
낭만그리고김슬기

0개의 댓글