본문 바로가기
Backend/이커머스 api

order api - config (JwtConfig, QuerydslConfig, RedisConfig)

by 큌 2025. 2. 10.
반응형

JwtConfig

package com.zerobase.cms.order.config;

import com.zerobase.domain.config.JwtAuthenticationProvider;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class JwtConfig {
    // JwtAuthenticationProvider 클래스의 인스턴스를 Spring의 ApplicationContext에 빈으로 등록하여,
    // 애플리케이션 전반에서 JwtAuthenticationProvider 클래스의 인스턴스를 사용할 수 있게 하기 위함
    @Bean
    public JwtAuthenticationProvider jwtAuthenticationProvider() {
        return new JwtAuthenticationProvider();
    }
}

JWT 설정 (JwtConfig)

이 코드는 JWT (JSON Web Token) 인증을 위한 설정을 담당하는 클래스(JwtConfig)입니다. JWT는 웹 애플리케이션에서 사용자 인증 및 권한 부여를 위해 널리 사용되는 표준입니다. 이 설정 클래스는 JWT 인증을 제공하는 컴포넌트(JwtAuthenticationProvider)를 Spring 컨테이너에 등록하여 애플리케이션에서 사용할 수 있도록 합니다.

1. 클래스 구조 및 어노테이션

  • package com.zerobase.cms.order.config;: 이 클래스가 com.zerobase.cms.order.config 패키지에 속해 있음을 나타냅니다. 패키지는 관련 있는 클래스들을 묶어 관리하는 데 사용됩니다.
  • import com.zerobase.domain.config.JwtAuthenticationProvider;: JwtAuthenticationProvider 클래스를 가져옵니다. 이 클래스는 JWT 인증을 제공하는 컴포넌트입니다.
  • import org.springframework.context.annotation.Bean;: Bean 어노테이션을 가져옵니다. 이 어노테이션은 메서드가 Spring Bean을 생성하고 반환함을 나타냅니다.
  • import org.springframework.context.annotation.Configuration;: Configuration 어노테이션을 가져옵니다. 이 어노테이션은 해당 클래스가 Spring 설정 클래스임을 나타냅니다.
  • @Configuration: 이 어노테이션은 해당 클래스가 Spring 설정 클래스임을 나타냅니다. Spring 설정 클래스는 Spring 컨테이너에 Bean을 등록하거나, 애플리케이션의 다른 설정을 구성하는 데 사용됩니다.
  • public class JwtConfig { ... }: JwtConfig 클래스를 정의합니다. public은 이 클래스가 모든 패키지에서 접근 가능하다는 것을 의미합니다.

2. 메서드

