Spring이란?
Spring Framework는 Java 생태계에서 가장 대중적인 응용프로그램 개발 프레임워크다.
프레임워크란 라이브러리를 포함하는 개념이고 개발자가 만든 코드를 사용한다.
코드를 어떻게 실행하는지는 코드를 사용하는 프레임워크에 달려있다.
라이브러리는 간단하게 특정 기능을 하는 코드뭉치다. 개발자는 자기 코드에 라이브러리를 포함시키고
원하는 기능을 사용해서 개발을 할 수 있다. 원하는 기능을 하는 함수를 콜해서 사용하는 것으로
라이브러리를 활용한다.
의존성주입(Dependency Injection, DI)과 제어의 역전(Inversion Of Control, IOC)은 스프링에서
가장 중요한 특징 중 하나다.
이들로 인해 좀 더 결합도를 낮추는 방식으로 Application을 개발할 수 있다.
이러한 개발방식으로 개발한 응용프로그램은 단위테스트가 용이하기 때문에 보다 높은 퀄리티의
프로그램을 개발 할 수 있다.
스프링 프레임워크에는 많은 기능들이 있는데 그 기능들은 약 스무개의 모듈로 나누어져 있으며
흔히 발생하는 문제들을 해결하고 있다.
대중적인 모듈로는 Spring JDBC, Spring MVC, Spring AOP, Spring ORM, Spring JMS, Spring Test,
Spring Expression Language(SpEL)등이 있다.
관점지향 프로그래밍(Aspect Oriented Programming, AOP)은 Spring Framework에서 아주 강력한
기능이다.
객체지향 프로그래밍(Object Oriented Programming, OOP)에서 중요 키포인트는 Class다.
반면 AOP에서는 관점(Aspect)다.
예를들어, 기존 프로젝트에 security나 logging등을 추가하고 싶을 때 기존 비즈니스 로직에는 손을 대지 않고
AOP를 활용하여 추가할 수 있다.
Spring은 Spring만의 ORM을 갖고 있지 않다. 그러나 Hibernate, Apache Ibatis 등과 같은 ORM과의 매우
우수한 통합환경을 제공한다.
정리하자면 Spring Framework는 Web Application을 개발하는데 결합도를 낮추는 방향의 개발 방법을 제공한다고
말할 수 있다.
Web Application 개발은 Spring의 이러한 컨셉(Dispatcher Servlet, Model And View, View Resolver) 덕분에
쉬운 개발을 할 수 있게 되었다.
SpringBoot란?
Spring Framework는 기능이 많은 만큼 환경설정이 복잡한 편이다. 이에 어려움을 느끼는 사용자들을 위해
나온 것이 바로 SpringBoot다.
Spring Framework를 사용하는 프로젝트를 아주 간편하게 셋업할 수 있는 Spring Farmework의 서브 프로젝트로
Spring을 사용하기 위한 설정의 많은 부분을 자동화하여 사용자가 정말 편하게 Spring을 활용할 수 있도록 돕는다.
SpringBoot Starter Dependency만 추가해주면 바로 API를 정의하고 내장된 Tomcat이나 Jetty로
Web Application Server를 실행할 수 있다.
실행환경이나 의존성 관리 등의 인프라 관련 등은 신경 쓸 필요없이 바로 코딩을 시작하면 된다.
프로젝트 생성시에 Spring에서의 복잡한 설정이 아닌 통합된 설정 파일인 application.yml로 간단하게 사용할 수 있다.
SpringBoot의 starter란?
특정 목적을 달성하기 위한 의존성 그룹이라고 볼 수 있다. starter는 마치 npm처럼 간단하게 dependency를
제공해주는데 만약 JPA가 필요하다면 pom.xml(메이븐)이나 build.gradle(그래들)에
'spring-boot-starter-data-jpa' 만 추가해주면 SpringBoot가 그에 필요한 라이브러리들을 알아서 받아온다.
starter의 명명규칙은 'spring-boot-starter-*' 다.
JPA 예시에서처럼 * 부분에 원하는 starter명을 명시하면 된다.
명명규칙을 알면 손쉽게 원하는 라이브러리를 import할 수 있다.
Spring과 SpringBoot의 차이점은?
SpringBoot에는 Embeded Tomcat이 내장되어 있기 때문에 Tomcat을 따로 설치하거나 매번 버전관리를 해줘야하는
수고를 덜어준다.
SpringBoot에서는 starter를 통한 Dependency가 자동화 되어있기 때문에 Spring에서 각각의 dependency가 호환되는
버전을 맞춰주고 하나의 버전을 변경하면 나머지도 다 확인해야하는 번거로움이 사라졌다.
그리고 XML설정을 하지 않아도 되며 jar file을 이용해 자바 옵션만으로도 쉽게 배포가 가능하다.
Web 기반인 Application은 Tomcat이든 WAS든 Web Container가 설치되어 있어야 한다.
하지만 비교적 규모가 작은 형태의 Application을 실행시키기 위해 그보다 큰 WAS를 따로 설치하기에는 그다지
효율적이지 않다.
이런 경우에는 Embeded Container에서 자신의 Application을 실행하도록 SpringBoot를 쓰는게 적당하다.
하지만 비교적 규모가 큰 웹사이트의 경우 이런 구조로 만드는것 보다는 Spring MVC형태로 만들어
WAS에 배포하는 슷타일이 낫다.
규모가 크다보니 Embeded Container에서 Application을 실행시키기엔 불안정하기도 하고 WAS에서 관리되는
데이터 소스나 메시지 서비스를 이용할 수 있기 때문이다.
즉, 어느정도의 서비스를 하는지에 따라 Spring과 SpringBoot에 대한 선택이 달라지는것 같다고 볼 수 있다.
Spring과 SpringBoot는 해결하고자 하는 문제가 다르다.
Spring은 의존성주입을 통해 객체간의 결합도를 낮추어 코드 재사용성을 향상시키고 단위테스트를 용이하게 할 수
있도록 해준다.
Duplicatation / Plumbing Code(반복되는 코드들)를 제거함으로써 개발자가 비즈니스 로직에만 집중할 수 있도록 하며
다른 프레임워크와의 통합(Intergration with Other Frameworks)으로 Mockito와 같은 다른 프레임워크와 통합하여
개발자가 비즈니스 로직 외에 신경써야 할 부분을 덜어준다.
이는 생산성 향상에도 큰 도움을 준다.
SpringBoot는 최소한의 번거로움으로 Spring 기반의 Production급 응용프로그램 및 서비스를 쉽게 만들 수 있도록
하는 것을 목표로 한다.
따라서 SpringBoot는 다음과 같은 기능을 지원한다.
Auto Configuration - 자동설정
Easy dependency Management - 쉬운 의존성관리
Embeded Servlet Container Support - 내장 서블릿 컨테이너(내장서버)
여기서 Auto Configuration은 Sprint 기능을 위한 자동설정, starter 의존성을 통해 간단히 설정하는 것이다.
Spring과 SpringBoot는 전혀 다른 새로운 기술이 아니다. SpringBoot는 Spring Framework라는 큰 틀에 속하는
도구라고 볼 수 있다.
레퍼런스
● monkey3199.github.io/develop/spring/2019/04/14/Spring-And-SpringBoot.html
'Spring' 카테고리의 다른 글
Spring MVC (Front Controller Pattern) (0) | 2021.02.17 |
---|---|
Spring MVC (0) | 2021.02.16 |
mybatis null값처리. (0) | 2020.10.29 |
getRealPath("") 경로 wtpwebapps에서 변경하기 (0) | 2020.10.29 |
The prefix "mvc" for element "mvc:interceptors" is not bound. (0) | 2020.10.21 |