Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feature/#213] 모집글 작성 알림 구현 및 리팩토링 #218

Merged
merged 5 commits into from
Aug 4, 2024

Conversation

runtime-zer0
Copy link
Contributor

@runtime-zer0 runtime-zer0 commented Aug 4, 2024

#️⃣연관된 이슈

이슈번호: #213

📝작업 내용

모집글 작성 알림 구현 및 리팩토링

모집글 작성 위치 주변 사용자 알림 구현

  • GatherArticleResponse.LocationInfoDTO.java 구현

    • 모집글 작성 위치 정보를 위한 DTO 구현
  • GatherArticleRepositoryCustom.java

    • 모집글 작성 위치 정보를 조회하기 위한 메서드 선언
    • findLocationInfoDTOById() 메서드 선언
  • GatherArticleRepositoryCustomImpl.java

    • 모집글 작성 위치 정보를 조회하기 위한 메서드 구현
    • findLocationInfoDTOById() 메서드 구현
  • MemberRepositoryCustom.java

    • 작성된 모집글의 주변에 위치한 사용자의 아이디를 반환하는 메서드를 선언
    • findUsernamesWithGatherArticleInRange() 메서드 선언
  • MemberRepositoryCustomImpl.java

    • 작성된 모집글의 주변에 위치한 사용자의 아이디를 반환하는 메서드를 구현
    • findUsernamesWithGatherArticleInRange() 메서드 구현
  • NotificationService.java

    • notifyGatherArticle() 메서드: 모집글이 작성되면 해당 모집글 주변에 위치한 사용자에게 알림
  • GatherArticleController.java

    • createGatherArticle() 메서드
    • 모집글 작성시 작성된 모집글 주변에 위치한 사용자에게 알림을 보내기위하여, notifyGatherArticle() 호출

MemberResponse.UserNameDTO 클래스 이름 수정으로 인한 리팩토링

  • MemberResponse.UserNameDTO -> MemberResponse.UsernameDTO 로 클래스 이름 수정으로 인한 리팩토링

알림 기능 리팩토링

  • NotificationRepositoryCustom.java

    • 사용자별 알림 목록 단순 조회 로직에서 엔티티를 직접 레포지토리에서 조회하고 있으므로 DTO 를 활용하여 조회하도록 리턴값 수정
    • findNotificationByMemberUsername() 메서드 리턴값 수정
  • NotificationRepositoryCustomImpl.java

    • 사용자별 알림 목록 단순 조회 로직에서 엔티티를 직접 레포지토리에서 조회하고 있으므로 DTO 를 활용하도록 로직 수정
    • findNotificationByMemberUsername() 메서드 로직 수정

배포환경에서의 이슈 해결을 위한 알림 기능 리팩토링

  • NotificationController.java

  • subscribe() 메서드

    • 알림 관련 요청을 효율적으로 proxy 하기위하여 URI 수정
    • SSE 방식은 표준 HTTP 통신과 다른 방식이므로 Spring에서 제공하는 Authentication 객체를 활용하여 사용자 인증을 할 수 없으므로, 파라미터 수정
    • SSE 방식은 캐싱과 버퍼 기능을 활용하지 않아야 통신 가능하므로 응답 헤더 추가
    • 알림 구독 관련 로직 수정으로 인한 리턴값 수정
  • getNotifications() 메서드

    • 파라미터 username -> nickname 으로 수정
  • nginx.conf

    • 배포 환경에서의 알림 기능 관련 이슈 해결을 위하여 알림 기능 관련 nginx 코드 추가
  • WebMvcConfig.java

      • 파라미터 username -> nickname 으로 수정 및 알림 기능 관련한 요청은 excludePathPatterns() 메서드를 활용하여 인증 인터셉터가 동작하지 않도록 수정된 URI 등록

💬리뷰 요구사항(선택)

  • 모집글 작성시 해당 모집글 주변에 위치 설정한 사용자에게 모집글이 작성되었다는 알림을 보내는 로직을 구현하였습니다.
  • 배포 환경에서의 알림 관련 이슈를 해결하기위하여 리팩토링 하였습니다.
  • 작성된 코드에 대하여, 피드백을 공유해주신다면 감사하겠습니다 :)

- GatherArticleResponse.LocationInfoDTO.java 구현
- 모집글 작성 위치 정보를 위한 DTO 구현

- GatherArticleRepositoryCustom.java
- 모집글 작성 위치 정보를 조회하기 위한 메서드 선언
- findLocationInfoDTOById() 메서드 선언

- GatherArticleRepositoryCustomImpl.java
- 모집글 작성 위치 정보를 조회하기 위한 메서드 구현
- findLocationInfoDTOById() 메서드 구현

- MemberRepositoryCustom.java
- 작성된 모집글의 주변에 위치한 사용자의 아이디를 반환하는 메서드를 선언
- findUsernamesWithGatherArticleInRange() 메서드 선언

