Spring Framework (23.08.10)

·2023년 8월 10일
1

Spring

목록 보기
1/36
post-thumbnail

🌷 Framework vs Library

🌼 Framework

Frame(틀) + Work(일하다)

  • 개발자가 소프트웨어를 개발함에 있어 코드를 구현하는 개발 시간을 줄이고,
    코드의 재사용성을 증가시키기 위해 일련의 클래스 묶음이나 뼈대, 틀이 라이브러리 형태로 제공되는 것
  • 제어의 역전 개념이 적용된 대표적인 기술

🌼 Library

개발자가 만든 클래스들의 나열로, 다른 프로그램들에서 사용할 수 있도록 제공하는 방식

🌱 차이점

제어 흐름에 대한 주도성이 누구에게 / 어디에게 있는가에 있다.
즉, 어플리케이션의 Flow(흐름)을 누가 쥐고 있느냐에 달려 있다.


🌷 Framework

🌼 특징

  1. 개발자가 따라야 하는 가이드를 제공한다.
  2. 개발할 수 있는 범위가 정해져 있다.
  3. 개발자를 위한 다양한 도구, 플러그인들을 지원한다.

👍 장점

  • 개발 시간을 줄일 수 있음
  • 정형화 되어 있어 일정수준 이상의 품질을 기대할 수 있음
  • 유지 보수가 쉬움

👎 단점

  • 너무 의존하면 개발자들의 능력이 떨어져서 스스로 직접 개발하는 것이 어려워짐
  • 습득에 걸리는 시간이 오래 걸림

🌼 종류

구분설명종류
영속성
Framework
데이터의 저장, 조회, 변경, 삭제를 다루는 클래스 및
설정 파일들을 라이브러리화하여 구현한 프레임워크
- Mybatis
- Hibernate
자바
Framework
ava EE를 통한 웹 어플리케이션 개발에 초점을 맞추어
필요한 요소들을 모듈화 하여 제공하는 프레임워크
- Spring Framework
- 전자정부표준 - Spring
- Struts
화면 구현
Framework
Front-End를 보다 쉽게 구현할 수 있게 틀을
제공하는 프레임워크
- Bootstrap
- Foundation
- MDL
기능 및 지원
Framework
특정 기능이나 업무 수행에 도움을 줄 수 있는 기능을
제공하는 프레임워크
- Log4j
- JUnit 5
- ANT

🌷 Spring Framework

자바 플랫폼을 위한 오픈 소스 애플리케이션 프레임워크

  • 동적인 웹 사이트를 개발하기 위한 여러 가지 서비스를 제공하고 있음
  • 대한민국 공공기관의 웹 서비스 개발 시 사용을 권장하고 있는 전자정부 표준 프레임워크
    (Spring MVC Project 기반 프레임워크)의 기반 기술로서 쓰이고 있음
  • 공식 사이트 바로 가기

🌼 특징

🌱 IoC

제어의 역전 (Inversion of Control)

프로그램을 구동하는데 필요한 객체에 대한 생성, 변경 등의 관리를 프로그램을 개발하는 사람이 아닌 프로그램을 구동하는 컨테이너에서 직접 관리하는 것
-> 이때 생성된 객체 == Bean

IoC 컨테이너의 역할

  • 객체의 생명주기와 의존성을 관리
  • VO (DTO / POJO) 객체의 생성, 초기화, 소멸 등의 처리를 담당
  • 개발자가 직접 객체를 생성할 수 있지만 해당 권한을 컨테이너에 맡김으로써 소스 코드 구현의 시간을 단축

IoC 컨테이너와 Bean 객체

  • Bean (빈)
    - 스프링이 IoC 방식으로 관리하는 Class
    - 스프링이 직접 생성과 제어를 담당하는 객체

  • Bean Factory (빈 팩토리)
    - 스프링의 IoC를 담당하는 핵심 컨테이너
    - Bean을 등록, 생성, 조회, 반환하는 기능을 담당

  • ApplicationContext (애플리케이션 컨텍스트)
    - BeanFactory를 확장한 IoC 컨테이너
    - Bean을 등록하고 관리하는 기능은 BeanFactory와 동일하지만 스프링이 제공하는 각종 부가 서비스를 추가로 제공함

  • GenericXmlApplication Context
    - ApplicationContext 를 구현한 Class
    - 일반적인 XML 형태의 문서를 읽어 컨테이너 역할을 수행

  • Configuration metadata (설정 메타 정보)
    - ApplicationContext 또는 BeanFactory가 IoC를 적용하기 위해 사용하는 설정 정보
    - 설정 메타 정보는 IoC 컨테이너에 의해 관리되는 Bean 객체를 생성하고 구성할 때 사용

