공부/스프링프레임워크

[spring] 디자인패턴, 스프링 프레임워크

ghhong 2021. 11. 11. 09:48

디자인패턴 : 소프트웨어 개발에서 자주 나타나는 과제를 해결하기 위한 방법 중 하나로, 노하우를 축적하여 재사용하기 좋은 형태로 특정 규약을 묶어서 정리한 것.

요구사항변경에 대한 소스코드 변경을 최소화, 범용적인 코딩스타일을 적용, 직관적인 코드를 사용하기 위함.

 

프레임워크 : 비기능적 요구사항을 만족하는 구조와 구현된 기능을 안정적으로 실행하도록 제어해주는 라이브러리의 모음

=>

1. 애플리케이션들의 최소한의 공통점을 찾아 하부 구조를 제공함으로써 개발자들로 하여금 시스템의 하부 구조를 구현하는데 들어가는 노력을 절감하게 해준다.

2. 기능적인 요구사항에 집중할 수 있게 한다.

3. 디자인 패턴과 같이 반복적으로 발견되는 문제를 해결하기 위한 솔루션을 제공한다.

 

디자인패턴과 프레임워크

디자인패던은 프레임워크의 핵심적인 특징이고, 프레임워크를 사용하는 애플리케이션에 그 패턴이 적용된다는 특징을 가지고있다. => 프레임워크는 디자인패턴과 함께 패턴이 적용된 기반 클래스 라이브러리를 제공하여 프레임워크를 사용하는 구조적인 틀과 구현코드를 제공한다.

개발자는 프레임워크의 기반코드를 확장하여 사용하면서 자연스럽게 프레임워크에서 사용된 패턴을 적용할 수 있게 된다.

 

라이브러리: 개발자가 라이브러리를 사용한다.(주도권이 개발자에 있다.)

프레임워크: 프레임워크가 개발자가 작성한 코드를 호출한다.(주도권이 프레임워크에 있다.)

=>스프링 컨테이너는 관리되는 빈들을 의존성주입을 통해 IoC를 지원한다.

 

스프링 프레임워크 : 자바엔터프라이즈개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크 => 로우레벨개발에 신경쓰지 않고 비즈니스로직 개발에 전념할 수 있다.

 

스프링 삼각형 : Portable Service Abstraction, DI, AOP, POJO

1.     Portable Service Abstraction : 트랜잭션 추상화, OXM추상화, 데이터 액세스의 예외변환기능 등 기술적인 복잡함은 추상화를 통해 로우레벨의 기술 구현 부분과 기술을 사용하는 인터페이스로 분리한다.

2.     DI : 유연하게 확장 가능한 객체를 만들어두고(인터페이스) 그 관계는 외부(컨테이너)에서 다이내믹하게 설정해준다.

3.     AOP(관점지향프로그래밍) : 애플리케이션 로직을 담당하는 코드에 남아있는 기술관련코드를 분리해서 별도의 모듈로 관리한다.

4.     POJO(Plain Old Java Object) : 객체지향 원리에 충실하면서, 특정 환경이나 규약에 종속되지 않고 필요에 따라 재활용할 수 있는 방식으로 설계된 객체

 

스프링프레임워크 특징:

1.     컨테이너 역할 : 자바 객체의 생명주기 관리하며 스프링 컨테이너로부터 필요한 객체를 가져와 사용할 수 있다.

2.     DI(Dependency Injection) 지원 : 설정파일(XML)이나 어노테이션을 통해서 객체간의 의존관계를 설정할 수 있다.

3.     AOP(관점지향프로그래밍) 지원 : 로깅, 보안과 같이 공통적으로 필요로 하는 모듈들을 핵심모듈에서 분리해서 적용할 수 있다.

4.     POJO 지원 : 스프링 컨테이너에 저장되는 자바객체는 특정한 인터페이스를 구현하거나 특정 클래스를 상속받지 않아도 된다.

5.     영속성(Persistent)과 관련된 API지원 : MyBatis, Hibernate 등 데이터베이스 처리를 위한 ORM(객체관계매핑) 프레임워크들과의 연동 지원

 

IoC(Inversion of Control) : 제어의 역전. 인스턴스 생성부터 소멸까지의 인스턴스 생명주기 관리를 개발자가 아닌 컨테이너가 대신 해준다는 뜻이다.