프로그래밍 공부

Spring 전체 구조 알아보기(주요 모듈) 및 정리 본문

Programming/Spring

Spring 전체 구조 알아보기(주요 모듈) 및 정리

khj1999 2025. 2. 10. 21:32

Spring 에 대해

Spring은 대규모 엔터프라이즈 애플리케이션을 효율적으로 개발하기 위한 프레임워크로,

유연하고 확장성이 뛰어난 모듈화된 구조를 가지고 있다.

1. Spring 프레임워크란?

Spring 프레임워크(Spring Framework)는 자바 기반 엔터프라이즈 애플리케이션 개발을 위한 경량 컨테이너다.

주요 특징은 다음과 같다.

경량 컨테이너: IoC/DI를 활용하여 객체를 효율적으로 관리

AOP 지원: 공통 기능을 분리하여 코드 중복을 줄임

트랜잭션 관리: 일관된 트랜잭션 관리 기능 제공

다양한 기술과 통합 가능: JPA, Hibernate, MyBatis, RabbitMQ, Kafka 등 다양한 기술과 호환


2. Spring의 주요 모듈

Spring은 필요한 기능을 모듈화하여 제공하며,

핵심적인 코어(Core) 모듈웹(Web) 모듈, 데이터(Data) 모듈 등으로 구성된다.

(1) Spring Core 모듈 (필수)

모듈 설명

Spring Core IoC/DI(의존성 주입)를 통한 객체 관리
Spring Beans 빈(Bean)의 라이프사이클과 DI 기능 제공
Spring Context 다양한 설정(XML, Java Config) 및 애플리케이션 컨텍스트 제공
Spring Expression Language (SpEL) 객체 그래프를 탐색하고 조작할 수 있는 표현식 언어

📌 핵심 개념:

  • IoC(Inversion of Control): 객체 생성 및 관리를 스프링 컨테이너가 담당
  • DI(Dependency Injection): 객체 간의 의존성을 설정 파일이나 어노테이션으로 주입

(2) Spring AOP & Aspects 모듈

모듈 설명

Spring AOP 관점 지향 프로그래밍(AOP)을 지원
Spring Aspects AspectJ와 통합하여 AOP 기능 강화

📌 AOP(Aspect-Oriented Programming)란?

  • 로깅, 보안, 트랜잭션 등 공통 기능을 모듈화하여 코드 중복을 줄이는 기술
  • 예: @Transactional, @Aspect 등을 활용

(3) Spring Data Access & Integration 모듈

모듈 설명

Spring JDBC JDBC API를 더 쉽게 사용할 수 있도록 지원
Spring ORM Hibernate, JPA, MyBatis 등과 통합 지원
Spring Transaction 선언적 트랜잭션 관리 지원
Spring Messaging 메시지 브로커(Kafka, RabbitMQ) 연동

📌 JPA 사용 예제 (Spring Data JPA)

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
    List<User> findByName(String name);
}


(4) Spring Web & MVC 모듈

모듈 설명

Spring Web 기본적인 웹 애플리케이션 개발 지원
Spring Web MVC Spring MVC 아키텍처 기반 웹 애플리케이션 개발
Spring WebFlux 리액티브 프로그래밍 지원 (비동기/논블로킹)

📌 Spring MVC 컨트롤러 예제

@RestController
@RequestMapping("/users")
public class UserController {
    private final UserService userService;

    @GetMapping("/{id}")
    public ResponseEntity<User> getUser(@PathVariable Long id) {
        return ResponseEntity.ok(userService.getUserById(id));
    }
}


(5) Spring Security & Testing 모듈

모듈 설명

Spring Security 인증 및 인가(로그인, 권한 관리) 지원
Spring Test 단위 테스트 및 통합 테스트 지원

📌 Spring Security 설정 예제

@Configuration
@EnableWebSecurity
public class SecurityConfig {
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http.authorizeHttpRequests(auth -> auth.anyRequest().authenticated())
            .formLogin();
        return http.build();
    }
}


3. Spring Boot vs Spring Framework

비교 항목 Spring Framework Spring Boot

설정 방식 XML, Java Config 필요 설정 최소화 (자동 설정)
내장 서버 별도 설정 필요 기본적으로 내장 Tomcat 제공
종속성 관리 개별 라이브러리 추가 spring-boot-starter 사용
배포 방식 WAR 파일로 배포 실행 가능한 JAR 파일로 배포

📌 Spring Boot는 Spring Framework를 기반으로 개발을 편리하게 만든 프레임워크다.


4. Spring의 주요 프로젝트

Spring은 핵심 프레임워크 외에도 다양한 확장 프로젝트를 제공한다.

프로젝트 설명

Spring Boot 설정이 간편한 Spring 개발 환경 제공
Spring Cloud 마이크로서비스 아키텍처(MSA) 지원
Spring Data JPA, NoSQL, Redis, MongoDB 연동
Spring Security 인증/인가, OAuth2, JWT 지원
Spring Batch 대량 데이터 처리 배치 시스템
Spring WebFlux 리액티브 웹 애플리케이션 개발

5. 결론

✔ Spring은 모듈화된 구조로 필요한 기능만 선택하여 사용할 수 있음

✔ Spring Boot를 사용하면 설정을 최소화하여 빠르게 애플리케이션을 개발 가능

✔ Spring Cloud 등 확장 프로젝트를 활용하면 마이크로서비스대규모 시스템 구축 가능

Comments