🌱 DI

의존성 주입 (Dependency Injection)

사용하는 객체를 직접 생성하여 만드는 것이 아니라 컨테이너가 빈의 설정 정보를 읽어와 자동으로 해당 객체에 연결하는 것

장점

  • 개발자가 작성해야 할 코드가 단순해진다.
  • 각 객체 간의 종속 관계(결합도)를 해소할 수 있다.

종류

  • Setter 메소드를 통한 의존성 주입
    : 의존성을 주입 받는 Setter 메소드를 만들고, 이를 통해 의존성을 주입
<bean id=“객체의 이름" class=“클래스 풀네임“>
    <property name=“name” value=“OOO”/>
    <property name=“name” ref=“OOO”/>
</bean>

- name 속성 : Class에서 선언한 필드 변수의 이름
- value 속성 : 단순 값 또는 Bean이 아닌 객체를 주입할 때 사용
- ref 속성 : Bean 이름을 이용해 주입할 Bean을 찾음
  • 생성자를 통한 의존성 주입
    : 필요한 의존성을 포함하는 클래스에 생성자를 만들고, 이를 통해 의존성을 주입
<bean id=“불러  객체" class=“클래스 풀네임“>
    <constructor-arg index=“0” value=“OOO”/>
    <constructor-arg name=“OOO” ref=“OOO”/>
</bean>

- Constructor 주입 방식은 새엉자의 파라미터를 이용하기 때문에 한번에 여러 개의 객체 주입 가능
- 필드 선언 순서에 따라 index 속성을 통해서도 접근 가능
  • 메소드를 통한 의존성 주입
    : 의존성을 입력받는 일반 메소드를 만들고 이를 통해 의존성을 주입

🌱 POJO 기반 프레임워크

(Plain Old Java Object)

  • 특정 기술이나 라이브러리의 내용을 상속받아 클래스를 구현하지 않고 일반적인 기본 기능만을 가진 순수한 자바 객체를 의미한다.
  • 특정 클래스에 종속되지 않으므로 자바의 객체지향적 설계가 쉬워지고, 코드길이 감소, 유지보수성 증가, 기존 Java API, 라이브러리 지원에 용이하다.

🌱 Spring AOP

(Aspect Oriented Programming)

  • 관점 지향 프로그래밍
  • 트랜잭션, 로깅, 보안 등 여러 모듈, 여러 계층에서 공통으로 필요로 하는 기능의 경우 해당 기능들을 분리하여 관리한다.

🔽 Spring AOP 자세히 알아보기👀 🔽
Spring AOP (23.09.01)

🌱 Spring JDBC

  • Mybatis나 Hibernate 등의 데이터베이스를 처리하는 영속성 프레임워크와 연결할 수 있는 인터페이스를 제공한다.

🌱 Spring MVC

  • MVC 디자인 패턴을 통해 웹 어플리케이션의 Model, View, Controller 사이의 의존 관계를 DI 컨테이너에서 관리하여 개발자가 아닌 서버가 객체들을 관리하는 웹 애플리케이션을 구축할 수 있다.

🌱 PSA

(Portable Service Abstraction)

  • 스프링은 다른 여러 모듈을 사용함에 있어 별도의 추상화 레이어를 제공한다.
    예를 들어 Spring JPA를 사용하여 추상화함으로써 실제 구현에 있어서 Hibernate를 사용하든 EclipseLink를 사용하든 개발자는 이 모듈의 의존 없이 프로그램에 집중할 수 있다.

🌼 구성 모듈


🌼 동작 구조

🌱 Spring 어플리케이션

🌱 Spring 웹


profile
풀스택 개발자 기록집 📁

1개의 댓글

comment-user-thumbnail
2023년 8월 10일

많은 도움이 되었습니다, 감사합니다.

답글 달기