SpringBoot/FrameworkBasic
[Spring Framework Basic] Spring Framework 기본 개념
유쾌한고등어
2023. 5. 4. 02:08
[Spring Framework Basic] Framework의 개념
- 학습목표
- SW 재사용성을 높일 수 있는 방안에 대해 이해한다.
- 디자인패턴과 프레임워크의 관련성에 대해 이해한다.
- 프레임워크 구성요소와 종류에 대해 이해한다.
- SW재사용성을 높이는 방법
1. Copy & Paste
2. Method (function)
3. Class (Inheritance)
4. AOP (관심모듈 분리)
- 디자인패턴
- 프로그램 개발에서 자주 나타나는 과제를 해결하기 위한 방법 중 하나.
- 이를 통해 요구사항 변경에 대한 Source Code 변경을 최소화
- 범용적인 코딩 스타일을적용
- 프레임워크
- 비기능적 요구사항을 만족하는 구조와 구현된 기능을 안정적으로 실행하도록 제어해주는 잘 만들어진 구조의 라이브러리 덩어리
- 비기능적인 요소들을 초기 개발 단계마다 구현해야 하는 불합리함을 극복해준다.
- 기능적 요구사항에 집중할 수 있게 한다.
- 반복적으로 발견되는 문제를 해결하기 위한 특화된 solution을 제공한다.
- 디자인패턴과 프레임워크의 관련성
- 프레임워크!=디자인패턴
- 디자인패턴은 프레임워크의 핵심적 특징
- 프레임워크를 사용하는 애플리케이션에 그 패턴이 적용된다는 특징
- 디자인패턴은 구조적 가이드라인이 되어주지만 구현된 기반 코드를 제공하지않는다.
- 프레임워크는 디자인 패턴과 함께 패턴이 적용 된 기반 클래스 라이브러리를 제공해서 구조적 틀과 구현코드를 함께 제공한다.
- 개발자는 프레임워크의 기반코드를 확장하여 사용하면서 자연스럽게 그 프레임워크에서 사용된 패턴을 적용할 수 있게 된다.
- 프레임워크 구성요소
- IOC (Inversion of Control)
- 제어의 역전. 인스턴스 생성부터 소멸까지 인스턴스 생명주기 관리를 개발자가 아닌 컨테이너가 대신 해준다.
- 컨테이너 역할을 해주는 프레임워크에게 제어하는 권한을 넘겨서 개발자의 코드가 신경써야 할 것을 줄이는 전략
- Class Library
- 기술적인 구현을 라이브러리 형태로 제공
- Design pattern
- 디자인 패턴 + 라이브러리 = 프레임워크
[Spring Framework Basic] Spring Framework 개요
- 학습목표
- Spring Framework의 정의와 전략에 대해 이해한다.
- Spring Framework의 특징에 대해 이해한다.
- Spring Framework의 기능요소에 대해 이해한다.
- Spring Framework란 ?
- JAVA 엔터프라이즈 개발을 편하게 해주는 범용적 프레임워크
- Low Level(보안,인증,TX 처리) 에 많이 신경쓰지 않고 Business Logic 개발에 전념할 수 있도록 해준다.
- 단순한 웹컨테이너에서도 엔터프라이즈 개발의 고급기술을 대부분 사용가능
- Spring 삼각형
- 엔터프라이즈 개발의 복잡함을 상대하는 Spring의 전략
- Portable Service Abstraction, DI, AOP, POJO
- Portable Service Absctranction(서비스 추상화) : 기술적 복잡함은 추상화를 통해 Low Level의 기술 구현 부분과 기술을 사용하는 인터페이스로 분리
- DI(Dependency Injection) : 의존관계 주입.Spring은 객체지향에 충실한 설계가 가능하도록 단순한 객체 형태로 개발할 수 있고, DI는 유연하게 확장 가능한 객체를 만들어 두고 그 관계는 외부에서 다이내믹하게 설정해준다.
- AOP(Aspect Oriented Programming) : 애플리케이션 로직을 담당하는 코드에 남아 있는 기술 관련 코드를 분리해서 별도의 모듈로 관리하게 해주는 강력한 기술이다.
- POJO(Plain Old Java Object) : POJO는 객체지향 원리에 충실하면서, 환경이나 규약에 종속되지않고 필요에 따라 재활용할 수 있는 방식으로 설계된 객체이다.
- SpringFramework 특징
- Spring 컨테이너는 Java 객체의 LifeCycle을 관리하며, Spring 컨테이너로부터 필요한 객체를 가져와 사용할 수 있다.
- DI(Dependency Injection)을 지원한다.
- AOP(Aspect Oriented Programming) 을 지원한다. 트랜잭션이나 로깅, 보안과 같이 공통적으로 필요로 하는 모듈들을 실제 핵심 모듈에서 분리해서 적용할 수 있다.
- POJO(Plain Old Java Object) 지원한다. Spring 컨테이너에 저장되는 JAVA 객체는 특정한 인터페이스를 구현하거나, 특정 클래스를 상속받지 않아도 된다.
- 트랜잭션 처리를 위한 일관된 방법을 지원한다. ex_) JDBC, JTA
- 영속성(Persistence)과 관련된 다양한 API를 지원한다. ex_) Mybatis, Hibernate
- Maven이란?
- 라이브러리 관리 + 빌드 툴
- 편리한 Dependency Library 관리
- 여러 프로젝트에서 프로젝트 정보나 jar파일들을 공유하기 쉬움
- 모든 프로젝트의 빌드 프로세스를 일관되게 가져갈 수 있음
- Maven 프로젝트를 생성하면 pom.xml 파일이 생성된다.
[Spring Framework Basic] IOC 컨테이너와 DI
- 학습목표
- IOC(Inversion Of Control) 에 대하여 이해한다.
- DI(Dependency Injection) 에 대하여 이해한다.
- Spring DI 컨테이너에 대하여 이해한다.
- IOC 개념
- IOC(제어권의 역전)이란, 객체의 생성 / 생명주기의 관리까지 모든 객체에 대한 제어권이 바뀌었다는 것을 의미한다.
- 프레임워크에서 제공하는 컨테이너가 객체를 생성해서 코드에 주입한다.
- IOC 컨테이너
- 스프링 프레임워크도 객체에 대한 생성 및 생명주기를 관리할 수 있는 기능을 제공한다. (즉, IOC 컨테이너 기능을 제공)
- IOC 컨테이너는 객체의 생성을 책임지고 의존성을 관리한다.
- POJO의 생성, 초기화, 서비스, 소멸에 대한 권한을 가진다.
- 개발자들이 직접 POJO를 생성할 수 있지만, 컨테이너에게 맡긴다.
- IOC 의 분류
- IOC에는 DL (Dependency Lookup) / DI (Dependency Injection)가 있다.(DL은 특정 컨테이너에 종속되기 때문에 주로 DI를 쓴다.)
- DL (Dependency Lookup) : 의존성 검색. 저장소에 저장되어 있는 Bean에 접근하기위해 컨테이너가 제공하는 API를 이용하여 Bean을 Lookup 하는것.
- DI (Dependency Injection) : 의존성 주입. 각 클래스간의 의존관계를 빈 설정(Bean Definition) 정보를 바탕으로 컨테이너가 자동으로 연결해주는것.
- DI는 Setter Injection, Constructor Injection, Method Injection로 분류 가능하다.
- DI의 개념
- 각 클래스간의 의존관계를 빈 설정 정보를 바탕으로 컨테이너가 자동으로 연결해주는 것을 말한다.
- 개발자들은 단지 빈 설정파일에서 의존관계가 필요하다는 정보를 추가하면 된다.
- 객체 레퍼런스를 컨테이너로부터 주입받아서, 실행시에 동적으로 의존관계가 생성된다.
- 컨테이너가 흐름의 주체가 되어 애플리케이션 코드에 의존관계를 주입해 주는 것이다.
- EX_ ) bean 설정파일에 특정 객체 관리를 부탁하고, 이를 주입받아 쓰는 식이다.
- DI의 장점
- 코드가 단순해진다.
- 컴포넌트 간의 결합도가 제거된다.
- Spring DI 컨테이너의 개념
- Spring DI 컨테이너가 관리하는 객체를 빈(bean)이라고 하고, 이 빈(bean)들을 관리한다는 의미로 컨테이너를 빈 팩토리(beanFactory)라고 부른다.
- BeanFactory와 ApplicationContext
- BeanFactory
- Bean을 등록,생성,조회,반환 관리한다.
- 보통은 BeanFactory를 바로 사용하지 않고, 이를 확장한 ApplicationContext를 사용한다.
- getBean() 메소드가 정의되어 있다.
- Application Context
- Bean을 등록, 생성, 조회, 반환 관리하는 기능은 BeanFactory와 같다.
- Spring의 각종 부가 서비스를 추가로 제공한다.
- Spring이 제공하는 ApplicationContext 구현 클래스가 여러가지 종류가 있다.
- ApplicationContext가 DI Container의 역할을 한다.
출처 T아카데미