티스토리 뷰

포스팅에 앞서...

이 포스팅은 Spring Framework 를 이용한 Java 코드 위주의 설명입니다.

 

본 포스팅과 관련된 코드는 아래 링크를 통해 깃허브에서 받아보실 수 있습니다.

 

https://github.com/ChoHyeonJunn/Workspace_Spring

 

ChoHyeonJunn/Workspace_Spring

Contribute to ChoHyeonJunn/Workspace_Spring development by creating an account on GitHub.

github.com


Spring 개념?

 

FrameWork?

  • 프레임워크란 프로그램의 골격이 되는 기본 코드를 의미한다.
    • ex) Spring FrameWork
    • ex) MyBatis Persistence FrameWork
  • 프레임워크는 소프트웨어 개발에서 반복되는 코드를 미리 만들어놓고 개발자에게 제공함으로서 개발과정을 간소화 하기 위해 만들어졌다.
  • 개발자는 프레임워크를 기반으로 소스코드를 작성하여 소프트웨어를 완성시키면 된다.

 

Srping?

  • EJB(Enterprise JavaBean) 기반 개발 에서  POJO(Plain Old Java Object) 기반 개발 으로
  • Spring framework는 엔터프라이즈 애플리케이션 개발을  복잡한 EJB가 아닌 POJO를 통해서 개발 할 수 있도록 돕는다.
  • 어플리케이션 프레임워크로 불리며, 웹 어플리케이션은 물론 콘솔 어플리케이션이나 스윙과 같은 GUI 어플리케이션 등어떤 어플리케이션에도 적용 가능한 프레임워크 이다.
  • 스프링은 EJB와 같이 복잡한 순서를 거치지 않아도 간단하게 이용할 수 있기 때문에 경량 컨테이너라고도 부른다.
  • DI(Dependency Injection) / AOP(Aspect Oriented Programming) / OCP(Open-Closed Principle)을 중점 기술로 사용하고 있지만, 이 외에도 여러가지 기능을 제공한다.

 

구성요소 (module)

** 참고

  • Solution :
    • 특정한 상황에 대한 해결 방안. 사용자의 요구에 대응되는 H/W , S/W , Skill 등을 의미한다.
    • ex) erp, dbms, pos 등,,,
  • Library :
    • 특정 목적을 위해 사용하는 함수들을 모듈화 시킨 것.
    • ex) : *.jar
  • Maven :
    • 빌드 배포를 관리해주는 툴이다.
    • Pom.xml의 dependencies 에 추가해주면 jar 파일을 알아서 다운로드 해준다. (버전관리까지)
  • 배포
    • .war 혹은 .jar 파일을 톰캣서버의 wepapps 에 올려놓는 것
    • 톰캣은 war 파일을 자동으로 압축해제 해서 서버에서 실행시킨다.

 


Spring 설치

help - marketplace 에서 spring tools 3(standalone edition) install

 

** STS (Spring Tool Suits)

 

** STS 3 - 앞으로 실습은 STS 3 버전을 통해 진행합니다.

 

** STS 4 - Spring Boot 로 모두 넘어감!!


기본 환경설정

 

JAVA Project -> Maven Project

기존 JavaProject 를 project 우클릭 - configure 탭으로 들어가 MavenProject로 변환한다.

MAVEN project로 변환 시 프로젝트 구성도...

 

(target 은 나중에 배포할 때 사용되는 폴더이므로 나중에 설명하도록 하겠다.)

 

pom.xml

convert 후에 xml 파일이 바로 생성된다. xml 파일의 구성요소는 위 그림과 같다.

이름은 pom.xml 인데 이는 MAVEN 프로젝트의 설정파일이라 생각하면 된다.

 

 

<Maven>

빌드 배포를 관리해주는 툴

•Pom.xml 의 dependency 에 추가해주면 jar 파일을 알아서 다운로드 해준다.(버전관리까지 해줌)

스프링에서는 버전이 굉장히 중요하다.

 

 

이제 메이븐을 통해 기본적인 설정 요소를 추가해주겠다.

 

spring-core

https://search.maven.org/artifact/org.springframework/spring-core/5.2.4.RELEASE/jar

spring-core 5.2.4 에서 apache-maven 부분의 dependency 코드를 내 메이븐 프로젝트의 dependencies 에 추가한다.

 

spring-context

https://mvnrepository.com/artifact/org.springframework/spring-context/5.2.4.RELEASE

Spring context 또한 추가해준다.

 

추가된 pom.xml 의 내용들은 사용자 - 내 계정 - .m2 경로에 다운로드받게 된다.

