스프링 프레임워크(Spring Framework)란?

euicheol0910 2025. 5. 20. 10:10

 

Spring Framework(스프링 프레임워크)는 자바(Java) 기반의 오픈소스 애플리케이션 프레임워크로, 대규모 웹 애플리케이션을 효율적으로 개발할 수 있게 도와주는 도구입니다. 핵심 목적은 개발자가 비즈니스 로직에 집중할 수 있도록 반복적이고 복잡한 작업을 줄여주는 것입니다.

 

 

스프링 프레임워크의 핵심 개념

 

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

  • 객체 생성과 의존성 관리를 개발자가 아닌 스프링 컨테이너가 대신 해주는 개념
  • 대표 기술: DI (Dependency Injection, 의존성 주입)
@Component
public class UserRepository {
    public String findUser() {
        return "홍길동";
    }
}

@Service
public class UserService {
    private final UserRepository userRepository;

    // 생성자 주입 (DI)
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    public String getUserName() {
        return userRepository.findUser();
    }
}

 

설명: UserService는 UserRepository를 직접 생성하지 않고, 스프링이 자동으로 주입(DI) 해줍니다. 이게 바로 IoC의 핵심입니다. (제어권이 개발자 → 스프링으로 이동)

 

 

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

  • 공통 기능(로깅, 보안, 트랜잭션 처리 등)을 핵심 로직과 분리해서 관리
  • 코드 중복을 줄이고 유지보수를 쉽게 함
@Aspect
@Component
public class LoggingAspect {

    @Before("execution(* com.example.service.*.*(..))")
    public void logBefore() {
        System.out.println("메서드 실행 전 로그!");
    }

    @After("execution(* com.example.service.*.*(..))")
    public void logAfter() {
        System.out.println("메서드 실행 후 로그!");
    }
}

 

설명: 서비스 로직에 전혀 손대지 않고도 공통 기능(여기선 로그 출력)을 분리하여 적용합니다. 이게 AOP의 핵심이며, 로깅, 트랜잭션, 보안 등 공통 처리가 필요할 때 유용합니다.

 

3. Transaction Management (트랜잭션 관리)

 

  • 선언적으로 트랜잭션을 관리 가능 (복잡한 DB 처리 로직 간편화)

 

예시: 데이터 저장 중 오류가 발생하면 롤백

@Service
public class OrderService {

    @Autowired
    private OrderRepository orderRepository;

    @Transactional  // 트랜잭션 시작
    public void placeOrder(Order order) {
        orderRepository.save(order);
        // 오류 발생 시 전체 작업 롤백됨
        if (order.getTotalPrice() > 1000000) {
            throw new RuntimeException("주문 금액이 너무 큽니다!");
        }
    }
}

 

설명: @Transactional 덕분에 예외가 발생하면 DB 작업이 자동으로 롤백됩니다. 복잡한 트랜잭션 코드를 직접 작성하지 않아도 됩니다.

 

4. MVC 아키텍처 지원

 

  • Spring MVC는 웹 애플리케이션을 위한 구조화된 모델을 제공
  • Controller, Service, Repository 계층 분리

 

예시: 게시글을 가져오는 컨트롤러, 서비스, 저장소

 

// Controller
@RestController
public class PostController {

    @Autowired
    private PostService postService;

    @GetMapping("/posts/{id}")
    public Post getPost(@PathVariable Long id) {
        return postService.getPost(id);
    }
}

// Service
@Service
public class PostService {

    @Autowired
    private PostRepository postRepository;

    public Post getPost(Long id) {
        return postRepository.findById(id).orElseThrow();
    }
}

// Repository (Spring Data JPA)
@Repository
public interface PostRepository extends JpaRepository<Post, Long> {
}

 

 

설명: 요청은 Controller → Service → Repository 구조로 흐릅니다. 이 구조가 MVC 아키텍처이며, 역할 분리를 통해 유지보수가 쉬워집니다.

 

 

주요 구성 요소

 

구성 요소  설명
Spring Core DI와 IoC 기능의 중심, 빈(Bean) 설정
Spring AOP 횡단 관심사 처리 (ex. 로깅, 트랜잭션)
Spring ORM Hibernate, JPA 같은 ORM 연동 지원
Spring JDBC JDBC 작업 단순화
Spring MVC 웹 애플리케이션용 MVC 구조 제공
Spring Security 인증, 인가 등 보안 기능 지원
Spring Boot 설정 자동화 및 실행 간소화 (최근 가장 많이 사용됨)

 

 

스프링을 사용하는 이유

  • 생산성: 복잡한 설정을 줄이고 빠르게 개발 가능
  • 유지보수성: 모듈화와 의존성 주입을 통해 코드 관리 용이
  • 테스트 용이성: 객체 간 의존성이 낮아 단위 테스트 작성이 쉬움
  • 확장성: 다양한 프로젝트에 맞게 유연하게 사용 가능

'' 카테고리의 다른 글

WAS에 대하여  (2) 2025.05.19
클라이언트-서버 구조에 대하여  (5) 2025.05.15
HTTP(HyperText Transfer Protocol)  (0) 2025.05.14
MVC패턴  (0) 2025.05.13