Notice
Recent Posts
Recent Comments
Link
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

DOing

[Spring] Spring Framework의 정의와 목적 본문

Spring

[Spring] Spring Framework의 정의와 목적

mangdo 2021. 5. 29. 20:51

   스프링 프로젝트를 마무리하고 하니, '내가 과연 스프링 프레임워크를 제대로 사용할것일까?'라는 의문이 들어서 요즘에는 스프링 프레임워크의 코드 예제가 많이 있는 서적보다 스프링 프레임워크의 개념에 대해 설명하는 서적을 보고 있다. 그중 '토비의 스프링 3(이일민 저)'의 8장 스프링이란 무엇인가를 읽고 정리하려고 한다.


🌱 스프링 정의

스프링에 대해 가장 잘 알려진 정의는 다음과 같다.

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

 

👉 자바 엔터프라이즈 개발을 편하게?

: 보안, 트랜잭션과 같은 엔터프라이즈 개발에서 요구되는 기술에 신경쓰지 않고 비지니스 로직에만 집중할 수 있게 만든다는 의미이다.

 

👉 오픈 소스?

: 스프링의 오픈소스 라이브러리는 아파치 라이선스 2.0이다. 아파치 라이선스에 따르면 스프링을 상업적인 목적의 제품에 포함시키거나 비공개 프로젝트에 자유롭게 이용해도 된다. 대부분의 오픈소스 프로젝트처럼 스프링도 오픈소스 개발과 사용자를 위한 온라인 커뮤니티가 있다. 커뮤니티를 통해 버그를 신고하거나 새로운 기능을 요청할 수 있다. 공개된 커뮤니티안에서 투명한 방식으로 다양한 참여를 통해 개발이 되기 때문에 빠르고 유연한 개발이 가능하다.

 오픈소스의 최대 단점은 지속적이고 안정적인 개발이 보장되지 않는다는 것이다. 하지만 스프링은 오픈소스 개발이라는 방식을 선택하기는 했지만 프레임워크 사용자에게 지속적인 신뢰를 줄 수 있도록 개발을 책임지고 진행할 수 있는 전문 기업을 만들었다. 스프링 개발 업체인 스프링 소스는 2009년 VM Ware에 전략적으로 합병되었다. 그 덕분에 이전보다 더욱 안정된 환경을 보장받을 수 있다.

 

👉 경량급(light weight)?

: 스프링은 불필요하게 무겁지 않다. 이는 스프링이 처음 등장하던 시절의 자바 주류기술이었던 예전의 EJB에 반대되는 특징이다. 당시 EJB는 과도한 욕심으로 인해 개발 환경, 운영서버, 빌드, 테스트과정, 작성된 코드 모두를 무겁고 복잡하게 만들었다. 또한 고가의 툴없이는 제대로 조작하기가 힘들었다.

 이에 반해 스프링은 가장 단순한 서버환경인 톰캣, 제티에서도 완벽하게 동작한다. 단순한 개발 툴과 기본적인 개발 환경으로도 애플리케이션을 만들기 충분하다. EJB에 비해 가벼워진 개발 환경과 서버 뿐만아니라 스프링 기반의 코드가 EJB를 포함한 여타 프레임워크에서 동작하기 위해 만들어진 코드에 비해 상대적으로 작고 단순하다,

 

👉 애플리케이션 프레임워크?

:  일반적으로 프레임워크는 애플리케이션 특정 계층에서 동작하는 한가지 기술 분야에 집중된다, 하지만 스프링은 이와 다르게 '애플리케이션 프레임워크'라는 특징을 갖고 있다. 애플리케이션 프레임워크는 특정 계층이나 기술, 업무분야에 국한되지 않고 애플리케이션 전영역을 포괄하는 범용적인 프레임워크를 말한다.

  스프링을 MVC프레임워크나 JDBC/ORM 지원 프레임워크라고 생각하는 것은 스프링이 다루는 일부 영역만을 봤기 때문이다. 또 스프링을 IoC/DI프레임워크나 AOP틀이라 보는 이유는 스프링이 제공하는 핵심기술에만 주목했기 때문이다. 스프링의 일차원적인 존재 목적은 핵심 기술에 담긴 프로그래밍 모델을 일관되게 적용해서 엔터프라이즈 애플리케이션 전 계층에 기능을 제공해줌으로써 애플리케이션을 편리하게 해주는 애플리케이션 프레임워크로 사용되는 것임을 주의하자.

 


🌱 스프링 목적

그렇다면 스프링을 이용해서 자바 엔터프라이즈 개발을 편리하게 만드려는 이유는 무엇인가?

 

👉 엔터프라이즈 개발의 복잡함

