티스토리 뷰

스프링의 탄생

  기존의 자바 표준 기술인 EJB(Enterprise Java Beans) -> 이론적으로 좋았지만 어렵고 느렸던...

  Rod Johnson이 책을 출간한 후 오픈소스 프로젝트를 진행하게 된다.

  EJB라는 겨울을 넘어 새로운 시작이라는 뜻로 spring, 봄이라 지었다.

 

 

스프링

  스프링 프레임워크

    핵심 기술 : 스프링 DI 컨테이너, AOP, 이벤트

    웹 기술 : 스프링 MVC, 스프링 WebFlux

    데이터 접근 기술 : 트랜잭션, JDBC, ORM 지원, XML 지원  ....

  스프링 부트 - 스프링을 편리하게 사용할 수 있도록 지원, 최근은 Default

    Tomcat 같은 웹 서버를 내장하여 별도의 웹 서버가 필요하지 않기에 단독으로 스프링 애플리케이션 생성 가능

    starter 종속성 제공 ( 연관된 라이브러리를 같이 끌어온다. )

    스프링과 3rd parth(외부) 라이브러리 자동 구성 - 외부 라이브러리의 버전을 관리해준다.

    프로덕션 준비 기능 제공 - 모니터링을 도와준다.

 

 

스프링의 핵심

  자바 언어 기반의 프레임워크  -> 객체 지향의 특징을 살릴 수 있는 프레임워크

  즉, 좋은 객체 지향 애플리케이션을 개발할 수 있게 도와주는 프레임워크

 

 

객체 지향 프로그래밍 ( 좋은 ) 

  ->  컴퓨터 프로그램을 객체( 독립된 단위 )들의 모임으로 파악하고자 함,

         각각의 객체는 메세지를 주고받으며 데이터를 처리한다.

  -> 프로그램을 유연하고 변경이 용이하게 만들어 대규모 소프트웨어 개발에 사용된다.

  

  유연하고 변경이 용이? -> 부품 교체하듯, 컴포넌트를 쉽고 유연하게 변경하듯..

  역할과 구현을 분리하라! (인터페이스와 구현 클래스)

    클라이언트는 대상의 역할만 알면 되고, 구현 대상의 내부 구조를 알 필요 없다.

    구현 대상의 내부 구조의 변경에도 영향을 받지 않으며, 구현 대상 자체가 바뀌어도 영향을 받지 않는다.

    ex) 자동차라는 역할, 그리고 bmw 테슬라 쌍용과 같은 구현 대상

           -> 우리는 bmw를 타다가 테슬라를 타도 영향을 받지 않는다~    

    

    자바 언어의 다형성 ( Polymorphism ) 을 활용하여 역할(인터페이스)과 구현(클래스, 구현 객체)로 분리할 수 있다.

    역할을 부여하고( 인터페이스를 정의하고 ), 역햘을 수행하는 것을 구현한다.

    다형성의 본질 - 클라이언트를 변경하지 않고, 서버의 구현 기능을 유연하게 변경 가능하게 한다.

    -> 인터페이스를 안정적으로 설계하는 것이 중요하다.

 

 

객체 지향 설계 원칙 SOLID

  SRP( Single Resopnsibility Principle, 단일 책임 원칙 )

    하나의 클래스는 하나의 책임만 가져야 한다.

    변경이 있을 때 파급 효과가 적다면 단일 책임 원칙을 잘 따른 것

  OCP ( Open-Closed Principle, 개방 폐쇄 원칙 )

    확장에는 열려있고, 변경에는 닫혀있어야 한다.

    다형성을 생각해보자. 역할과 구현을 구분한다면 구현을 통한 확장을 하고, 변경을 지양할 수 있다.

    문제점) 다형성을 활용하고 적용하면 OCP원칙을 지킬 수 없는 경우가 발생. -> 별도의 조립, 설정자가 필요함

  LSP ( Liskov Substitution Principle, 리스코프 치환 원칙 )

    다형성에서 하위 클래스는 인터페이스 규약을 지켜야 한다.

  ISP ( Interface Segregation Principle, 인터페이스 분리 원칙 )

    범용 인터페이스를 여러 개의 인터페이스로 분리한다.

      ->( 컴퓨터 주변기기 인터페이스 -> 마우스 인터페이스, 키보드 인터페이스 ... )

    인터페이스가 명확해지고, 대체 가능성이 높아진다. 

  DIP ( Dependency Inversion Principle, 의존관계 역전 원칙 )

    구현 클래스에 의존하지 말고, 인터페이스에 의존하라는 뜻 ( 인터페이스에 집중하라, 역할에 의존하라 )

 

  -> 객체 지향의 핵심은 다형성이지만, 다형성만으로는 OCP, DIP를 지킬 수 없다.

  -> why? 구현 객체를 변경할 때 클라이언트 코드도 함께 변경되기 때문에..    

 

 

객체 지향 설계와 스프링

  스프링은 다형성 + OCP, ICP를 가능하게 지원해준다.

    DI( Dependency Injection, 의존성, 의존관계 주입 )

    DI 컨테이너 제공

  클라이언트 코드의 변경 없이 기능을 확장할 수 있게 해준다.

 

 

  

 

 

 

 

 

  

  

본 포스팅은 인프런 강의 중 김영한님의

[ 스프링 핵심 원리 - 기본편 ] 을 수강하며 작성한 내용입니다.

공지사항
최근에 올라온 글
최근에 달린 댓글
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30