티스토리 뷰

 

 

 

스프링 프레임워크를 이해하기에 앞서 프레임워크(Framework)라는 의미는 무엇일 까요?



*프레임워크라는 것은 말 그대로  '뼈대나 근간'을 이루는 코드들의 묶음이라고 볼 수 있습니다.

line_choco-10

 

(뼈대나 근간을 이루는 코드들의 묶어서 뭐하려고?? )


뼈대나 근간을 이루는 코드들의 묶음으로 개발에 필요한 구조를 이미 코드로 만들어 놓았기 때문에 일정한 품질이 보장될 수 있고, 개발자의 입장에서는 완성된 구조에 자신이 맡은 코드를 개발해서 넣어주는 형태이므로 개발 시간을 단축할 수 있는 장점을 가지고 있습니다.

(반대로 생각하자면 이미 구조를 만들어 놓은 것인데 내가 원하는 구조로 다시 변경(커스텀) 하는 양이 많다면 굳이 프레임워크를 사용하는 것보다 자기가 직접 처음부터 만드는 것이 좋겠죠!?)





*스프링 프레임워크를 사용하는 이유


기존 J2EE 기술은 너무 방대하고 복잡해서 그 전체를 이해하고 개발하기에는 어려운 점이 많았습니다.
(J2EE : 서버 측 프로그래밍을 원활히 할 수 있도록 각종 API를 지원하는 자바 플랫폼)


따라서 이러한 기존 방식의 문제점을 해결하기 위해서 경량화된 프레임워크 즉, 스프링 프레임워크가 등장하게 되었고 구조를 이해하거나 사용하는데 진입장벽이 높지 않아 인기 있는 프레임워크가 되었습니다.



1)복잡함을 해결해 줄 수 있는 프레임워크

-2000년대 초반부터 시작된 엔터프라이즈급의 개발은 안정된 품질의 개발이 절실했습니다. 하지만 엔터프라이즈급의 시스템들이 실패하게 되었는데, 이러한 실패요인을 복잡성으로 보고 복잡성을 해결하기 위해서 나온 경량화된 프레임워크입니다.


-Java의 클래스와 인터페이스를 이용하는 구조로 사용하여 진입장벽이 높지않습니다.


2)프로젝트의 전체 구조를 설계 할 수 있는 프레임워크

-타 프레임워크는 Web이나 DB 영역 등의 전문적인 영역에서만 지원하고 비즈니스 로직 처리 부분은 개발자의 역량에 맡기는 경우가 대부분입니다. 반면 스프링 프레임워크는 전체를 설계하는 용도로 사용될 수 있습니다. (스프링 프레임워크의 제어의 역행(IoC)


3)다른 프레임 워크들의 포용

-스프링은 다른 프레임워크들과의 통합을 지원합니다.

==>스프링 프레임워크의 뼈대나 근간을 이루면서 여러 종류의 프레임워크를 혼용해 사용가능 



brown_and_cony-79

 




*스프링 프레임워크 주요 특징은


1)POJO 기반의 구성

2)의존성 주입(DI)를 통한 객체 간의 관계를 설정

3)AOP(Aspect Oriented-Programming)지원

4)MVC 구조

5)WAS에 종속적이지 않는 개발 환경




1)POJO 기반의 구성

-스프링은 별도의 API 등을 사용하지 않고 POJO의 구성만으로도 가능하도록 제작되었습니다. 

(일반적인 JAVA 코드를 이용해서 객체를 구성하는 방식을 스프링에서도 사용할 수 있다)

==>코드 개발 시 특정 라이브러리나 컨테이너 기술에 종속적이지 않고 일반적인 형태(JAVA) 코드를 작성하고 실행할 수 있는 장점이 있겠죠? (생산성 유리 / 코드 작업 시 유연함)


2)의존성 주입(DI)를 통한 객체 간의 관계 구성

-제어의 역행(IoC)이 일어날 때 스프링이 내부에 있는 빈(스프링에서는 객체를 Bean이라 부름)들 간의 관계를 관리할 때 사용하는 기법


잠깐 제어의 역행(IoC)를 이야기해보자면 메서드나 객체의 호출 작업을 개발자가 결정하는 것이 아니라 외부에서 결정되는 것을 의미합니다.(호출은 개발자가 정한 것이 아니라 프레임워크 내부에서 결정된 대로 이루어지게 된다는 의미)




기존(자바)에서는 new 해서 객체를 생성하던가 /getInstance를 이용하여 사용합니다
==>이렇게 사용하게 된다면 직접적인 연결을 하게 되어 강한 결합 상태(뭐가 없다면 실행이 안되는 강하게 연결되어 있어서 유지 보수가 어렵기 때문에 스프링은 느슨한 결합을 하자는 의도로 '의존성 주입'을 시키는 것입니다.)



따라서 스프링 프레임워크는 의존성 주입을 통하여 객체를 직접 생성하거나, 제어하는 것이 아니라 제어의 역행으로 특정 객체에 필요한 객체를 직접 연결하지 않고 외부에서 결정해서 연결하는 것을 의미합니다.
==> 외부에서 필요한 객체를 연결하기 때문에 개발자는 객체들과의 관계를 직접 처리할 필요가 없고, 인터페이스를 활용하여 유연한 구조를 사용할 수 있습니다.
따라서 개발자는 자신이 만드는 객체나 클래스 외에 신경 쓰지 않고 코드를 만들고 코드에 필요한 객체는 스프링을 통해서 객체를 주입시키는 구조입니다.
(생성자 나 set 메서드를 이용하여 주입시키고 어노테이션으로 처리할 수 있다)




brown_and_cony-31

 

스프링에서 주요한 특징은 의존성 주입 /Spring AOP / Spirng MVC 구조가 있기 때문에 설명이 길었지만 그만큼 중요합니다. 하지만 글로 읽었을 때는 뭔 말인지 모르겠고 어쩌라는 건지 이해가 되지 않는 분들이 계실 텐데 예제나 실습을 하고 나서 글을 읽으신다면 무슨 말을 하는지 이해가 되실 거라 생각합니다^^.. 기존 이클립스를 통해서 코드를 작성한 것과 차이를 느끼실 수 있을 겁니다!



3)AOP 지원


​-기존 OOP에서는 공통 관심사항을 여러 모듈에서 적용하는데 중복된 코드를 생성해야 하는 한계가 존재하는데 이를 해결하기 위해서 어느 한 곳에서 공통된 모듈을 처리하게 만든 시스템이 AOP입니다.


 

예를들어) 로그인 유지나 체크를위해서 JSP에서 반복된 코드를 써주었어야하는데 이를 해결 할 수 있는것이 AOP라 이해하면 되겠습니다.

 


*스프링 프레임워크의 장점은


1) 유지보수가 편하다

2) 로직들을 분리해서 작업 가능

3) 확장성이 뛰어나다

4) 공동작업이 용이하다



sally_special-1

*나머지 특징들은 나중에 깊게 배우기 때문에 그때가서 설명드리겠습니다.

여기에서 포스팅을 마치겠습니다.

궁금하거나 잘못된 부분이있다면 알려주시면 감사하겠습니다.*

댓글