개발자의 오르막

[토비의 스프링 #01] 스프링 기본 개념과 작동원리 본문

SpringFrameWork/Spring

[토비의 스프링 #01] 스프링 기본 개념과 작동원리

계단 2020. 4. 6. 12:55

# 스프링이란 무엇인가?

 

1) 스프링 컨테이너

- 스프링 컨테이너는 스프링 컨테이너, 또는 애플리케이션 컨텍스트라고 불리는 스프링 런타임  

  엔진을 사용한다.

- 스프링 컨테이너는 프로젝트의 설정정보를 참고하여 애플리케이션을 구동한다.

 

2) 공통 프로그래밍 모델 - IoC/DI, 서비스 추상화, AOP

- IoC/DI 라고 불리는 오브젝트의 생명주기와 의존관계에 대한 프로그래밍 모델이다.

  IoC (Inversion of Control) : 제어의 역전

  DI :

- 서비스 추상화 : 환경이나 서버, 특정 기술에 종속되지 않고 이식성이 뛰어나게 하는기술

- AOP : 애플리케이션 코드에 산재하여 부가적인 기능을 독립적으로 모듈화하는 프로그래밍 모델

 

 

* 컨테이너 : 인스턴스의 생명주기를 관리, 생성된 인스턴스들에게 추가적인 기능을 제공하는 것

* IOC (Inversion of Control) 제어의 역전이란 뜻으로, 메소드나 객체의 호출을 개발자가 아닌

  외부에서 결정하는 것을 의미한다. 즉, 스프링에서 제공하는 프레임워크 내에서 특정 메소드,

  객체 호출들이 이미 정의되어 사용되는 것을 의미한다.

  IOC 를 적용한다는 것은, 쉽게 말해 프레임워크의 개발 Flow 를 사용하여 개발자가 개발한다라는

  것이다.

* DI (Dependency Injection) 이란, 의존성 주입이다.

  외부에서 이미 개발된 프레임워크를 사용하기 위해 개발자가 생성한 인스턴스와 관계를 맺어주는

  작업을 의존성 주입이라고 한다.

  의존성 주입을 해주면, 우리가 만든 인스턴스를 호출만 해도, 프레임워크의 기능들을 활용할

  수 있다.

  그리고 이러한 의존성 주입으로 모듈 간의 결합도가 낮아지고 유연성이 높아지게 된다.

  (추상적인 프레임워크 메소드, 객체를 사용하기 때문에 통일성을 지니게 되어 이식성이 높아진다.)

 

    

* POJO 프로그래밍

 


- 의존성의 분리

 : 즉, 각각의 클래스가 상호간의 의존성이 심화되면, 하나의 클래스를 수정할 때 다른 클래스들을 모두

  수정해야 하는 상황이 발생한다.

  이를 방지하기 위해 각각의 클래스들의 의존성을 떨어뜨리고, 서로 영향을 주지 않도록 분리한다.

  대신 필요한 정보들을 정의하여, 파라미터로 보내게 한다.

 

  또한 각각의 클래스들을 모듈화로 독립적인 객체로 만들어놓는다면, 이식성이 뛰어나 비슷한 기능을

  여러번 만들지 않아도 된다.

  

- 관심사의 분리 (Separation of Concerns)

: 책의 정의를 인용하자면, 관심이 같은 것끼리는 하나의 객체 안으로 또는 친한 객체로 모이게 하고,

  관심이 다른 것은 가능한 한 따로 떨어져서 서로 영향을 주지 않도록 분리하는 것.

 

 

- 템플릿 메소드 패턴 (template methond pattern)

: 슈퍼클래스에 기본적인 로직의 흐름을 만들고, 그 기능의 일부를 추상 메소드나 오버라이딩이 가능한

  protected 메소드 등으로 만든 뒤 서브클래스에서 이런  메소드를 필요에 맞게 구현해서 사용하도록 하는

  방법

 

- 팩토리 메소드 패턴

: 서브클래스에서 구체적인 오브젝트 생성 방법을 결정하게 하는 것

 

즉, 우리는 관심사 단위에서 공통적으로 쓰이는  Base Logic 을 슈퍼클래스로 등록하고,

이를 protected 메소드로 만들어 서브클래스에서 사용하도록 해야 한다. 그리고 각 서비스에 맞게

서브클래스를 재정의하여 가공하는 방식으로 개발해야 한다.

 

- 인터페이스의 도입

특정 클래스에 데이터가 너무 많이 들어있으면, 그 클래스는 다른 클래스와 의존적인 관계를 가질 수 밖에 없다.

가령 데이터베이스의 커넥션에 대한 로직의 클래스라면, DB Url, id, Password  등 데이터가 바뀔때마다

해당 클래스를 수정해줘야하기 때문이다. 따라서 중간에 인터페이스를 두어 데이터를 받게하고,

클래스에서는 받아온 데이터를 통해 커넥션 기능을 수행하면 수정소요가 훨씬 줄어들 수 있다.

 


# 원칙과 패턴

 

- 개방 폐쇄 원칙 ( OCP - Open-Closed-Principle )
클래스나 모듈은 확장에는 열려 있어야 하고 변경에는 닫혀 있어야 한다.

 

- 객체지향 설계 원칙 ( SOLID )

'SpringFrameWork > Spring' 카테고리의 다른 글

Spring framework - Maven  (0) 2019.08.27
Spring Frame Work 개발환경 구축  (0) 2019.08.14
가짜객체  (0) 2019.07.17
의존성 주입  (0) 2019.07.12
테스트 대역  (0) 2019.07.10
Comments