- MemberRepositoryCustomImpl.java
- 작성된 모집글의 주변에 위치한 사용자의 아이디를 반환하는 메서드를 구현
- findUsernamesWithGatherArticleInRange() 메서드 구현

- NotificationService.java
- notifyGatherArticle() 메서드: 모집글이 작성되면 해당 모집글 주변에 위치한 사용자에게 알림

- GatherArticleController.java
- createGatherArticle() 메서드
- 모집글 작성시 작성된 모집글 주변에 위치한 사용자에게 알림을 보내기위하여, notifyGatherArticle() 호출
- MemberResponse.UserNameDTO -> MemberResponse.UsernameDTO 로 클래스 이름 수정으로 인한 리팩토링
- NotificationRepositoryCustom.java
- 사용자별 알림 목록 단순 조회 로직에서 엔티티를 직접 레포지토리에서 조회하고 있으므로 DTO 를 활용하여 조회하도록 리턴값 수정
- findNotificationByMemberUsername() 메서드 리턴값 수정

- NotificationRepositoryCustomImpl.java
- 사용자별 알림 목록 단순 조회 로직에서 엔티티를 직접 레포지토리에서 조회하고 있으므로 DTO 를 활용하도록 로직 수정
- findNotificationByMemberUsername() 메서드 로직 수정
- NotificationController.java

- subscribe() 메서드
- 알림 관련 요청을 효율적으로 proxy 하기위하여 URI 수정
- SSE 방식은 표준 HTTP 통신과 다른 방식이므로 Spring에서 제공하는 Authentication 객체를 활용하여 사용자 인증을 할 수 없으므로, 파라미터 수정
- SSE 방식은 캐싱과 버퍼 기능을 활용하지 않아야 통신 가능하므로 응답 헤더 추가
- 알림 구독 관련 로직 수정으로 인한 리턴값 수정

- getNotifications() 메서드
- SSE 방식은 표준 HTTP 통신과 다른 방식이므로 Spring 에서 제공하는 Authentication 객체를 활용하여 사용자 인증을 할 수 없으므로, 파라미터 수정

- nginx.conf
- 배포 환경에서의 알림 기능 관련 이슈 해결을 위하여 알림 기능 관련 nginx 코드 추가

- WebMvcConfig.java
- 알림 기능은 SSE 방식은 표준 HTTP 통신과 다른 방식이므로 Spring 에서 제공하는 Authentication 객체를 활용하여 사용자 인증을 할 수 없으므로, 알림 기능 관련한 요청은 excludePathPatterns() 메서드를 활용하여 인증 인터셉터가 동작하지 않도록 수정된 URI 등록
@runtime-zer0 runtime-zer0 added feat 새로운 기능 또는 요청 fix 해당 작업이 수행되지 않는 경우 refactoring 코드 리팩토링 rename 파일 또는 폴더 명을 수정하거나 옮기는 작업만인 경우 comment 필요한 주석 추가 및 변경 labels Aug 4, 2024
@runtime-zer0 runtime-zer0 added this to the 4차 기능 구현 milestone Aug 4, 2024
@runtime-zer0 runtime-zer0 requested a review from geunhokinn August 4, 2024 15:28
@runtime-zer0 runtime-zer0 self-assigned this Aug 4, 2024
@runtime-zer0
Copy link
Contributor Author

@geunhokinn @serahissomi @meanzi3
확인 부탁드리겠습니다.

@runtime-zer0 runtime-zer0 merged commit 5abdc34 into main Aug 4, 2024
@runtime-zer0 runtime-zer0 linked an issue Aug 4, 2024 that may be closed by this pull request
3 tasks
Copy link
Contributor

@geunhokinn geunhokinn left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

모집글 작성 알림 구현 및 리팩토링 하시느라 고생하셨습니다. 확인 부탁드립니다!

Comment on lines +165 to +175
JPAExpressions
.selectOne()
.from(publicDistrict)
.join(nearPublicDistrict).on(publicDistrict.id.eq(nearPublicDistrict.publicDistrict.id))
.where(
nearPublicDistrict.sido.eq(sido)
.and(nearPublicDistrict.sgg.eq(sgg))
.and(nearPublicDistrict.emd.eq(emd))
.and(member.radius.goe(nearPublicDistrict.radius)) // 반경 조건
)
.exists()
Copy link
Contributor

@geunhokinn geunhokinn Aug 6, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

on 절을 활용해 조인 대상을 필터링 할 때, 외부 조인이 아니라 내부조인을 사용하면 where 절에서 필터링 하는 것과 기능이 동일하므로 where 절에서 필터하는 것은 어떨까요?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
comment 필요한 주석 추가 및 변경 feat 새로운 기능 또는 요청 fix 해당 작업이 수행되지 않는 경우 refactoring 코드 리팩토링 rename 파일 또는 폴더 명을 수정하거나 옮기는 작업만인 경우
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[Feat] 모집글 알람 구현
2 participants