ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring
    BackEnd/Java 2025. 2. 14. 18:37

    Spring

    History

    EJB  -> Spring Framework -> Spring Boot

     

    • EJB (Enterprise JavaBeans)
      •  Java EE (Enterprise Edition), 서버측 컴포넌트 구축에 중점
      •  모듈화, 분산시스템, 복잡성

     

    • Spring Framework
      •  EJB 복잡성을 피함, 유연하고 간결한 개발환경, 오픈 소스 프레임워크
      •  DI, AOP, POJO, IoC 등

     

    • Spring Boot
      •  Spring Framework 확장, 빠른 독립형 실행 Application 개발이 가능한 오픈소스 프레임워크
      •  Standalone Application : 내장서버 (Tomcat)을 포함하여, 별도의 서버 없이 독립형으로 실행
      •  자동구성 (keyword : Auto Configuration) : 대부분의 설정을 자동으로 처리
      •  간단한 설정 : 복잡한 XML 설정이 없음 Anotation으로 간단하게 처리 (개발생산성 향상)
      •  배포용이성 : Jar 파일로 패키징 및 배포

     

     

     

    특징

    • Dependency Injection (DI)
      • 객체의 생성과 관리가 프레임워크에 의해 자동으로 이루어짐  (코드의 유지보수성, 확장성, 테스트 용이성)
      • 의존성 주입을 통해 객체 간의 결합도를 낮추고, 객체를 외부에서 주입받는 방식으로 설계

     

    •  Aspect-Oriented Programming (AOP)
      • 코드의 재사용성을 높이고, 관심사 분리 (단일 책임 원칙 준수)
      • 핵심 비즈니스 로직과 공통적인 관심사 (예: 로깅, 트랜잭션 처리 등)를 분리

     

    • Plain Old Java Object (POJO)
      • 간단하고 가벼운 객체
      • POJO는 특별한 상속이나 인터페이스 구현 없는 기본적인 Java 클래스
      • 다른 프레임워크나 라이브러리에 의존하지 않으며, 추가적인 규약이나 기능을 강제 X
      • 무상속 클래스 : POJO는 상속이 없거나, 최소한의 상속만을 사용 (즉, 특정 클래스를 상속받지 않고 독립적인 형태로 존재)
      • 기본적으로 getter/setter 메서드를 제공하여 객체의 필드 값을 가져오거나 설정할 수 있음
      • toString(), equals(), hashCode() 같은 메서드를 오버라이드 할 수도 있지만, 기본적으로는 별도의 규칙 X

     

    • Inversion of Control (IoC)
      • 개발자가 직접 제어 흐름을 작성하는 대신, 제어 흐름을 외부에서 관리하게 되는 방식
      • 기존의 제어 방식 : 일반적으로 애플리케이션의 흐름을 개발자가 직접 제어 (특정 객체를 생성하고 메서드를 호출하는 방식)
      • 역전된 제어 방식 : 제어 흐름이 외부로부터 주어지고, Application 은 그 흐름에 따라 동작 (프레임워크나 컨테이너가 관리하며, 개발자는 필요한 작업만 정의)
      • Dependency Injection : Spring Framework에서 Spring IoC 컨테이너는 객체의 생성과 의존성 주입을 담당하며, 개발자는 필요한 객체를 명시하기만 하면 됨
      • Event-driven : 특정 이벤트 (외부)가 발생하면 시스템이 반응하도록 설계하는 방식
      • 유연성, 테스트용이, 결합 감소 (독립적으로 유지보수)

     

    • 객체의 생명주기 관리
      • 객체의 생성, 초기화, 소멸 등을 Spring 컨테이너가 담당 (객체 간의 의존 관계를 설정하는 데 필요한 코드를 줄임)
      • Bean 을 관리하는 IoC(제어의 역전) 컨테이너를 통해 객체의 생명주기를 관리

     

    • 모듈화 (Modularity)
      • Spring은 다양한 모듈을 제공하여, 필요한 기능만 선택해서 사용
      • Spring Web, Spring Data, Spring Security 등 각각의 기능이 분리되어 있어, 필요에 따라 원하는 모듈만 사용
      • 객체지향 설계에서 중요한 모듈화 원칙을 따르며, 필요 없는 기능을 최소화

     

    • 유연한 설정 방식
      • 객체지향에서 중요한 캡슐화다형성을 지원하는 방식으로, 상황에 따라 다양한 방식으로 객체를 설정하고 사용
      • XML 설정, 자바 기반 설정 (Java Configuration),  Anotation 기반 설정 등을 지원

     

    • 테스트 용이성 (Testability)
      • DI와 AOP를 활용한 Mock 객체나 가짜 구현체를 쉽게 주입하여 테스트에 용이
      • 객체지향 설계 원칙 중 변경에 폐쇄적, 확장에 개방적(OCP) 구조로 설계되어 있기 때문에, 단위 테스트 및 통합 테스트를 쉽게 작성

     

    • 트랜잭션 관리
      • 책임 분리의 원칙을 잘 따르는 방식으로, 데이터베이스 트랜잭션 처리가 코드와 분리되어 더 깔끔하게 관리
      • 선언적 트랜잭션 관리를 제공하여, 비즈니스 로직에서 트랜잭션을 쉽게 관리

     

     

    'BackEnd > Java' 카테고리의 다른 글

    Java  (0) 2025.02.14

    댓글

Designed by Tistory.