Spring Framework/[인프런] Spring 핵심 원리

Chapter 01. 객체 지향 설계와 스프링

계란💕 2022. 8. 11. 13:31

1.1 자바 진영의 추운 겨울과스프링의 탄생

 

 

EJB(Enterprise Java Beans, 엔터프라이즈 자바빈즈)란?

  • 기업 환경의 시스템을 구현하기 위한 서버 측 컴포넌트 모델이다. 즉, 애플리케이션의 업무 로직을 가지고 있는 서버 애플리케이션이다.
  • 자바 표준 기술
  • ORM (객체 관계 매핑, 자바 객체를 데이터베이스에 편하게 꺼내 쓸 수 있다. )
  • EJB의 단점: 어렵고 비싸다. 복잡하고 느리다. EJB에 의존적

 

 

  스프링의 역사 - release

  • 2002년  「Expert One -on- One J2EE Design and Development」 - Rod Johnson (로드 존슨) 출간 => EJB의 문제점을 비판한다. 이를 기반으로 스프링 발전
  • 2003년 6월에 최초로 아파치 2.0 라이선스로 공개된다. 
  • 2003년: 스프링 프레임워크  1.0 출시 -XML
  • 2006년10월: 스프링 프레임워크 2.0 출시 -XML 편의 기능 지원
  • 2006년10월: 스프링 프레임워크 2.0
  • 2007년11월: 스프링 프레임워크 2.5
  •  2009년12월: 스프링 프레임워크 3.0  출시 - 자바 코드로 설정
  • 2011년12월: 스프링 프레임워크 3.1
  • 2013년12월: 스프링 프레임워크 4.0  출시 - Java 8
  • 2014년: 스프링 부트 1.0 출시
  • 2017년 9월: 스프링 프레임워크  5.0, 스프링 부트 2.0 출시

  

 

  JPA(Java Persistence Api )

  • JPA라는 표준 인터페이스가 있고 이를 구현해야한다.
  • 하이버네이트 ORM(Hibernate ORM): 자바 언어를 위한 객체 관계 매핑 프레임워크이다. 실무 개발자들이 만들었다. 

스프링 핵심원리- 인프런(김영한)

 

 

 

1.2 스프링(Spring)이란?

스프링 생태계

  스프링(Spring)이란?

  • 스프링은 스프링 부트, 스프링 프레임워크 등을 모두 포함함 스프링 생태계를 일컫는다.
  • 스프링 프레임워크: 자바 플랫폼을 위한 오픈 소스 애플리케이션 프레임워크이다. 동적인 웹 사이트를 개발하기 위해 여러 가지 서비스를 제공한다.
    • 핵심 기술: 스프링 DI(Dependency Injection) 컨테이너 기술, AOP, ..
    • 웹 기술: 스프링 MVC, 스프링 WebFlux
    • 데이터 접근 기술: 트랜잭션, JDBC, ORM 지원, XML지원
  • 필수: 스프링 프레임워크(핵심), 스프링 부트(스프링 프레임워크를 편리하게 사용하도록 도와준다.)
  • 선택: 스트링 데이터, 스프링 세션, 스프링 시큐리티, 스프링 Rest Docs(API 문서를 편리하게 해준다.), 스프링 배치(Spring Batch, 대량의 데이터를 업데이트하고 저장하는 배치  처리에 특화된 기술이다.), 스프링 클라우드  여러 가지를 통틀어 말한다.
  • 스프링은 문맥에 따라 다르게 사용된다.
  • 스프링은 객체 지향 언어 애플리케이션을 개발할 수 있도록 도와주는 프레임워크이다.

  cf) Batch Processing: 일괄 처리

 

 

  스프링 부트(Spring Boot)란?

  • 스프링을 편리하게 사용할 수 있도록 지원한다. 스프링 부트만으로 스프링이 돌아가지는 않는다.
  • 단독으로 실행할 수 있는 스프링 어플리케이션 쉽게 생성한다.
  • Tomcat 같은 웹 서버를 내장해서 별도의 웹 서버를 설치하지 않아도 된다
  • 손쉬운 빌드 구성을 위한 starter 종속성을 제공한다. 예전에는 스프링을 사용하기 위해 라이브러리가 여러 개 가져오는 과정이 번거로웠다.
  • 스프링과 3rd party(외부 라이브러리)를 자동 구성, 버전을 지정해서 다운 받을 수 있도록 한다.
  • 메트릭(metric), 상태 확인, 외부 구성 같은 프로덕션 준비 기능 제공
  • 관례에 의한 간결한 설정을 해준다.

 

 

 

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

 

  객체지향 프로그래밍이란?

  • 객체지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, "객체"들의 "모임"으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고 받고 데이터를 처리할 수 있다. "협력"
  • 객체 지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게(Polymorphism, 다형성) 만들어서 대규모 소프트웨어 개발에 많이 사용된다.
  • ex) 자동차가 바뀌어도 운전자(클라이언트)는 운전을 할 수 있다. 자동차라는 인터페이스를 각 자동차가 구현했기 때문이다. 클라이언트는 대상의 역할(인터페이스)만 알면 된다.
    • 자동차의 역할을 왜 분리했을까? 운전자(클라이언트)가 내부 구조를 모르더라도 운전하는 데 영향을 미치지 않는다.
  • 역할: 인터페이스, 구현: 인터페이스를 구현한 클래스, 구현 객체, 인터페이스(더 중요)가 구현보다 먼저이다.

 

 

1.4 좋은 객체 지향 설계의 5가지 원칙 (SOLID)

 

  SOLID 원칙 By 클린 코드 - Robert C.Martin

  • SRP(Single Responsibility Principle, 단일 책임 원칙): 한 클래스는 하나의 책임만 가진다.
  • OCP(Open Closed Principle, 개방-폐쇄 원칙): 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀있어야한다.
  • LSP(Liskov Substitution Principle, 리스코프 치환 원칙): 프로그램의 객체는 프로그램의 정확성을 깨지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야한다.(ex. 자동차에서 엑셀을 누르면 뒤로 가도록 구현하면 리스코프 치환 원칙 위반)
  • ISP(Interface Segregation Principle, 인터페이스 분리 원칙): 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다. 
  • DIP(Dependency Inversion Principle, 의존 관계 역전 원칙): 프로그래머는 추상화 (역할)에 의존해야하며 구체화(구현)에 의존하면 안된다는 의존성 주입은 DIP중 하나이다. 구현 클래스가 아닌 인터페이스에만 의존하라는 뜻이다. 구현체에 의존하면 변경이 아주 어려워진다.

 

 

1.5 객체 지향 설계와 스프링

  - 토비의 스프링은 스프링을 모두 공부하고나서 정리 용도로 마지막에 보는 게 좋다.

 

 

 

출처 https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8

 

스프링 핵심 원리 - 기본편 - 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런...

www.inflearn.com