본문 바로가기
수업 일지/Spring

60일차 - [Spring] 스프링 설치/스프링 Bean 등록(XML)

by 쿠쿠씨 2022. 4. 4.
반응형

디자인 패턴

소프트웨어 개발 노하우를 규칙과 형식으로 정리한 것입니다.

코드의 반복을 최소화할 수 있고 재사용을 효율적으로 하는 등의 장점이 있습니다.

MVC : Model, View, Controller

 

프레임 워크(Framework)

애플리케이션 개발 시 자주 사용되는 일반적인 기능을 미리 만들어서 제공합니다.

필요한 부분을 수정 또는 추가합니다.

여러 디자인 패턴을 라이브러리(클래스의 모음) 형태로 제공합니다.

 

스프링 프레임워크(Spring Framework)

Java EE를 사용하는 애플리케이션 개발을 단순하게 해주는 오픈소스 프레임워크입니다.

IoC(Inversion of Control, 역제어) : 일반적인 프로그램 흐름과 제어의 흐름이 다릅니다.

DI(Dependency Injection, 의존관계 주입) : 의존 객체 생성 대신 외부에서 의존 객체를 주입받습니다.

 

스프링 설치

1. JAVA 11을 다운로드합니다. (환경 변수 설정)

2. spring.io 에서 sts(spring tool suite) 3.9.18 버전을 다운로드합니다.

 1) spring.io 에서 [Projects] - [Spring Tools 4]를 클릭합니다.

 

 2) 아래로 스크롤하여 [Spring Tool Suite 3 Wiki]를 클릭합니다.

 

3) 운영체제에 맞는 파일을 다운로드합니다.

 

3. 다운받은 파일을 한글 경로명이 없는 위치에서 알아서 풀기합니다.

 

프로젝트 시작

1. 프로젝트 생성

[File] - [New] - [Spring Legacy Project]를 선택합니다.

 

Templates : [Simple Spring Maven]을 선택하고 [Finish]를 클릭합니다.

 

2. Maven 프로젝트로 변환

프로젝트를 우클릭하고 [Configure] - [Convert to Maven Project]를 선택합니다.

 

3. Spring Project Nature 추가

프로젝트를 우클릭하고 [Spring] - [Add Spring Project Nature]을 선택합니다.

 

4. Build Path : java 11 라이브러리 설정

프로젝트를 우클릭하고 [Build Path] - [Configure Build Path...]을 선택합니다.

 

[Libraries] 탭을 선택하고 JRE System Library 를 선택한후 [Edit...] 버튼을 누릅니다.

 

jdk 11버전을 선택하고 [Finish] -[Apply and Close] 버튼을 누릅니다.

 

5. pom.xml에 태그 추가하기

pom.xml에 dependencies와 build 태그 내용을 작성합니다.

 

6. src/main/resources '소스 폴더' 만들기

프로젝트를 우클릭 하고 [New] - [Source Folder]를 선택합니다.

 

폴더 이름을 src/main/resources 로 하고 [Finish] 버튼을 클릭합니다.

 

하위에 META-INF/spring '폴더'를 만듭니다.

 

클래스의 의존관계

3개의 클래스를 작성하여 각각 역할에 따른 메소드를 실행합니다.

 사용자 요청 controller → service → dao

 

controller : 사용자의 요청을 직접 받아 처리(제어)하는 클래스

service : 사용자의 요청에 따른 비지니스 로직을 처리하는 클래스

dao : 데이터베이스의 SQL 명령을 실행하는 메소드로 구성된 클래스

 

예제

BuyController 클래스

private 접근권한으로 클래스의 프로퍼티 타입 변수를 선언합니다. (BuyService 타입)

 → 의존관계가 생깁니다.

프로퍼티에 값을 참조할 때 1) 생성자 2) setter 를 사용합니다.

 → 인자를 이용하여 의존관계를 주입합니다. (DI, Dependency Injection)

 

BuyService 클래스

 

BuyDao 클래스

실행 - Main 클래스

자바에서는 의존관계를 주입하기 위해 객체를 생성합니다.

BuyDao 객체를 생성하여 BuyService 객체를 생성하는 데 인자로 대입합니다. (의존관계 주입)

BuyService 객체를 BuyControll 객체를 생성하는 데 인자로 대입합니다. (의존관계 주입)

위와 같이 객체를 생성하고 의존관계를 설정하는 것을 객체들의 강한 결합이라고 합니다.

 

실행 결과

 

Spring에서 처리하는 의존관계

스프링 프레임워크는 의존관계 주입을 Spring에서 관리하는 방법으로 합니다.

스프링에서는 자바 객체를 Bean(빈)이라고 합니다.

 

스프링 컨테이너

스프링 bean의 생성과 소멸(life cycle)을 관리합니다.

스프링 컨테이너로부터 필요한 bean을 가져와 사용합니다.

 

DI(Dependency Injection, 의존관계 주입)

클래스 간의 의존관계를 bean 설정 정보를 이용하여 자동으로 주입합니다.

스프링 컨테이너가 동작하여 실행합니다.

1) xml 설정 파일 2) 어노테이션 의 방법으로 bean 정보를 다룹니다.

 

XML 파일로 Bean 등록

스프링에서는 xml 파일에 빈 정보를 저장합니다.

 

ApplicationContext 인터페이스

BeanFactory 인터페이스의 확장 인터페이스입니다.

스프링 컨테이너의 기능들을 정의하고 있습니다.

 

ClassPathXmlApplicationContext 클래스

ApplicationContext 인터페이스의 구현체입니다.

자바 클래스 경로에서 XML로 된 빈 설정 파일을 찾아 읽어와 빈을 생성합니다.

 

예제1 : 생성자로 의존관계 주입(<constructor-arg>)

1. spring 폴더에서 [New] - [Spring Bean Configuration File]을 선택하여 xml 파일을 생성합니다.

 

2. xml 파일의 <beans> 태그 안에 <bean> 태그로 자바 빈에 대한 정보를 작성합니다.

<bean>

class 속성에는 객체를 생성할 클래스명을 지정하며, 패키지명을 반드시 표기합니다.

id 속성은 변수명 역할의 식별자입니다. 빈 컨테이너에서 객체를 꺼낼 때 사용합니다.

<constructor-arg>

ref 속성값은 생성자에 인자로 주입할 bean의 id입니다.

value 속성값은 생성자에 인자로 주입할 값입니다.

 

3. 실행 : ClassPathXmlApplicationContext 클래스로 xml 파일을 읽어와 빈을 생성합니다.

ClassPathXmlApplicationContext( )의 인자는 "classpath : xml 파일 경로"입니다.

위에서 만들어진 빈 중에서 id가 controller인 빈을 가져와 변수에 참조합니다.

getBean 메소드의 리턴값은 Object 타입으로 참조 타입에 맞게 캐스팅이 필요합니다.

 

실행 결과

 

예제2 : setter로 의존관계 주입(<property>)

 

ProduceService 클래스

 

ProduceDao 클래스

 

1. xml 파일에 빈 정보를 작성합니다.

<property>

name 속성에는 클래스의 변수명을 입력합니다.

ref 속성값에는 setter에 인자로 주입할 빈의 id를 입력합니다.

value 속성값에는 setter에 인자에 주입할 값을 입력합니다.

 

2. 실행 : ClassPathXmlApplicationContext 클래스로 xml 파일을 읽어와 빈을 생성합니다.

빈의 id가 produceService인 빈을 가져와 변수에 참조합니다.

getBean 메소드의 리턴값은 Object 타입으로 참조 타입에 맞게 캐스팅이 필요합니다.

 

실행 결과

 

반응형

댓글