프로젝트에 ResponseBodyAdvice를 활용하여 모든 응답에 공통 응답 형식을 추가하는 것은 API 응답의 일관성을 보장하고, 클라이언트 측에서 응답을 처리하기 용이하게 만듭니다. 이 접근 방식을 사용함으로써, 성공적인 요청의 결과뿐만 아니라 에러 응답까지도 표준화된 형태로 관리할 수 있게 됩니다. SuccessResponse 클래스 구현 SuccessResponse 클래스는 API 응답의 공통 형식을 정의합니다. 이 클래스는 응답의 성공 여부, HTTP 상태 코드, 실제 데이터, 그리고 타임스탬프를 포함합니다. package com.myshop.global.utils; import java.time.LocalDateTime; import lombok.Getter; @Getter public cl..
프로젝트 (Java)/예약마켓
프로젝트에 토큰에서 사용자 ID를 가져오는 기능을 추가하는 것은 인증된 사용자의 정보를 보다 쉽게 관리하고 접근할 수 있게 합니다. 이를 위해 AuthenticationUtils라는 유틸리티 클래스를 설계하여, Spring Security의 SecurityContextHolder를 통해 현재 인증된 사용자의 상세 정보를 가져오고, 이를 기반으로 사용자 ID를 추출하는 방법을 구현했습니다. AuthenticationUtils 구현 AuthenticationUtils 클래스는 현재 인증된 사용자의 UserDetailsImpl을 통해 사용자 ID를 가져오는 정적 메서드 getUserIdByToken을 제공합니다. 이 메서드는 SecurityContextHolder에서 인증 객체를 가져온 후, 사용자 상세 정보..
JWT 변경 및 Redis 연동을 통한 로그아웃 기능을 추가하는 것은 애플리케이션의 보안을 강화하고, 사용자 인증 관리를 효율적으로 처리할 수 있게 합니다. JWT와 Redis를 활용하여 로그인한 사용자의 토큰을 관리함으로써, 로그아웃 시 토큰을 무효화할 수 있습니다. 이 구현은 로그인 상태를 서버 측에서 제어할 수 있게 하여, 보안성을 높이는 중요한 역할을 합니다. Gradle 설정 build.gradle에 JWT 관련 의존성과 Redis를 위한 의존성을 추가합니다. // jwt implementation 'io.jsonwebtoken:jjwt:0.9.1' AuthController 수정 AuthController에서는 로그인, 로그아웃, 회원가입 기능을 처리합니다. 로그아웃 시, Redis에 저장된 ..
프로젝트에 로그아웃 기능을 위해 Redis를 추가하는 것은 세션 관리 및 토큰 무효화를 효과적으로 처리할 수 있게 합니다. Redis는 빠른 데이터 처리 속도와 다양한 데이터 구조를 지원하는 인메모리 데이터 저장소로, 분산 세션 관리, 캐싱, 메시지 브로커 등 다양한 용도로 사용됩니다. 로그아웃 기능에서 Redis를 사용하는 주요 목적은 사용자의 JWT 토큰을 저장하여 유효성을 관리하는 것입니다. Gradle 설정 build.gradle 파일에 Redis와 관련된 의존성을 추가합니다. Spring Boot는 Redis를 위한 spring-boot-starter-data-redis 스타터를 제공합니다. // redis implementation 'org.springframework.boot:spring-b..
Notification 엔티티 수정 Notification 엔티티에 알림의 대상이 되는 객체의 ID를 저장할 수 있는 typeId 필드를 추가합니다. 이 필드는 좋아요, 댓글, 팔로우 등의 구체적인 대상을 식별합니다. @Column(name = "type_id") private Long typeId; NotificationController 구현 NotificationController에 사용자별 알림 목록을 조회하는 엔드포인트를 추가합니다. 사용자 ID는 토큰 컨텍스트에서 추출합니다. @RestController @RequestMapping("/api/noti") @RequiredArgsConstructor public class NotificationController { private final N..
사용자는 자신이 팔로우하는 다른 사용자의 활동(좋아요, 댓글, 팔로우)에 대한 알림을 받을 수 있으며, 해당 활동과 관련된 게시물도 함께 볼 수 있습니다. Notification 엔티티 구현 Notification 엔티티는 사용자 간의 상호작용(좋아요, 댓글, 팔로우)에 대한 알림 정보를 저장합니다. @Getter @Setter @Entity @Table(name = "notifications") @NoArgsConstructor public class Notification extends BaseTimeEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Enumerated(EnumType.STRING) pr..