728x90
Spring🍃 (Sprinig Framework)
개발자들의 겨울은 끝났다
Spring Framework는 자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크로, 간단히 Spring이라고 불린다
동적인 웹 사이트를 개발하기 위한 여러 가지 서비스를 제공하고 있다
대한민국 공공기관의 웹 서비스 개발 시 사용을 권장하고 있는 전자정부 표준 프레임워크의 기반 기술로 사용된다
Spring의 장점
- 경량 컨테이너
- IoC (Invertion of Control : 제어의 역전)
- 객체의 생성을 특별한 관리 위임 주체에게 맡긴다
- 이 경우 사용자는 객체를 직접 생성하지 않고, 객체의 생명주기를 컨트롤하는 주체가 다른 주체가 된다
- 즉, 사용자의 제어권을 다른 주체에게 넘기는 것을 IoC라고 한다
- Spring의 IoC란 클래스 내부의 객체 생성 -> 의존성 객체의 메소드 호출 이 아닌 스프링에게 제어를 위임하여 스프링이 만든 객체를 주입 -> 의존성 객체의 메소드 호출 구조이다
- DI (Dependency Injection : 의존성 주입)
- 어떤 객체를 사용하는 주제가 객체를 직접 생성하는게 아니라 객체(B)를 외부(Spring)에서 생성해서 사용하려는 주체 객체(A)에 주입시켜주는 방식이다
- 이렇게 외부에서 직접 생성하여 관리하는 경우에는 객체 간의 의존성이 줄어든다
- AOP(Aspect-Oriented Programming : 관점 지향 프로그래밍)
Spring Boot ♻
Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can "just run"
▷ Spring Boot는 그냥 실행시키면 되는 단독적인 상용화 수준의 스프링 기반 애플리케이션을 쉽게 만들 수 있도록 해준다!
Spring Boot : Spring을 더 쉽게 이용하기 위한 도구
- Spring Framework는 기능이 많은만큼 환경 설정이 복잡한 편이다
- 이에 어려움을 겪는 사용자들을 위해 나온 것이 Spring Boot이다
- Spring Boot는 Spring Framework를 사용하기 위한 설정의 많은 부분을 자동화하여 사용자가 보다 편하게 Spring을 사용할 수 있도록 해준다
- Spring 프레임워크를 쉽게 사용할 수 있는 라이브러리이다!
- Spring Boot는 starter dependency만 추가하면, 바로 API를 정의하고 내장된 Tomcat이나 Jetty로 웹 애플리케이션 서버를 실행할 수 있다
- 심지어 Spring 홈페이지의 initializer를 사용하면 바로 실행 가능한 코드를 만들어준다
- 실행 환경이나 의존성 관리 등의 인프라 관련 부분은 신경 쓸 필요 없이 바로 코딩을 하면 되는 것이다!
Spring Boot의 장점
1. 간편한 설정
2. 편리한 의존성 관리 & 자동 권장 버전 관리
3. 내장 서버로 인한 간단한 배포 서버 구축
4. 스프링 Security, Data JPA 등의 다른 스프링 프레임워크 요소를 쉽게 사용한다
즉, 개발자들이 개발에만 더욱 집중할 수 있도록 해준다
Spring vs Spring Boot
- Spring Boot는 Spring Boot 내장 서버인 Embedded Tomcat을 사용하기 때문에 따로 Tomcat을 설치하거나 매번 버전 관리를 할 필요가 없다
- Spring Boot는 starter를 통한 dependecy 자동화가 이뤄진다
- Spring Framework에서는 각각의 dependecy들이 호환되는 버전을 일일이 맞춰야 했기 때문에 하나의 버전을 올리기 위해 다른 dependency까지 바꿔야 한다는 버전 관리의 어려움이 있었다
- 하지만 Spring Boot에서는 starter를 통해 대부분의 dependency를 관리할 수 있기 때문에 버전 관리가 편해졌다
- XML 설정을 하지 않아도 된다
- jar 파일을 이용해 자바 옵션만으로 손쉽게 배포가 가능하다
- Spring Actuaor를 이용한 애플리케이션의 모니터링과 관리를 제공한다
1. dependency 관리
- Spring 프로젝트를 구성하려면 필요한 라이브러리들에 대해 모두 알아야 하고 이들을 초반에 세팅해야 했다
- 또한 구성을 하기 위해 모든 dependency들에 대한 버전 호환성도 알아야 하고, 버전 관리 또한 해야 했다
- 그러나 Spring Boot에서는 spring-boot-starter를 통해 보다 쉽고 간편하게 dependency 설정이 가능하다
2. 설정 방법
- Spring에서는 하나하나 bean을 생성하고 관리 또한 직접 해야 했다
- 그러나 Spring Boot에서는 이 중 많은 부분을 @SpringBootApplication이라는 Spring Boot의 선언으로 간편하게 사용이 가능하다
- @SpringBootApplication은 @Configuration + @EnableAutoConfiguration + @ComponentScan 을 뜻한다
- 이를 통해 설정 자동화 및 Component Scan까지 하겠다는 뜻이다
- @EnableAutoConfiguration은 Spring Boot의 meta 파일을 읽어서 미리 정의되어 있는 자바 설정 파일(@Configuration)들을 Bean으로 등록하는 역할을 수행한다
- 이 때 meta 파일은 spring.factories 파일을 뜻한다
3. Embedded WAS
- Spring으로 구성된 application은 일반적으로 WAS(Tomcat JEUS, WebLogic) 위에서 배포되어 동작된다
- 하지만 Spring Boot에는 내장 WAS가 있어서 jar(또는 war)만 가지고 자체적으로 application을 실행시킬 수 있다
- 이는 Container 환경에서 아주 유용하게 사용이 가능하다
- Spring Boot는 여러가지 종류의 내장 WAS를 가지고 있고, 이 중 하나를 선택해서 사용 여부 또한 선택이 가능하다
Spring Boot Starter란?
spring-boot-starter-*
- starter란 특정 목적을 달성하기 위한 의존성 그룹이라고 생각하면 쉽다
- 마치 npm처럼 간편하게 dependency를 제공해주는데, 만약 우리가 JPA가 필요하다면 pom.xml(maven)이나 build.gradle(gradle)에 'spring-boot-starter-data-jpa'만 추가하면 spring boot가 그에 필요한 라이브러리를 알아서 받아온다
- starter의 명명 규칙은 위와 같다
- 위에서 * 부분에 원하는 스타터명을 명시하면 된다
- 이를 통해 쉽게 원하는 라이브러리를 import 할 수 있다
💡 properties vs yml
yml 파일을 사용하면 중복 제거도 되고, 내용을 depth로 표현하기 때문에 훨씬 사람이 읽기 좋은 즉, humanable하게 설정 파일을 작성할 수 있다
[참고] yml 은 YAML에서 유래한 확장자이다
✨결론
- Spring이 자유 여행이라면, Spring Boot는 패키지 여행같은 느낌이다
- Spring은 dependency를 일일이 추가해줘야 하는 번거로움이 있지만, 최적화를 할 때는 강점이 있다
- Spring Boot는 편하게 설정이 가능하지만, 수많은 dependency가 내재되어 있어 이를 최적화하기 위한 노력이 필요하다
참고)
https://melonicedlatte.com/2021/07/11/174700.html
https://oingdaddy.tistory.com/403
https://youtube.com/watch?v=6h9qmKWK6Io&feature=share
728x90
'야미스터디 > Spring' 카테고리의 다른 글
[Spring] maven vs gradle 📌 (0) | 2022.08.18 |
---|---|
[Spring] Spring Servlet 📌 (0) | 2022.08.13 |
[Spring Boot] Gradle 버전과 OAuth2.0 구현 관련 (0) | 2022.04.12 |
3강 메세지 컨버터가 무엇인가요? (0) | 2022.01.10 |
2강 필터란 무엇인가요? (0) | 2022.01.07 |
댓글