2.1. jwtAuthenticationProvider()

  • 기능: JwtAuthenticationProvider 클래스의 인스턴스를 Spring Bean으로 등록합니다.public JwtAuthenticationProvider jwtAuthenticationProvider() { return new JwtAuthenticationProvider(); }`
    • @Bean: 이 어노테이션은 해당 메서드가 Spring Bean을 생성하고 반환함을 나타냅니다. Spring Bean은 Spring 컨테이너에서 관리되는 객체이며, 애플리케이션의 다양한 곳에서 사용될 수 있습니다.
    • public JwtAuthenticationProvider jwtAuthenticationProvider() { ... }: jwtAuthenticationProvider 메서드를 정의합니다. public은 이 메서드가 모든 클래스에서 접근 가능하다는 것을 의미합니다. JwtAuthenticationProvider는 반환 타입으로, 이 메서드가 JwtAuthenticationProvider 클래스의 인스턴스를 반환함을 나타냅니다.
    • return new JwtAuthenticationProvider();: JwtAuthenticationProvider 클래스의 새로운 인스턴스를 생성하고 반환합니다.

3. 핵심 개념 및 추가 설명

  • Spring Bean: Spring Bean은 Spring 컨테이너에서 관리되는 객체입니다. Spring 컨테이너는 Bean의 생성, 의존성 주입, 소멸 등의 생명주기를 관리합니다. Spring Bean은 애플리케이션의 다양한 곳에서 사용될 수 있으며, 재사용성과 유지보수성을 높이는 데 기여합니다.
  • Spring 컨테이너 (Spring Container): Spring 컨테이너는 Spring Bean의 생명주기를 관리하는 역할을 합니다. Spring 컨테이너는 설정 파일 (XML 또는 Java 설정 클래스)을 읽고, Bean을 생성하고, Bean 간의 의존성을 주입하고, Bean을 소멸시키는 등의 작업을 수행합니다.
  • 의존성 주입 (Dependency Injection, DI): 의존성 주입은 객체가 필요로 하는 의존성을 외부에서 주입받는 디자인 패턴입니다. 의존성 주입을 사용하면 객체 간의 결합도를 낮추고, 코드 재사용성을 높일 수 있습니다. Spring Framework는 의존성 주입을 위한 다양한 방법을 제공합니다.
  • JWT (JSON Web Token): JWT는 웹 애플리케이션에서 사용자 인증 및 권한 부여를 위해 널리 사용되는 표준입니다. JWT는 JSON 형식의 데이터를 암호화하여 생성되며, 클라이언트와 서버 간에 안전하게 정보를 교환할 수 있도록 해줍니다.
  • 인증 (Authentication): 인증은 사용자가 누구인지 확인하는 과정입니다. 웹 애플리케이션에서 인증은 주로 사용자 이름과 비밀번호를 사용하여 수행됩니다.
  • 권한 부여 (Authorization): 권한 부여는 인증된 사용자가 특정 자원에 접근할 권한이 있는지 확인하는 과정입니다. 웹 애플리케이션에서 권한 부여는 주로 역할 기반 접근 제어 (Role-Based Access Control, RBAC)를 사용하여 수행됩니다.

4. 설정 클래스의 역할

JwtConfig 클래스는 JwtAuthenticationProvider 클래스의 인스턴스를 Spring 컨테이너에 Bean으로 등록하는 역할을 합니다. 이렇게 하면 애플리케이션의 다른 곳에서 JwtAuthenticationProvider 클래스의 인스턴스를 쉽게 사용할 수 있습니다.

예를 들어, JwtAuthenticationProvider 클래스의 인스턴스를 사용하여 HTTP 요청 헤더에서 JWT 토큰을 추출하고, 토큰의 유효성을 검증하고, 토큰에서 사용자 정보를 추출할 수 있습니다.

 

QuerydslConfig

package com.zerobase.cms.order.config;

import com.querydsl.jpa.impl.JPAQueryFactory;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class QuerydslConfig {

    @PersistenceContext
    private EntityManager entityManager;

    @Bean
    public JPAQueryFactory jpaQueryFactory() {
        return new JPAQueryFactory(entityManager);
    }
}

Querydsl 설정 (QuerydslConfig)

이 코드는 JPA (Java Persistence API)를 사용하여 데이터베이스와 상호 작용할 때 Querydsl 라이브러리를 설정하는 클래스(QuerydslConfig)입니다. Querydsl은 복잡한 쿼리를 쉽고 안전하게 작성할 수 있도록 해주는 프레임워크입니다. 이 설정 클래스는 Querydsl을 사용하기 위한 핵심 컴포넌트인 JPAQueryFactory를 Spring 컨테이너에 등록하여 애플리케이션에서 사용할 수 있도록 합니다.

1. 클래스 구조 및 어노테이션

  • package com.zerobase.cms.order.config;: 이 클래스가 com.zerobase.cms.order.config 패키지에 속해 있음을 나타냅니다. 패키지는 관련 있는 클래스들을 묶어 관리하는 데 사용됩니다.
  • import com.querydsl.jpa.impl.JPAQueryFactory;: JPAQueryFactory 클래스를 가져옵니다. 이 클래스는 Querydsl을 사용하여 쿼리를 생성하고 실행하는 데 사용됩니다.
  • import javax.persistence.EntityManager;: EntityManager 인터페이스를 가져옵니다. EntityManager는 JPA에서 데이터베이스와 상호 작용하기 위한 핵심 인터페이스입니다.
  • import javax.persistence.PersistenceContext;: PersistenceContext 어노테이션을 가져옵니다. 이 어노테이션은 EntityManager를 주입받기 위해 사용됩니다.
  • import org.springframework.context.annotation.Bean;: Bean 어노테이션을 가져옵니다. 이 어노테이션은 메서드가 Spring Bean을 생성하고 반환함을 나타냅니다.
  • import org.springframework.context.annotation.Configuration;: Configuration 어노테이션을 가져옵니다. 이 어노테이션은 해당 클래스가 Spring 설정 클래스임을 나타냅니다.
  • @Configuration: 이 어노테이션은 해당 클래스가 Spring 설정 클래스임을 나타냅니다. Spring 설정 클래스는 Spring 컨테이너에 Bean을 등록하거나, 애플리케이션의 다른 설정을 구성하는 데 사용됩니다.
  • public class QuerydslConfig { ... }: QuerydslConfig 클래스를 정의합니다. public은 이 클래스가 모든 패키지에서 접근 가능하다는 것을 의미합니다.

2. 클래스 필드

  • @PersistenceContext private EntityManager entityManager;: EntityManager를 주입받기 위한 필드입니다.
    • @PersistenceContext: 이 어노테이션은 EntityManager를 주입받기 위해 사용됩니다. EntityManager는 JPA에서 데이터베이스와 상호 작용하기 위한 핵심 인터페이스입니다.
    • private EntityManager entityManager;: EntityManager 타입의 entityManager 필드를 정의합니다. private은 이 필드가 QuerydslConfig 클래스 내에서만 접근 가능하다는 것을 의미합니다.

3. 메서드

3.1. jpaQueryFactory()

  • 기능: JPAQueryFactory 클래스의 인스턴스를 Spring Bean으로 등록합니다.public JPAQueryFactory jpaQueryFactory() { return new JPAQueryFactory(entityManager); }`
    • @Bean: 이 어노테이션은 해당 메서드가 Spring Bean을 생성하고 반환함을 나타냅니다. Spring Bean은 Spring 컨테이너에서 관리되는 객체이며, 애플리케이션의 다양한 곳에서 사용될 수 있습니다.
    • public JPAQueryFactory jpaQueryFactory() { ... }: jpaQueryFactory 메서드를 정의합니다. public은 이 메서드가 모든 클래스에서 접근 가능하다는 것을 의미합니다. JPAQueryFactory는 반환 타입으로, 이 메서드가 JPAQueryFactory 클래스의 인스턴스를 반환함을 나타냅니다.
    • return new JPAQueryFactory(entityManager);: JPAQueryFactory 클래스의 새로운 인스턴스를 생성하고, 생성자에 entityManager를 전달합니다. entityManager는 데이터베이스와 상호 작용하기 위한 핵심 인터페이스입니다.

