1.3.3 Spring 모듈

Spring Framework는 모듈화된 구조를 통해 다양한 영역에서의 애플리케이션 개발을 지원합니다. 각 모듈은 특정 기능에 초점을 맞추어 개발자가 필요에 따라 선택적으로 사용할 수 있습니다.

Spring Core Container: BeanFactory, ApplicationContext

Spring Core Container

Spring의 핵심 컨테이너는 애플리케이션의 기본 구성 요소인 빈(Bean)들을 관리합니다. 빈은 Spring IoC 컨테이너가 생성, 관리하는 객체로, 애플리케이션의 핵심을 이루며, 종속 객체의 생성과 조립은 컨테이너가 담당합니다.

BeanFactory와 ApplicationContext

  • BeanFactory: 가장 기본적인 IoC 컨테이너로, 빈을 관리하고 의존성을 주입하는 기능을 제공합니다. BeanFactory는 지연 로딩을 사용하여 빈을 생성합니다.

  • ApplicationContext: BeanFactory를 상속받아 더 확장된 기능을 제공합니다. 애플리케이션 레벨의 이벤트 발행, 국제화 메시지 지원, 웹 애플리케이션에서 사용되는 다양한 기능을 제공합니다. ApplicationContext는 애플리케이션의 모든 빈을 즉시 로딩하고 초기화합니다.

ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
MyBean myBean = context.getBean(MyBean.class);

Spring AOP(Aspect-Oriented Programming)

Aspect-Oriented Programming in Spring

AOP는 애플리케이션의 공통적인 관심사를 분리하여 모듈화하는 프로그래밍 패러다임입니다. Spring AOP는 선언적으로 공통 기능을 애플리케이션의 다른 영역에 적용할 수 있게 해줍니다.

  • AOP 사용 사례: 트랜잭션 관리, 로깅, 보안 검사 등
  • AOP 구현: Spring AOP는 프록시 기반의 AOP 지원을 제공합니다. 애스펙트는 @Aspect 애노테이션을 사용하여 정의할 수 있으며, 포인트컷(pointcut) 표현식을 사용하여 어떤 메소드에 어드바이스(advice)를 적용할지 결정합니다.
@Aspect
public class MyAspect {
    @Before("execution(* com.example.MyClass.myMethod(..))")
    public void beforeAdvice() {
        // 메소드 실행 전에 수행될 로직
    }
}

Spring Data Access: JDBC, Transactions

Simplified Data Access

Spring은 JDBC 코드의 반복적인 부분을 단순화하고, 선언적인 트랜잭션 관리를 지원하여, 데이터 액세스 레이어의 개발을 쉽게 만듭니다.

  • JdbcTemplate: SQL 쿼리 실행, 결과 세트 매핑, 예외 처리 등을 단순화합니다.
  • Transaction Management: Spring은 프로그래매틱(코드 기반) 및 선언적(설정 기반) 트랜잭션 관리를 모두 지원합니다. 선언적 트랜잭션 관리는 @Transactional 애노테이션을 사용하여 쉽게 적용할 수 있습니다.
@Transactional
public void performSomeDataOperation() {
    // 트랜잭션 내에서 수행될 비즈니스 로직
}

Spring Web MVC

Building Web Applications

Spring MVC는 모델-뷰-컨트롤러 디자인 패턴에 기반한 웹 애플리케이션 개발을 위한 프레임워크입니다. 사용자 요청을 처리하고, 비즈니스 로직을 수행한 후, 적절한 뷰를 통해 응답을 반환합니다.

  • Controller: @Controller 애노테이션을 사용하여, 특정 URL 요청을 처리하는 메소드를 정의할 수 있습니다.
  • View Resolution: 요청 처리 결과를 나타내기 위한 뷰를 결정합니다. JSP, Thymeleaf 등 다양한 뷰 기술을 지원합니다.
@Controller
public class MyController {
    @RequestMapping("/greeting")
    public String greet(Model model) {
        model.addAttribute("message", "Hello, World!");
        return "greeting";
    }
}

Spring Security

Securing Applications

Spring Security는 애플리케이션에 보안 기능을 추가하는 강력한 방법을 제공합니다. 인증, 권한 부여, CSRF 방지 등을 위한 포괄적인 보안 솔루션을 제공합니다.

  • Configuration: Spring Security는 자바 설정 또는 XML 설정을 통해 쉽게 구성할 수 있습니다. 사용자 인증을 위한 사용자 세부 정보 서비스를 정의하고, URL별 접근 제어를 설정할 수 있습니다.
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/", "/home").permitAll()
                .anyRequest().authenticated()
                .and()
            .formLogin()
                .loginPage("/login")
                .permitAll()
                .and()
            .logout()
                .permitAll();
    }
}

Spring Framework의 이 모듈들은 개발자가 복잡한 엔터프라이즈급 애플리케이션을 더 쉽고, 빠르게 개발할 수 있도록 지원합니다. 각 모듈은 특정 영역의 개발을 담당하며, 필요에 따라 조합하여 사용할 수 있습니다.

source: DevOps/1.Programming_Languages_&_Frameworks/1.3.Spring/1.3.3.md