1. Spring 프레임워크
1.1. Spring이란
- Spring은 효율적으로 개발할 수 있도록 지원하는 경량 오픈소스 프레임워크
- 기존의 복잡한 Java EE 기반 개발의 단점을 보완하여 등장
- POJO(Plain Old Java Object) 프로그래밍과 의존성 주입(DI, Dependency Injection) 및 관점 지향 프로그래밍(AOP, Aspect-Oriented Programming) 같은 기능을 중심으로 설계됨
1.2. Spring의 핵심 개념
1.2.1. IoC (Inversion of Control)
- 객체의 생성과 생명 주기를 개발자가 관리하지 않고, spring컨테이너가 관리
- 주로 의존성 주입(DI) 으로 구현됨
예 : `@Autowired` 를 통한 주입
1.2.2. AOP (Aspect-Oriented Programming)
- 로깅, 트랜잭션, 보안 등 공통 관심사를 핵심 비즈니스 로직과 분리
- 어노테이션이나 XML로 정의 가능
예 : `@Aspect`, `@Before`, `@After`
1.2.3. POJO 기반 개발
- Spring 은 표준 Java 객체(POJO)를 이용하고 간단하고 가벼운 코딩 스타일을 지향
1.2.4. Declarative Programming
- 설정 파일(XML) 또는 애너테이션 기반으로 많은 작업을 선언적으로 처리
1.2.5. 트랜잭션 관리
- Spring은 선언적 트랜잭션 관리(Declarative Transaction Management)를 지원
1.3 Spring 의 주요 모듈
1.3.1. Core Container
- IoC와 DI를 제공
- `BeanFactory`, `ApplicationContext` 포함
1.3.2. AOP
- 횡단 관심사를 처리
1.3.3. Data Access
- 데이터베이스 연동 (JDBC, ORM 등)
1.3.4. Web
- MVC 아키텍처를 지원
- DispatcherServlet, ViewResolver 등 제공
1.3.5. Security
- 인증 및 권한 부여
- `Spring Security` 모듈
1.3.6. Test
- JUNIT 및 Mock 객체 테스트를 지원
1.4. Spring의 장단점
장점
- 모듈화 및 유연성: 필요한 모듈만 선택적으로 사용 가능
- 플랫폼 독립성: Java 기반으로 다양한 환경에서 실행 가능
- 강력한 커뮤니티: 오랜 역사와 대규모 커뮤니티
- 확장 가능성: 다양한 서드파티 라이브러리 및 스프링 프로젝트(Spring Security, Spring Data 등)와 연동 가능
단점
- 설정 복잡성: XML 및 자바 설정 파일이 많아질 수 있음.
- 초기 설정 부담: 프로젝트 시작 시 많은 설정이 필요.
2. Spring Boot
2.1. Spring Boot란
- Spring 기반 애플리케이션 개발을 더욱 간편하게 만들어주는 Spring 프레임워크의 확장판
- Convention over Configuration (설정보다 관례중시) 원칙을 따름
- Spring 애플리케이션 개발 시 필요한 설정을 자동화하고 간소화하여 더 빠르게 개발할 수 있도록 지원
2.2. Spring Boot 의 핵심 특징
2.2.1. 자동 설정
- `@EnableAutoConfiguration` 또는 `@SpringBootApplication`어노테이션을 통해 Spring 설정을 자동화
2.2.2. 임베디드 서버 지원
- Tomcat, Jetty 같은 서버를 내장하여 애플리케이션을 실행 파일로 쉽게 실행 가능
- 별도의 WAS(웹 어플리케이션 서버) 설치가 필요 없음
2.2.3. 의존성 관리
- starter 패키지를 통해 필요한 의존성을 손쉽게 추가 가능
예 : `spring-boot-starter-web`, `spring-boot-starter-data-jpa`
2.2.4. 애플리케이션 실행
- `main()`메서드와 함께 `SpringApplication.run()`을 사용하여 실행
2.2.5. Actuator
- 애플리케이션의 상태를 모니터링하고 관리할 수 있는 엔드포인트 제공
2.3. Spring Boot의 주요 모듈
2.3.1. Spring Boot Starter
- 다양한 의존성을 패키지로 제공
2.3.2. Spring Boot CLI
- 커맨드라인 도구로 간단한 애플리케이션을 빠르게 작성 가능
2.3.3. Spring Boot Actuator
- 애플리케이션 상태를 모니터링하고 관리
2.3.4. Spring Boot DevTools
- 개발 편의를 위한 도구 (Hot Reload 등)
2.4. Spring Boot의 장단점
장점
- 빠른 개발: 설정이 자동화되어 초기 개발 시간이 단축
- 내장 서버: 실행 파일로 패키징 가능하여 배포가 용이
- 간편한 설정: XML 설정을 거의 제거하고 애너테이션으로 대체
- 테스트 용이성: 내장 도구와 간단한 설정으로 테스트 가능
단점
- 자동 설정의 불투명성: 복잡한 프로젝트에서는 자동 설정이 어떻게 동작하는지 파악하기 어려울 수 있음
- 비교적 높은 메모리 사용량: 내장 서버와 자동 설정으로 인해 메모리 소비가 증가
3. Spring vs Spring Boot
특징 | Spring | Spring Boot |
설정 방식 | 수동 설정(XML, Java Config)필요 | 설정 자동화(`@SpringBootApplication`) |
내장 서버 | 제공되지 않음 | 제공됨(Tomcat, Jetty등) |
시작 속도 | 초기 설정 시간이 비교적 길다 | 빠른 프로젝트 시작 가능 |
의존성 관리 | 수동 관리 | Starter 프로젝트로 의존성 간소화 |
운영 및 모니터링 | 별도 설정 필요 | Actuator로 간단히 관리 가능 |
4. Spring과 Spring Boot의 연관성
- Spring Boot는 Spring 프레임워크를 기반으로 동작하며, Spring을 더 쉽게 사용할 수 있도록 돕는 도구다
- Spring Boot를 통해 Spring 프레임워크의 기능을 최소한의 설정으로 사용할 수 있다
5. Spring Boot 사용 예제
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@RestController
@RequestMapping("/api")
public class HelloController {
@GetMapping("/hello")
public String sayHello() {
return "Hello, Spring Boot!";
}
}
- 위 코드는 최소한의 설정으로 간단한 RESTful API를 구현한 예제임
- 내장 Tomcat 서버를 통해 실행 가능
출처 : ChatGPT
'BE > Spring & Spring Boot' 카테고리의 다른 글
[Spring Boot] 빈이란 (1) | 2024.12.15 |
---|---|
[Spring Boot] ApplicationRunner (0) | 2024.12.14 |
[Spring Boot] ORM, @Query (1) | 2024.12.14 |
[Spring Boot] 어노테이션 (0) | 2024.12.11 |
[Sping Boot] Spring Initializr, 프로젝트 구조 (0) | 2024.12.10 |