Spring01 - Overview

손윤희·2022년 2월 6일
0
post-thumbnail

왜 스프링을 써야할까?

  1. POJOs를 기반으로 한 경량개발
  2. 객체 간 느슨한 결합을 위한 의존성 주입
  3. AOP(관점지향프로그래밍)을 기반으로 한 선언적 프로그래밍
  4. 표준 자바코드 최소화

=> "Java Enterprise 개발 단순화"

1. POJOs(Plain-Old-Java-Objects)

  • 포조는 Java EE 등으로 인해서 점점 무거워지는 객체에 대해서 반발하며 나타난 개념이다.
    즉, 다른 클래스나 인터페이스를 상속/implements 받아 메서드가 추가된 클래스가 아닌 일반적으로 우리가 알고 있는 getter, setter 같이 기본적인 기능에 충실한 자바 객체를 말한다.

참고
https://needjarvis.tistory.com/585
https://velog.io/@galaxy/Spring의-기본-특징-POJO

2. 의존성 주입(DI) - Dependency Injection

의존성 주입은 객체간의 결합을 느슨하게 해준다.
느슨한 결합은 다음과 같은 장점이 있는데,

  1. 두 객체 간의 관계라는 관심사의 분리
  2. 두 객체 간의 결합도를 낮춤
  3. 객체의 유연성을 높임
  4. 테스트 작성을 용이하게 함

출처: https://mangkyu.tistory.com/150 [MangKyu's Diary]

3. 관점지향 프로그래밍

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

  • OOP(객체지향 프로그래밍)를 발전시키기 위한 개념이다.
  • OOP로 처리하기에는 다소 까다로운 부분을 AOP라는 처리 방식을 도입하여 손쉽게 공통 기능을 추가/수정/삭제 할 수 있도록 해준다.

기존의 단순 OOP에서는 계좌이체, 입출금, 이자계산의 서비스가 각각의 OOP로 프로그래밍 되었고, 각각의 OOP 모두 기능 작동을 위해 로깅, 보안, 트랜잭션을 하는 코드가 구현되어있었다.

그런데 계좌이체, 입출금, 이자계산 비즈니스 모두가 공통적으로 갖는 로직이 있는 것을 알 수 있다. 그렇다면 이것을 각각의 OOP 소스코드에서 제거하고 외부로 빼내 하나의 공통 모듈로 만들 수 있다. 이것이 바로 기존의 OOP에 AOP 관점을 더해 발전시킨 기법이다.

Core Concern(핵심 관심) : 각 서비스의 핵심 비즈니스 로직. i.e. 계좌이체, 입출금, 이자계산
Crosscut Concern(횡단 관심) : 공통 모듈. i.e. 로깅, 보안, 트랜잭션

AOP의 핵심은 공통 모듈을 분리시켜 해당 소스코드가 외부의 다른 클래스에서 존재하는 것이다.

AOP개념을 도입함으로써 얻는 장점

  • 각 비즈니스 로직마다 복붙을 통해 생겨난 중복 코드가 사라진다.
  • 각 비즈니스 로직을 구현하는 개발자는 자기 자신의 비즈니스 코드에만 집중할 수 있어 코드가 간결해지고, 유지보수가 쉬워진다.
  • 재활용성이 더욱 높아진다.

AOP의 기본 개념들

AOP의 구성 요소

JointPoint : Crosscut Concern(횡단 관심)을 삽입할 시점(when).
i.e. 함수가 Before(실행 전), After(실행 후), AfterReturning(반환 후), AfterThrowing(예외 발생시), Around(실행 전과 후)
PointCut : 어떤 클래스의 어떤 함수에 삽입할건지. 삽입할 위치(where).
Aspect : JointPoint(when) + PointCut(where)
Advice : 무엇(what)을 삽입할건지.
Weaving : Aspect(when + where) + Advice(what). 위빙을 통해 지정된 객체를 새 Proxy 객체로 생성한다.
Proxy : Crosscut Concern(횡단 관심)이 Core Concern(핵심 관심)에서 직접 실행되지 않고 Proxy(대리인)을 생성해 실행된다.

[출처]
https://greendreamtrre.tistory.com/601

4. 표준자바코드 최소화

스프링 프레임워크는 POJO(Plain Old Java Object)를 지원합니다.
즉, 별도의 API를 사용하지 않고 일반 자바 코드만으로 구성 가능하기 때문에 기본적으로 매우 가볍습니다.
(스프링 기본 프로젝트는 약 2MB에 불과)

출처: https://the-dev.tistory.com/15 [DevLogs]

[참고하면 좋은 글]
우리는 왜 스프링을 사용하는가? https://joychae.tistory.com/27

0개의 댓글