소소한개발팁
Published 2019. 12. 18. 21:39
스프링 이란? 프레임워크/Spring
반응형

스프링에 대해 적기 전에 프레임워크에 대한 정의부터 하자면 

프레임 워크란 ' 뼈대나 근간을 이루는 코드들의 묶음 ' 이고 이러한 프레임 워크가 필요한 이유는 개발자 간의 능력 차이를 극복하기 위해서 입니다.

 

개발자라는 직종은 각 개인간의 능력편차가 존재하기 때문에 결과의 최소 조건을 보장하기 위해 사용됩니다.

프레임 워크를 이용하면 프로그램의 기본 흐름이나 구조를 정하고 , 모든 팀원이 이 구조에 자신의 코드를 추가하는 방식으로 개발을 하기 때문에 실력이 부족한 개발자라도 반쯤 완성한 상태에서 필요한 부분을 조립하는 형태의 개발이 

가능합니다.

 

회사의 입장에서는 프레임워크를 사용하면 일정한 품질이 보장되는 결과물 을 얻을 수 있고, 개발자의 입장에서는 완성된 구조에 자신이 맡은 코드를 개발해서 넣어주는 형태이므로 개발 시간을 단축할 수 있습니다.

 

스프링은 가장 성공적인 경량 프레임워크 :

경량 프레임워크란 특정 기능을 위주로 간단한 jar파일 등을 이용해서 모든 개발이 가능하도록 구성된 프레임워크 입니다.

 

스프링의 장점으로는 

 

1. 일반적인 Java의 클래스와 인터페이스를 이용하는 구조이기 때문에 진입장벽이 높지 않고 EJB로 대표되는 복잡한 프레임워크에 비해 가볍기 때문에 빠르게 엔터프라이즈급의 시스템을 작성할 수 있다는 점.

 

2. 단순히 웹 영역이나 데이터베이스 영역 등의 전문적인 영역에 대해서만 지원하는 것이 아닌 전체를 설계하는 용도로 사용 될 수 있습니다.  OOP구조를 뒷받침 하고 구조를 설계하는 사상 

 

3. 다른 프레임워크 들과의 통합을 지원했기 때문에 최소한의 수정이 가능하고 , 기본 뼈대를 흔들지 않고 여러 종류의 프레임워크를 혼용해서 사용할 수 있다는 점

 

4. 개발 생산성과 개발도구의 지원

이론적으로는 개발자가 제대로 이해해야 하는 부분이 많았지만, 결과적으로 코드의 양은 확실히 줄어들 수 있었고, 유지 보수에 있어서도 XML의 설정 등을 이용해서 환영받았습니다.

 

 

눈에 띄는 스프링의 변화

 

Spring 2.5 :  어노테이션을 활용하는 설정을 도입하면서 편리한 설정과 개발이 가능하도록 지원

Spring 3.0 :  별도의 설정 없이도 Java 클래스만으로 설정 파일을 대신할 수 있게 지원

Spring 4.0 :  모바일 환경과 웹 환경에서 많이 사용되는 REST 방식의 컨트롤러 지원

Spring 5.0 :  Reactor를 이용한 Reactive 스타일의 개발 환경 지원

 

 

스프링의 주요 특징

 

* POJO 기반의 구성

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

* AOP(Aspect-Oriented-Programming)지원

* 편리한 MVC 구조

* WAS에 종속적이지 않은 개발 환경

 

 

* POJO 기반의 구성

 

  가벼운 프레임워크 여도 내부에는 객체간의 관계를 구성할 수 있는 특징을 가지고 있는데 다른 프레임워크들과 달리 이 관계를 구성할  때 별도의 API 등을 사용하지 않는 POJO(Plain Old Java Object)의 구성만으로 가능하도록 설계 되어 있습니다.

 

ex) 일반적인 Java코드를 이용해서 객체를 구성하는 방식을 스프링에서 사용 가능

 

이것이 중요한 이유는 개발자가 특정한 라이브러리나 컨테이너의 기술에 종속적이지 않다는 것 이기 때문입니다. 가장 일반적인 형태로 코드를 작성하고 실행할 수 있기 때문에 생산성에서도 우리하고, 코드에 대한 테스트 작업 역시 좀 더 유연하게 할 수 있다는 장점이 생깁니다.

 

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

 

의존성이라는 것은 하나의 객체가 다른 객체 없이 재대로 된 역할을 할 수 없다는 것을 의미합니다. 

예를 들어 음식점이라면 서빙을 담당하는 직원이 갑자기 못 나오면 장사를 할 수 있지만, 주방장에게 문제가 생겨서 못나올 경우 장사를 할 수 없는 일이 발생합니다. 의존성은 이처럼 하나의 객체가 다른 객체의 상태에 따라 영향을 받는 것을 의미합니다. 흔히 A 객체가

