티스토리 뷰
포스팅에 앞서...
이 포스팅은 Spring Framework 를 이용한 Java 코드 위주의 설명입니다.
본 포스팅과 관련된 코드는 아래 링크를 통해 깃허브에서 받아보실 수 있습니다.
https://github.com/ChoHyeonJunn/Workspace_Spring
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" 인 객체를 호출했다.
- ApplicationContext 와 ClassPathXmlApplicationContext
- BeanFactory <- Application <- ClassPathXmlApplicationContext
- 스프링의 ApplicationContext 객체는 스프링 컨테이너의 인스턴스 이다.
- 스프링은 ApplicationContext의 몇가지 기본 구현을 제공한다.
- 그 중 ClassPathXmlApplicationContext는 XML 형식의 독립형 어플리케이션에 적합하다. (지정된 classpath에서 xml 파일을 읽어서 객체 생성)
- 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
- controller
- 다형성
- jdbc
- Oracle
- select
- ojdbc6.jar
- OOP
- Scott/Tiger
- java
- INSERT
- 추상화
- 상속
- JDBC 프로그램 작성단계
- 객체
- Update
- 객체지향
- MVC
- .
- java 환경설정
- view
- model
- 캡슐화
- JdbcTemplate
- Delete
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |