토비의 스프링 Ver8

존스노우·2021년 12월 7일
0

스프링

목록 보기
9/22

스프링이란 무엇인가?

스프링이란 무엇인가? 만들어진 이유 존재, 목적 추구하는 가치?

단순히 IoC/DI 를 편리하게 적용하는 단계?

스프링의 정의

정의하기가 쉽지 않음.

자바엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크

  1. 애플리케이션 프레임워크

일반적인 라이브러니나 프레임워크는 특정 업무 분야나
한가지 특화된 기술에 목표를 가지고 있다.

But 스프링은 애플리케이션 프레임워크라는 특징이 있음

특정 계층 기술 업무 분야에 국한되지 않는다.
애플리케이션 전 영역을 포괄하는 범용적인 프레임 워크

애플리케이션 개발의 전 과정을 빠르고 편리하며 효율적으로 진행하는데 일차적인 목표

스프링의 기원 J2EE 기술 서적에 딸린 예제 코드

로드 존슨의 책에서는 항상 프레임 워크 기반으로 접근하라.

  1. 경량급

불필요하게 무겁지 않다.

서버 배치 :deploy

스프링은 단순한 톰캣이나 제티에서도 완벽하게 동작

가볍고 단순한 환경에서도 복잡한 EJB와 고가의 WAS를 갖추지 않아도 됨

  1. 자바 엔터프라이즈 개발을 편하게

엔터프라이즈 개발의 근본적인 문제점에 도전해서 해결책을 제시한다는 것

  1. 오픈소스

단점으로 지속적이고 안정적인 개발이 계속될지 불확실함

스프링의 목적

스프링은 도구 일뿐이지 목적을 이해하고 잘활용해야된다.

정의: 경량급 프레임워크인 스프링을 활용해서
엔터프라이즈 애플리케이션 개발을 편하게

엔터프라이즈 개발의 복잡함

엔터프라이즈 개발이 너무복잡해서 실패하는 프로젝트가 많음

근본적인 이유?

  1. 기술적인 제약조건과 요구사항이 계속 늘어남

엔터프라이즈 시스템이란. 서버에서 동작하며 기업과 조직의 업무를 처리해주는
시스템

순수 비즈니스 로직외에 고려할 사항이 많다.

  1. 엔터프라이즈 애플리케이션이 쿠현해야 할 핵심기능인
    비즈니스 로직의 복잡함이 증가 때문.

복잡함을 가증시키는 원인?

복잡함을 해결하려는 도전

제거될 수 없는 근본적인 복잡함

복잡함을 효과적으로 상대할 수 있는 전략과 기법이 필요함

가장 먼저 성격이 다른 두 가지 복잡함 분리.

비스니스 로직의 복잡함 / 기술저깅ㄴ 복잡함

실패한 해결책 :EJB

비침투적인 방식을 통한 효과적인 해결책 : 스프링

기술과 관련되 코드나 규약 등이 코드에 등장한 경우 침투적인 기술이라 함

비침투적인 기술 : 기술의 적용사실이 코드에 직접반영되지 않는다

스프링이 성공하는 이유가 비침투적인 기술 전략임.

복잡함을 상대하는 스프링의 전략

비즈니스 로직을 담은 애플리케이션 코드 / 엔터프라이즈 기술 처리 코드 분리

기술적 복잡함을 상대하는 전략

  1. 기술에 대한 접근 방식이 일관성이 없고 특정 환경에 종속적임

    서비스 추상화.

  2. 기술적인 처리를 담당하는 코드가 성격이 다른코드에 섞여서 등장한다 .

    AOP

    비즈니스와 애플리케이션 로직의 복잡함을 상대하는 전략

    애플리케이션의 주요기능 / 비즈니스 로직 코드 독립적으로 존재

    기술적인 부분과 느슨하게나마 연관되는 데이터 처리코드 웹/ 리모트 코드등을 제외 하면

    마지막으로 비즈니스 로직 코드를 다루는 코드가 남는다.

    비즈니스 로직은 자주 수정되고 중요한 핵심 부분.

    비즈니스 로직은 객체 지향기술 그자체..

    핵심도구: 객체지향 과 DI

    기술적인 복잡함을 효과적으로 다루게 해주는 기법 DI

    POJO 프로그래밍

    POJO 방식으로 개발된 애플리케이션 핵심 로직을 담은 코드를 제공한다. 엔터프라이즈 서비스 기술을..

    스프링 핵심 POJO