1. 기술의 복잡함

 엔터프라이즈 시스템이란, 서버에서 동작하며 기업과 조직의 업무를 처리해주는 시스템을 말한다. 엔터프라이즈 시스템은 많은 사용자의 요청을 동시에 처리해야하기 때문에 서버의 자원을 효율적으로 공유하고 분배해서 사용할 수 있어야한다. 또한 기업이 핵심 정보를 다루기 때문에 보안과 확장성, 안정성면에서도 뛰어나야한다. 즉, 엔터프라이즈 시스템을 개발하는데는 순수한 비지니스 로직을 구현하는 것 외에도 기술적으로 고려할 사항이 많다는 뜻이다.

 

2. 비니지스 로직의 복잡함

 예전에는 회계처럼 복잡한 계산이 필요한 영역에서만 IT시스템을 활용했었다. 하지만 갈수록 대부분의 업무처리를 컴퓨터를 이용해서 한다. 즉 복잡한 기업 업무의 대부분을 엔터프라이즈 애플리케이션이 담당하게 된것이다.

 또한 기업 업무 프로세스를 수시로 변경되기 때문에 시스템 개발과 유지보수, 주가 개발 등의 작업 부담이 커지고 그에 따른 개발 난이도는 더욱 증가하였다.

 

👉 스프링의 해결책

: 엔터프라이즈 개발의 근본적인 복잡함의 원인은 제거할 대상은 아니다. 기술적인 복잡함을 해결하고자 보안을 취약하게 방치한다거나, 사용자가 늘어나도 더이상 확장이 불가능한 시스템을 만들 수는 없다.

 스프링은 이러한 복잡함을 해결하기 위해 비즈니스 로직을 담은 애플리케이션 코드엔터프라이즈 기술를 처리하는 코드를 분리시켰다. 이 분리를 통해 각 문제를 효과적으로 공략하게 만들었다. 

 

1. 기술적 복잡함을 상대하는 전략

- 특정 환경에 종속적인 기술 -> 서비스의 추상화

: 환경이 바뀌고, 서버가 바뀌고, 적용되는 조건이 바뀌면 적용하는 기술이 달라지고 그에 다라 코드도 바뀐다는 것은 심각한 문제이다. 스프링은 이를 서비스 추상화로 해결하였다. 추상화를 통해 로우레벨의 기술 구현 부분과 기술을 사용하는 인터페이스를 분리하고 환경과 세부 기술에 독립적인 접근 인터페이스를 제공하였다.

 

- 기술적인 코드가 비지니스 로직에 섞여 등장 -> AOP

: 기술적인 코드라 함은 비니지스 로직 전후로 설정되어야 할 트랜잭션, 보안적용, 로깅등이 있다. AOP는 기술과 비지니스로직이 지저분하게 얽혀져있는 것을 분리할 뿐만아니라 중복적으로 나타나는 기술적인 코드를 처리해주는 강력한 기술이다.

 

2. 비지니스 로직의 복잡함

: 이 영역은 스프링이 관여하지 않는다. 객체지향 프로그래밍의 유연한 설계가 가능하고 재사용성이 높다는 점을 적극적으로 활용하면 복잡한 비니지스 로직을 효과적으로 구현할 수 있을 것이다.

 결국 비지니스 로직의 복잡함을 상대하는 전략은 자바라는 객체지향 기술 그 자체이다. 스프링은 단지 객체지향 언어의 장점을 제대로 살리지 못하게 방해하는 요소를 제거한다.

 


🌱 정리

 기술과 비지니스 로직의 복잡함을 해결하는 스프링이 공통적으로 사용하는 도구는 객체지향이다. 스프링의 모토는 결국 "기본으로 돌아가자" 이다. 스프링의 기술과 전략은 모두 객체지향이라는 자바언어가 가지는 강력한 도구를 극대화하여 사용할 수 있도록 돕는 것이라고 할 수 있다. 스프링은 단지 거들뿐이다.

  스프링만 잘 공부하면 자바 언어 자체나 객체지향 설계와 개발 실력 따윈 별로 신경 쓰지 않아도 복잡한 엔터프라이즈 시스템 개발을 잘할 수 있을 것이라고 생각하면 오산이다. 현장의 업무를 잘 지원하고 유연하게 대응할 수 있는 뛰어난 애플리베이션을 만드는 것은 결국 객체지향을 잘 활용해서 복잡한 문제를 풀어나갈 줄 아는 개발자의 능력에 달려있다는 사실을 잊지말아야한다. 

'Spring' 카테고리의 다른 글

테스트의 중요성과 종류  (0) 2021.07.03
[Spring] POJO란?  (1) 2021.05.29
Domain, Entity, Value(Object)  (3) 2021.05.27
Spring ShoppingMall 팀프로젝트 회고  (0) 2021.05.17
[Maven] Maven에 대해 알고 사용해보자  (0) 2021.05.08