본문 바로가기
Spring

Spring Framework기초

by 상원윤 2022. 10. 11.

Framework란?

기본적으로 프로그래밍을 하기 위한 어떠한 틀이나 구조를 제공하는것.

 

Framework를 사용하는 장점과 단점

장점

  • 기본적인 설계와 필요한 라이브러리를 제공해 생산성이 향상된다.
  • 정해진 규약이 있어 애플리케이션을 효율적으로 관리할 수 있다.
  • 코드의 재사용성이 높고, 확장성이 좋다.

단점

  • 내가 사용하고자 하는 Framework에 대한 학습이 필요하다.
  • 자유롭고 유연한 개발이 불가능하다.

 

Spring Framework의 특징

  1. POJO(Plan Old Java Object)기반의 구성
  2. DI(Dependency Injection) 지원
  3. AOP(Aspect Oriented Programming, 관점지향 프로그래밍) 지원
  4. Java 언어를 사용함으로써 얻는 장점

 

POJO(Plain Old Java Object)

Spring 삼각형

Spring은 POJO 프로그래밍을 지향하는 Framework이다. 그리고 최대한 다른 환경이나 기술에 종속적이지 않도록 하기 위한 POJO 프로그래밍 코드를 작성하기 위해서 Spring에서는 세가지 기술을 지원하고 있다.

그 세가지 기술은 바로 POJO를 감싸고 있는 IoC/DI, AOP, PSA다.

애플리케이션 프로그래밍 코드를 작성할 때 항상 내가 작성한 코드가 객체지향스러운가에 대한 고민을 하는 습관을 가지는 것이 좋다.

POJO 프로그래밍이란?

POJO 는 Java로 생성하는 순수한 객체를 의미한다.

POJO 프로그래밍이란 POJO를 이용해서 프로그래밍 코드를 작성하는 것을 의미한다.

 

POJO 프로그래밍으로 작성한 코드라고 하려면 두 가지의 규칙을 지켜야 한다.

  1. Java나 Java의 스펙(사양)에 정의된 것 이외에는 다른 기술이나 규약에 얽매이지 않아야 한다.
  2. 특정 환경에 종속적이지 않아야 한다.

POJO 프로그래밍이 필요한 이유

  • 특정 환경이나 기술에 종속적이지 않으면 재사용 가능하고, 확장 가능한 유연한 코드를 작성할 수 있다.
  • 저수준 레벨의 기술과 환경에 종속적인 코드를 애플리케이션 코드에서 제거 함으로써 코드가 깔끔해진다.
  • 코드가 깔끔해지기 때문에 디버깅하기도 상대적으로 쉽다.
  • 특정 기술이나 환경에 종속적이지 않기 때문에 테스트 역시 단순해진다.
  • 객체지향적인 설계를 제한없이 적용할 수 있다.(가장 중요한 이유)

 

IoC(Inversion of Control)

Library는 애플리케이션 흐름의 주도권이 개발자에게 있고, Framework은 애플리케이션 흐름의 주도권이 Framework에 있다.

애플리케이션 흐름의 주도권이 뒤바뀐 것IoC(Inversion of Control)라고한다.

 

Java 웹 애플리케이션에서 IoC가 적용되는 예

Java 콘솔 애플리케이션이 아니라 웹 상에서 돌아가는 Java 웹 애플리케이션의 경우를 예로들면,

Java 콘솔 애플리케이션의 경우 main() 메서드가 종료되면 애플리케이션의 실행이 종료된다.

하지만 웹에서 동작하는 애플리케이션의 경우 클라이언트가 외부에서 접속해서 사용하는 서비스이기 때문에 main() 메서드가 종료되지 않아야 한다.

 

서블릿 컨테이너에는 서블릿 사양(Specification)에 맞게 작성된 서블릿 클래스만 존재하지 별도의 main() 메서드가 존재하지 않는다.

서블릿 컨테이너의 경우, 클라이언트의 요청이 들어올 때마다 서블릿 컨테이너 내의 컨테이너 로직(service() 메서드)이 서블릿을 직접 실행시켜 주기 때문에 main() 메서드가 필요없다.

