SpringBoot

자바 스프링 개념

똑똑한망치 2024. 1. 19. 16:09
728x90
반응형

1. Spring 삼각형


  • 스프링의 기반이 되는 설계 개념을 표현한 것이다.
  • 스프링은 POJO(Plain Old Java Object)를 지향한다. 말 그대로 '오래된 방식의 간단한 자바 객체'를 지향한다. 이는 순수하게 자바만 이용해 만든 객체를 사용하겟다는 뜻이다.
  • 순수하게 자바만 이용해 만든 객체를 사용하면 외부 라이브러리의 변화, 특정 기술이나 환경에 종속되지 않는다. 따라서 변화에 대처하기 쉽고 서비스 확장과 간련된 부담이 적다.
  • 이러한 특징은 코드가 단순해지고 객체지향 설계를 외부 요인의 제한 없이 적용할 수 있다는 점에서 스프링의 강점으로 꼽힌다.
  • 스프링은 POJO를 지향하기 위해 다음과 같은 기술을 지원한다
    • 의존성 주입(DI, Dependency Injection)
    • 제어 역전(IoC, Inversion of Control)
    • AOP(Aspect-Oriented Programming)
    • PSA(Portable Service Abstraction)

 

 

 

(1) DI (Dependency Injection)


  • 의존 관계 주입이라고 한다.
  • 어떤 객체가 사용하는 의존 객체를 직접 만들어 사용하는 것이 아니라, 주입 받아 사용하는 방법이다. 
  • 예시 이미지

 

 

 

 

 

(2) IoC (Inversion Of Control)


  • 제어의 역전이라는 의미이다.
  • 사용자가 직접 클래스를 생성 (new Class()) 하지 않고 프레임워크 (스프링)이 제어하도록 한다.
  • 스프링은 ApplicationContext를 가지고 있고 스프링에서 관리하는 객체인 Bean들은 여기에 담기게 된다. 여기서 ApplicationContext 가 IOC 컨테이너이고 Bean의 생명 주기는 IOC 컨테이너에 의해 관리된다. 이렇게 생성된 Bean들 사이의 참조 관계 (즉, 의존성)은 간단히 설정할 수 있는데 이를 DI 라고 부른다.

 

 

(3) AOP (Aspect-Oriented Programming)


  • AOP(Aspect Oriented Programming)을 직역하면 관점 지향 프로그래밍으로 해석할 수 있다.
    • OOP(Object Oriented Programming)은 객체 지향 프로그래밍이다. 즉, 객체 간의 관계를 지향하는 프로그래밍 방식이다.
  •  객체 지향 프로그래밍 패러다임을 보완하는 기술로 메서드나 객체의 기능을 핵심 관심사 (Core Concern)와 공통 관심사 (Cross-cutting Concern)로 나누어 프로그래밍 하는 것을 말한다.
    • "핵심 관심사"는 각 객체가 가져야 할 본래의 기능이며, "공통 관심사"는 여러 객체에서 공통적으로 사용되는 코드를 말한다.
  • 여러 개의 클래스에서 반복해서 사용하는 코드가 있다면 해당 코드를 모듈화하여 공통 관심사로 분리한다. 이렇게 분리한 공통 관심사를 Aspect로 정의하고 Aspect를 적용할 메서드나 클래스에 Advice를 적용하여 공통 관심사와 핵심 관심사를 분리할 수 있습니다. 이렇게 AOP에서는 공통 관심사를 별도의 모듈로 분리하여 관리하며, 이를 통해 코드의 재사용성과 유지 보수성을 높일 수 있다.

 

 

 

 

 

관점 지향 프로그래밍의 정의를 보면 핵심 관심사와 공통 관심사를 분리하여 프로그래밍 하는 것을 의미한다.

 

 

위의 이미지와 같이 3개의 A, B, C의 클래스가 있다고 가정하자.

 

클래스 A에서는 주황, 파랑, 빨간색 블록이 구성되어 있고 클래스 B에서는 빨강, 주황 블록으로 구성되어 있으며 클래스 C에서는 주황, 파랑 블록으로 구성되어 있다. 해당 색은 클래스 A, B, C에서 동일하게 사용되는 코드를 의미한다.

 

예를 들어 클래스 A에서 주황색 블록을 수정하게 되면 클래스 B, C에서도 수정을 해야 한다.

이렇게 되면 유지보수 차원에서 모든 코드를 수정해야 하는 단점이 있다.

그래서 Aspect X에서는 공통 관심사인 주황색 블록을 묶어서 모듈화를 시켜서 코드의 재사용성과 유지 보수성을 강화하였다.

이렇듯, 관점 지향 프로그래밍에서는 소스코드에서 반복적으로 사용하는 코드를 하나로 묶어서 모듈화하여 재사용성과 유지 보수성을 높일 수 있는 강점을 가지고 있다.

 

 

 

 

(4) PSA (Portable Service Abstraction)


  • PSA란 환경의 변화와 관계없이 일관된 방식의 기술로의 접근 환경을 제공하는 추상화 구조를 말한다.
    • 이는 POJO 원칙을 철저히 따른 Spring의 기능으로 Spring에서 동작할 수 있는 Library들은 POJO 원칙을 지키게끔 PSA형태의 추상화가 되어 있음을 의미한다.
  • 즉, 복잡한 어떤 기술을 내부에 숨기고 개발자에게 편의성을 제공하는 것이다.
    • Portable(어느 환경이든) Service(복잡한 기술을) Abstraction(추상화를 통해) 사용할 수 있다!
  • 대표적으로 트랜잭션 추상화, OXM(XML과 자바오브젝트를 매핑해서 상호 변환해주는 기술) 추상화, 데이터 엑세스 예외 처리 등 Low Level 의 기술 구현 부분과 기술을 인터페이스로 분리
    • ex) DB에 접근하는 방법은 여러 가지가 존재한다. 기본적으로 Jdbc를 통해 접근할 수 있으며 ORM을 이용하고자 한다면 JPA를 통해서 접근할 수도 있다.
반응형

'SpringBoot' 카테고리의 다른 글

API 작성 방법 (PUT API)  (0) 2024.02.02
API 작성 방법 (POST API)  (0) 2024.02.02
API 작성 방법 (GET API)  (0) 2024.02.02
스프링 부트 애플리케이션 생성  (0) 2024.02.02
스프링 부트란?  (2) 2024.01.25