ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 스프링(Spring) 프로젝트 환경설정
    Spring/환경설정 2018. 9. 6. 10:36

    MVC 패턴에 대해 파악하고 있음을 기반으로 설명하므로 이를 모른다면 이해하기 어려울 것이다.

    스프링은 DI(Dependency Injection, 의존성 주입)을 지원한다.

    여기서 의존성은 Servlet, Service, Biz, Dao간의 의존관계를 말한다.

    Servlet Service 객체를 호출, Service Biz 객체 호출, Biz Dao를 호출해야 그 의미가 있게 사용할 수 있다. 이를 '의존성이 있다'고 표현한다.

    스프링 없이 웹 프로젝트를 개발할 때 서블릿단에서 Service service = new Service();를 서블릿에서 해야 했다하지만 injection(주입)을 통해 필요로 할 때마다 Service 객체를 private 멤버로 호출해 사용할 수 있도록 한다.

    이렇게 멤버 변수로 사용하기 위해서는 한번 생성을 하고 계속 보관해야 하는데 이때 객체들을 보관하는 장소를 Bean Container라 한다. 또한 스프링에서 객체를 Bean이라 칭한다.

     

    메모리 관리 효율적으로 하기 위해서 생성자 호출해 객체를 만들어내는 과정의 비용이 매우 크다매번 수행될 때마다 서버는 부하가 일어나 점점 느려진다스프링에서는 어플리케이션 시작시 한번 생성해 Bean Container에 넣어두고 재사용한다. 이로 인해 생성자 호출로 발생하는 비용을 줄일 수 있게 되는 것이다.

     

    모듈간 의존관계를 파악해 모두 가져와야 한다. 오늘날 방대해진 라이브러리들의 의존성 파악하기 힘들어졌고, 이를 자동관리하기 위해 Maven을 사용한다.

    다음과 같이 복잡해진 의존관계를 모두 외워서 추가시키기는 거의 불가능해졌다.


    스프링 프로젝트를 생성해 예제 확인해보자. 

    ※ 이클립스가 아닌 STS로 작성했다. 설치법은 다음 포스팅 참조
    http://blog.naver.com/p952973/220939704468

    Dynamic web module version : 3.0부터 자바 웹 소켓 지원

    다음과 같이 설정을 거치면 프로젝트 파일에 Pom.xml 파일이 생성된다.


    이후 Windows - Preferences에서 Maven 설정 다음과 같이 변경한다.

    - Download sources, javaDoc : jar 소스 보기, 수정 가능하게 해줌
    - Download repository index updates on startup, Update Maven projects on startup, Automatically update Maven projects configuration : 

    File - restart 통해 재시작 ( 환경설정이므로 한번만 하면 이후 적용됨)

    Pom.xml의 Dependency tab 에서 Add 버튼 클릭

    spring-context 입력 후 org.springframework spring-context 찾아 클릭 후 OK

    src/main/resources 폴더에서 New - Spring Bean Configuration File 클릭해
    applicationContext로 파일명 입력 후 Finish 버튼

    다음과 같이 xml 파일이 생성되는데 이곳에 필요한 객체들을 등록해 두는 방식으로 관리한다

    다음과 같이 Service와 Biz 클래스, 인터페이스 생성 후 코드를 작성

    package com.naver.blog.biz;
    
    public interface MainBiz {
    	
    	public void printBizMessege();
    
    }
    
    

    MainBiz 인터페이스

    package com.naver.blog.biz;
    
    public class MainBizImpl implements MainBiz{
    	
    	
    	public void printBizMessege() {
    		System.out.println("MainBizImpl");
    	}
    
    }
    
    

    MainBizImpl 클래스

    package com.naver.blog.service;
    
    public interface MainService {
    	public void printMessage();
    }
    
    
    

    MainService 인터페이스

    package com.naver.blog.service;
    
    import com.naver.blog.biz.MainBiz;
    
    public class MainServiceImpl implements MainService{
    
    	private MainBiz mainBiz;
    	
    	public void setMainBiz(MainBiz mainBiz) {
    		System.out.println(mainBiz);
    		this.mainBiz = mainBiz;
    	}
    	
    	public MainServiceImpl() {
    		System.out.println("객체 생성자");
    	}
    	
    	@Override
    	public void printMessage() {
    		System.out.println("스프링 객체");
    		mainBiz.printBizMessege();
    	}
    }
    
    

    MainBiz 인터페이스

    package com.naver.blog.biz;
    
    public interface MainBiz {
    	
    	public void printBizMessege();
    
    }
    
    

    MainServiceImpl 클래스

    package com.naver.blog.web;
    
    import org.springframework.context.support.AbstractApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import com.naver.blog.service.MainService;
    
    public class MainController {
    
    	public static void main(String[] args) {
    
    		AbstractApplicationContext ctx = new ClassPathXmlApplicationContext("/applicationContext.xml");
    
    		// applicationContext.xml 파일 내용 가져와서 bean들을 생성해 bean Container에 적재
    		// 자동으로 해줘서 굳이 사용할 필요 없음
    
    		MainService mainService = ctx.getBean("mainServiceImpl", MainService.class);
    		mainService.printMessage();
    	}
    
    }
    

    MainController 컨트롤러


     <?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">
    
    <bean id="mainServiceImpl" class="com.naver.blog.service.MainServiceImpl">
    	<property name="mainBiz" ref="mainBizImpl"></property>
    
    </bean>
    <bean id="mainBizImpl" class="com.naver.blog.biz.MainBizImpl" ></bean>
    
    </beans>
    

    applicationContext.xml 파일

     Spring에 객체 생성 코드 작성 방법 : Bean Container (Spring Bean Configuration File) <bean> 태그 통해 객체 등록

    Interface / implementation Class가 존재해야 Bean 생성할 수 있다. MVC 패턴과 같은 규칙.

    <bean> 객체 속성


     id : 객체명(변수명) 따라서 소문자로 시작 

    class : 타입. 경로 모두 작성해줘야 하지만 STS에서는 ctrl + space 통해 작성 가능하다.

    <property> 객체 : Java Bean의 Setter 객체를 활용해 값 설정해줌 setMainBiz() 호출하는 것과 같다. 
    따라서 해당 객체 호출하는 객체의 경우 Setter를 코드에 작성해줘야 한다.

    MainService의 mainBizSetter가 다음과 같이 Setter를 가지고 있다.

    Setter의 매개변수 타입에 따라

    - primitive, String 타입 : value

    - Reference 타입 : ref


    Run as Java Application으로 수행하면 다음과 같이 호출됨을 확인할 수 있다.
    이로써 new 키워드를 사용하지 않고도 객체들을 사용할 수 있는 것이다.


Designed by Tistory.