이 경우에는 서블릿 컨테이너가 서블릿을 제어하고 있기 때문에 애플리케이션의 주도권은 서블릿 컨테이너에 있다.

IoC(제어의 역전)의 개념이 적용되어 있는 것이다.

 

DI(Dependency Injection)

IoC(제어의 역전)는 서버 컨테이너 기술, 디자인 패턴, 객체 지향 설계 등에 적용하게 되는 일반적인 개념인데 반해 DI(Dependency Injection)는 IoC 개념을 조금 구체화 시킨 것이라고 볼 수 있다.

Dependency는 '의존하는' Injection은 '주입' 이라는 뜻을 가지고 있다. 두 단어를 합쳐서 의미를 파악해보면 DI는 ‘의존성 주입’이라는 의미가 되는데 '의존성 주입'이 무엇인가?

 

의존성 주입

생성자를 통해서 어떤 클래스의 객체를 전달 받는 것을 ‘의존성 주입’ 이라고 한다.

클래스의 생성자로 객체를 전달 받는 코드가 있다면 ‘아, 객체를 외부에서 주입 받고 있구나. 의존성 주입이 이루어 지고 있구나’ 라고 생각하면 된다.

 

AOP(Aspect Oriented Programming)

AOP를 한글로 번역하면 관심 지향 프로그래밍 정도로 해석할 수 있다.

AOP라는 것은 애플리케이션의 핵심 업무 로직에서 로깅이나 보안, 트랜잭션 같은 공통 기능 로직들을 분리하는 것.

 

공통 관심 사항과 핵심 관심 사항

공통 관심 사항(Cross-cutting concern)애플리케이션을 개발하다보면 전반에 걸쳐 공통적으로 사용되는 기능들에 대한 관심사 이다.

핵심 관심 사항(Core concern)은 애플리케이션의 주목적을 달성하기 위한 핵심 로직에 대한 관심사이다.

 

예를 들어 커피 주문을 위한 애플리케이션을 보면, 고객에게 제공하는 메뉴를 구성하기 위해 커피 종류를 등록하는 것과 고객이 마시고 싶은 커피를 주문하는 기능은 애플리케이션의 핵심 관심 사항에 해당된다.

커피 주문 애플리케이션에 아무나 접속하지 못하도록 제한하는 애플리케이션 보안에 대한 부분은 애플리케이션 전반에 공통적으로 적용되는 기능이기 때문에 공통 관심 사항에 해당 된다.

애플리케이션의 핵심 로직에서 공통 기능을 분리하는 이유는

  • 코드의 간결성 유지
  • 객체 지향 설계 원칙에 맞는 코드 구현
  • 코드의 재사용

 

 

PSA(Portable Service Abstraction)

  • 객체지향 프로그래밍 세계에서 어떤 클래스의 본질적인 특성만을 추출해서 일반화 하는것을 추상화(Abstraction)라고 한다.
  • 클라이언트가 추상화 된 상위 클래스를 일관되게 바라보며 하위 클래스의 기능을 사용하는 것이 바로 일관된 서비스 추상화(PSA)의 기본 개념이다.
  • 애플리케이션에서 특정 서비스를 이용할 때, 서비스의 기능을 접근하는 방식 자체를 일관되게 유지하면서 기술 자체를 유연하게 사용할 수 있도록 하는 것을 PSA(일관된 서비스 추상화)라고 한다.
  • PSA가 필요한 주된 이유는 어떤 서비스를 이용하기 위한 접근 방식을 일관된 방식으로 유지함으로써 애플리케이션에서 사용하는 기술이 변경되더라도 최소한의 변경만으로 변경된 요구 사항을 반영하기 위함이다.

 

 

 

 

 

 

'Spring' 카테고리의 다른 글

[Spring MVC]JPA  (0) 2022.11.01
[Spring]JDBC란  (0) 2022.10.27
[Spring MVC] 서비스 계층  (0) 2022.10.25
[Spring MVC] API 계층  (0) 2022.10.24
Spring MVC의 동작 방식과 구성 요소  (0) 2022.10.22