반응형
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 작업을 지원합니다.