웹/Spring

[Spring]Spring Framework Basic Framework 개념 | T아카데미

Ellie67 2021. 5. 18. 22:43

-SKplanet Tacademy의 스프링 프레임워크 강의를 듣고 정리한 내용입니다-

Spring Framework?

- Java 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크

 

Spring 삼각형

- 엔터프라이즈 개발의 복잡함을 상대하는 Spring 전략

-> Portable Service Abstraction, DI, AOP, POJO

 

Portable Service Abstraction(서비스 추상화)

- 트랜잭션 추상화, OXM 추상화, 데이터 액세스의 Exception 변환기능 기술적인 복잡함은 추상화를 통해 Low Level 기술 구현 부분과 기술을 사용하는 인터페이스로 분리한다. 개발자가 분리된 인터페이스만 보고 개발할 있도록 제공

 

DI(의존관계주입)

- Spring 객체지향에 충실한 설계가 가능하도록 단순한 객체 형태로 개발할 있고, DI 유연하게 확장 가능한 객체를 만들어 두고 관계는 외부(Container)에서 동적으로 설정해준다.

 

AOP(관점지향 프로그래밍)

- 애플리케이션 로직을 담당하는 코드에 남아 있는 기술 관련 코드를 분리해서 별도의 모듈로 관리하게 해준다.

 

POJO(자바 Object)

- 특정 환경이나 규약에 종속되지 않고 필요에 따라 재활용될 있는 방식으로 설계된 객체

ex) MyServlet HttpServlet 상속받음. MyServlet web container 없으면 동작 못함 => MyServlet POJO 아님

 

 

Spring Framework 특징

1. 컨테이너 역할

- Spring 컨테이너는 Java 객체의 LifeCycle 관리하며, Spring 컨테이너로부터 필요한 객체를 가져와 사용할 있다.

2. DI 지원

- Spring 설정 파일(XML)이나 어노테이션을 통해서 객체 간의 의존관계를 설정할 있도록 한다.

3. AOP 지원

-Spring 트랜잭션이나 로깅, 보안과 같이 공통적으로 필요로 하는 모듈들을 실제 핵심 모듈(업무로직)에서 분리해서 적용할 있다.

4. POJO 지원

-  Spring 컨테이너에 저장되는 Java 객체는 특정한 인터페이스를 구현하거나, 특정 클래스를 상속받지 않아도 된다.

5. 트랜잭션 처리를 위한 일관된 방법을 지원

- JDBC, JTA 어떤 트랜잭션을 사용하던 설정을 통해 정보를 관리하므로 트랜잭션 구현에 상관없이 동일한 코드 사용가능

ex) commit, Rollback 같은 트랜잭션을 코드로 개발하는 것이 아니라 설정(XML, 어노테이션)으로 구현함

6. 영속성과 관련된 다양한 API 지원

- Spring MyBatis, Hibernate 데이터베이스 처리를 위한 ORM(Object Relational Mapping)  프레임워크들과의 연동을 지원

 

Spring 프레임워크 구성하는 기능 요소

1. Spring Core

- Spring 프레임워크의 기본기능(Container) 제공한다.

- 모듈에 있는 BeanFactory Spring 기본 컨테이너이면서 스프링 DI 기반

2. AOP

- 업무로직, 공통로직 분리

- AOP 모듈을 통해 Aspect 지향 프로그래밍을 지원한다.

3. ORM

- MyBatis, Hibernate, JPA 널리 사용되는 ORM 프레임워크와의 연결고리를 제공한다.

4. DAO

- JDBC 대한 추상화 계층으로 JDBC 코딩이나 예외처리 하는 부분을 간편화 시켰고, AOP 모듈을 이용해서 트랜잭션 관리 서비스도 제공한다.

5. Web

- 웹애플리케이션 개발에 필요한 기본기능을 제공한다.

- Webwork struts 같은 다른 웹애플리케이션 프레임워크와의 통합을 지원한다.

6. Spring Context

- Spring Core 확장시킨

- 국제화(다양한 언어 지원) 메시지, 라이프사이클 이벤트, 유효성 검증 등을 지원한다.

7. Web MVC

- 사용자 인터페이스가 애플리케이션 로직과 분리되는 애플리케이션을 만드는 경우에 일반적으로 사용