SPRING

ACAI BERRY DEVELOVER·2023년 2월 16일
0
post-thumbnail

나는 자바와 스프링을 메인으로 하는 웹 개발자다.

스프링 프레임워크에 대해 이론적인 부분을 아주 간략하게 작성하겠다.
자꾸 까먹는 나니까 두고 두고 보기 위해서 작성한다.

나의 학습목표는 다음과 같다.

- 스프링 프레임 워크의 '의존성 주입'에 대해 이해하며, 스프링 프레임 워크를 이용해서 테스트할 수 있나.

- 스프링에서 XML을 이용하는 객체 관리를 스스로 할 수 있으며 방법을 이해하는가

- 스프링 테스트 환경을 직접 구축할 수 있는가

2.1 스프링 프레임 워크의 간략한 역사

우선적으로

Q. 프레임워크는 무엇이며, 오늘날 프레임워크를 사용하는 이유는?


A. 프레임워크는 '뼈대나 근간을 이루는 코드들의 묶음'이라 할 수 있다.

   프레임워크를 사용하는 이유는 어떠한 프로젝트를 수행하는 개발자들의 능력차에서 올 수 있는 단점들을 최소화 시켜준다. 
   프레임워크를 사용한다는 것은 프로젝트의 기본 흐름이나 구조를 정하고, 모든 팀원들이 이 구조에 자신의 코드를 추가하는 방식으로 개발하게 된다.
   프레임워크의 최대장점은 개발에 필요한 구조를 이미 모두 코드화했기에 미숙한 개발자라도 어느정도 완성된 상태에서 필요한 부분을 코드로 만들어 조립시킬 수 있다.
   
   프레임워크를 이용하면 회사는 일정한 품질이 보장되는 결과물을 얻을 수 있고, 개인은 필요한 부분만 코드로 짜서 추가하면 되기때문에 개발의 시간이 단축된다.
  

스프링 프레임워크는 과거의 복잡하고 방대한 프레임워크에 반하여 특정기능을 위주로 간단한 jar 파일 등을 이용해서 모든 개발이 가능하도록 구성된 경량 프레임워크다.

스프링이 나왔던 당시의 프레임워크와 차별성은 크게 이렇다.

	- 복잡함에 반기를 들어서 만들어진 프레임워크
   	(java class와 인터페이스를 이용하는 구조이기에 진입장벽이 낮았다. 그리고 가벼웠다.)
    
    - 프로젝트의 전체 구조를 설계할 때 유용한 프레임워크
    (타 프레임워크처럼 웹 영역이나 데이터베이스 영역등의 전문적인 영역에 대해서만 지원하는 게 아니라 전체를 설계하는 용도로 사용가능 )
    
    - 다른 프레임워크들의 포용 
    (전체 구조에 집중하는 스프링과 특정한 영역의 프레임워크가 공존하는 방식으로 사용 가능, 즉 통합 지원)
    
    - 개발 생산성과 개발도구의 지원 
    (플러그인들의 빠른 업데이트, 유지보수에 있어서 XML 설정 이용)

스프링의 눈에 띄는 변화는 다음과 같다.

- spring 2.5 ver  : 어노테이션을 활용하는 설정 도입 

- spring 3.0 ver : 별도의 설정 없이 Java 클래스 만으로 설정 파일을 대신할 수 있게 지원 
- spring 4.0 ver : 모바일 환경과 웹 환경에서 많이 사용되는 REST 방식의 컨트롤러 지원 
- spring 5.0 ver : Reactor를 이용한 Reactive 스타일의 개발 환경 지원 

2.1.1 스프링의 주요 특징

  • POJO 기반의 구성
  • 의존성주입(DI)를 통한 객체 간의 관계 구성
  • AOP (Aspect-Oriented-Programming) 지원
  • 편리한 MVC 구조
  • WAS의 종속적이지 않은 개발 환경

- POJO 기반의 구성

경량프레임워크지만 내부에는 객체간의 관계를 구성할 수 있는 특징이 있다. 
타 프레임워크와 달리 별도의 API를 사용하지 않는 POJO의 구성만으로도 관계를 구성할 수 있도록 되어있다. 
쉽게 말해 자바 코드를 이용해 객체를 구성하는 방식을 스프링에서도 그대로 이용가능하단 이야기.

이 특징이 중요한 이유는 
코드 개발 시 특정한 라이브러리나 컨테이너의 기술에 종속적이지 않으며, 가장 일반적인 형태로 코드 작성 및 실행이 가능하기에 생산성에도 유리하고 코드에 대한 테스트 작업 역시 좀 더 유연하다는 장점이 있다.

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

- ApplicationContext : 필요한 객체 생성, 필요한 객체들을 주입하는 역할을 함 
- 개발자들은 객체와 객체를 분리해서 생성하며 이러한 객체들을 엮는(wiring) 작업을 하게 됨 
- Bean : ApplicationContext가 관리하는 객체를 부르는 이름 
- 빈과 빈 사이의 의존관계를 처리하는 방식으로 XML 설정, 어노테이션 설정, Java 설정방식이 있다. 

- AOP의 지원

좋은 개발환경 원칙은 "개발자가 비즈니스 로직에만 집중할 수 있게 한다."이다.
이 목표를 이루기 위해 가장 쉽게 생각할 수 있는 것은 반복적인 코드 제거이다.

스프링은 반복적인 코드를 줄이고 비즈니스 로직에만 집중할 수 있게 도와준다.

대부분의 시스템들이 가지고 있는 보안, 로그, 트랜잭션과 같이 비즈니스 로직은 아니나 반드시 처리가 필요한 부분을 스프링에서는 '횡단 관심사'라고 한다.
(Cross-Concern)

이러한 횡단 관심사를 분리해서 제작하는 것이 가능하며 AOP(Aspected Oriented Programming)은 이러한 횡단 관심사를 모듈로 분리하는 프로그래밍의 패러다임이다.

스프링은 AOP를 AspectJ의 문법으로 작성할 수 있는데, 이를 통해 개발자는 핵심 비즈니스 로직에만 집중해서 코드를 개발할 수 있게 되었고 

각 프로젝트마다 다른 관심사를 적용할 때 코드의 수정을 최소화시킬 수 있었으며, 원하는 관심사의 유지보수가 수월한 코드를 구성할 수 있다. 

- 트랜잭션의 지원

데이터베이스를 이용 시 반드시 신경 써야 하는 부분은 하나의 업무가 여러 작업으로 이루어지는 경우의 트랜잭션 처리이다.

트랜잭션은 경우에 따라서 복잡할 수도, 아닐 수도 있는데 그때마다 코드를 이용해서 처리하는 작업은 상당히 복잡하므로 스프링의 어노테이션이나 XML로 설정해서 매번 상황에 맞는 코드를 작성하지 않아도 되게끔 한다. 
profile
쓸때 대충 쓰지 말고! 공부하면서 써!

0개의 댓글