# Spring

## 스프링 프레임워크란?

<mark style="color:green;">**자바 엔터프라이즈 개발을 위한 오픈 소스 애플리케이션 프레임워크**</mark>입니다.

간단히 스프링이라고 불리며 동적인 웹 사이트를 개발하기 위한 서비스를 제공하고 있습니다.

​

-엔터프라이즈: 개별 사용자가 아닌 기업을 대상으로 하는 개발, 수많은 데이터처리와 트랜잭션이 동시에 여러 사용자로부터 행해지는 큰 규모의 환경을 말합니다

​

-오픈 소스: 누구나 자유롭게 소스코드를 수정하고 공유하며 진행 중인 프로세스에 기여할 수 있도록 합니다

​

-프레임워크: 개발 설계의 기본이 되는 뼈대나 구조입니다

개발자는 각 개개인의 능력차이가 크고, 따라서 개발자 구성에 따라서 프로젝트의 결과 차이가 큽니다.

\=> 이러한 상황을 극복하기 위한 코드의 결과물이 '프레임워크' 입니다.

프레임워크 이용 한다는 의미 : 프로그램의 기본 흐름이나 구조를 정하고, 모든 팀원이 이 구조에 자신의 코드를 추가하는 방식으로 개발 한다.

​

프레임워크를 사용하면 크게 다음 3가지의 장점이 있습니다.

1\. 어느정도 완성한 상태에서 필요한 부분을 조립하는 형태의 개발이 가능하다.

2\. 일정한 품질이 보장된 결과물을 얻을 수 있다.

3\. 개발 시간을 단축할 수 있다.

​

프레임워 워크 종류 :

SpringMVC(Java의 웹 프레임워크),

Django(Python의 웹 프레임워크),

Flask(Python의 마이크로 웹 프레임워크),

Ruby on rails(Ruby의 웹 프레임워크),

.NET Framework(C#),

Express.js, Next.js (Node.js 자바스크립트 웹 프레임워크) 등등.



### 전자정부 ( 스프링프레임워크 )

{% embed url="https://www.egovframe.go.kr/home/sub.do?menuNo=14" %}

## 스프링 프레임워크의 특징

·경량 컨테이너

자바 객체를 직접 관리합니다.

각각의 객체 생성, 소멸과 같은 생명주기를 관리하며 스프링으로부터 필요한 객체를 얻어옵니다

​

·제어의 역전 IOC(Inversion of control)

일반적으로 사용자가 코드의 흐름을 주도하며 객체를 구성하고 모든 작업을 제어했다면,

IOC는 사용자가 아닌 특별한 객체가 제어 권한을 위임받아 각 객체와 흐름을 제어하는 것입니다.



<figure><img src="https://3814826491-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJyHOwztPxBT3bLpisjCt%2Fuploads%2FWXrTwcO7HHrqPXrRa8bk%2F11.jpg?alt=media&#x26;token=c16443b2-c938-4fd5-8579-e7dfe0dd33fa" alt=""><figcaption></figcaption></figure>

→코드 간의 중복을 줄여 무거운 서버 배치의 부담을 줄이며, 유연한 코드 작성과 유지 보수 등을 편하게 할 수 있습니다

​

IOC를 구성하는 요소에는 DI와 DL이 있습니다.



### \*DI(Dependency Injection) : 의존성 주입

각 객체가 서로 의존하는 관계가 될 수 있도록 의존성을 주입합니다. 각각의 계층이나 서비스들 간에 의존성이 존재할 경우 빈(Bean) 설정 정보를 바탕으로 컨테이너가 자동으로 연결해 줍니다

​

### \*DL(Dependency Lookup) : 의존성 검색

컨테이너에서 객체를 관리하기 위해 별도의 저장소에 빈(bean)을 저장하고 개발자들은 컨테이너에서 제공하는 API를 이용하여 사용하고자 하는 빈(bean)을 검색합니다

#### ​\*Bean : 스프링 컨테이너가 관리하는 자바 객체



### · POJO(Plain Old Java Object)

단순 자바 오브젝트(평범한 자바 객체)입니다. 의존성이 없으며 간결한 코드를 작성할 수 있도록 도와줍니다.

특별한 클래스나 인터페이스를 구현하지 않아도 되기 때문에 자유롭게 코드를 작성할 수 있는데요,

스프링 프레임워크에서 POJO를 사용하면 다른 기술과의 의존성이 줄어들어 테스트 및 유지 보수가 편리한 유연성을 가집니다.

(우리가 만들었던 DTO도 POJO 방식으로 작성됨)



> "POJO란 객체지향적인 원리에 충실하면서, 환경과 기술에 종속되지 않고 필요에 따라&#x20;
>
> 재활용될 수 있는 방식으로 설계된 오브젝트이다"

### · AOP(Aspect-Oriented Programming)

관점 지향 프로그래밍을 의미합니다

로킹, 트랜잭션, 보안 등 다루기 어려운 기능을 프로그램의 핵심 로직과 분리하여 관리하는 방법을 제공합니다

따라서 핵심 로직을 변경하지 않고 부가기능을 추가할 수 있기 때문에 개발 및 유지 보수가 용이해지며 코드의 재사용 성과 가독성도 높이고 전체적인 구조의 개선이 가능해집니다.





## 스프링 프레임워크 사용이유(장점)

​정형화 되어 있기 때문에 일정수준의 품질을 기대 할 수 있습니다.

개발 후 유지보수 및 기능의 확장성에서도 품질을 보장합니다.

'전자표준 프레임워크'기 때문에 해당 프레임워크의 수요가 큽니다.(국내상황)

​

## 스프링 프레임워크 단점

​처음 설정이 복잡하다.( 스프링부트는 간단 )

분명 많은 기능을 제공해서 편리하지만, 이 기능들을 습득하기위해 상당한 노력과 시간이 필요합니다.

​



우리는 단계별로 Spring legacy 를 통해 기본적인 스프링에 대해서 배우고

Spring Boot를 활용해 간단한 웹 MVC 개발을 해볼 예정



스프링 기술 자체에 매몰되기 보다는 사용법에 초점을 맞춰서

오래된 스프링 기술, 마이너한 스프링 기술에 대한 부분은 다루지 않을 예정&#x20;





