1.3.5 데이터 접근 및 관리

Spring Framework는 데이터 접근 및 관리를 위해 풍부한 기능을 제공하며, 이를 통해 개발자는 데이터 관련 작업을 보다 효율적이고 간결하게 수행할 수 있습니다.

Spring Data JPA 사용하기

Spring Data JPA는 Java Persistence API를 위한 Spring 모듈로, 데이터베이스와의 상호 작용을 단순화하고, 데이터 접근 계층 개발을 간소화합니다.

기능 및 이점

  • 리포지토리 추상화: Spring Data JPA는 리포지토리 인터페이스를 정의함으로써, 개발자가 데이터 접근 로직에 집중할 수 있도록 돕습니다. Spring Data JPA는 이 인터페이스의 구현체를 런타임에 자동으로 생성해 줍니다.

  • 쿼리 메소드 생성: 개발자는 메소드 이름을 정의함으로써 쿼리를 생성할 수 있습니다. Spring Data JPA는 이러한 메소드 이름을 분석하여 해당하는 쿼리를 실행합니다. 복잡한 쿼리의 경우 @Query 애노테이션을 사용하여 JPQL이나 SQL 쿼리를 직접 정의할 수도 있습니다.

public interface UserRepository extends JpaRepository<User, Long> {
    List<User> findByEmail(String email);
}
  • 페이징과 정렬: 페이징과 정렬을 위한 추상화를 제공하여, 대용량 데이터 처리가 용이합니다.

구성 및 사용

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String name;
    // Getters and setters
}

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
    List<User> findByNameContaining(String name);
}

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;
    
    public List<User> searchUsersByName(String name) {
        return userRepository.findByNameContaining(name);
    }
}

RESTful API 개발을 위한 Spring REST

Spring Web MVC의 일부로, Spring은 RESTful 웹 서비스 개발을 위한 강력한 지원을 제공합니다. @RestController@RequestMapping 애노테이션을 활용하여 리소스 기반의 서비스를 쉽게 구성할 수 있습니다.

특징 및 장점

  • 리소스 기반의 서비스 구축: 각 리소스에 대해 HTTP 메소드(GET, POST, PUT, DELETE)를 매핑하여 API를 정의합니다.
  • 응답 본문 자동 변환: Jackson 라이브러리를 통해 객체를 JSON이나 XML로 자동 변환합니다.
  • HATEOAS(Hypertext As The Engine Of Application State) 지원: 클라이언트와 서버 간의 상호 작용을 하이퍼링크를 통해 동적으로 수행할 수 있게 합니다.
@RestController
public class UserController {
    
    @Autowired
    private UserService userService;
    
    @GetMapping("/users/{id}")
    public ResponseEntity<User> getUserById(@PathVariable Long id) {
        User user = userService.findById(id);
        return ResponseEntity.ok(user);
    }
}

트랜잭션 관리

Spring은 선언적 트랜잭션 관리를 제공합니다. @Transactional 애노테이션을 사용하여, 특정 메소드 또는 클래스 전체에서 트랜잭션을 적용할 수 있습니다.

특징 및 이점

  • 선언적 트랜잭션 관리: XML 설정이나 애노테이션을 통해 트랜잭션 관리를 선언적으로 할 수 있습니다. 이를 통해 비즈니스 로직과 트랜잭션 관리 코드를 분리할 수 있습니다.
  • 트랜잭션 전파: 트랜잭션이 시작된 상태에서 다른 트랜잭션 관리 메소드를 호출할 때, 트랜잭션을 새로 시작할지, 기존 트랜잭션에 참여할지 등을 설정할 수 있습니다.
  • 일관된 트랜잭션 추상화: 다양한 트랜잭션 관리 API(JTA, JDBC, Hibernate 등)에 대해 일관된 프로그래밍 모델을 제공합니다.
@Service
public class UserServiceImpl implements UserService {

    @Transactional
    public void updateUser(User user) {
        // 사용자 정보 업데이트 로직
    }
}

Spring의 데이터 접근 및 관리 기능은 개발자가 데이터 관련 작업을 더욱 효과적으로 수행할 수 있게 해주며, RESTful API 개발과 트랜잭션 관리를 통해 애플리케이션의 품질과 유지 보수성을 향상시킵니다.

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