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 객체 지향 설계와 스프링
- 토비의 스프링은 스프링을 모두 공부하고나서 정리 용도로 마지막에 보는 게 좋다.
'Spring Framework > [인프런] Spring 핵심 원리' 카테고리의 다른 글
Chapter 06. 컴포넌트 스캔(@ComponentScan) (0) | 2022.08.14 |
---|---|
Chapter 05. 싱글톤 컨테이너 (0) | 2022.08.14 |
Chapter 04. 스프링 컨테이너와 스프링 빈 (0) | 2022.08.12 |
Chapter 03. 스프링 핵심 원리 이해2 - 객체 지향 원리 적용 (0) | 2022.08.12 |
Chapter 02. 스프링 핵심 원리 이해1 - 예제 만들기 (0) | 2022.08.11 |