1.3.1 Spring Framework

Spring Framework는 현대 엔터프라이즈 자바 개발을 위한 강력하고 유연한 기반을 제공합니다. 이 섹션에서는 Spring의 핵심 특징과 장점을 예시와 함께 더 자세히 살펴보겠습니다.

Spring Framework의 역사와 필요성

Spring Framework는 복잡한 자바 EE 환경에서 개발자의 부담을 줄이고자 로드 존슨에 의해 2003년에 소개되었습니다. EJB의 복잡성과 낮은 생산성에 대한 대안으로, POJO(Plain Old Java Object) 기반의 개발을 장려하여 개발자가 비즈니스 로직에 더 집중할 수 있도록 설계되었습니다.

예시: EJB 대안으로서의 Spring

EJB 예시:

@Stateless
public class MyEjbService {
    // 복잡한 EJB 설정과 사용
}

Spring 예시:

@Service
public class MyService {
    // 간결한 Spring 서비스 구현
}

Spring을 사용하면 EJB의 복잡성 없이 간결하게 서비스 계층을 구현할 수 있습니다.

Spring의 핵심 특징 및 장점

1. 경량 컨테이너로서의 기능

Spring IoC 컨테이너는 애플리케이션의 객체 생성, 구성 및 관리를 담당합니다. 이는 애플리케이션의 결합도를 낮추고, 유연성과 테스트 용이성을 향상시킵니다.

예시: @Autowired를 사용한 의존성 주입

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository; // 자동 의존성 주입
}

@Autowired 애노테이션을 통해 Spring은 자동으로 UserRepository의 인스턴스를 UserService에 주입합니다.

2. 종합적인 데이터 접근 지원

Spring은 JdbcTemplate와 ORM 통합을 통해 데이터 접근을 단순화합니다.

예시: JdbcTemplate 사용

@Autowired
private JdbcTemplate jdbcTemplate;

public User findUserById(Long id) {
    return jdbcTemplate.queryForObject(
        "SELECT * FROM users WHERE id = ?",
        new Object[]{id},
        (rs, rowNum) -> new User(rs.getLong("id"), rs.getString("name"))
    );
}

JdbcTemplate을 사용하여 간결하게 SQL 쿼리를 실행하고 결과를 객체로 매핑할 수 있습니다.

3. 선언적 트랜잭션 관리

Spring은 @Transactional 애노테이션을 통해 선언적 트랜잭션 관리를 지원합니다.

예시: @Transactional 사용

@Transactional
public void updateUser(User user) {
    userRepository.save(user);
}

@Transactional 애노테이션을 메소드에 추가하면, 해당 메소드의 실행이 트랜잭션으로 관리됩니다.

4. 유연한 웹 MVC

Spring MVC는 강력하고 유연한 웹 애플리케이션 구축을 위한 다양한 기능을 제공합니다.

예시: REST 컨트롤러

@RestController
@RequestMapping("/users")
public class UserController {
    
    @GetMapping("/{id}")
    public ResponseEntity<User> getUserById(@PathVariable Long id) {
        User user = userService.findUserById(id);
        return ResponseEntity.ok(user);
    }
}

@RestController@RequestMapping을 사용하여 RESTful 웹 서비스를 간단하게 구현할 수 있습니다.

5. 강력한 보안 기능

Spring Security는 애플리케이션의 보안을 위한 포괄적인 솔루션을 제공합니다.

Spring Security 설정을 통해 인증 및 권한 부여를 구성할 수 있으며, 다양한 보안 기능(CSRF 보호, 세션 관리 등)을 사용할 수 있습니다.

6. 다양한 백엔드 서비스와의 통합

Spring은 JMS, 이메일, 태스크 스케줄링, 웹 서비스 등과의 통합을 지원합니다.

예시: 스케줄링 작업

@Scheduled(fixedRate = 10000)
public void scheduleFixedRateTask() {
    System.out.println("Fixed rate task - " + System.currentTimeMillis() / 1000);
}

@Scheduled 애노테이션을 사용하여 정기적으로 실행되는 스케줄링 작업을 간단하게 설정할 수 있습니다.

Spring Framework는 이러한 기능과 장점을 통해, 개발자가 엔터프라이즈급 애플리케이션을 효율적으로 개발할 수 있도록 지원합니다.

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