[Spring(스프링)] Spring Framework란?

2024. 5. 4. 23:50·Java/Spring Framework

💡정의

①엔터프라이즈용 Java 애플리케이션 개발을 위한 ②오픈 소스 ③경량급 ④애플리케이션 프레임워크로, 동적인 웹 사이트를 개발하기 위한 여러 가지 서비스를 제공

①엔터프라이즈용 Java 애플리케이션 개발

비즈니스 로직을 쉽게 구현할 수 있게 함
*비즈니스 로직: 기업이 제공하는 서비스에서 사용자의 요구사항을 해결하기 위한 실질적인 코드

②오픈 소스

개인 및 기업이 무료로 사용할 수 있음

③경량급(코드의 복잡성↓)

기존 기술을 사용할 때에 불가피하게 작성했던, 불필요하게 복잡한 코드를 제거하게 됨

④애플리케이션 프레임워크

프레임워크: 어떠한 목적을 쉽게 달성할 수 있도록 해당 목적과 관련된 코드의 뼈대를 미리 만들어둔 것
애플리케이션 프레임워크: 애플리케이션을 개발하는 데에 필요한 모든 업무 분야 및 기술과 관련된 코드의 뼈대를 제공

💡특징

  1. POJO(Plain Old Java Object)
  2. IoC(Inversion of Control)
  3. DI(Dependency Injection)
  4. AOP(Aspect Oriented Programming)
  5. PSA (Portable Service Abstraction)

1. POJO(Plain Old Java Object)

POJO 정의

  • 외부의 라이브러리나 모듈을 사용하지 않고 순수 Java 및 Java의 스펙에 정의된 기술만 사용하여 생성한 객체
  • 프레임워크 인터페이스나 클래스를 구현 및 확장하지 않은 단순 클래스
  • Spring에서는 도메인과 비즈니스 로직을 수행하는 대상이 POJO 대상이 될 수 있음

 POJO가 중요한 이유?

  • 외부 기술이나 규약의 변화에 얽매이지 않아, 보다 유연하게 변화와 확장에 대처할 수 있음
  • 객체지향 설계를 제한없이 적용할 수 있음
  • 코드가 간결해져 테스트와 디버깅이 쉬워짐

2. IoC(Inversion of Control)

IoC 정의

  • 제어의 역전
  • 객체의 생성부터 호출, 생명주기의 관리까지 모든 객체에 대한 제어권이 개발자가 아닌 프레임워크에게 있는 것

2024.05.06 - [Java/Spring] - [Spring(스프링)] Bean(빈), 생명 주기, Scope(스코프)

  • 개발자는 프레임워크에 필요한 부품을 개발하고 조립하는 방식으로 개발, 최종 호출은 개발자가 아니라 프레임워크의 내부에서 결정된 대로 이뤄짐

3. DI(Dependency Injection)

DI 정의

  • 의존성 주입
  • 객체를 직접 생성하는 것이 아니라 외부에서 생성한 후 주입 시켜주는 것
  • 스프링 프레임워크에서 지원하는 IoC의 형태
  • 클래스 사이의 의존관계를 빈 설정 정보를 바탕으로 컨테이너가 자동으로 연결

DI 장단점

  • 장점
    • 스프링 자체에서 설정을 통해 연관 관계를 맺어줌으로써 객체간 결합도를 낮춰줌
    • 클래스의 재사용성을 높이고, 유지보수가 편리해짐
  • 단점
    • 의존성 주입을 위한 선행 작업이 필요해 간단한 프로그램에서는 번거로움
    • 코드 추적이 어려움

주입 방식

  • 수정자 주입
    • 대부분 의존 관계 주입은 한번 일어나면 종료시점까지 변경할 일이 거의 없음
    • Setter를 통해 주입하게 되면 변경될 위험이 존재
    • Setter를 public으로 열어야 함
  • 필드 주입
    • 외부에서 변경이 불가능해서 테스트하기 어려움
  • 생성자 주입
    • 생성자 주입을 권장
    • 생성자 호출 시점에 딱 1번만 호출되는 것을 보장
    • final 키워드를 통해 불변하게 설계 가능
    • 의존성 주입이 누락되는 것을 방지할 수 있음(IDE에서 컴파일 오류로 알려줌)

4. AOP(Aspect Oriented Programming)

2024.05.09 - [Java/Spring] - [Spring(스프링)] AOP(관점 지향 프로그래밍)

AOP 정의

  • 관점 지향 프로그래밍
  • 어떤 로직을 기준으로 공통 관심 사항과 핵심 관심 사항을 분리하여 모듈화
    • 여러 번 반복해서 사용하는 코드(흩어진 관심사)를 Aspect로 모듈화하여 핵심 로직에서 분리해 재사용

특징

  • 재사용성 향상
    • 여러 객체에 공통으로 적용할 수 있는 기능을 구분함으로써 재사용성을 향상시킴
  • 비즈니스 로직 앞/뒤에 공통 관심 사항을 수행해 중복 코드를 줄임
    • 특정 로직(로그, 성능테스트, 권한)을 모든 메서드에 적용하고 싶을 때, 일일이 추가하는 것이 아니라 로직을 만들어서 적용

5. PSA (Portable Service Abstraction)

정의

  • 하나의 추상화로 여러 서비스를 묶어둔 것
  • 환경의 변화와 관계없이 일관된 방식으로 기술에 접근할 수 있는 환경을 제공하려는 추상화 구조
저작자표시 비영리 변경금지 (새창열림)

'Java > Spring Framework' 카테고리의 다른 글

[Spring(스프링)] MVC 패턴  (0) 2024.05.12
[Spring(스프링)] Transactional(트랜잭셔널)  (0) 2024.05.09
[Spring(스프링)] AOP(관점 지향 프로그래밍)  (0) 2024.05.09
[Spring(스프링)] Bean(빈), 생명 주기, Scope(스코프)  (0) 2024.05.06
[Spring(스프링)] Spring Container(스프링 컨테이너)  (0) 2024.05.06
'Java/Spring Framework' 카테고리의 다른 글
  • [Spring(스프링)] Transactional(트랜잭셔널)
  • [Spring(스프링)] AOP(관점 지향 프로그래밍)
  • [Spring(스프링)] Bean(빈), 생명 주기, Scope(스코프)
  • [Spring(스프링)] Spring Container(스프링 컨테이너)
주민1호
주민1호
개발/알고리즘 등등
  • 주민1호
    개발바라기별
    주민1호
  • 전체
    오늘
    어제
  • 블로그 메뉴

    • 🏚️
    • 🏷️
    • ✏️
    • ⚙️
    • All (40)
      • Data (0)
        • 💯DASP (0)
        • 💯SQLD (0)
        • 💯ADSP (0)
      • Java (17)
        • Java (11)
        • Spring Framework (6)
      • Python (0)
        • Python (0)
        • Flask (0)
        • TensorFlow (0)
      • JavaScript (1)
        • React (0)
        • Vue (0)
      • Lang (11)
        • C (11)
        • C++ (0)
      • Infra (0)
        • Docker (0)
        • Kubernetes (0)
        • AWS (0)
      • Algorithm (9)
      • 운영체제 (0)
        • Linux (0)
      • Etc. (1)
        • Git (1)
        • Network (0)
        • 컴퓨터과학개론 (0)
        • 멀티미디어시스템 (0)
      • AI (0)
      • Projects (0)
        • 2022 OSSCA (0)
      • Review (0)
      • 회고 (0)
  • hELLO· Designed By정상우.v4.10.3
주민1호
[Spring(스프링)] Spring Framework란?
상단으로

티스토리툴바