HongCat 개발 스토리

3.Spring과 Maven 본문

FrameWork

3.Spring과 Maven

홍캣 2019. 12. 5. 12:06

2019.12.05

1. Maven?

  • 자바용 프로젝트 관리 도구로, project object model(POM) XML 문서를 통해 해당 프로젝트의 버전 정보 및 라이브러리 정보들을 통합하여 관리하는 프레임워크 --> xml문서에 작성하면 ojdbc, cos,jstl 의 라이브러리 등을 자동으로 추가해줌 but! 다운로드 중 멈추는 경우가 많아 오류가 잦다.

라이브러리 종속성

  • 일반적인 프로젝트는 개발자가 필요한 라이브러리를 직접 찾아서 추가해야 하지만, Maven을 사용하면 pom.xml문서에 사용하고자 하는 라이브러리를 등록하여 자동으로 프로젝트에 추가되게 하여 라이브러리 관리의 편리성을 제공한다.

pom.xml

  • Project Object Model이라는 뜻으로 하나의 프로젝트에서 사용하는 자바버전, 라이브러리, 플러그인 구성을 통합하여 관리할 수 있게 각 설정 정보를 XML 파일에 문서화 한것

Spring

  • 자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크로서 스프링(spring)이라고 부르며, 동적인 웹사이트를 개발하기 위한 여러가지 서비스를 제공하고 있으며, 대한민국 공공기관의 웹서비스 개발 시 사용을 권장하고 있는 전자정부 표준 프레임워크의 기반 기술로서 사용되고 있음
  • Spring 공식사이트  http://spring.io/
 

spring.io

Let's build a better Enterprise. Spring helps development teams everywhere build simple, portable, fast and flexible JVM-based systems and applications.

spring.io

Spring의 특징

1. DI(Dependancy Injection/의존성 주입)

설정 파일이나 어노테이션을 통해 각 객체간 의존 관계를 설정하여 개발자가 직접 의존하는 객체를 생성할 필요가 없음

2. Spring AOP(관점지향 프로그래밍)

DataBase의 트랜잭션 처리나 로깅처리와 같이 여러 모듈에서 공통으로 필요로 하는 기능의 경우 해당 기능을 분리하여 관리함

3. Spring JDBC

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

4. Spring MVC

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

 

IoC

  • Inversion of Control 로써 제어의 역행이라는 뜻을 가지고 있음
  • 프로그램을 구동하는데 필요한 객체에 대한 생성, 변경 등의 관리를 프로그램 개발자가 아닌 프로그램을 구동하는 컨테이너에서 직접 관리하는 것.
  • 스프링은 IoC구조를 통해 구동 시 필요한 객체의 생성부터 생명주기 까지 해당 객체에 대한 관리를 직접 수행

 

IoC컨테이너의 역할

객체의 생명 주기와 의존성을 관리

  • 생명주기:생성->초기화->사용->소멸
  • 의존성: 개발자가 직접 객체를 생성할 수 있지만 해당 권한을 컨테이너에 맡김으로써 소스코드 구현의 시간을 단축

IoC컨테이너와 Bean객체

컨테이너 설명
bean

-스프링이 IoC방식으로 관리하는 객체

-스프링이 직접 생성과 제어를 담당하는 객체

beanFactory

-자바 빈 객체의 등록 및 관리

-getBean()메소드를 통해 객체를 가져옴

ApplicationContext

-BeanFactory의 확장개념

-Spring의 각종 부가 서비스를 제공

-일반적인 IoC컨테이너를 의미

GenericXml

ApplicationContext

-ApplicationContext를 구현한 클래스

-일반적인XML형태의 문서를 읽어서 컨테이너역할을 수행

Spring DL

의존성 검색이란 뜻으로 컨테이너가 제공하는 API함수로 필요한 Bean을 검색하여 사용하는 방식

Spring DI

