Spring 개념(1)

woohee·2024년 3월 26일

Spring 핵심원리

목록 보기
1/12
post-thumbnail

📚Spring

  • 필수
    스프링 프레임워크
    스프링 부트

  • 선택
    스프링 데이터 : CRUD를 편리하게 도와주는 기술 -> 제일 많이 쓰는 건 Spring data JPA
    스프링 세션 : 세션 기능을 편리하게 사용할 수 있게 도와줌
    스프링 시큐리티 : 보안
    스프링 Rest Docs : API 문서화를 편리하게 도와줌
    스프링 배치 : 배치처리에 특화된 기술
    스프링 클라우드 : 클라우드 처리에 특화된 기술

스프링 사이트로 이동하면 다양한 스프링 관련 기술을 확인할 수 있다.


스프링 프레임워크

핵심 기술 : 스프링 DI 컨테이너, AOP, 이벤트, 기타
웹 기술 : 스프링 MVC, 스프링 WebFlux
데이터 접근 기술 : 트랜잭션 , JDBC, ORM 지원, XML 지원
기술 통합 & 테스트 & 언어

최근에는 스프링 부트를 통해 스프링 프레임워크의 기술들을 편리하게 사용한다.

스프링 부트

스프링을 편리하게 사용할 수 있도록 지원하고 최근에는 기본으로 사용한다.

장점

  • 단독으로 실행할 수 있는 스프링 애플리케이션을 쉽게 생성
  • Tomcat 같은 웹 서버를 내장하고 있음. 과거에는 별도로 설치함.
  • starter 종속성 제공 -> starter가 포함하는 라이브러리까지 한 번에
  • 스프링과 외부 라이브러리 자동 구성 -> 외부 라이브러리 버전까지 신경쓰지 않아도 됨.
  • 메트릭, 상태 확인,외부 구성과 같은 프로덕션 준비 기능 제공 -> 중요한 모니터링에 도움
  • 관례에 의한 간결한 설정

⛓️스프링부트와 스프링 프레임워크
스프링부트는 스프링 프레임워크와 별개로 사용할 수 없다.
스프링부트는 스프링 프레임워크를 편리하게 사용하기 위해 중간에서 기능을 제공하는 것이다.

스프링

문맥에 따라 다르게 사용된다.

  • 스프링 DI 컨테이너 기술
  • 스프링 프레임워크
  • 스프링 부트, 스프링 프레임워크 등을 모두 포함한 스프링 생태계

스프링을 왜 만들었을까?

✏️스프링의 핵심 개념
자바 언어 기반의 프레임워크
자바 언어의 가장 큰 특징 -> 객체 지향 언어
객체 지향 언어가 가진 특징을 가장 잘 살려내는 프레임워크
즉 , 스프링은 좋은 객체 지향 애플리케이션을 개발할 수 있게 도와주는 프레임워크


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

다형성

  • 역할과 구현을 분리
  • 역할과 구현을 구분하면 단순, 유연, 변경이 편리해진다.
  • 클라이언트는 대상의 역할만 알면되고, 내부 구조는 몰라도 된다.
  • 클라이언트는 내부 구조가 변경되어도 영향을 받지 않는다.
  • 클라이언트는 구현 대상 자체를 변경해도 영향을 받지 않는다.

자바 언어의 다형성을 활용

역할 = 인터페이스
구현 = 인터페이스를 구현한 클래스, 구현 객체

객체는 협력 관계

클라이언트 : 요청
서버 : 응답
수많은 클라이언트와 객체 서버는 서로 협력 관계를 가짐

자바 언어의 다형성

다형성의 본질
인터페이스를 구현한 객체 인스턴스의 실행 시점에 유연하게 변경할 수 있다.
협력이라는 객체 사이의 관계에서 시작해야 함.
클라이언트를 변경하지 않고 서버의 구현 기능을 유연하게 변경할 수 있다.

스프링과 객체 지향

다형성이 가장 중요하다 !!
스프링은 다형성을 극대화해서 이용할 수 있게 도와준다
제어의 역전(IoC), 의존관계 주입(DI)은 다형성을 활용해서 역할과 구현을 편리하게 다룰 수 있도록 지원한다.
스프링을 사용하면 마치 레고 블럭 조립하듯이, 공연 무대의 배우를 선택하듯이 구현을 편리하게 관리할 수 있다.


💡SOLID 법칙

로버트 마틴이 정리한 원칙

  • SRP 단일책임 원칙
    한 클래스는 하나의 책임만 가진다.
    중요한 기준은 변경 -> 변경 후 파급 효과가 적으면 단일 책임 원칙을 잘 따르는 것
  • OCP 개방-폐쇄 원칙
    확장에는 열리고 변경에는 닫혀 있어야 한다.
    다형성을 활용하면 이를 가능케 할 수 있다.
  • LSP 리스코프 치환 원칙
    하위 클래스는 인터페이스 규약을 다 지켜야 한다.
  • ISP 인터페이스 분리 원칙
    특정 클라이언트를 위한 인터페이스 여러개가 범용 인터페이스 하나보다 나음
  • DIP 의존관계 역전 원칙
    구현 클래스에 의존하지 말고 인터페이스에 의존해라.

📜Summary

  • 객체 지향의 핵심은 다형성
  • 다형성만으로는 쉽게 개발할 수 없다.
  • 다형성만으로는 구현 객체를 변경할 때, 클라이언트 코드도 함께 변경
  • 다형성만으로 OCP,DIP를 지킬 수 없다.

0개의 댓글