스프링 기술들을 가능 기술이라 함 PSA:Portable Service Abstraction

POJO란 무엇인가?

Plain Old Java Object

POJO의 조건

  1. 특정 규약에 종속되지 않는다.

객체지향 설계의 자유로운 적용이 가능한 오브젝트여야만함.

  1. 특정 환경에 종속되지 않는다.

특정 기술규약과 환경에 종속되지 않으면 모두 POJO는 아님

객체지향적 자바 언어의 기본에 충실하게 만들어 져야됨

POJO의 장점

POJO 가 될 수 있는 조건 그대로 장점이 됨.

POJO프레임워크

스프링 프레임워크와 하이버네이트를 대표적인 POJO 프레임 워크라 할수 잇음

스프링의 기술

스프링 개발자라면 스프링이 제공하는 PSA 만사용하는게아니라 제공하지않는 기술에대해서도 PSA 적용할 줄 알아야됨

엔ㅇ터프라이즈 서비스 추상화 ..

제어의 역전 / 의존관계 주입

DI 개방 폐쇄 원칙

DI 활용 법

  1. 핵심기능의 변경

  2. 핵심기능의 동적인 변경

오브젝트의 핵심 기능 자체를 바꾸기.

그것도 동적으로..

ex) DAO 를 여러개의 DataSource에 의존하게..

사용자별 독립적인 의존 오브젝트 두개..

  1. 부가기능의 추가

데코레이션 패턴..

  1. 인터페이스의 변경

어댑터 오브젝트..

서비스 추상화 방법임..

프록시

필요한 시점에서 실제 사용할 오브젝트 초기화 리소스를 준비하게 해주는 지연된 로딩을 적용하려면 프록시 필요

템플릿과 콜백

고정적인 작업 흐름과 그 사이에서 자주 바뀌는 부분을 분리해 만든다.

싱글톤과 오브젝트 스코프

스코프 제어...

테스트

애스펙트 지향 프로그래밍

AOP

OOP(객체 지향 프로그래밍 ) AOP는 배타적이 아니다

AOP 적용기법

  1. 첫 번째는 스프링과 같이 다이내믹 프록시를 이용하는 방법

기존 코드에 영향을 주지않고 부가기능을 적용하는 데코레이터 패턴을 으용

부가기능이 일어나는 부분은 메소드 호출이 일어나는 부분으로 제약..

보통 AOP 구현 방법은 다이내믹 프록시를 이용한 프록시 AOP qkdtlr

  1. 자바 언어의 한계를 넘어서는 언어의 확장을 이용하는 방법

AspectJ AOP 툴

다양한 조인포인트 제공.

메소드 호출뿐 아니라 인스턴스생성 필드 액세스 특정 호출 경로를 가진 메소드 호출

AOP 적용 단계

  1. 미리 준비된 AOP 이용

스프링이 미리 만들어서 제공하는 AOP 기능 가져다 쓰기

대표적인게 트랜잭션

@Configurable 애노테이션

  1. 전담팀을 통한 AOP 적용

    전체적인 정책 AOP 위주

  2. AOP의 자유로운 이용

세부적인 AOP 이용

포터블 서비스 추상화 (PSA)

POJO 코드가 기술에 직접 노출되어 만들어 지지 않아야 한다.

profile
어제의 나보다 한걸음 더

0개의 댓글