카테고리 없음

@redishash 사용예

jw-backend 2024. 10. 16. 01:50
반응형

Redis의 Hash 자료구조를 사용할 때 Spring Data Redis에서 제공하는 @RedisHash 어노테이션을 활용할 수 있습니다. 이 어노테이션을 사용하면 Redis의 Hash를 쉽게 매핑할 수 있습니다.

1. 모델 클래스에 @RedisHash 추가

아래와 같이 LoanApplication 클래스에 @RedisHash 어노테이션을 추가합니다.

java

package com.example.loanapp.model;

import org.springframework.data.redis.core.RedisHash;

import java.io.Serializable;

@RedisHash("loan_application") // Redis의 Hash 이름
public class LoanApplication implements Serializable {
    private String userId;
    private double loanAmount;
    private String status;

    // 생성자, Getter, Setter 생략
}

2. 레포지토리 인터페이스

LoanApplicationRepository 인터페이스를 생성하여 CRUD 작업을 수행할 수 있습니다. CrudRepository를 상속받아 Redis에서 자동으로 CRUD 기능을 사용할 수 있습니다.

java

package com.example.loanapp.repository;

import com.example.loanapp.model.LoanApplication;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface LoanApplicationRepository extends CrudRepository<LoanApplication, String> {
    // 추가적인 쿼리 메소드를 정의할 수 있습니다.
}

3. 컨트롤러 클래스

컨트롤러 클래스는 이전과 동일하게 구현할 수 있습니다.

java

package com.example.loanapp.controller;

import com.example.loanapp.model.LoanApplication;
import com.example.loanapp.repository.LoanApplicationRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api")
public class LoanController {

    @Autowired
    private LoanApplicationRepository loanApplicationRepository;

    // 고객용 대출 신청 API
    @PostMapping("/loan-application")
    public ResponseEntity<String> applyForLoan(@RequestBody LoanApplication application) {
        application.setStatus("Pending");

        // Redis Hash에 대출 신청 저장
        loanApplicationRepository.save(application);

        return ResponseEntity.status(201).body("Loan application submitted successfully.");
    }

    // 관리자용 대출 신청 조회 API
    @GetMapping("/admin/loan-application/{userId}")
    public ResponseEntity<LoanApplication> getLoanApplication(@PathVariable String userId) {
        return loanApplicationRepository.findById(userId)
                .map(ResponseEntity::ok)
                .orElse(ResponseEntity.notFound().build());
    }
}

4. 메인 애플리케이션 클래스

기존과 동일하게 메인 클래스는 다음과 같이 작성합니다.

java

package com.example.loanapp;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class LoanApplication {

    public static void main(String[] args) {
        SpringApplication.run(LoanApplication.class, args);
    }
}

설명

  • @RedisHash: LoanApplication 클래스에 이 어노테이션을 추가하여 Redis의 Hash로 매핑합니다. Hash의 이름은 "loan_application"으로 설정됩니다.
  • CrudRepository: LoanApplicationRepository는 CrudRepository를 상속받아 기본적인 CRUD 작업을 지원합니다.