의존성 주입(Dependency Injection)이란 뜻으로IoC구현의 핵심 기술로, 사용하는 객체를 직접 생성하여 만드는 것이 아니라 컨테이너가 빈의 설정 정보를 읽어와 자동으로 해당 객체를 연결하는 것

장점

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

*결합도(객체 간의 종속 관계)

한 클래스에서 필드 객체를 생성 할 때 발생하는 두 객체 간의 관계를 말하며, 각 객체 간의 내용이 수정될 경우 영향을 미치는 정도

A Class와 B Class가 있다.

A Class 작성 시 B Class를 객체의 메소드를 이용하여 기능을 작성하는 경우

B Class의 생성자나, 메소드가 변경되는 경우 A Class의 일부 정보도 반드시 수정해야 하는 상황이 발생하는데, 이를  '두 객체간 결합도(종속관계)가 강하다' 라고 표현한다.

Spring DI종류

1. Setter메소드를 통한 의존성 주입

  • 의존성을 주입 받는 setter메소드를 만들고, 이를 통해 의존성을 주입

2. 생성자를 통한 의존성 주입

  • 필요한 의존성을 포함하는 클래스에 생성자를 만들고, 이를 통해 의존성을 주입

3. 메소드를 통한 의존성 주입

  • 의존성을 입력 받는 일반 메소드를 만들고 이를 통해 의존성을 주입

setter메소드를 통한 의존성 주입

setter 메소드를 통한 의존관계가 있는 bean을 주입하려면 <property>태그를 사용

<bean id="객체이름" class="클래스 풀네임">

<property name="name" value="ooo"/>

<property name="name" ref="ooo"/>

</bean>

 

  • id 속성은 객체의 이름을 의미한다(자바 코드-> Student student)
  • class 속성에는 해당 클래스의 패키지명을 포함한 풀네임을 입력
  • name 속성은 클래스에 선언한 변수의 이름을 의미(String name,School,school)
  • value속성은 해당변수에 대입할 값을 의미(객체 타입이 아닌 일반 값)
  • ref속성을 사용하면 객체타입의 변수에 bean을  주입 할 수 있다.

setter메소드를 통한 의존성 주입 예

<bean id="student" class="kr.or.iei.model.vo.Student">

<property name="name" value="홍길동">

<property name="school" ref="schoor1"/>

</bean>

<bean id="school1" class="kr.or.iei.model.vo.School"/>

 

기존 자바 코드인 경우

School school1=new School();

Student student=new Student();

student.setName("홍길동");

student.setSchool(school1);

 

생성자를 통한 의존성 주입

생성자를 통한 의존관계가 있는 bean을 주입하려면<constructor-arg>태그를 사용

<bean id="객체이름" class="클래스 풀네임">

<constructor-arg index="0" value="OOO"/>

<constructor-arg name="name" ref="OOO"/>

</bean>

  •  name 속성: 생성자에 전달하는 매개변수의 변수명으로 설정
  •  필드 선언 순서에 따라 Index 속성을 통해서도 접근이 가능

생성자를 통한 의존성 주입 예

<bean id="school1" class="kr.or.iei.model.vo.School"/>

  • name을 이용한 방법

<bean id="student" class="kr.or.iei.model.vo.Student">

<constructor-arg name="name" value="홍길동"/>

<constructor-arg name="school" ref="school1"/>

</bean>

 

  • Index를 이용한 방법

<bean id="student" class="kr.or.iei.model.vo.Student">

<constructor-arg index="0" value="홍길동"/>

<constructor-arg index="1" ref="school1"/>

</bean>


기존 자바 코드인 경우

School school1 = new School();

Student student = new Student(“홍길동”,school1);

'FrameWork' 카테고리의 다른 글

4. Bean 등록 Annotaion  (0) 2019.12.06
Maven 사용을 위한 이클립스 환경설정  (0) 2019.12.05
동적쿼리 if문을 이용한 회원정보 조회  (3) 2019.12.04
2. Mybatis 동적쿼리  (0) 2019.12.04
1. 프레임워크란?  (0) 2019.12.02
Comments