반응형
이번 포스트에서는 스프링 프레임워크가 무엇인지 알아보자
1. 스프링 프레임워크란?
스프링 프레임워크란 Java언어를 기반으로 한 엔터프라이즈급 application을 만들기 위한 강력하고 통합적인 프레임워크이다. 핵심적인 목표는 Java 엔터프라이즈 개발을 더 쉽고 효율적으로 만드는 것이다.
1. 스프링 프레임워크의 핵심기능 및 특징
1-1. 의존성 주입 (Dependency Injection, DI):
- 스프링 프레임워크의 가장 중요한 특징 중 하나이다.
- DI는 각 객체간의 의존성을 코드 내부에서 정의하는 것이 아니라, 외부(프레임워크)에서 주입하는 기법이다. 이를 통해서 코드의 결합도를 낮추고, 유연성과 테스트 용이성을 향상시킨다.
1-2. 관점 지향 프로그래밍 (Aspect-Oriented Programming, AOP):
- AOP는 광범위하게 쓰이는 기능을 모듈화하는 프로그래밍 패러다임이다.
- 예를 들어, 로깅, 트랜잭션 관리, 보안 등의 공통 관심사(cross-cutting concern)를 분리하여 코드의 중복을 줄이고, 가독성과 유지 관리성을 향상시킨다.
1-3. 데이터 접근과 트랜잭션 관리:
- 스프링은 JDBC, JPA, Hibernate 등 다양한 데이터 접근 기술에 대한 지원을 제공하며, 이를 추상화하여 일관된 데이터 접근 코드를 작성할 수 있게 한다.
- 또한, 선언적 트랜잭션 관리를 지원하여 데이터의 일관성을 유지하는 데 도움을 준다.
1-4. 스프링 MVC:
- 스프링 프레임워크는 웹 어플리케이션을 개발하기 위한 MVC(Model-View-Controller) 패턴을 구현한 프레임워크인 스프링 MVC를 포함하고 있다.
- RESTful 웹 서비스, 웹 사이트, 웹 애플리케이션 등을 구축하는 데 사용된다.
1-5. 스프링 시큐리티:
- 인증과 권한 부여, 공격으로부터의 보호 등의 보안 관련 기능을 제공한다.
1-6. 테스트 지원:
- 스프링은 JUnit 등의 테스팅 프레임워크와 잘 통합되며, 스프링 테스트 모듈을 통해 스프링 어플리케이션의 단위 테스트 및 통합 테스트를 지원한다.
1-7. 모듈화:
- 스프링 프레임워크는 여러 개의 모듈로 이루어져 있다.
- 이 모듈들은 각각의 책임을 가지고 있어 개발자가 필요한 기능만 선택하여 사용할 수 있다.
- 예를 들어, 스프링 웹 MVC는 웹 애플리케이션 개발에 필요한 기능을 제공하고, 스프링 보안은 애플리케이션의 보안 관련 기능을 제공합니다.
1-8. POJO(Plain Old Java Object) 기반:
- 스프링은 POJO를 이용한 경량 개발을 지향한다.
- POJO는 복잡한 엔터프라이즈 기술에 종속되지 않는 단순한 Java 객체를 의미한다.
- 이를 통해 불필요한 상속 트리나 구현 클래스 없이 객체지향적인 설계를 할 수 있다.
1-9. 선언적 트랜잭션 관리:
- 스프링은 트랜잭션 관리를 위한 선언적 방법을 제공한다.
- 이를 통해 개발자는 비즈니스 로직에만 집중하면서 트랜잭션을 안전하게 관리할 수 있다.
1-10. 뛰어난 통합 지원:
- 스프링은 JPA, Hibernate, MyBatis 등의 ORM(Object-Relational Mapping) 기술과 JUnit, Mockito 등의 테스트 프레임워크와의 통합을 원활하게 지원한다.
- 또한, Spring Boot라는 프로젝트를 통해 매우 빠르고 편리하게 스프링 기반의 애플리케이션을 개발하고 배포할 수 있다.
1-11. Event Handling:
- 스프링은 이벤트 리스너를 등록하는 방식으로 이벤트를 처리할 수 있는 기능을 제공한다.
- 이를 통해 특정 이벤트가 발생하면 자동으로 특정 로직을 수행할 수 있다.
2. 스프링 부트란?
Spring Boot는 스프링 프레임워크를 더욱 쉽게 사용할 수 있도록 도와주는 도구이다.
- Spring Boot의 주요 목표는 Spring 기반의 애플리케이션 개발을 빠르고, 쉽게, 편리하게 하는 것이다. Spring Boot는 기본 설정을 자동화하고, 개발자가 꼭 필요한 부분에만 집중할 수 있도록 도와준다.
Spring Boot의 주요 특징들
1. 스타터 의존성(Starter Dependencies):
- Spring Boot는 스타터 의존성을 통해 관련된 라이브러리들을 편리하게 관리할 수 있다.
- 예를 들어, spring-boot-starter-web 의존성을 추가하면 Spring MVC와 관련된 여러 라이브러리들을 한번에 가져올 수 있다.
- 이렇게 함으로써 개발자는 개별 라이브러리의 버전 관리에 신경 쓰지 않아도 된다.
2. 자동 설정(Auto-Configuration):
- Spring Boot는 애플리케이션에 필요한 기본 설정을 자동으로 해준다.
- 예를 들어, spring-boot-starter-web 의존성을 추가하면, Spring Boot는 웹 애플리케이션 개발에 필요한 기본 설정들을 자동으로 해준다. 이렇게 함으로써 개발자는 복잡한 설정 작업 없이 바로 애플리케이션 개발에 들어갈 수 있다는 장점이 있다.
3. 내장 서버(Embedded Server):
- Spring Boot는 Tomcat, Jetty, Undertow 같은 서버를 내장하고 있어 별도의 WAS를 설치할 필요가 없다.
- 애플리케이션을 JAR 파일로 패키징하면 그것만으로도 독립적으로 실행 가능한 애플리케이션을 만들 수가 있다.
4. Actuator:
- Spring Boot는 애플리케이션의 상태를 모니터링하고 관리하는 기능을 제공한다.
- 이를 통해서 애플리케이션의 다양한 정보(예: 메트릭스, 헬스체크, 환경 설정 등)를 쉽게 확인할 수 있다.
5. 테스트 지원:
- Spring Boot는 spring-boot-starter-test 스타터를 통해 JUnit, Mockito, Hamcrest 등의 유명한 테스트 라이브러리들을 통합한 테스트 지원을 제공한다. 이를 통해 단위 테스트와 통합 테스트를 쉽게 작성할 수 있다.
6. 생산성 향상:
- 위의 모든 기능들은 개발자가 애플리케이션 개발에 집중할 수 있도록 도와주며, 이로 인해 개발 시간을 단축하고 생산성을 향상시킬 수 있다.
2023.08.07 - [Spring 기초/기초 지식] - Spring Container (스프링 컨테이너)
반응형
'Spring 기초 > Spring 기초 지식' 카테고리의 다른 글
스프링의 핵심: Singleton 패턴 알아보기 (0) | 2023.08.07 |
---|---|
스프링 프레임워크의 핵심: 제어의 역전(IoC) (0) | 2023.08.07 |
[스프링, 스프링부트] Spring - 의존성 주입(DI - Dependency Injection) (0) | 2023.08.07 |
[스프링, 스프링부트] Spring Container (스프링 컨테이너) (0) | 2023.08.07 |
[스프링, 스프링부트] Spring - @Bean과 @Component (0) | 2023.07.20 |