Spring Basic

Let's Just Go·2022년 6월 29일
0

Spring

목록 보기
1/26

Spring

Spring 개념

Spring 개요

  • Spring 개요
    • Framework
      • 뼈대를 뜻하며 프로그래밍에서는 애플리케이션의 뼈대를 이루는 코드들의 집합을 말함
      • 방향성을 제시하고 원하는 기능을 빠르게 만들 수 있음
      • Framework를 잘 만들어 놓으면 처음부터 만드는 것보다 빠르게 구현할 수 있고 비용도 절약할 수 있으며 품질이 좋은 다양한 애플리케이션을 만들 수 있음
    • Spring
      • Spring Framework의 주요 기능으로는 DI, AOP, MVC, JDBC 등을 제공
      • JSP에서 하나씩 작성했던 부분을 Spring에서는 자동으로 하거나 간단하게 구현 가능
    • (참고) 모듈
      • 특정 기능만 수행할 수 있는 것
      • 여러개의 모듈들이 합쳐지면 하나의 프레임워크가 됨

Spring 특징

  • Spring 특징

    • POJO(Plain Old Java Object) 기반
      • 자바 객체의 라이프 사이클을 스프링 컨테이너가 직접 관리하며 스프링 컨테이너로부터 필요한 객체를 가져올 수 있음

    • DI(Dependency Injection) 지원
      • 각 계층이나 서비스 또는 객체 사이에 의존성이 존재할 경우 스프링 프레임워크가 서로를 연결
      • 클래스 사이에 약한 결합을 가능하게 함
      • 모든 객체는 의존하는 관계에 있다는 가정에서 출발
      • 하나의 객체는 다른 객체 없이는 동작할 수 없다는 것이 의존성
      • 기존에는 필요하면 만드는 방식이였지만 Spring에서는 미리 만들어 넣고 필요할 때마다 Spring에게 요청하여 불러옴

    • AOP(Aspect Oriented Programming) 지원
      • 관점 지향 프로그래밍
      • 트랜잭션, 로깅, 보안 등 여러 모듈에서 공통적으로 지원하는 기능을 분리하여 사용 가능

    • 높은 확장성
      • Spring Framework의 소스는 모두 라이브러리로 분리시켜 놓음으로써 필요한 라이브러리만 가지고 와서 사용할 수 있음

    • Model2 방식의 MVC Framework 지원

Spring Basic Module

  • Spring Basic Module
    • spring-core
      • 스프링의 핵심인 DI 제공
    • spring-aop
      • AOP 구현 기능 제공
    • spinrg-jdbc
      • DB를 쉽게 다룰 수 있는 기능 제공
    • 위의 것들 외에도 다양한 모듈 제공
    • 모듈에 대한 의존 설정은 개발 프로젝트에 XML파일 등을 이용해 직접 설정 가능

Spring Container

  • Spring IoC Container
    • Inversion of Control
    • 제어의 역전
    • 객체를 미리 생성해 놓고 꺼내서 사용하는 형태
    • Container를 통해 생성된 객체를 Bean이라고 부름