4. 핵심 개념 및 추가 설명

  • JPA (Java Persistence API): JPA는 Java에서 데이터베이스와 상호 작용하기 위한 표준 인터페이스입니다. JPA를 사용하면 객체 지향적인 방식으로 데이터베이스를 다룰 수 있으며, 데이터베이스 종류에 상관없이 동일한 코드를 사용할 수 있습니다.
  • EntityManager: EntityManager는 JPA에서 데이터베이스와 상호 작용하기 위한 핵심 인터페이스입니다. EntityManager를 사용하여 엔티티를 조회, 생성, 수정, 삭제할 수 있습니다.
  • Querydsl: Querydsl은 복잡한 쿼리를 쉽고 안전하게 작성할 수 있도록 해주는 프레임워크입니다. Querydsl을 사용하면 문자열 기반의 SQL 쿼리 대신 Java 코드를 사용하여 쿼리를 작성할 수 있으며, 컴파일 시점에 쿼리 오류를 확인할 수 있습니다.

5. 설정 클래스의 역할

QuerydslConfig 클래스는 JPAQueryFactory 클래스의 인스턴스를 Spring 컨테이너에 Bean으로 등록하는 역할을 합니다. 이렇게 하면 애플리케이션의 다른 곳에서 JPAQueryFactory 클래스의 인스턴스를 쉽게 사용할 수 있습니다. 예를 들어, JPAQueryFactory 클래스의 인스턴스를 사용하여 Querydsl 쿼리를 생성하고 실행하여 데이터베이스에서 데이터를 조회할 수 있습니다.

RedisConfig

package com.zerobase.cms.order.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.repository.configuration.EnableRedisRepositories;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration
@EnableRedisRepositories
public class RedisConfig {

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        StringRedisSerializer serializer = new StringRedisSerializer();

        redisTemplate.setConnectionFactory(redisConnectionFactory);
        redisTemplate.setKeySerializer(serializer);
        redisTemplate.setValueSerializer(serializer);
        redisTemplate.setHashKeySerializer(serializer);
        redisTemplate.setHashValueSerializer(serializer);
        return redisTemplate;
    }
}

Redis 설정 (RedisConfig)

