웹개발/Spring

[Spring] 스프링 프레임워크의 특징

ss__jae2 2022. 6. 29. 18:33
반응형

* 스프링 프레임워크의 특징

  • POJO 기반의 구성
  • 의존성 주입(DI)을 통한 객체 간의 관계 구성
  • AOP 지원
  • 편리한 MVC 구조
  • WAS에 종속적이지 않은 개발 환경

1. POJO(Plain Old Java Object) 기반의 구성

  • 오래된 방식의 간단한 자바 객체
  • Java 코드에서 일반적으로 객체의 구성하는 방식을 스프링에서도 그대로 사용할 수 있음

2. 의존성 주입(DI)을 통한 객체 간의 관계 구성

  • 의존성(Dependency)
    - 하나의 객체가 다른 객체 없이 제대로 된 역할을 할 수 없다는 것을 의미
    - 예를 들어 A 객체가 B 객체 없이 동작이 불가능한 상황을 'A가 B에 의존적이다'라고 표현
    - 이때 B  클래스가 수정이 된다면 의존적이기 때문에 A 클래스도 수정을 해줘야하며 만약 여러 클래스가 의존한다며 모든 클래스들을 다 수정해줘야 함

    1. 생성자를 외부에서 만들어줘서 매개변수에 넣어줌, 그렇게 되면 각 클래스들을 바꿔줄 필요가 없음
    2. setter를 이용해서 세팅만 잘해주면 굳이 클래스 내부를 수정할 필요가 없음.
    --> 하지만 이 방법들은 클래스들을 수정할 필요는 없지만 만들 때의 객체들은 수정해줘야 함
    --> 스프링에서는 이것조차 자동으로 수정해줌
  • 주입(Injection)
    - 말 그대로 외부에서 밀어 넣는 것을 의미
    - 예를 들어 어떤 객체가 필요로 하는 객체를 외부에서 밀어넣는 것을 의미
    - 받는 입장에서는 어떤 객체인지 신경쓸 필요가 없고 어떤 객체에 의존하든 자신이 하던 역할은 변하지 않게 됨
  • 의존과 의존성 주입
    * 의존
    ⓐ-------------------->ⓑ : a 객체에서 b 객체를 직접 생성
    * 의존성 주입
    ⓐ------->???<-------ⓑ : a가 b를 필요로 한다는 신호를 보내고, b 객체를 주입하는 것은 외부에서 이루어짐

    - 의존성 주입방식을 사용하기 위해서는 ???라는 존재가 필요하게 됨
    - 스프링 프레임워크에서는 ApplicationContext가 ???라는 존재이며, 필요한 객체를 생성하고 주입까지 해주는 역할을 함
    - 따라서 개발자들은 기존의 프로그래밍과 달리 객체와 객체를 분리해서 생성하고, 이러한 객체들을 엮는(Wiring) 작업의 형태로 개발하게 됨
    - ApplicationContext가 관리하는 객체들을 '빈(Bean)'이라고 부르고, 빈과 빈 사이의 의존 관계를 처리하는 방식으로 XML, Java 코드, 어노테이션 방식을 이용

3. AOP의 지원

- Object Oriented Programing : 객체 지향 프로그래밍

- Aspect Oriented Programing : 관점 지향 프로그래밍

  • 예외 처리 같은 것을 각 요청마다 하는 것이 아니라 하나로 묶어서 따로 처리하는 것(관점)
  • 좋은 개발환경에서는 개발자가 비즈니스 로직에만 집중 가능
  • 스프링 프레임워크는 반복적인 코드를 제거해줌으로써 핵심 비즈니스 로직에만 집중할 수 있는 방법을 제공
  • 보안이나 로그, 트랜잭션과 같이 비즈니스 로직은 아니지만 반드시 처리가 필요한 부분들을 횡단 관심사(cross-concern)라 함
  • 스프링 프레임워크는 이러한 횡단 관심사를 분리해서 제작하는 것이 가능하고 횡단 관심사를 모듈로 분리하는 프로그래밍을 AOP라고 함
  • 3가지의 이점
    1) 핵심 비즈니스 로직에만 집중하여 코드 개발
    2) 각 프로젝트마다 다른 관심사를 적용할 시 코드 수정 최소화
    3) 원하는 관심사의 유지보수가 수월한 코드 구성이 가능

4. 트랜잭션의 지원

  • 먼저 트랜잭션에 올려놓고 오류 없이 트랜잭션에 올라가면 그때 커밋을 해줌
  • DB 작업시 트랜잭션 관리를 매번 상황에 맞게 코드로 작성하지 않고, 어노테이션이나 XML로 트랜잭션 관리 설정 가능
반응형