Java/Spring

[Spring] 스프링 프레임워크란?

담크 2021. 5. 6. 04:31

스프링을 공부하기 전에 스프링 프레임워크란 무엇인가 기본 개념을 정리해봐야겠다 해서 열심히 찾아서 공부해봤는데

공부한 내용을 간략하게 정리해보자면

 

 

먼저 스프링(Spring)이란?

Java의 프레임워크로 Java 언어를 기반으로 사용하여 JSP, Mybatis, JPA 등 Java를 활용한 기술들의 사용을 편하게 해주고

EJB 기반이 아닌 POJO 기반의 개발로 EJB와 다르게 복잡한 순서 없이 간단하게 이용할 수 있어 "경량 컨테이너"라고 부르기도 합니다.

장점으로는 중복 코드의 사용을 줄여 비즈니스 로직을 간단히 할 수 있다는 점과 이로 인한 오픈소스를 좀 더 효율적으로 가져다 쓰기 좋다는 점이 있겠네요.

 

 

 

그렇다면 프레임워크(Framework)란 무엇일까요?

프레임워크는 간단히 말하자면 필요한것 들을 미리 만들어두고 필요할 때 가져와서 사용하는 것이라고 생각하면 될 것 같습니다. 좀 더 자세히 말하면 프로그램의 골격이 되는 기본 개념으로 자주 쓰일만한 기능을 한데 모아둔 유틸들의 모음이다 라고 설명할 수 있겠네요.

프레임워크는 소프트웨어의 개발을 간소화하기 위해 개발되어서 개발하시는 분들은 프레임워크 기반으로 소스코드를 작성해서 소프트웨어를 완성시키면 보다 쉽게 개발하실 수 있을 거라고 생각합니다.

 

 

 

자 이제 스프링의 특징에 대해서 설명할 텐데 스프링의 특징에는 여러 가지가 존재하지만 그중에서도 중점적으로 쓰이는 DI/IoC, AOP, OCP에 대해 설명해보려고 합니다.

 

DI(Dependency Injection) : 의존주입

객체를 직접 생성하는 것이 아닌 외부에서 객체를 만들어 값을 넣어주는 방식입니다. 이 말은 앞으로 스프링을 배우면서 알겠지만 간단하게 설명드리면 사용자가 new 키워드를 사용하지 않고 외부(컨테이너)에서 생성된 객체를 주입받는 방식으로 스프링의 핵심 기술이라고 볼 수 있습니다.

이러한 의존주입에는 3가지 유형이 있는데

 

Constructor(생성자)

-       필요한 의전성을 포함하는 클래스의 생성자를 만들고 그 생성자를 통해 의존성을 주입한다

         (<constructor-arg>태그를 이용함)

 

Setter

-       setter 메소드를 통해 의존성을 주입한다

         (<property>태그를 이용함)

 

Field(초기화 인터페이스)

-       의존성을 주입하는 함수를 포함한 인터페이스를 작성

         (annotation을 이용함 : bean 대신 <context:component-scan>태그를 이용함)

 

라고 알고 계시면 될 것 같습니다.

 

 

IoC(Inversion Of Control) : 제어역전

제어역전은 기존에 사용해왔던 프로그램과는 다르게 사용자가 제어하는 것이 아닌 특별한 객체에 위임하여 모든 것을 맡기는 것입니다. 흔히 생성과 사용으로 분리되어 있는데

 

생성 : Spring Ioc Container (ApplicationContext)

사용 : 필요한 사람이 알아서 만들어 쓰는 것 (factory.getBean("beanName"))

 

이렇게 2가지 방법으로 작업됩니다.

 

 

AOP(Aspect Oriented Programing : 관점 지향 프로그래밍)

작업을 수행하기 위해 필요한 의존이라고 하며, 아래는 자주 보이는 AOP에 관련된 용어를 정리해봤습니다. 

 

-       CC(Core Concern) : 주 관심사항

-       CCC(Cross Cutting Concern) : 공통 관심사항

-       Proxy : 타겟인척해서 신호를 대신 받고 응답함

-       Joinpoint : CCC가 결합될 수 있는 모든 상황(메소드 호출 같은)

-       Advice : Target , 후에 공통 관심사 CCC붙여주는 역할 (CCC 실제 구현코드가 여기 들어갑니다)

-       Advisor(aspect) : Pointcut + Advice으로 애플리케이션의 모듈화 하고자하는 부분

-       Weaving : 프로그램이 묶여서 잘 실행되게 하는 것(엮인다)

 

 

OCP(Open Closed Principle) : 캡슐화

OCP를 가능하게 하는 주된 메커니즘은 바로 추상화와 다형성입니다. 변경을 위한 비용은 축소시키고 확장을 위한 비용은 극대화 시킨다. 즉, 기존 구성요소에 대한 수정보단 기존 구성요소를 쉽게 확장해서 재사용할 수 있어야 합니다.

(이것도 나중에 쓰면서 알게 되지만 객체를 가지고 올 때 value 대신에 ref 를 사용해서 가져와야 한다는 점이 있습니다.)