본문 바로가기

Programming/Framework

DAY 145. Spring 개요

 

 

Spring Framework

자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크이다.

동적인 웹 사이트 개발을 위한 서비스 제공을 하고 있고, 대한민국 공공기관 웹 서비스 개발 시 사용 권장되는 전자정부 표준 프레임워크의 기반 기술로서 사용된다.

 

 

✔️ DI (Dependency Injection) 의존성 주입

- 설정 파일이나 어노테이션을 통해 객체 간의 의존 관계를 설정하여 개발자가 직접 의존하는 객체를 생성할 필요 없다.

 

- 결합도를 느슨하게 낮출 수 있는 장점이 있다.

 

- 컨테이너가 객체를 관리하고 의존성 관계를 정리해주는 역할이다.

 

- spring에서는 설정 파일을 통해 읽어서 ApplicationContext 컨테이너가 객체들 간의 관계를 정리해주는 방식이다. (xml, java, @)

 

- 직접 new 키워드를 사용하지 않고 프레임워크로부터 필요한 객체를 주입받는다.

 

 

✔️ Spring AOP (Aspect Oridented Programming) 관점 지향 프로그래밍

- 트랜잭션, 로깅, 인증 보안 등 여러 모듈과 계층에서 공통으로 필요로 하는 기능의 경우 해당 기능을 분리하여 관리한다.

 

- 여러 서비스에 걸쳐져 있는 횡단 관심사를 추출해서 따로 관리하는 것이다.

 

- 유지보수가 용이해진다.

 

- 따라서 개발자는 비즈니스 로직에 집중할 수 있다.

 

 

✔️ POJO (Plain Old Java Object)

- "순수 예전 방식 자바 오브젝트" 라는 뜻이다. (일반 자바 클래스를 컨트롤러로 사용하고, 서비스를 일반 객체로 만들어서 사용한다.)

(cf. 서블릿 클래스를 상속하게 해야 서블릿이 되는 것처럼 프로그램이 무거워지는 경향이 있다.)

 

- 일반적인 J2EE 프레임워크에 비해 특정 라이브러리를 사용할 필요가 없어서 개발이 쉽다.

 

- 기존 라이브러리의 지원이 용이하다.

 

 

✔️ IOC (Inversion of Control) 제어 반전

- 컨트롤의 제어권이 개발자가 아니라 프레임워크에 있다.

 

- 객체의 생성부터 소멸까지 모든 생명 주기의 관리를 프레임워크가 주도하는 것이다.

 

- 객체를 생성하고, 직접 호출하는 프로그램이 아니라, 만들어둔 자원을 호출해서 사용한다.

 


 

✔️ Spring JDBC

- Mybatis나 Hibernate 등의 데이터베이스를 처리하는 영속성 프레임워크와 연결할 수 있는 인터페이스를 제공한다.

 

- JDBC를 쉽게 사용할 수 있도록 해주는 모듈

 

 

✔️ Spring MVC

- MVC 디자인 패턴을 통해 웹 애플리케이션의 Model, View,

 

- 스프링 통해서 MVC 구현할 수 있는 여러 모듈을 제공한다.

 

- 객체 간의 관계를 DI 를 통해서 관리하는 것이다.

 

 

✔️ PSA (Portable Service Abstraction)

- 추상화 레이어를 제공함으로써, 추상화 되어 있는 인터페이스를 사용해서 기술을 사용하고 일관된 방식으로 개발자에게 접근 환경을 제공해주는 것

 

- 개발자는 모듈의 의존 없이 프로그램에 집중할 수 있다.

 

- 실제 사용하던 기술, 구현체가 바뀌더라도 비즈니스 로직에 변화가 없는 것이다. (실제 만드는 프로그램의 코드에는 변화가 없다.)

(cf. log4j 사용할 때, SLF4J 를 활용하는 것과 같은 것)

 

 


 

Spring의 구성 모듈

 

Data 접근 계층

- JDBC나 DB에 연결하는 모듈이다.

 

- Data 트랜잭션에 해당하는 기능을 담당한다.

 

- 영속성 프레임워크의 연결을 담당한다.

 

Web 계층( MVC / Remoting )

웹 개발을 위한 영역으로써, 관련 모듈을 제공해준다.

 

 

AOP 계층

- 관점 지향 프로그래밍을 위한 모듈을 지원한다.

 

- 객체 간의 결합도를 낮춘다.

 

★ Core Container

- Spring의 핵심 부분으로써 위의 모든 스프링 관련 모듈들이 core 계층 위에서 동작하는 것이다.

 

- Ioc 기능을 지원하는 영역이다.

 

- BeanFactory 기반으로 Bean 클래스들을 제어하는 기능을 제공한다.

 

 


 

Spring의 동작 구조

 

▶ Spring  컨테이너

 

▷ Spring-context.xml

- Spring 컨테이너가 실행해야 하는 내용을 설정하는 파일

 

1. 관계 설정(DI) / 생성  -> Bean 객체

 

2. 중복 코드 관리(AOP) -> 공통 메소드 실행

 

3. 트랜잭션 관리 -> Database

- 프레임 워크에 어떤 객체를 어떤 방식으로 설정하고, 객체간의 관계를 어떻게 맺을 것인지, 프레임 워크에서 관리할 객체(bean 객체) 등을 기록해놓는 파일

 

 new GenericXmlApplicationContext()

- spring-context.xml 파일을 참조해서 실제 bean 객체를 만들고 관리한다.

 

 AbstractApplication 객체

 

 

Spring의 동작 방식

 

01. XML 파일

- Spring 컨테이너 구동 시, 한 개의 spring 환경 설정된 xml 파일을 불러온다.

 

- xml 파일에 bean, aop transaction 등 여러 사항을 작성하여 구동하는 방식이다.

 

- 최소한의 설정 방식이 javaconfig에 작성되어야 한다.

 

02. @Annotaion 

- xml 파일에는 구동시킬 필수 요소만 작성하고,

 

- 소스코드에 Annotation으로 표시하여 구동하는 방식이다.

 

- <component-scan> 필수

 

03. Java(지향하는 방식)