이 코드는 Redis 데이터베이스를 사용하기 위한 Spring 설정 클래스(RedisConfig)입니다. Redis는 인메모리 데이터 저장소로, 빠른 읽기/쓰기 속도를 제공하여 캐싱, 세션 관리, 실시간 데이터 처리 등 다양한 용도로 사용됩니다. 이 설정 클래스는 Redis 연결 설정, 데이터 직렬화 설정, Redis 리포지토리 활성화 등의 기능을 제공합니다.

1. 클래스 구조 및 어노테이션

  • package com.zerobase.cms.order.config;: 이 클래스가 com.zerobase.cms.order.config 패키지에 속해 있음을 나타냅니다. 패키지는 관련 있는 클래스들을 묶어 관리하는 데 사용됩니다.
  • import org.springframework.context.annotation.Bean;: Bean 어노테이션을 가져옵니다. 이 어노테이션은 메서드가 Spring Bean을 생성하고 반환함을 나타냅니다.
  • import org.springframework.context.annotation.Configuration;: Configuration 어노테이션을 가져옵니다. 이 어노테이션은 해당 클래스가 Spring 설정 클래스임을 나타냅니다.
  • import org.springframework.data.redis.connection.RedisConnectionFactory;: RedisConnectionFactory 인터페이스를 가져옵니다. RedisConnectionFactory는 Redis 연결을 생성하고 관리하는 데 사용됩니다.
  • import org.springframework.data.redis.core.RedisTemplate;: RedisTemplate 클래스를 가져옵니다. RedisTemplate는 Redis 데이터베이스와 상호 작용하기 위한 핵심 클래스입니다.
  • import org.springframework.data.redis.repository.configuration.EnableRedisRepositories;: EnableRedisRepositories 어노테이션을 가져옵니다. 이 어노테이션은 Redis 리포지토리를 활성화합니다.
  • import org.springframework.data.redis.serializer.StringRedisSerializer;: StringRedisSerializer 클래스를 가져옵니다. StringRedisSerializer는 데이터를 문자열로 직렬화하고 역직렬화하는 데 사용됩니다.
  • @Configuration: 이 어노테이션은 해당 클래스가 Spring 설정 클래스임을 나타냅니다. Spring 설정 클래스는 Spring 컨테이너에 Bean을 등록하거나, 애플리케이션의 다른 설정을 구성하는 데 사용됩니다.
  • @EnableRedisRepositories: 이 어노테이션은 Redis 리포지토리를 활성화합니다. Redis 리포지토리는 Spring Data Redis에서 제공하는 기능으로, Redis 데이터베이스에 대한 CRUD (Create, Read, Update, Delete) 연산을 쉽게 수행할 수 있도록 해줍니다.
  • public class RedisConfig { ... }: RedisConfig 클래스를 정의합니다. public은 이 클래스가 모든 패키지에서 접근 가능하다는 것을 의미합니다.

2. 메서드

