프로젝트의 알림 기능 리팩토링을 통해 알림 메시지 생성 로직을 개선하고 코드의 가독성과 확장성을 향상시킬 수 있습니다. 이러한 리팩토링 과정에서 NotiType enum을 활용하여 각 알림 유형별로 다른 메시지 포맷을 정의하고, 이를 기반으로 NotificationDto에서 알림 메시지를 생성하는 방식을 구현했습니다. NotiType Enum 확장 NotiType enum은 알림 유형별로 다양한 메시지 포맷을 정의하기 위해 추상 메소드 formatMessage를 포함합니다. 이 메소드는 발신자 이름, 수신자 이름, 그리고 수신자가 본인인지 여부(isMyNotification)를 매개변수로 받아, 해당 알림 유형에 맞는 포맷된 메시지를 생성합니다. @Getter public enum NotiType { L..
프로젝트 (Java)
프로젝트에 알림 관련 데이터 삭제 기능을 추가하는 것은 데이터의 일관성과 무결성을 유지하는 데 중요합니다. 특히, 게시물, 댓글, 좋아요 등의 행위에 대한 알림이 생성된 후 해당 데이터가 삭제되는 경우, 관련 알림 또한 함께 삭제되어야 합니다. 이를 통해 사용자가 존재하지 않는 데이터에 대한 알림을 받는 것을 방지할 수 있습니다. Notification 엔티티 수정 Notification 엔티티에 postId 필드를 추가하여, 게시물에 대한 알림과 관련된 게시물의 ID를 저장할 수 있게 합니다. 이를 통해 특정 게시물에 대한 모든 알림을 쉽게 조회하고 삭제할 수 있습니다. @Column(name = "post_id") private Long postId; NotificationRepository 수정 N..
프로젝트에 게시물 삭제 기능을 추가하면서, 해당 기능에 보안을 강화하는 것은 매우 중요합니다. 특히, 게시물을 삭제할 수 있는 권한을 게시물의 소유자에게만 제한하는 것은 사용자의 데이터를 보호하는 데 필수적입니다. 이를 위해 본인만 게시물을 삭제할 수 있도록 예외 처리를 추가하는 방법을 구현했습니다. PostController 수정 PostController에서는 게시물 삭제 요청을 처리하는 메소드를 구현합니다. 이 메소드는 AuthenticationUtils를 사용하여 현재 인증된 사용자의 ID를 가져온 후, 이를 PostService의 deletePost 메소드에 전달합니다. public void deletePost( @PathVariable("post_id") Long postId ){ Long u..
프로젝트에 비밀번호 변경 및 회원 탈퇴 시 로그아웃 처리를 추가하는 것은 보안성을 강화하고, 사용자의 데이터 보호를 위한 중요한 단계입니다. 비밀번호 변경이나 회원 탈퇴 시, 해당 사용자의 JWT 토큰을 Redis에서 삭제함으로써, 변경된 상태에서의 재인증을 요구하게 됩니다. 이러한 접근 방식은 사용자 계정의 보안을 강화하는 데 중요한 역할을 합니다. UserController 변경 사항 UserController에서는 비밀번호 변경 및 회원 탈퇴 기능을 구현합니다. 이 과정에서 사용자의 정보를 데이터베이스에서 조회하고, 필요한 작업을 수행한 후, Redis에 저장된 해당 사용자의 JWT 토큰을 삭제합니다. @Transactional public void updatePassword(Long userId,..
프로젝트에 알림 기능을 추가하면서 User와 Notification 엔티티 간의 연관관계 매핑을 설정하는 것은 알림 데이터를 관리하는 데 중요한 부분입니다. 이러한 연관관계 매핑을 통해, 알림을 발생시킨 사용자(fromUser)와 알림을 받는 사용자(toUser) 사이의 관계를 데이터베이스 레벨에서 명확히 정의할 수 있습니다. 이는 알림 데이터를 조회하고 관리하는 과정에서 데이터의 일관성과 무결성을 보장합니다. User 엔티티 수정 User 엔티티에는 두 개의 리스트를 추가하여, 사용자가 발생시킨 알림(fromUser)과 사용자가 받는 알림(toUsers)을 관리합니다. @OneToMany 어노테이션을 사용하여 Notification 엔티티와의 일대다 관계를 설정합니다. mappedBy 속성을 통해 연관..
프로젝트에 유효성 검사(validation)를 추가하는 것은 입력 데이터의 정확성을 보장하고, 서버 측에서 예상치 못한 오류를 방지하는 중요한 단계입니다. Spring Boot에서는 spring-boot-starter-validation 의존성을 통해 Bean Validation API를 쉽게 사용할 수 있습니다. 이를 통해 컨트롤러에서 들어오는 요청의 DTO 객체에 대한 유효성 검사를 선언적으로 할 수 있습니다. Gradle 설정 build.gradle에 spring-boot-starter-validation 의존성을 추가하여 프로젝트에 Bean Validation을 활성화합니다. // valid implementation 'org.springframework.boot:spring-boot-starte..