25.02.27 TIL Spring Framework

신성훈·2025년 2월 27일
0

TIL

목록 보기
140/162

1. Spring Framework란?

Spring Framework는 Java 기반의 애플리케이션 개발을 위한 경량 프레임워크입니다.
객체 지향 프로그래밍(OOP)과 디자인 패턴을 활용하여 유연하고 확장성 있는 애플리케이션을 개발할 수 있도록 지원합니다.

Spring의 핵심 특징:

  • DI(Dependency Injection, 의존성 주입) → 객체 간의 의존성을 효율적으로 관리
  • AOP(Aspect-Oriented Programming, 관점 지향 프로그래밍) → 공통 로직을 분리하여 재사용성 증가
  • POJO(Plain Old Java Object) 기반 개발 → 기존 Java 객체를 활용한 유연한 개발
  • MVC 아키텍처 지원 → 웹 애플리케이션을 위한 Model-View-Controller 패턴 제공
  • 트랜잭션 관리 → 선언적 트랜잭션을 통해 데이터 일관성을 보장
  • 유연한 확장성 → 다양한 기술과 손쉽게 통합 가능 (JPA, MyBatis, Kafka 등)

2. Spring Framework의 주요 모듈

Spring은 여러 모듈로 구성되어 있으며, 각 모듈은 독립적으로 사용 가능하지만 함께 조합할 수도 있습니다.

모듈설명
Spring CoreDI(의존성 주입)과 Bean 관리의 핵심
Spring AOP횡단 관심사(로깅, 보안) 처리 지원
Spring MVC웹 애플리케이션 개발을 위한 MVC 패턴 제공
Spring DataJPA, JDBC 등 데이터 접근 계층 지원
Spring Security인증 및 인가 기능 제공
Spring Boot설정 자동화 및 간편한 애플리케이션 개발 지원
Spring CloudMSA(Microservices) 환경에서 유용한 도구 제공
Spring Batch대량 데이터 처리와 배치 작업 지원

3. Spring의 핵심 개념

1) IoC(Inversion of Control, 제어의 역전)

  • 객체의 생성 및 생명주기 관리를 개발자가 아닌 Spring 컨테이너가 담당
  • @Component, @Service, @Repository, @Controller 애노테이션으로 자동 관리 가능

예) Spring 컨테이너를 이용한 객체 관리

@Component
public class UserService {
    public void sayHello() {
        System.out.println("Hello, Spring!");
    }
}
public class Main {
    public static void main(String[] args) {
        ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
        UserService userService = context.getBean(UserService.class);
        userService.sayHello();
    }
}

2) DI(Dependency Injection, 의존성 주입)

  • 객체 간의 의존성을 직접 생성하지 않고 Spring이 주입
  • 생성자, 필드, Setter 메서드를 통해 주입 가능

예) 생성자 주입

@Service
public class UserService {
    private final UserRepository userRepository;

    @Autowired
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
}

3) AOP(Aspect-Oriented Programming, 관점 지향 프로그래밍)

  • 로깅, 보안, 트랜잭션 처리와 같은 공통 기능을 분리하여 코드 중복을 줄임

예) 로깅 AOP 적용

@Aspect
@Component
public class LoggingAspect {
    @Before("execution(* com.example.service.*.*(..))")
    public void logBeforeMethod(JoinPoint joinPoint) {
        System.out.println("Method 실행: " + joinPoint.getSignature().getName());
    }
}

4. Spring MVC 구조

Spring을 활용하면 웹 애플리케이션을 쉽게 개발할 수 있습니다.

Spring MVC의 주요 구성 요소:

  • @Controller → 요청을 받아 처리하는 역할
  • @Service → 비즈니스 로직을 담당
  • @Repository → 데이터베이스와의 연결

예제: Spring MVC 컨트롤러

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

    @Autowired
    public UserController(UserService userService) {
        this.userService = userService;
    }

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

5. Spring Boot vs Spring Framework

Spring Boot는 Spring Framework의 설정을 간소화하여 빠른 개발 환경을 제공합니다.

비교 항목Spring FrameworkSpring Boot
설정XML, Java 설정 필요자동 설정 (AutoConfiguration)
서버 실행별도 Tomcat 설정 필요내장 서버 제공
의존성 관리수동 설정starter로 간편한 설정
개발 속도상대적으로 느림빠른 개발 가능

6. Spring을 활용한 기술 스택

Spring은 다양한 기술과 쉽게 통합하여 사용할 수 있습니다.

  • Spring + JPA → 데이터베이스 연동
  • Spring + Redis → 캐싱 시스템 구축
  • Spring + Kafka → 메시징 시스템 구현
  • Spring + JWT → 인증 및 보안 처리
  • Spring + Docker → 컨테이너 환경에서 실행

7. 마무리

Spring Framework는 Java 개발을 더욱 효율적으로 할 수 있도록 도와주는 필수 프레임워크입니다.
DI와 AOP 같은 개념을 활용하면 유지보수가 쉬운 구조를 만들 수 있다는 점을 다시 한 번 깨달았습니다.
Spring Boot를 사용하면 설정이 훨씬 간편해지지만 Spring의 기본 원리를 이해하는 것이 중요하다는 점도 느꼈습니다.
앞으로 프로젝트에서 Spring의 다양한 기능을 적극적으로 활용해 보고 싶습니다!

profile
조급해하지 말고, 흐름을 만들고, 기록하면서 쌓아가자.

0개의 댓글