2.1. redisTemplate(RedisConnectionFactory redisConnectionFactory)

  • 기능: RedisTemplate 클래스의 인스턴스를 Spring Bean으로 등록하고, Redis 연결 설정 및 데이터 직렬화 설정을 수행합니다.public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { // 1. RedisTemplate 인스턴스 생성 RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();}`
    1. @Bean: 이 어노테이션은 해당 메서드가 Spring Bean을 생성하고 반환함을 나타냅니다. Spring Bean은 Spring 컨테이너에서 관리되는 객체이며, 애플리케이션의 다양한 곳에서 사용될 수 있습니다.
    2. public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { ... }: redisTemplate 메서드를 정의합니다. public은 이 메서드가 모든 클래스에서 접근 가능하다는 것을 의미합니다. RedisTemplate<String, Object>는 반환 타입으로, 이 메서드가 RedisTemplate<String, Object> 클래스의 인스턴스를 반환함을 나타냅니다.
    3. RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();: RedisTemplate<String, Object> 클래스의 새로운 인스턴스를 생성합니다. RedisTemplate는 Redis 데이터베이스와 상호 작용하기 위한 핵심 클래스입니다. <String, Object>는 RedisTemplate에서 사용할 키와 값의 타입을 지정합니다. 여기서는 키는 String 타입, 값은 Object 타입으로 지정했습니다.
    4. StringRedisSerializer serializer = new StringRedisSerializer();: StringRedisSerializer 클래스의 새로운 인스턴스를 생성합니다. StringRedisSerializer는 데이터를 문자열로 직렬화하고 역직렬화하는 데 사용됩니다.
    5. redisTemplate.setConnectionFactory(redisConnectionFactory);: RedisTemplate에 RedisConnectionFactory를 설정합니다. RedisConnectionFactory는 Redis 연결을 생성하고 관리하는 데 사용됩니다. redisConnectionFactory는 메서드의 파라미터로 주입받습니다.
    6. redisTemplate.setKeySerializer(serializer);: RedisTemplate에 키를 직렬화하는 데 사용할 Serializer를 설정합니다. 여기서는 StringRedisSerializer를 사용하여 키를 문자열로 직렬화합니다.
    7. redisTemplate.setValueSerializer(serializer);: RedisTemplate에 값을 직렬화하는 데 사용할 Serializer를 설정합니다. 여기서는 StringRedisSerializer를 사용하여 값을 문자열로 직렬화합니다.
    8. redisTemplate.setHashKeySerializer(serializer);: RedisTemplate에 해시 키를 직렬화하는 데 사용할 Serializer를 설정합니다. 여기서는 StringRedisSerializer를 사용하여 해시 키를 문자열로 직렬화합니다.
    9. redisTemplate.setHashValueSerializer(serializer);: RedisTemplate에 해시 값을 직렬화하는 데 사용할 Serializer를 설정합니다. 여기서는 StringRedisSerializer를 사용하여 해시 값을 문자열로 직렬화합니다.
    10. return redisTemplate;: 설정된 RedisTemplate 인스턴스를 반환합니다.

3. 핵심 개념 및 추가 설명

  • Redis (Remote Dictionary Server): Redis는 인메모리 데이터 저장소로, 빠른 읽기/쓰기 속도를 제공합니다. 다양한 데이터 타입 (String, List, Set, Hash 등)을 지원하며, 캐싱, 세션 관리, 실시간 데이터 처리 등 다양한 용도로 사용됩니다.
  • Spring Data Redis: Spring Data Redis는 Spring Framework에서 Redis를 쉽게 사용할 수 있도록 지원하는 모듈입니다. RedisTemplate, StringRedisTemplate 등의 클래스를 제공하여 Redis 데이터베이스와 상호 작용할 수 있도록 해줍니다.
  • RedisTemplate: RedisTemplate는 Spring Data Redis에서 제공하는 클래스로, Redis 데이터베이스와 상호 작용하기 위한 핵심 클래스입니다. RedisTemplate는 다양한 데이터 타입에 대한 연산을 제공하며, 데이터 직렬화/역직렬화를 지원합니다.
  • RedisConnectionFactory: RedisConnectionFactory는 Redis 연결을 생성하고 관리하는 인터페이스입니다. Spring Data Redis는 다양한 RedisConnectionFactory 구현체를 제공하며, 사용자는 Redis 구성에 따라 적절한 구현체를 선택할 수 있습니다.
  • 직렬화 (Serialization): 직렬화는 Java 객체를 바이트 스트림으로 변환하는 과정입니다. 바이트 스트림은 파일에 저장하거나 네트워크를 통해 전송할 수 있습니다.
  • 역직렬화 (Deserialization): 역직렬화는 바이트 스트림을 Java 객체로 변환하는 과정입니다.
  • Serializer: Serializer는 데이터를 직렬화하고 역직렬화하는 인터페이스입니다. Spring Data Redis는 다양한 Serializer 구현체를 제공하며, 사용자는 데이터 타입에 따라 적절한 구현체를 선택할 수 있습니다.
  • StringRedisSerializer: StringRedisSerializer는 데이터를 문자열로 직렬화하고 역직렬화하는 Serializer 구현체입니다.

4. 설정 클래스의 역할

RedisConfig 클래스는 다음과 같은 역할을 합니다.

  • RedisTemplate 클래스의 인스턴스를 Spring 컨테이너에 Bean으로 등록합니다.
  • Redis 연결 설정을 수행합니다.
  • 데이터 직렬화 설정을 수행합니다.
  • Redis 리포지토리를 활성화합니다.

이렇게 하면 애플리케이션의 다른 곳에서 RedisTemplate 클래스의 인스턴스를 쉽게 사용하여 Redis 데이터베이스와 상호 작용할 수 있으며, Redis 리포지토리를 사용하여 Redis 데이터베이스에 대한 CRUD 연산을 쉽게 수행할 수 있습니다.

반응형