섹션 1. 객체 지향 설계와 스프링 - 스프링이란?

dev-mage·2022년 12월 1일
0
post-thumbnail

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

스프링의 탄생 배경과 정의

스프링 탄생 배경

EJB 지옥

  • 2000년 초반 자바 진영은 자바 표준 기술인 EJB가 대세였음. 당시 오픈 소스 기술은 별로 좋은 인식을 갖고 있지 못함.)
    • EJB(Enterprise Java Beans): 기업에서 시스템을 개발하기 위해 주로 사용된 서버 애플리케이션. 지금으로 따지면 Spring + JPA와 같은 종합 선물(?) 세트 (왜 물음표가 붙었는지는 뒤에…)
    • 표준 기술을 그것을 구현한 구현체를 만드는 회사가 존재함.
      • IBM - 웹스피어
      • 구 BEA 현 오라클 - 웹로직
  • 자바의 표준 기술이었기 때문에 많은 기업에서 도입함. 영업도 잘 됐음.(듣보잡 오픈 소스 기술 No!)
  • 왜 대세였나?
    • 다양한 고급 기술 제공.
      • 컨테이너 기술
      • 설정에 의한(선언적) 트랜잭션 관리
      • 분산 계층 기술
      • 엔티티빈 기술(ORM) 등…
    • = 이론적으로 괜찮았음.
  • 근데 왜 지금은…?
    • 당시 매우 비쌌음. 수천만원을 호가하기도. 지금 무료로 풀려있는 Spring Boot를 생각해보자. 내장 서버까지 포함하고 있다.
    • 느림
    • 매우 어렵고 복잡함 - 그때 당시 개발자들을 EJB 지옥에 빠져 불타게 만든 주범.
      • 이론상 괜찮았지만 사용하기 매우 어렵고 EJB에 의존적으로 개발해야 했음.
      • 코드가 지저분해 지고 유지보수하기 어려워짐.
    • 못써먹을 수준의 기술인 엔티티빈.
  • 그래서 등장했다. POJO!
    • POJO(Plain Old Java Object): EJB에 종속되어 복잡하고 무거워진 코드 말고 오래된 방식의 순수한 옛날 자바 코드로 돌아가자!

그래서 등장했습니다. Spring과 JPA

이건 아니다라고 생각했던 개빈 킹과 로드 존슨이라는 개발자가 2가지 기술을 내놓음.

  • 하이버네이트
    • EJB의 엔티티빈을 대체할 기술인 하이버네이트를 개빈 킹이 개발함.
    • 하이버네이트의 인기가 치솟자 망해가던 엔티티빈을 보던 자바 진영에서 개빈 킹을 데려와 하이버네이트를 정제하여 자바 표준 ORM 기술인 JPA를 개발.
    • 현재 JPA라는 표준 인터페이스가 있고 자바 진영의 ORM 시장을 장악함.
    • 다양한 JPA 구현체들이 있지만 하이버네이트가 압도적으로 우세.
  • 스프링
    • 2002년, 로드 존슨이 EJB를 비판하는 책을 출판하고 해당 책의 내용이 현재 스프링의 핵심 개념과 개발 코드의 근간이 됨. “EJB 없이도 충분히 고품질의 확장 가능한 애플리케이션 개발이 가능하다!”
    • 책 출간 후 히트를 침. 이후 유겐 휠러와 얀 카로프라는 2명의 개발자들이 오픈 소스 프로젝트를 제안함.
    • 스프링이라는 이름은 얀 카로프가 전통적인 J2EE(EJB)라는 겨울이 지나고 새로운 봄이 왔다는 의미로 지음.

스프링이란?

스프링 생태계

  • 스프링: 여러 가지 기술들의 모음
    • 필수: 스프링 프레임워크, 스프링 부트
    • 선택: 스프링 데이터, 스프링 세션, 스프링 시큐리티, 스프링 배치, 그 외 다수 프로젝트들

스프링 프레임워크

  • 핵심 기술: 스프링 DI 컨테이너, AOP, 이벤트, 기타…
  • 웹 기술: 스프링 MVC, 스프링 WebFlux
  • 데이터 접근 기술: 트랜잭션, JDBC, ORM 지원, XML 지원
  • 기술 통합: 캐시, 이메일, 원격 접근, 스케줄링
  • 테스트: 스프링 기반 테스트 지원
  • 언어: 코틀린, 그루비 지원
  • 최근에는 스프링 부트를 통해서 스프링 프레임워크의 기술들을 편리하게 사용

스프링 부트

  • 스프링을 편리하게 사용할 수 있도록 지원, 최근에는 기본으로 사용
  • 단독으로 실행할 수 있는 스프링 애플리케이션을 쉽게 생성
  • Tomcat 같은 웹 서버를 내장해서 별도의 웹 서버를 설치하지 않아도 됨
  • 손쉬운 빌드 구성을 위한 starter 종속성 제공
  • 스프링과 3rd party(외부) 라이브러리 자동 구성
  • 메트릭, 상태 확인, 외부 구성 같은 프로덕션 준비 기능 제공(모니터링 기능)
  • 관례에 의한 간결한 설정 → 하나하나 설정해 줄 필요 없음
  • 스프링 프레임워크와 별도로 사용할 수 있는 게 아님! 스프링 프레임워크 기반으로 다양한 기술을 편리하게 사용할 수 있도록 도와주는 것

‘스프링’이란 단어

  • 스프링이라는 단어는 문맥에 따라 다르게 사용됨
    • 스프링 DI 컨테이너 기술
    • 스프링 프레임워크
    • 스프링 부트, 스프링 프레임워크 등을 모두 포함한 스프링 생태계

스프링은 왜 만들었나요? 스프링의 핵심 컨셉

어떤 기술이든 왜 만들었는지에 대한 핵심 컨셉은 간단함. 그래서 왜 이 기술을 만들었는지, 핵심 컨셉은 무엇인지와 같은 것들이 중요함.

  • 스프링이 나오기 전, EJB를 사용하려면 EJB에 의존적으로 개발해야 했음
  • 그러다 보니 객체지향이 가진 좋은 장점을 다 버린 채 EJB 스타일로 개발하게 됨
  • 그래서 다시 순수한 자바 스타일(객체지향)로 돌아가자는 POJO라는 단어까지 생김(이는 스프링 DI 개념과 연관이 깊음)
  • 스프링은 자바 언어 기반의 프레임워크
  • 자바 언어의 가장 큰 특징 - 객체지향 언어
  • 스프링은 객체지향 언어가 가진 강력한 특징을 살려내는 프레임워크
  • 스프링은 좋은 객체지향 애플리케이션을 개발할 수 있게 도와주는 프레임워크
  • 따라서 좋은 객체지향 프로그래밍은 무엇인지 알아야 스프링을 제대로 이해할 수 있음

0개의 댓글