Backend/Spring(이론)

스프링(Spring)과 스프링 부트(Spring Boot)

재성스 2023. 9. 24. 03:58
반응형

스프링의 도입

스프링 도입 이전, JAVA 엔터프라이즈 애플리케이션 개발을 위해 EJB(Enterprize JavaBeans)라는 표준 컴포넌트 모델을 사용했었다. 초기 EJB는 매우 복잡한 API와 설정, 성능 문제 등 많은 문제가 있어, 개발자들이 개발하는 데에 많은 어려움을 겪었다. EJB3.0부터는 더 간단하고 가벼운 프로그래밍 모델을 제공하며 개발자 경험을 대폭으로 개선했으나, 2003년 로드 존슨(Rod Johnson)이 개발한 경량 프레임워크인 스프링과 경쟁하면서 EJB의 인기가 감소하게 되었다.


스프링(Spring)

스프링은 자바 기반 애플리케이션을 개발하기 위해 다양한 기술들을 제공하는 프레임워크이다.

 

핵심 기술

  • 스프링 DI 컨테이너 : 의존성 주입(Dependency Injection)을 관리하고 제어하는 역할 
  • AOP : 관점 지향 프로그래밍 (관심사 분리) 
  • 이벤트

 

웹 기술

  • 스프링 MVC(Model-View-Controller): 웹 요청 및 응답 처리를 효과적으로 관리하며, 유연하고 확장 가능한 웹 애플리케이션을 만들 수 있도록 도와주는 소프트웨어 디자인 패턴
  • 스프링 WebFlux: MVC와 같이 일종의 소프트웨어 디자인 패턴이며, 논블로킹 방식으로 동작하는 리액티브 스트림 프로그래밍을 지원한다. 
*참고* 논블로킹 방식이란? 비동기 방식의 하나로 작업이 다른 작업을 대기하지 않고 계속 진행될 수 있는 방식을 의미한다.

 

데이터 접근 기술

  • 트랜잭션: 데이터베이스 시스템에서 동시성 제어 및 회복(복구) 작업을 위해 처리되는 작업의 논리적 단위
  • JDBC: 자바 프로그램이 데이터베이스에 접근하기 위한 자바 표준 API
  • ORM지원 : 객체와 데이터베이스의 관계를 매핑(연결)해주는 도구를 제공
  • XML지원 

 

기술 통합

  • 캐시: 메서드 호출 결과를 캐싱하고 관리하는 기능을 제공, 동일한 메서드 호출에 대한 결과를 저장하고 재사용한다. 이를 통해 반복적으로 동일한 계산을 수행하지 않아 성능을 향상시킬 수 있음.
  • 이메일 : JavaMail API를 기반으로, 이메일 발송을 위한 기능을 제공
  • 원격접근: 원격 서비스에 접근하고 원격 호출을 지원하는 다양한 방법을 제공, RMI(Java 원격 메서드 호출), HTTP(웹 서비스), JMS(자바 메시지 서비스) 등 다양한 프로토콜과 기술을 지원
  • 스케줄링 : 스케줄링 작업을 관리하고 예약된 작업을 실행하는 기능을 제공

 

테스트

  • 스프링 기반 테스트를 지원 : 스프링 자체적으로 테스트를 수행하고 테스트 환경을 설정하며, 스프링 애플리케이션 컨텍스트를 테스트 하기 위해 다양한 기능과 도구를 제공

 

언어

  • 코틀린(Kotlin): 정적 타입(변수 타입이 명시적) 언어로, 자바 코드와 호환성이 보장되고 간결한 문법, 널 안정성, 함수형 프로그래밍을 지원하며, Android 개발에 공식적으로 지원되는 언어이다.
  • 그루비(Groovy): 동적 타입 언어(변수 타입 검사 유연)로 자바의 강점 위에 파이썬, 루비, 스몰토크 등의 프로그래밍 언어에 영향을 받은 특장점을 더했고, 단순화된 문법을 지원하여 코드의 가독성과 유지 보수성이 편하다. 현재 Java프로젝트에서 가장 많이 사용된다. 
*참고* 코틀린, 그루비는 모두 JVVM에서 실행되는 언어이며, 코틀린은 정적 타입과 안정성을 강조하고 그루비는 유연한 문법과 DSL(도메인 특화 언어)작성에 적합하다.

스프링 부트 (Spring Boot) 및 스프링과의 차이점

스프링 프레임워크는 새로운 프로젝트를 시작할 때 많은 설정과 구성을 수동으로 작성해야하는 특징이 있다. 스프링 부트는 스프링을 편리하게 사용할 수 있도록 기능을 확장하고 단순화한 형태이다.  

자동 설정: 애플리케이션 개발에 필요한 설정을 대부분 자동으로 수행해준다. 

스타터 종속성: 웹 애플리케이션, 데이터베이스 액세스, 보안 등에 대한 스타터 의존성을 제공한다. 이 스타터 의존성을 추가하면 필요한 라이브러리 및 설정이 자동으로 포함된다.

내장 서버: 스프링 부트는 Tomcat 같은 웹 서버를 내장해서 별도의 웹 서버를 설치하지 않아도 된다.

관례에 의한 간결한 설정: 애플리케이션을 구성할 때 일반적으로 사용되는 설정 패턴과 관례를 제공한다. 패키지 구조 관례, 설정 파일 이름 관례, 자동 구성 관례, 포트 번호 관례 등 애플리케이션의 구성을 명시적으로 작성하지 않아도 기본적인 설정이 자동으로 이루어지게 지원하여 생산성을 향상시키고 오류 가능성을 줄이는 데 도움을 준다.


스프링은 Java 애플리케이션을 개발하는 데에 여러 유용한 도구들을 제공하는 프레임워크이다. 그러나, 스프링이 제공하는 가치는 단순한 개발 편의성을 넘어서 Java 언어의 핵심 특성 중 하나인 객체 지향 프로그래밍을 강조한다. 스프링은 자바  기반의 프레임워크로, 좋은 객체 지향 애플리케이션을 설계하고 개발하는 데 필요한 지침과 구조를 제공하는데 그 목적이 있다.

반응형