Notice
Recent Posts
Recent Comments
Link
«   2025/09   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

코딩 이래요래

Spring Framework 핵심 개념 본문

JAVA

Spring Framework 핵심 개념

강범호 2025. 4. 29. 11:12

1. IoC (Inversion of Control)

 - 제어의 역전 즉, 객체의 생성, 초기화 등 개발자가 직접 제어하는 것이 아닌, 컨테이너가 대신 관리하는 개념

 

1-1. IoC 구조

 

☑️ 기존의 의존성 주입

// controller
public class UserController {

    UserService userService = new JCFUserService(); // 객체를 직접 생성
}

// service
public class UserService {

    private final UserRepository userRepository;

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

// repository
public class UserRepository {
	public void findUserById(Long id){
         //
    }
}
  • controller에서 service 객체를 직접 초기화 하고있음
  • 객체를 직접 생성하여 코드는 명확하지만, 객체간의 결합도가 높아지고 코드의 유연성이 떨어짐 (확장성 ↓)

✅ IoC 컨테이너에게 객체 제어권 위임

// controller
@Controller
public class UserController {

    private final UserService userService;

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

// service
@Service
public class UserService {

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

// repository
@Repository
public class UserRepository {
	public void findUserById(Long id){
         //
    }
}
  • 개발자가 객체의 생성을 직접 하지 않고, 인터페이스(Service, Repository)만 정의함
  • Spring의 IoC를 통해 객체의 생성, 초기화를 대신 처리하므로 테스트나 확장에 유리함

2. IoC Container

 - IoC를 구현한 프레임워크로 객체의 생성, 초기화 등을 자동으로 수행할 수 있음

 

Spring IoC Container

  • 다양한 IoC 컨테이너를 제공하지만 가장 많이 사용되는 것은 ApplicationContext 임
  • 주 역할은 Bean객체들을 생성, 관리 등 LifeCycle을 책임짐

Configuration Metadata

https://docs.spring.io/spring-framework/reference/core/beans/basics.htmlALT

  •  IoC 컨테이너가 어떤 객체를 어떻게 생성 및 의존성을 주입해야 하는지에 대한 정보 (작업 명세서)
  • 컨테이너에 POJO, Configuration Metadata를 제공하면 Bean 객체를 내부적으로 생성하여 관리 
  • Spring의 Configuration Metadata 구성 방법
구분 권장 설명
XML 방식 X 명시적이지만 타입 안정성 부족
Java Config O 명시적이고 타입 안정성 확보, Spring boot 기본
Annotation 기반 O 보통 Java Config와 함께 사용함
  • 실무에서는 Java Config를 기준으로 Annotation 기반을 하이브리드 형태로 많이 사용함

3. Bean

  • Spring IoC Container에 의해 관리되는 객체를 말함
  • Spring이 생성, 초기화 등 생명주기를 관리당하는 특별한 대상

3-1 Bean == POJO ??

  • POJO (Plain Old Java Object) ?
    • 어떤 프레임워크나 라이브러리에 의존하지 않는 순수 Java 객체를 말함 (Member, Channel ..)
  • POJO는 Spring이 관리하게 되는 순간 Bean이라고 부르기 때문에 Bean은 기본적으로 POJO일 수 있지만, 모든 POJO가 Bean은 아님

4. DI (Dependency Injection)

public class UserController {
    
    // UserController는 JCFUserService를 의존하고 있음
    UserService userService = new JCFUserService();
}
  • 위 코드처럼 클래스 내에서 객체를 직접 생성하는 구조는 강한 결합을 가지는 구조이므로, 인터페이스 교체나 테스트에 불리함
@Controller
public class UserController {

    private final UserService userService;

    @Autowired // Spring IoC 컨테이너에 관리되는 Bean을 통해 자동으로 의존성을 주입해줌
    public UserController(UserService userService) {
        this.userService = userService;
    }
}
  • 위 코드처럼 객체를 직접 생성하지 않고, 생성자 주입 방식을 사용하여 외부에서 주입 받는 방식임
  • IoC 컨테이너가 객체의 생성과 초기화를 자동으로 처리해 주기 때문에, 개발자는 비즈니스 로직 구현에만 집중할 수 있음
  • 이로 인해 결합도는 낮아지고 유연한 구조를 가질 수 있음

💡 DI(Dependency Injection)는 IoC(Inversion of Control)를 구현하는 대표적인 방법으로, 두 개념은 매우 밀접한 관계를 가짐

 

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

  • OOP는 역할에 따라 책임을 분리하는 방법으로 실제 시스템을 설계하다 보면 모든 모듈에서 반복적으로 중복되는 코드들이 있음
  • 이러한 핵심 비즈니스 로직을 제외한 공통 기능을 하나의 모듈로 분리하여 관리하는 방법

해당 게시글은 학습한 내용을 정리하고 복습하며 정리한 글이므로 틀린 부분이 있을 수 있음.

'JAVA' 카테고리의 다른 글

Spring Boot + Prometheus + Grafana 대시보드 만들기  (3) 2025.06.17
Spring Data JPA  (1) 2025.05.30
자료구조 - Tree, Binary Tree  (0) 2025.04.16
자료구조 - Stack, Queue, Deque  (0) 2025.04.13
자료구조 - List  (0) 2025.04.13