혹시 모든 코드를 잘 작성했음에도 불구하고 프로젝트 실행에 문제가 생길때는 위 경로의 .m2 폴더의 repository를 날린 후 다시 다운받거나 하는 작업이 필요하다.

 


Test Code

 

<com.test03> package

bean.xml 이라는 이름의 Spring Bean Configuration file 을 생성해준다. 이외 코드는 이전 구성과 같다.

 

<bean.xml>

bean.xml 에 다음과 같이 bean 태그를 작성해 준다. (여기서 작성해준 bean 은 해당 class의 객체를 생성한다. -> MTest 에서 그 객체를 가져다 쓴다.)

bean 이라는 이름의 applicatoinContext.xml 을 생성했다.

 

여기서 주목할 특이점은 객체의 생성을 xml 파일에서 진행했다는 것이다. 

 

위 그림처럼 기존에는 객체 생성부터 시작해서 모든 종류의 작업을 사용하는쪽 (지금 실습에서 main()) 에서 제어했지만, spring 에서는 Ioc (Inversion of Control) 의 성질처럼 객체의 생성을 Container, 즉 bean.xml(applicationContext.xml) 에서 진행하고 사용하는 측에서 필요에따라 호출하여 사용한다.

 

사용하는 측의 코드는 다음과 같다.

 

<MTest.java>

18줄 : ApplicationContext 객체를 생성했다. 이 객체는 방금 만든 bean.xml 의 인스턴스이다.

20줄 : factory.getBean(); 을 통해 bean.xml 에서 생성한 객체 중 id가 "korean" 인 객체를 호출했다.

 

  1. ApplicationContext 와 ClassPathXmlApplicationContext
    • BeanFactory <- Application <- ClassPathXmlApplicationContext
    • 스프링의 ApplicationContext 객체는 스프링 컨테이너의 인스턴스 이다.
    • 스프링은 ApplicationContext의 몇가지 기본 구현을 제공한다.
    • 그 중 ClassPathXmlApplicationContext는 XML 형식의 독립형 어플리케이션에 적합하다. (지정된 classpath에서 xml 파일을 읽어서 객체 생성)
  2. content, context, container
    • content : 기능, 내용, ... (실제 기능)
    • context : 기능을 구현하기 위한 정보, 설정, ... (설정파일)
    • container : 담는 그릇 (설정 파일을 담고 있는 그릇 servlet에서는 tomcat 이 container 였다!!)

 

DI(Dependency Injection)

- 객체간의 결합을 느슨하게 하는 스프링의 핵심 기술

의존관계를 관리하는 방법

1. Construction Injection

2. Setter Injection

3. Method Injection

 

<1. construction injection>

코드를 통해 살펴보면 applicationContext에서 <constructor-arg /> 태그를 통해 생성하고싶은 객체의 생성자에 아규먼트를 보내고 있다. 

 

이를 이용해 '파라미터가 있는 생성자' 에 원하는 아규먼트를 지정해 객체를 생성할 수 있다.

 

<2. Setter Injection>

생성자를 기술하지 않은 Address 클래스에 Setter 를 사용하고 싶다.

 

이 경우 property 태그를 이용해 name 속성에는 setter 를 이용할 field명, value 속성에는 원하는 값을 설정해 Setter 를 이용할 수 있다.

 

참고

** getBean 을 통해 리턴받은 Object의 형변환은 위 그림과 같이도 가능하다!!

 

** factory 객체에 뜬 warning 은 객체를 close 해주지 않아 메모리 누수가 발생함을 의미한다.

위 그림 16줄 처럼 close() 메서드를 사용하려면 원래 객체 형태인 ClassPathXmlApplicationContext 로 형변환 하여 가능하다.

 

<3. Method injection>

싱글톤패턴 (메모리상에 객체를 하나만 생성, 후에 객체를 다시 생성하려 하면 새로운 객체를 생성하지 않고 기존 존재하던 객체를 리턴한다.)

 

applicationContext.xml 에서 <bean/> 태그로 객체를 생성하며 factory-method="getInstance" 라는 속성이 추가된 것을 볼 수 있다. 

 

위 속성을 통해 싱글톤패턴의 클래스에서 객체를 생성하는 메서드를 호출해낼 수 있다.

'JAVA > Spring' 카테고리의 다른 글

Spring13 - 게시판 + filter + aop + login + interceptor + transaction  (0) 2020.03.26
Spring 04 - Annotation  (0) 2020.03.18
Spring 03 - Spring Bean (Collection)  (0) 2020.03.18
Spring 02 - Spring Bean  (0) 2020.03.18
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함