Framework 탄생 전
- SW 재사용성을 높일 수 있는 방안들
- copy & paste
- 자주 사용되는 유사한 기능들을 모아 메소드로 정의하여 재사용(메소드 호출)
- 복사, 붙이기보다는 진보된 방식이지만 작업 영역 간의 결합도(Coupling) 문제는 여전히 존재
- 클래스의 재사용(상속)
- AOP (Aspect Oriented Programming)
디자인 패턴
- 프로그램 개발에서 자주 나타나는 과제를 해결하기 위한 방법 중 하나로 소프트웨어 개발과정에서 발견한 노하우를 축적하여 이름을 붙여 이후에 재사용하기 좋은 형태로 특정 규약을 묶어서 정리한 것
- 이 용어를 소프트웨어 개발영역에서 구체적으로 처음 제시한 곳은 GoF(Gang of Four)라 불리는 네 명의 컴퓨터 과학 연구자들이 쓴 서적 Design Patterns: Elements of Reusable Object Oriented Software이다.
디자인 패턴을 사용하는 이유
- 요구사항은 수시로 변화하기 때문에 요구사항 변경에 대한 소스코드 변경 최소화 필요
- 여러 사람이 같이 하는 팀 프로젝트 진행에 범용적인 코딩 스타일 필요
- 인수인계 상황 발생 경우 직관적인 코드 사용 필요
프레임워크의 정의
- 비기능적(Non-functional) 요구사항(성능, 보안, 확장성, 안정성 등)을 만족하는 구조와 구현된 기능을 안정적으로 실행하도록 제어해주는 잘 만들어진 구조의 라이브러리 덩어리
- 프레임워크는 애플리케이션들의 최소한의 공통점을 찾아 하부구조를 제공함으로써 개발자들로 하여금 시스템의 하부구조를 구현하는데 들어가는 노력을 감소시켜준다. → Business Logic에 좀 더 집중할 수 있다.
디자인 패턴 + 프레임워크의 조합
- 디자인 패턴은 프레임워크의 핵심적인 특징이고 프레임워크를 사용하는 애플리케이션에 그 패턴이 적용된다는 특징을 가지고 있다.
- 디자인 패턴은 애플리케이션을 설계할 때 필요한 구조적인 가이드라인이 되어줄 수 있지만 구체적인 구현된 기반 코드를 제공하지는 않는다.
- 프레임워크는 디자인 패턴과 함께 제공해서 프레임워크를 사용하는 구조적인 틀과 구현 코드의 패턴이 적용된 기반 클래스 라이브러리를 함께 제공한다.
- 개발자는 프레임워크의 기반 코드를 확장하여 사용하면서 자연스럽게 그 프레임워크에서 사용된 패턴을 적용할 수 있게 된다.
라이브러리란?
- 프레임워크는 특정 부분의 기술적인 구현을 라이브러리 형태로 제공한다
- Class Library는 프레임워크의 정의 중 하나인 Semi Complete (반제품)이다.
라이브러리 vs 프레임워크
특징 | 프레임워크 | 라이브러리 |
유저코드의 작성 | 프레임워크 클래스를 서브클래싱해서 작성 | 독립적으로 작성 |
호출흐름 | 프레임워크 코드가 유저코드 호출 | 유저코드가 라이브러리 호출 |
실행흐름 | 프레임워크가 제어 | 유저코드가 제어 |
객체의 연동 | 구조프레임워크가 정의 | 독자적으로 정의 |
Spring Framework란?
- Rod Johnson이 만든 오픈 소스 프레임워크로 Java 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크이다.
- 복잡한 엔터프라이즈 애플리케이션 개발을 겨냥해서 탄생
- 2002년 책을 통해 소개
- Ejb 기반으로 개발을 하지 않고 POJO 기반으로 개발을 하더라도 가볍고 제어가 가능한 상호 관련이 적은 AOP를 지원하고 컨테이너를 통해 라이프사이클을 관리하고 xml 기반으로 컴포넌트를 개발할 수 있도록 지원해주는 프레임워크이다.
- Spring은 경량의 제어 역행과 관점 지향 컨테이너 프레임워크이다.
- 경량: 전체 스프링의 크기는 1MB 남짓한 하나의 jar 파일, 스프링에 의해 발생하는 부하는 무시해도 되는 부분
- 관점 지향: 스프링은 관점지향 프로그래밍을 위한 풍부한 지원을 한다.
- 제어 역행: 제어역행(IoC)라는 기술을 통해 애플리케이션의 느슨한 결합을 도모한다.
- 컨테이너: 애플리케이션 객체의 생명 주기와 설정을 포함하고 관리한다는 점에서 스프링은 일종의 컨테이너이다.
Spring Framework 구성 기능 요소
- Spring은 필요한 기능을 모듈로 제공하고 있기 때문에 필요한 모듈만 가져다 사용하면 된다. 기본 모듈은 Spring-Context
- 필요한 모듈은 pom.xml 문서에 등록하여 의존관계에 해당하는 모든 라이브러리를 한번에 관리할 수 있다.
'TIL > BackEnd' 카테고리의 다른 글
JPA - Oracle 데이터베이스 생성 (0) | 2023.05.08 |
---|---|
Transaction (0) | 2023.05.04 |
[Spring] 예외처리: @ExceptionHandler, SimpleMappingExceptionResolver (0) | 2023.04.27 |
@Autowired와 @Value를 통한 주입의 차이 (0) | 2023.04.26 |
[Spring] IoC & DI (0) | 2023.04.25 |