donga-it-club / past-foward-backend

Past Forward Backend
2 stars 5 forks source link

feat: 댓글 및 좋아요 알림 기능 #215

Closed heemanglee closed 5 months ago

heemanglee commented 6 months ago

개요

변경 사항

테스트

배포 계획

heemanglee commented 6 months ago

@Minseok-2001 님 궁금한 게 있습니다!

이번에 레디스 설정하는 과정에서 빌드에서 계속 오류가 터지더라구요. 해결하는 과정에서 깃헙액션에 시크릿 값으로 ISSURE_URI 값이 등록되어 있더라구요. 근데 ci.yml 보시면 ${ secrets.ISSUER_URI } 로 작성되어 있더군요...? ( ISSUER != ISSURE )

그렇다면 빌드하는 과정에서 env 값을 못 찾아서 오류가 발생해야 했을 것 같은데 왜 정상적으로 빌드가 된 걸까요?? (일단 ISSUER_URI는 제가 방금 추가했습니다!)

heemanglee commented 6 months ago

@Minseok-2001 @JinseongHwang

민석님, 진성님 안녕하세요! 레디스와 관련하여 질문이 있습니다.

마지막으로 조회된 댓글과 좋아요 시간을 다음과 같이 레디스에 저장하고 있습니다.

sectionId_5: {
    "comment": "2024-05-16T18:49:07.631569",
    "like": "2024-05-16T18:49:07.633276"
}

sectionId_5에서 '5'는 section 엔티티의 ID 값입니다.

보통은 레디스에 어떠한 형태로 값을 저장하는지 궁금합니다. 위처럼 진행해도 문제가 없을까요?

JinseongHwang commented 6 months ago

@w1shope

정답이 없긴 한데요, String 타입으로 저장할 계획이시라면

key: last_commented_at:section:5 / value: 2024-05-16T18:49:07.631569 key: last_liked_at:section:5 / value: 2024-05-16T18:49:07.633276

요런 구조는 어떨까요? 다만 value에 저장되는 시각이 utc0 기준인지 한국 기준인지 그런건 명확하게 정해야 할 듯 합니다

JinseongHwang commented 6 months ago

NIT: 지금 코드에서 redisTemplate을 직접 다루고 있는데, Redis에 접근하는 코드가 service에 private 메서드로 섞여있어요. Spring Data JPA를 쓰면서 Repository layer를 쉽게 만들 수 있었고 역할과 책임이 명확해졌어요. Redis에 접근하는 것 또한 Repository layer라고 생각하고 다른 계층으로 구분해보는게 어떨까요?

https://docs.spring.io/spring-data/redis/reference/redis/redis-repositories/usage.html 여기 나와있는 예제를 보시면 마치 JPA 처럼 Redis를 쓰는 방법을 알 수 있어요. 이미 선배 개발자들이 다 만들어 놓은걸 저희는 잘 가져다 쓰면 됩..

heemanglee commented 6 months ago

@w1shope

정답이 없긴 한데요, String 타입으로 저장할 계획이시라면

key: last_commented_at:section:5 / value: 2024-05-16T18:49:07.631569 key: last_liked_at:section:5 / value: 2024-05-16T18:49:07.633276

요런 구조는 어떨까요? 다만 value에 저장되는 시각이 utc0 기준인지 한국 기준인지 그런건 명확하게 정해야 할 듯 합니다

생각해보니까 저희 프로젝트가 UTC 시간대를 사용하고 있었네요! UTC로 수정하였습니다 ㅎㅎ🙇

heemanglee commented 6 months ago

NIT: 지금 코드에서 redisTemplate을 직접 다루고 있는데, Redis에 접근하는 코드가 service에 private 메서드로 섞여있어요. Spring Data JPA를 쓰면서 Repository layer를 쉽게 만들 수 있었고 역할과 책임이 명확해졌어요. Redis에 접근하는 것 또한 Repository layer라고 생각하고 다른 계층으로 구분해보는게 어떨까요?

https://docs.spring.io/spring-data/redis/reference/redis/redis-repositories/usage.html 여기 나와있는 예제를 보시면 마치 JPA 처럼 Redis를 쓰는 방법을 알 수 있어요. 이미 선배 개발자들이 다 만들어 놓은걸 저희는 잘 가져다 쓰면 됩..

Crud를 편하게 할 수 있네요...? 다만 redis에 시간이 update가 안돼서 확인을 해보니 반드시 save를 호출해야 하군요... JPA처럼 더티체킹 해주는 줄 알았습니다...!

Minseok-2001 commented 6 months ago

이번에 레디스 설정하는 과정에서 빌드에서 계속 오류가 터지더라구요. 해결하는 과정에서 깃헙액션에 시크릿 값으로 ISSURE_URI 값이 등록되어 있더라구요. 근데 ci.yml 보시면 ${ secrets.ISSUER_URI } 로 작성되어 있더군요...? ( ISSUER != ISSURE )

그렇다면 빌드하는 과정에서 env 값을 못 찾아서 오류가 발생해야 했을 것 같은데 왜 정상적으로 빌드가 된 걸까요?? (일단 ISSUER_URI는 제가 방금 추가했습니다!)

ci.yml에서는 ./gradlew build -Plocal 으로 Gradle build만 하는데 이떄 아마 컴파일 단계에서는 해당 환경변수가 필요가 없어서 오류가 안나는 것 같네요 ㅎㅎ...!!

빌드 타임에선 소스 코드 컴파일, jar파일 만드는 정도로 알고 있어서 실제로 로컬에서 환경변수 지우고 ./gradlew build -Plocal 치면 정상적으로 잘 되네요!

JinseongHwang commented 5 months ago

요건 왜 닫으신건가요?

heemanglee commented 5 months ago

요건 왜 닫으신건가요?

코드 설계를 다시 했는데 현재 PR과 다른 부분이 많은 것 같아... 다시 올리려고 합니다!

219 새로 올렸습니다.