Spring DI-IoC

  • Spring DI-IoC

    • IoC (Inversion of Control)

      • 프로그램을 제어하는 패턴 중 하나

      • 미리 객체를 생성하고 등록하여 필요할 때 마다 가져오는 방식


    • DI (Dependency Injection)

      • 의존성 주입
        • 의존성 : A객체가 B객체 없이 동작이 불가능한 상황
      • Spring container에 만들어둔 각종 클래스(bean)들은 서로 의존적
      • 객체 안에 객체가 저장되는 형태
    • 객체 등록 및 의존성 주입

      • GenericXmlApplicationContext(’xml파일’)을 통해서 객체를 등록 가능

      • src/main/resources에 있는 xml에서 객체들의 의존성을 propertyconstructor-arg 태그를 이용하여 의존성을 주입할 수 있음

      • 생성자와 setter를 통해서 의존성 주입 가능

      • property 태그와 constructor-arg 태그를 통해 의존성 주입

      • 의존성 주입 예제 코드

        <?xml version="1.0" encoding="UTF-8"?>
        
        <beans xmlns="http://www.springframework.org/schema/beans"
        	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        	xsi:schemaLocation="http://www.springframework.org/schema/beans  
        http://www.springframework.org/schema/beans/spring-beans.xsd">
        
        	<!-- Spring container에 디자인한 객체 클래스 등록 -->
        	<bean id="test" class="basic.SpringTest" />
        
        	<!-- 호텔 객체와 의존 객체들의 빈 등록 및 의존성 주입 -->
        	<bean id="chef" class="basic.ex01.Chef" />
        	
        	<bean id="res" class="basic.ex01.Restaurant">
        		<property name="chef" ref="chef"/>
        		<!-- ref에는 등록한 객체의 id를 지정하고 name은 set을 제외한 setter메서드의 이름을 작성 -->
        	</bean>
        	<!-- property name = "set을 제외한 setter 메서드의 이름"
        		 setter 메서드의 이름은 대부분 관례적으로 set + 멤버변수 이름이기 때문에 
        		 변수명이라고 편하게 작성  -->
        
        	<bean id="hotel" class="basic.ex01.Hotel">
        		<constructor-arg ref="res"></constructor-arg>
        		<!-- 생성자의 매개값으로 주입 -->
        
        	</bean>
        
        </beans>
    • 의존성 주입 예시

      • Java와 Spring의 의존성 주입 비교
         package basic.ex01;
         
         import org.springframework.context.support.GenericXmlApplicationContext;
         
         public class MainClass {
         
         	public static void main(String[] args) {
         		Chef chef = new Chef();
         		Restaurant res = new Restaurant();
         
         		// 쉐프 지정 
         		res.setChef(chef);
         		
         		// 호텔에 레스토랑 지정 
         		Hotel h = new Hotel(res);
         		// 호텔 생성 
         		
         		// 위와 같이 하면 연쇄적으로 객체간 연쇄적으로 명령 수행 가능 
         		
         		h.reserveRestaurant();
         		// 호텔에 명령 내림 
         		
         		// 기존에는 이렇게 생성 
         		
         		// Spring에서는 이렇게 생성하지 않고 
         		// test-config.xml에 넣어놓으면 훨씬 편하게 필요할 때 가져올 수 있음
         		// hotel만 불러서 필요할 때 불러올 수 있음
         		System.out.println();
         		System.out.println("Spring 객체 불러오기 및 의존성 주입 확인");
         		System.out.println();
         		GenericXmlApplicationContext ct = new GenericXmlApplicationContext("classpath:test-config.xml");
         		Hotel hotel = ct.getBean("hotel", Hotel.class);
         		// test-config.xml에서 hotel이라는 값을 불러옴 
         		
         		hotel.reserveRestaurant();
         		// Hotel 클래스에 있는 메소드 가져올 수 있음 
         		// 미리 등록했고 의존성도 주입했기 때문
         		// 필요할 때 꺼내올 수 있다는 것을 확인 
         		
         	}
         
         }

Maven

  • Maven
    • 자바 프로젝트 관리 도구이며 배포를 위한 빌드 도구
    • 빌드뿐만 아니라 프로젝트의 전체적 라이프 사이클을 관리
    • 필요한 라이브러리를 특정 문서(pom.xml)에 정의해서 사용할 라이브러리, 해당 라이브러리가 동작하기 위해 필요한 부가 라이브러리까지 관리하여 자동으로 설치
    • Maven Update : Project → maven → update Project를 통해 진행
    • Maven Project를 생성하면 pom.xml에서 라이브러리를 태그 형식으로 추가할 수 있음
    • maven repository에서 Spring Context라이브러리를 maven형식으로 pom.xml에 넣으면 라이브러리 불러오기 끄읏~~!
       <?xml version="1.0" encoding="UTF-8"?>
       
       <beans xmlns="http://www.springframework.org/schema/beans"  
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans  
       http://www.springframework.org/schema/beans/spring-beans.xsd">
       
       <!-- Spring container에 디자인한 객체 클래스 등록  -->
       <bean id ="test" class="basic.SpringTest"/>
       
       </beans>
profile
안녕하세요! 공부한 내용을 기록하는 공간입니다.

0개의 댓글