스프링 프레임워크(Spring Framework)는 적어도 웹 개발에 있어서 없으면 안되는 것 중 하나로 자리매김했습니다.

그만큼 중요하게 된 이유는 무엇일까요?

그 이유를 알기 전 프레임워크에 대해 먼저 알아야합니다.

 

1. 프레임워크(Framework)란?

 

 - 프레임워크의 의미

 

단어 그대로 뼈대나 근간을 이루는 코드들의 묶음입니다. 의역하자면, 소프트웨어의 구체적인 부분에 해당하는 설꼐와 구현을 재사용이 가능하게끔 일련의 협업화된 형태로 클래스들을 제공하는 것 이라고 디자인패턴의 저자는 말했습니다.

 

 - 프레임워크의 예시

 

자동차로 예를 들자면 자동차의 뼈대를 프레임워크로 예를 들면 되겠습니다. 기타 부분적인 기능들은 제외한 자동차의 근간을 이루는 것을 뜻하며, 기본적으로 구성된 뼈대를 말합니다.

 

더 나아가 경차의 프레임으로 중형차를 만들 수 없고, SUV의 프레임으로 트럭을 만들 수 없습니다. 그 이유는 그 차의 프레임은 그 차(소형차, SUV 등)를 완성하기 위해 이미 설계되어있기 때문입니다.

 

이처럼 기본 흐름이나 구조를 정하는 것이 프레임워크입니다.

 

2. 스프링 프레임워크

 

스프링 프레임워크는 프로그램의 기본 흐름이나 구조를 정하고, 모두가 스프링 프레임워크라는 구조에 개발자 개개인이 코드를 추가하는 방식으로 개발하는 것입니다.

 

 - 스프링 프레임워크의 장점

 

 1) 개발에 필요한 구조를 이미 코드로 만들어 놓았기 때문에 실력이 부족한 개발자라 하더라도 반쯤 완성한 상태에서 필요한 부분을 조립하는 형태의 개발이 가능합니다.

 

 2) 어느정도 품질이 보장되어있고, 구축되어있는 구조에 코드를 넣어 개발하는 형태이기 때문에 개발시간의 단축또한 장점입니다.

 

 - 스프링 프레임워크의 단점

 

 1) 구조가 있기 때문에 프레임워크에 있는 코드를 습득하고 이해하는데 오랜 시간이 걸립니다.

 

 2) 스프링 프레임워크의 형식에 맞추어져 있기 때문에 자유롭고 유연하게 개발하는데에 한계가 있습니다.

 

3. 스프링 프레임워크의 특징

 

 - 의존성 주입

 

의존성(Dependency)이란 하나의 객체가 다른 객체 없이 제대로 된 역할을 할 수 없음을 의미합니다. 주입(Injection)은 말 그대로 외부에서 밀어넣는 것을 의미합니다. 합쳐서, 한 객체가 필요한 객체를 외부에서 밀어넣는 것을 의존성 주입이라고 합니다.

 

 - 의존성 주입을 사용하는 이유?

 

어떠한 객체를 필요로 하는 한 객체는 능동적으로 찾는 것 보다 누군가가 알아서 해주는 것이 더 편리할 것입니다. 다시말해 의존성 주입을 받는 객체는 주입을 받는 입장에서 누군가가 알아서 해 준다는 건 어떤 객체든 신경 쓸 필요가 없는 것 입니다. 이는 주입을 받아야 할 객체에게 편리함을 가져다 줍니다. 이러한 편리함은 곧 개발자에게 연관됩니다. 

 

 - AOP(관점 지향 프로그래밍)

 

좋은 개발환경의 중요 원칙은 개발자가 비즈니스 로직에만 집중할 수 있게 하는 것 입니다. 그 중 하나는 반복되는 코드의 제거인데, 대부분의 시스템이 공통으로 가지고 있는 보안이나 로그, 트랜잭션과 같이 비즈니스 로직은 아니지만, 반드시 처리가 필요한 부분을 스프링에서는 횡단 관심사(cross-concern)이라고 합니다. AOP는 이러한 횡단 관심사를 모듈로 분리하는 프로그래밍의 패러다임입니다.

 

스프링은 AOP를 AspectJ의 문법을 통해 작성할 수 있는데, 이를 통해 개발자는 핵심 비즈니스 로직에만 집중해서 코드를 개발할 수 있게 되었고, 프로젝트마다 다른 관심사를 적용할 때 코드의 수정을 최소화시킬 수 있었으며, 유지보수가 수월한 코드를 구성할 수 있습니다.

 

 - 트랜잭션

 

데이터베이스를 이용할 때 트랜잭션 처리에 대해 신경이 많이 쓰이곤 합니다. 스프링은 이런 트랜잭션 관리를 어노테이션 등으로 설정할 수 있기 떄문에 상황에 맞는 코드를 작성할 필요가 없도록 설계되어있습니다.

 

 

 

 

 

 

 

 

출처

 

코드로 배우는 스프링 웹 프로젝트

https://moolgogiheart.tistory.com/87

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기