1. 소개

 1.1 Spring framework

   - 자바 엔터프라이즈 개발을 위한 오픈 소스 애플리케이션 프레임워크 (간단히 스프링이라고 부른다)

   - 자바 가상 머신(JVM) 위에서 동작하는 언어들을 지원한다. (Groovy, Kotlin 등)

   - 아파치 라이선스 2.0

   - 스프링 프레임워크 5.1 기준 JDK 8+(Java SE 8+)를 필요로 하고 JDK 11 LTS 버전도 지원한다.

   - 대한민국 공공기관의 웹 서비스 개발 시 사용을 권장하고 있는 전자정부 표준프레임워크의 기반 기술로서 쓰이고 있다.

 

 스프링은 여러 개의 모듈로 이루어져 있고, 필요한 모듈만 선택하여 사용하는것이 가능하다. 

 

 

1.2 스프링 프레임워크와 스프링 부트

  스프링 프레임워크는 지원하는 기능과 라이브러리가 많기때문에 환경설정을 하기가 복잡하다. 때문에 필요한 라이브러리를 간편하게 설정하고 바로 실행 가능한 프로그램을 만들 수 있도록 나온것이 스프링 부트다.

스프링 부트의 주요 특징은 다음과 같다.

 

 - 내장 Tomcat, Jetty등을 포함하고 있어 WAR 파일을 배포하지 않아도 프로그램을 바로 실행할 수 있게 해 준다.

 - 프로젝트 생성 시 필요한 라이브러리 의존성을 선택하고 바로 시작할 수 있도록 해 준다. (Spring Initializr)

 - 스프링 프레임워크, 3rd 라이브러리를 자동으로 configure 해 준다.

 

2. 스프링의 주요 Features

 2.1 자바 객체를 직접 관리

  - 스프링은 경량 컨테이너로서 자바 객체를 직접 관리한다.

  - 각 객체의 생성, 소멸과 같은 라이프 사이클을 관리해준다.

  - 프로그래머는 필요한 객체를 스프링에게서 받아와서 사용하면 된다.

 

 2.2 POJO 사용

  - Plain Old Java Object (POJO) 방식의 프레임워크이다.

  - 스프링의 기능을 사용하기 위해 특정한 인터페이스나 클래스를 상속받을 필요가 없어 사용하기에 편하고 객체가 가볍다.

 

 2.3 의존성 주입(Dependency Injection, DI)

  - 의존성 주입을 방식으로 제어 역전을 구현한다.

  - 제어 역전(Inversion of Control, IoC), 또는 제어 반전이란 프로그래머가 작성한 프로그램이 라이브러리의 흐름 제어를 받게 되는 소프트웨어 디자인 패턴을 말한다. 전통적인 프로그래밍에서 흐름은 프로그래머가 작성한 프로그램이 외부 라이브러리의 코드를 호출해 이용한다. 하지만 제어 반전이 적용된 구조에서는 외부 라이브러리의 코드가 프로그래머가 작성한 코드를 호출한다. (참고)

 - 각각의 계층이나 서비스 객체 간에 의존성이 존재할 경우, 스프링이 이를 확인하고 런타임에 서로 연결시켜 준다.

 

 2.4 관점 지향 프로그래밍(Aspect Oriented Programming, AOP)

  - 관점 지향 프로그래밍은 횡단 관심사(cross-cutting concerns)들을 코드에서 분리함으로써 모듈성을 증가시키는 것이 목적인 프로그래밍 패러다임이다.

  - 횡단 관심사란, logging, security, transaction 등과 같이 프로그램의 핵심 기능은 아니면서도 코드 전체에 걸쳐서 사용되며, 다른것에 영향을 미칠 수 있는 것들을 뜻한다.

  - AOP는 이러한 "부가 기능"들을 모듈화하여 관리한다.  

 

 

 2.5 이식 가능한 서비스 추상화 (Portable Service Abstraction, PSA)

 - 스프링은 다른 완성도 높은 프레임워크들과 쉽게 연결할 수 있는 인터페이스를 제공한다.

 - 예를 들어 MySQL, PostgreSQL, MongoDB와 같은 DB를 위한 인터페이스나 Servlet, React, Tomcat과 같은 서비스와 연동을 지원한다.

 - 프로그래머는 코드를 바꾸지 않고도 연결된 구현체를 쉽게 교체할 수 있다.   

 

 예를 들어, 스프링의 JPA 인터페이스를 사용하면 다음과 같이 Query문을 작성하지 않고도 간편하게 DB와 연동시킬 수 있다. 

package payroll;
import org.springframework.data.jpa.repository.JpaRepository;

interface EmployeeRepository extends JpaRepository<Employee, Long> {
          //JPA를 사용하여 DB와 연동하기 위한 클래스 선언
}
@GetMapping("/employees")
List<Employee> all() {
    return repository.findAll();   //DB의 모든 데이터를 반환 
}

@PostMapping("/employees")
Employee newEmployee(@RequestBody Employee newEmployee) {
    return repository.save(newEmployee);      //DB에 대로운 객체 저장
}

 

 

3. 결론적으로

 - 스프링을 사용하면 모듈화 하기 좋고 매우 유연한 코드 작성 가능

 - 안정적인 라이브러리 제공으로 프로그램의 품질 관리, 유지보수성 향상

 - 프로그래머의 개발 속도 향상 

 

 


아파치 라이선스 2.0

 아파치 소프트웨어 재단에서 자체적으로 만든 소프트웨어에 대한 라이선스 규정. 누구나 해당 소프트웨어에서 파생된 프로그램을 제작할 수 있으며 저작권을 양도, 전송할 수 있다. 아파치 라이선스에 따르면 누구든 자유롭게 아파치 소프트웨어를 다운 받아 부분 혹은 전체를 개인적 혹은 상업적 목적으로 이용할 수 있으며 재배포시에는 원본 소스 코드 또는 수정한 소스 코드를 반드시 포함시켜야 하는 것은 아니고 아파치 라이선스, 버전 2.0을 포함시켜야 하며 아파치 소프트웨어 재단에 개발된 소프트웨어라는 것을 명확하게 밝혀야 한다.

 

 

'스터디' 카테고리의 다른 글

테스트 주도 개발, JUnit  (0) 2020.08.05
인터넷 일반  (0) 2020.07.14

+ Recent posts