[Spring] 1. 스프링 프레임워크 (Spring Framework)

Sai·2023년 3월 23일
0
post-thumbnail

** 개인적인 공부를 위해 구글링을 통해 여러 정보를 모아 작성한 글입니다. 상업적인 목적은 없습니다.

스프링 프레임워크(Spring Framework)란?

  • 자바를 이용해 웹 어플리케이션 서버 개발을 진행하기 위한 프레임워크
  • 다양한 디자인 패턴과 기능들이 미리 구현되어 있기 때문에 효율적으로 개발을 진행할 수 있다.

스프링(Spring)의 특징

1. POJO (Plain Old Java Object)

  • 백엔드에는 JSP 코드나 다른 기술 코드를 절대 사용하지 않으며
    순수 JAVA코드로 작성해야 한다.
  • 익숙치 않은 별도의 API를 사용하지 않음으로써 개발자의 혼란을 최소화 한다.
  • 특정 API을 사용하더라도 JPA라는 표준 인터페이스 아래, 구현되어 실행된다.

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

  • 의존관계를 외부에서 결정하고 주입한다.
  • 프로젝트 내부의 생성자를 모두 제거하여 소스 코드 간의 결합도를 낮춘다.
    (결합도가 높은 상황 - 하나 수정하면 소스 코드 100개 수정해야 하는 상황)
  • 생성자를 제거한 대신 @Autowired 어노테이션을 통해 의존성을 주입시킨다.

3. 관점 지향 프로그래밍 (AOP, Aspect Oriented Programming)

  • 기존 OOP를 더욱 보완, 확장하여 OOP를 OOP답게 사용할 수 있도록 도와주는 개념
  • DI가 의존성(new)의 주입이라면, AOP는 기능(logic)의 주입
  • 기능을 비지니스 로직공통 모듈로 구분한 후에 개발자의 코드 밖에서 필요한 시점에 비지니스 로직에 삽입하여 실행되도록 한다.
  • AOP를 통해서 중복 코드 제거, 효율적인 유지보수, 높은 생산성, 재활용성 극대화, 변화 수용 용이 등의 이점을 얻을 수 있다.

4. PSA (Portable Serivce Abstraction)

  • 환경의 변화와 관계없이 일관된 방식의 기술로의 접근 환경을 제공하는 추상화 구조.
  • 추상화 계층을 사용해서 어떤 기술을 내부에 숨기고 개발자에게 편의성을 제공해주는 것을 서비스 추상화(Service Abstraction)라고 한다.
  • PSA가 적용된 코드라면 나의 코드가 바뀌지 않고, 다른 기술로 간편하게 바꿀 수 있도록 확장성이 좋고, 기술에 특화되어 있지 않는 코드를 의미합니다.
  • PSA = 잘 만든 인터페이스

5. SOLID (SRP, OCP, LSP, ISP, DIP)

  • SOLID란 클린코드로 유명한 로버트 마틴이 좋은 객체 지향 설계의
    5가지 원칙(SRP, OCP, LSP, ISP, DIP) 앞 글자를 따서 만든 용어이다.
  • SOLID 원칙을 알아야하는 이유는 시스템에 새로운 기능이 확장되거나 변경사항이 있는 경우 기존 기능들이 영향을 적게 받는 것이 좋은 설계이기 때문이다.

1) SRP (Single Responsibility Principle) 단일 책임 원칙

  • "소프트웨어를 설계할 때 객체는 단 하나의 책임만을 가질 수 있다."
  • 하나의 클래스는 하나의 기능만을 담당하여 하나의 책임을 수행하는데
    집중되어 있어야 한다는 의미이다.
  • 코드의 가독성이 향상 되고, 유지보수가 용이해진다.

2) OCP (Open/Closed Principle) 개방 폐쇄 원칙

  • 기존의 코드를 변경하지 않으면서, 기능을 추가할 수 있도록 설계가 되어야 한다는 원칙
  • 확장에 대해서는 개방적(open)이고, 수정에 대해서는 폐쇄적(closed)이어야 한다는 의미로 정의한다.
  • 확장에 대해서 개방적인 것은 모듈의 확장성을 보장하는 것을 의미한다.
  • 변경에 닫혀 있다는 것은 객체를 직접적으로 수정하는건 제한해야 한다는 것을 의미한다.

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

  • “프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로
    바꿀 수 있어야 한다.”
  • 상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 한다.
  • 리스코프 치환 원칙이 제대로 지켜지지 않으면 다형성에 기반한
    개방 폐쇄 원칙 역시 지켜지지 않는다.

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

  • “특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.”
  • 클라이언트가 자신이 이용하지 않는 메서드에 의존하지 않아야 한다는 원칙이다.
  • 인터페이스 분리 원칙은 큰 덩어리의 인터페이스들을 구체적이고 작은 단위들로 분리시킴으로써 클라이언트들이 꼭 필요한 메서드들만 이용할 수 있게 한다.
  • 인터페이스 분리 원칙을 통해 시스템의 내부 의존성을 약화시켜 리팩토링, 수정, 재배포를 쉽게 할 수 있다.

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

  • 프로그래머는 “추상화에 의존해야지, 구체화에 의존하면 안된다.”
  • 의존성 주입(DI)은 이 원칙을 따르는 방법 중 하나다.
  • 상위 계층(정책 결정)이 하위 계층(세부 사항)에 의존하는 전통적인 의존관계를 반전(역전) 시킴으로써 상위 계층이 하위 계층의 구현으로부터 독립되게 할 수 있다.
profile
IT is Sai

0개의 댓글