차근차근 개발자 되기

Spring

89일차: Spring Framework 개념 / 환경 구축 / 기초_2021.10.25

wellow 2021. 10. 25. 21:54

 

목차

1.      Spring Framwork 개념

2.      Spring Framwork 환경 구축

3.      Spring MVC 프로젝트

4.      DI (Dependency Injection)

 

 

1. Spring Framwork 개념

 

1) Spring이란?

- 자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크로서 엔터프라이즈급 애플리케이션을 개발하기 위한 모든 기능을 종합적으로 제공하는 경량화된 솔루션

- 엔터프라이즈급 개발이란 기업을 대상으로 하는 개발로서, 대규모 데이터 처리와 트랜잭션이 동시에 여러 사용자로부터 행해지는 매우 큰 규모의 환경을 의미

- 객체의 생성 및 소멸 그리고 라이프 사이클을 관리하며 언제든 Spring 컨테이너로부터 필요한 객체를 가져와 사용 가능

 

2) Spring Framework 특징

경량 컨테이너(크기와 부하의 측면)로서 자바 객체를 직접 관리

제어 역행(IoC : Inversion of Control)

 - 애플리케이션의 느슨한 결합을 도모

의존성 주입(DI : Dependency Injection)

 - 각각의 계층이나 서비스들 간에 의존성이 존재할 경우 프레임워크가 서로 연결시켜준다.

관점지향 프로그래밍(AOP : Aspect-Oriented Programming)

 - 트랜잭션이나 로깅, 보안과 같이 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능을 분리하여 관리할 수 있다.

모델-뷰-컨트롤러 패턴

 - 웹 프로그램밍 개발 시 거의 표준적인 방식인 "Spring MVC"라 불리는 모델-뷰-컨트롤러(MVC) 패턴을 사용한다.

 

2. Spring Framework 환경 구축

 

- Spring Framework 환경 구축을 하는 방법은 두 가지가 있다.

① Eclipse에 STS(Spring Tool Suite) 프로그램을 plugin으로 추가해서 사용하는 방법

② STS 프로그램 다운로드 받아서 사용하는 방법

 

1) 이클립스에 플러그인 추가

- 이클립스 [Help] > [Eclipse Marketplace] > ‘sts’ 검색

- 검색 결과 화면에서 ‘Spring Tools 3 (Standalone Edition) 3.9.13.RELEASE’ 설치

- 플러그인 설치 후 [File] > [New] > [Other…]을 선택하면 Spring 메뉴 생성됨

 

 

2) STS 프로그램 다운로드

- 웹사이트(https://spring.io/tools)에서 STS 프로그램 다운

- 3점대 프로그램을 설치해야 Spring 프로젝트와 Spring Boot 프로젝트를 만들 수 있다.

 

3. Spring MVC 프로젝트

 

1) Spring MVC 프로젝트 생성

- 이클립스 [File] – [New] – [Project] 클릭

- Spring 메뉴에서 ‘Spring Legacy Project’ 선택하고 ‘Next’ 버튼 클릭

- Project name 설정하고, Templates 항목에서 ‘Spring MVC Project’ 선택 후 ‘Next’ 버튼 클릭

- 다운로드 창에서 ‘Yes’ 클릭

- top-level package 입력(도메인명 역순으로 입력)

 

 

 

2) Spring MVC 흐름도

- Spring 프로젝트를 실행시키면 web.xml 파일을 가장 먼저 실행하게 되는데, web.xml 파일에서 Dispatcher Servlet 클래스를 찾아간다.

- ModelAndView(높은 버전에서는 Model) 메소드는 model2 방식에서 request로 값을 공유하는 것과 같은 역할을 한다.(ex. model.addAttribute("serverTime", formattedDate ); )

- ViewResolver는 view 페이지 설정과 관련이 있는데, prefix는 view 페이지(jsp 파일)의 경로 값이, suffix에는 확장자(.jsp)가 설정되어 있다. (컨트롤러에서 return “home”; 으로 설정하면 home.jsp 파일로 이동)

 

 

 

4. DI (Dependency Injection)

 

1) 제어의 역행(Inversion of Control, IoC)과 의존성 주입(Dependency Injection, DI)

• IoC (Inversion of Control)

- 기존 사용자가 모든 작업을 제어하던 것을 특별한 객체(컨테이너)에 모든 것을 위임하여 객체의 생성부터 생명 주기 등 모든 객체에 대한 제어권이 넘어간 것

 

• DI (Dependency Injection)

- 의존성 주입이란 객체가 서로 의존하는 관계가 되게 의존성을 주입하는 것을 의미한다.

- 프로그래밍에서 모듈 간의 의존성을 모듈의 내부가 아닌 외부(컨테이너)에서 주입시킨다.

- 의존성 주입(DI)에는 ‘Constructor Injection’과 ‘Setter Injection’ 방식이 있다.

- 의존성 주입(DI)를 통해 모듈 간의 결합도가 낮아지고 유연성이 높아진다.

 

2) 기존 시스템

<인터페이스 상속을 하지 않는 경우>

- 애플리케이션에서 개발자가 직접 객체를 생성해서 사용한다.

- 애플리케이션에서 직접 클래스 객체를 생성해서 메소드를 사용하기 때문에 의존성이 너무 강하다. (tight coupling)

 

<인터페이스 상속을 하는 경우>

- 인터페이스를 사용함으로써 조금 느슨한 결합(loose coupling)으로 변환되어서 유연성을 제공할 수 있다.

- 인터페이스를 사용함으로써 조금 느슨한 결합을 하여도 여전히 인터페이스와 객체에 의존적이다.

 

3) IOC 방식 – DI (Dependency Injection 구현)

- Spring의 환경 설정 파일(ex. beans01.xml)에서 bean 객체를 생성하고, main 메소드가 있는 자바 클래스에서 호출한다.

- Bean 객체를 생성하는 환경 설정 파일에서는 <bean> 태그로 객체를 생성한다.

 (ex. <bean id=”mb” class=”sample03.MessageBeanKr” name=”a”></bean> )

 

생성자를 이용한 의존성 주입: Constructor DI (Dependency Injection)

- 생성자의 매개변수에 값을 전달하는 방식

- Sample04

 

② Setter 메소드를 이용한 의존성 주입: Setter DI (Dependency Injection)

- Setter 메소드를 생성하고, 메소드의 매개변수에 값을 전달하는 방식

- Sample05

 

스프링의 환경설정 파일 위치(ex. beans01.xml)

1) 같은 패키지: “패키지명/파일명”으로 설정(ex. "/sample07/beans07.xml")

2) resources 폴더: “classpath:파일명”으로 설정 (ex. "classpath:beans08.xml")

3) 프로젝트 디렉토리 하위: “파일명”으로 설정 (ex. "beans01.xml")

 

 

 

* Dynamic project 생성시 오류 해결

- 이클립스에 sts 플러그인 프로그램을 추가하면 Dynamic Web Project를 생성할 때 src와 WebContent 폴더가 자동으로 생성되지 않는 오류가 발생한다.

- 프로젝트 생성시 직접 폴더명을 설정해서 해결 가능하다.