Spring
* Spring (Legacy) : WAS
- 현재까지 가장 많이 사용(실무) => 자료가 많다(구글링 쉽다)
- 초반 환경설정이 어려움
- WAS를 사용하기 때문에 결과 확인을 위해 많은 리소스를 사용(느리다)
* Spring boot : WAS X
- WAS없이 실행 가능 (내장 서버가 있음)
- 별도의 설정이 필요 없음
- JSP에 해당하는 설정을 별도진행 해야함
- 기존의 설정과 다른 방식으로 작동/사용
스프링 특징
1) EJB보다 가볍고, 학습하기 쉬운 경량 프레임워크
2) POJO(Plain Old Java Object) 기반의 구성
!3) 제어의 역행(IoC, Inversion of Control) 기술을 사용 => 애플리케이션의 느슨한 결합(약한결합)을 제어
!4) 의존성 주입(DI, Dependency Injection) 기능 지원
!5) 관점 지향프로그래밍(AOP, Aspect-Oriented Programming) 지원 => 자원관리 가능
6) 편리한 MVC패턴 구조
7) 영속성(DB) 관련 다양한 서비스가 제공
8) 다양한 라이브러리 지원
* 제어의 역행(IoC, Inversion of Control) : 메서드/객체의 호출 작업을 개발자가 결정하는 것이 아니라, 외부에서 결정되는 것(주로 프레임워크에서 결정)
* 의존성 주입(DI, Dependency Injection) : 제어의 역행이 발생할 때, 스프링 내부에 있는 객체(빈 Bean)를 관리하는 기법
* 의존성 : 객체가 혼자서 처리할 수 없음. 다른 객체를 통해서 도움을 받아야지만 처리 가능
=> 의존 관계에 있는 객체를 직접 생성, 제어가 아니라 제어의 역행을 통해서 필요한 객체를 외부에서 결정해서 연결하는 것
1) 생성자를 사용한 주입
2) set()를 사용한 주입
스프링 주요 기능
Spring Core : 다른 기능과 설정을 분리하기 위한 IoC 기능을 제공
Spring Content : 스프링의 기본 기능, 애플리케이션의 각 기능을 빈에 접근하는 방법 제공
Spring DAO : JDBC 기능을 편리하게 사용가능
Spring ORM : 하이버네이트/마이바티스와 같은 영속성 프레임워크를 제공
Spring AOP : 관점 지향기능 제공
Spring Web : 웹 애플리케이션 개발에 필요한 기능 제공
Spring WebMVC : MVC 구현 기능 제공
* AOP
개발자가 비지니스 로직만 집중해서 개발 하도록 하는 방법 . '횡단 관심사'를 분리하여 제작하여 개발하는 방법
=> 메서드 안에 주기능과 보조기능으로 분리 후 선택적으로 사용
- aspect : 구현하고자 하는 보조기능 (보안, 로그, 트랜잭션...)
- advice : aspect의 실제 구현 클래스 (메서드 호출 기준으로 여러 곳 호출 가능)
- joinpoint : advice를 적용하는 지점
- pointcut : advice가 적용되는 대상 지정(패키지명/클래스명/메서드명)
- target : advice가 적용되는 클래스
AOP 기능 구현 - Ex4 패키지 파일 참조 + AOPTest.xml
1) 타겟클래스를 지정한다. - Calculator.java
// target 클래스 (계산 <- 로그)
public class Calculator {
// 계산(주기능)
public void add(int a, int b) {
System.out.println("결과 : " + (a+b));
}
public void sub(int a, int b) {
System.out.println("결과 : " + (a-b));
}
public void div(int a, int b) {
System.out.println("결과 : " + (a/b));
}
public void mul(int a, int b) {
System.out.println("결과 : " + (a*b));
}
}
2) advice 클래스를 지정한다. - LoggingAdvice.java
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
// Advice 클래스 (보조기능)
public class LoggingAdvice implements MethodInterceptor {
@Override
public Object invoke(MethodInvocation Inv) throws Throwable {
System.out.println(" 메서드 호출전 !!!! : LoggingAdvice");
System.out.println(" 메서드 호출전 !!!! : 보안기능 적용");
System.out.println(Inv.getMethod() + " 실행전");
// 주기능 호출
Inv.proceed();
// 보조기능
System.out.println();
System.out.println(" 메서드 호출후 !!!! : LoggingAdvice");
return null;
}
}
3) 설정파일을 사용해서 pointcut을 지정
4) 설정파일에서 advice + pointcut 결합
5) 스프링 ProxyFactoryBean 클래스를 사용해서 target에 advice 적용
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"
"http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans>
<!-- 타켓 객체 생성 -->
<bean id="calTarget" class="Ex4.Calculator"></bean>
<!-- 어드바이스 객체 생성 -->
<bean id="logAdvice" class="Ex4.LoggingAdvice"></bean>
<!-- 타겟에 어드바이스를 결합 -->
<bean id="proxyCal" class="org.springframework.aop.framework.ProxyFactoryBean" >
<property name="target" ref="calTarget"></property>
<property name="interceptorNames">
<list>
<value>logAdvice</value>
</list>
</property>
</bean>
</beans>
6) getBean() 사용해서 적용
--- CalTest.java ---- 파일
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class CalTest {
public static void main(String[] args) {
// 계산기 실행 => 계산기가 필요 => 계산기를 의존하고 있다
Calculator cal = new Calculator();
cal.add(100, 200);
System.out.println("-----------------------AOP---------------------");
ApplicationContext appCTX = new ClassPathXmlApplicationContext("AOPTest.xml");
Calculator cal2 = (Calculator) appCTX.getBean("proxyCal");
cal2.add(300, 500);
}
}
JDK 버전 설정
프로젝트 우클릭 -> properties -> Java Compiler -> 1.8로 변경
Project Facets -> Java Version 1.8로 변경
Maven Update
@Test 애노테이션 안되는 경우--
프로젝트 우클릭 -> Maven -> Update Project
OK 클릭
프로젝트 우클릭
Deployment Assembly -> Add -> Java Build Path Entries 클릭
Maven Dependencies 선택하고 Apply
'3. Back-end > 3-1. Spring MVC - 국비' 카테고리의 다른 글
SpringMVC - [ log 생성 단축키 / 로그 남기기 ] (0) | 2022.06.13 |
---|---|
Spring MVC - [ 외부 라이브러리 연결 ] (0) | 2022.06.09 |
Spring MVC - [ 한글 처리 ] (0) | 2022.06.08 |
Spring MVC - [ MyBatis DB 연결 (프로젝트 처음 설정) ] (0) | 2022.06.07 |
STS4 설치 (0) | 2022.06.07 |