B 객체 없이 동작이 불가능한 상황을 'A가 B에 의존적이다.' 라고 표현합니다.

 

주입은 외부에서 밀어 넣는 것을 의미하는데 납품을 예를 들어보면 됩니다. 음식점의 경우는 매일 가게를 열기 전 직접 식재료를 구하기 위해 시장을 가지만, 프랜차이즈의 식당들은 본사가 트럭등을 이용해서 식재료를 공급합니다. 이 두가지 방식의 차이는 필요한 객체를 얻기 위해서  주체가 능동적인지 수동적인지에 대한 문제입니다.

 

의존성과 주입을 결합해서 생각해보면 ' 어떤 객체가 필요한 객체를 외부에서 밀어 넣는다 ' 라는 의미가 됩니다.

이러한 경우의 장점을 생각해보면 편리하다 라는 생각을 할 수 있는데 코드를 대입에서 살펴보면 '주입을 받는 입장에서는 객체가 어떤 객체 인지 신경 슬 필요가 없다.','어떤 객체에 의존하든 자신의 역할은 변하지 않는다.' 와 같은의미로 볼 수 있습니다.

 

스프링에서는 이러한 구조를 만드는 데 적합한 구조로 설계 되어 있습니다. 스프링에서 ApplicationContext 라는 존재가 필요한 객체들을 생성하고, 필요한 객체들을 주입하는 역할을 해줍니다. 따라서 스프링을 이용하면 개발자들은 기존의 프로그래밍과 달리 객체와 객체를 분리해서 생성하고 , 이러한 객체들을 엮는 작업을 하는 형태의 개발을 하게 됩니다.

 

스프링에서는 ApplicationContext 가 관리하는 객체들을 '빈(Bean)' 이라는 용어로 부르고 , 빈과 빈 사이의 의존간계를 처리하는 방식으로 XML 설정, 어노테이션 설정, Java 설정 방식을 이용할 수 있습니다.

 

 

 

* AOP(Aspect-Oriented-Programming)지원

 

좋은 개발환경의 중요 원칙은 '개발자가 비즈니스 로직에만 집중할 수 있게 한다. ' 이고 이 목표를 이루기 위해 가장 쉽게 할 수 있는 방법이 중복되는 코드의 제거 입니다. 스프링은 프레임워크를 이용한 개발에도 이러한 반복적인 코드를 줄이고, 핵심 비즈니스 로직에만 집중할 수 있도록 지원해 줍니다. 

 

대부분의 시스템이 공통으로 가지고 있는 보안이나 로그, 트랜잭션과 같이 비즈니스 로직은 아니지만, 반드시 처리가 필요한 부분을 스프링 에서는 횡단 관심사 (Cross - concern) 이라고 합니다. 스프링은 이러한 횡단 관심사를 분리해서 제작하는 것이 가능합니다.

AOP 는 이러한 횡단 관심사를 모듈로 분리하는 프로그래밍의 패러다임입니다.

 

스프링은 AOP를 AspectJ의 문법을 통해서 작성할 수 있는데, 이를 통해서 개발자는

1. 핵심 비즈니스 로직에만 집중해서 코드를 개발할 수 있다.

2. 각 프로젝트마다 다른 관심사를 적용할 때 코드의 수정을 최소화 할 수 있다.

3. 원하는 관심사의 유지보수가 수월한 코드를 구성할 수 있습니다.

 

트랜잭션의 지원

 

데이터 베이스를 이용할 때 반드시 신경 써야 하는 부분은 하나의 업무가 여러 작업으로 이루어지는 경우의 트랜잭션 처리입니다. 이 트랜잭션 처리는 상황에 따라서 복잡하게 구성될 수도 있고, 아닐 수도 있는데, 그때마다 코드를 이용해서 처리하는 작업은 개발자에게는 상당히 피곤한 일입니다. 스프링은 이런 트랜잭션의 관리를 어노테이션이나 XML로 설정할 수 있기 때문에 개발자가 매번 상황에 맞는 코드를 작성할 필요가 없도록 설계되어 있습니다.

 

 

반응형

'프레임워크 > Spring' 카테고리의 다른 글

스프링의 의존성 주입  (0) 2019.12.19
Spring - 동작 순서 및 어노테이션  (0) 2019.12.18
Spring - Java Configuration  (0) 2019.12.18
Lombok 라이브러리 설치  (0) 2019.12.18
개발 환경 설정 및 오류 대처  (0) 2019.12.18
profile

소소한개발팁

@개발자 뱅

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!