본문 바로가기
Spring framework

[Spring Framework Basic] 1. Framework 개념

by _은하별사탕_ 2020. 11. 29.

 

! SKPlanet Tacademy 의 강의를 요약하고 덧붙인 내용정리 !

 

www.youtube.com/watch?v=j5WlADp5f_o

 


SW 재사용 방안들

 

1. 복사 & 붙여넣기  


2. 메서드 호출


- 1번보다 진보된 방식이지만 작업 영역간의 결합도 문제는 여전히 존재 (메서드명, 리턴타입, 다큐면트 갯수, 타입)

 

3. 클래스 재사용(상속)


- 2번보다 진보된 방식이지만 2번과 같은 문제 존재


4. AOP(Ascpect Oriented Programming)


* 관심의 분리(Separation of Concerns)

 

- 이미지 설명

 

핵심 관심 모듈 : Business 로직

 

횡단 관심 모듈 : 기능적 로직

 

위빙 : 두 모듈이 합쳐지는 과정

 

 

- AOP가 핵심 관심 모듈의 코드를 직접 건드리지 않고 필요한 기능이 동작하도록 하는 데는 위빙(Weaving)이라고 하는 특수한 작업이 필요

즉, AOP에서 위빙 작업을 통해 핵심모듈 사이 사이에 필요한 횡단 관심 코드가 동작하도록 엮어지게 만듦

 

 

- AOP는 OOP를 더욱 OOP 답게 만들어 줄 수 있음

(OOP를 대체하는 것이 아니라 support)

- AOP는 OOP 뿐만 아니라 기존의 절차적 프로그래밍에도 적용됨

 

 

 

디자인 패턴과 프레임워크의 관련성

 

- 디자인 패턴의 정의 :

 

프로그램 개발에서 자주 나타나는 과제를 해결하기 위한 방법 중 하나로,

소프트웨어 개발과정에서 발견된 Know-How를 축적하여 이름을 붙여

이후에 재사용하기 좋은 형태로 특정 규약을 묶어서 정리한 것.

 

 

- 디자인 패턴을 사용하는 이유 :

 

1. 요구 사항은 수시로 변경 -> 요구 사항 변경에 대한 Source Code 변경 최소화

 

2. 여러 사람이 같이 하는 팀 프로젝트 진행 -> 범용적인 코딩 스타일을 적용

 

3. 상황에 따라 인수인계하는 경우도 발생 -> 직관적 코드를 사용

 

 

- 프레임워크의 정의 :

 

비기능적(Non-Funtional) 요구사항(성능, 보안, 확장성, 안정성 등)을 만족하는 구조

구현된 기능을 안정적으로 실행하도록 제어해주는 잘 만들어진 구조의 라이브러리의 덩어리

 

 

프레임워크는 애플리케이션들의 최소한의 공통점을 찾아 하부 구조를 제공함으로써

개발자들로 하여금 시스템의 하부 구조를 구현하는데 들어가는 노력을 절감하게 해줌

 

 

- 프레임워크를 사용하는 이유

 

1. 비기능적인 요소들을 초기 개발 단계마다 구현해야하는 불합리함을 극복해줌

 

2. 기능적(Functional) 요구사항에 집중할 수 있도록 해줌

 

3. 디자인 패턴과 마찬가지로 반복적으로 발견되는 문제를 해결하기 위한 특화된 Solution 제공

 

 

- 디자인 패턴과 프레임워크의 관련성

 

디자인 패턴은 프레임워크의 핵심적인 특징이고, 프레임워크를 사용하는 애플리케이션에

그 패턴이 적용된다는 특징을 가지고 있다. 하지만 프레임워크는 디자인 패턴이 아니다.

 

디자인 패턴은 애플리케이션을 설계할 때 필요한 구조적인 가이드라인이 되어줄 수는 있지만

구체적으로 구현된 기반코드를 제공하지 않는다.

 

프레임워크는 디자인 패턴과 함께 패턴이 적용된 기반 클래스 라이브러리를 제공해서

프레임워크를 사용하는 구조적인 틀과 구현코드를 함께 제공한다.

 

 

 

프레임워크의 구성 요소와 종류

 

1. IoC (Inversion of Control)

 

- IoC란 "제어의 역전" 즉, 인스턴스 생성부터 소멸까지의 인스턴스 생명주기 관리를 개발자가 아닌

컨테이너가 대신 해준다는 뜻임.

 

즉, 컨테이너 역할을 해주는 프레임워크에게 제어하는 권한을 넘겨서 개발자의 코드가 신경 써야할 것을 줄이는 전략

 

 

 

- 프레임워크의 동작원리를 제어흐름이 일반적인 프로그램 흐름과 반대로 동작하므로 IoC라고 설명함

 

- Spring 컨테이너는 IoC를 지원하며, 메타데이터(XML 설정)를 통해 beans를 관리하고

어플리케이션의 중요부분을 형성함

 

- Spring 컨테이너는 관리되는 bean들을 의존성주입(Dependency Injection)을 통해 IoC를 지원함

 

 

2. Class Library

 

- 프레임워크는 특정 부분의 기술적인 구현을 라이브러리 형태로 제공한다.

 

Class Library라는 구성요소는 프레임워크의 정의 중 하나인 "Semi Complete(반제품)"이다

라고 해석하게 만들었다

 

 

 

- 라이브러리와 프레임워크의 차이점

 

1. 프레임워크와 라이브러리를 구분하는 방법은 실행제어가 어디서 일어나는 가에 달려있다.

 

2. 라이브러리는 개발자가 만든 클래스에서 직접 호출하여 사용하므로

실행의 흐름에 대한 제어를 개발자 코드가 관장하고 있다.

 

3. 프레임워크는 반대로 프레임워크에서 개발자가 만든 클래스를 호출하여 실행의 흐름에 대한 제어를 담당한다.

 

 

3. Design Pattern

 

" 디자인 패턴 + 라이브러리 = 프레임워크 "

 

- 프레임워크는 디자인 패턴과 그것이 적용된 기반 라이브러리의 결합으로 이해할 수 있다

프레임워크의 라이브러리를 살펴볼 때도 적용된 패턴을 주목해서 살펴 본다면 그 구성을 이해하기 쉽다

특히 프레임워크를 확장하거나 커스터마이징 할 때는 프레임워크에 적용된 패턴에 대한 이해가 꼭 필요하다

 

- 프레임워크 종류

* 아키텍쳐 설정 = 사용하는 프레임워크의 종류 + 사용전략