From 6ac25d530c9180f7a795395846fc36187c13db21 Mon Sep 17 00:00:00 2001 From: VINTO1819 Date: Fri, 29 Jul 2022 12:51:26 +0900 Subject: [PATCH 1/8] =?UTF-8?q?=F0=9F=93=91=20::=20Redis=20=EA=B8=B0?= =?UTF-8?q?=EB=B0=98=20=EC=A1=B0=ED=9A=8C=EC=88=98=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../viewcount/entity/FeedViewCount.java | 25 ------------------- .../repository/FeedViewCountRepository.java | 8 ------ 2 files changed, 33 deletions(-) delete mode 100644 src/main/java/com/example/moizaspringserver/domain/viewcount/entity/FeedViewCount.java delete mode 100644 src/main/java/com/example/moizaspringserver/domain/viewcount/repository/FeedViewCountRepository.java diff --git a/src/main/java/com/example/moizaspringserver/domain/viewcount/entity/FeedViewCount.java b/src/main/java/com/example/moizaspringserver/domain/viewcount/entity/FeedViewCount.java deleted file mode 100644 index c15fdd09..00000000 --- a/src/main/java/com/example/moizaspringserver/domain/viewcount/entity/FeedViewCount.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.example.moizaspringserver.domain.viewcount.entity; - -import lombok.AccessLevel; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; -import org.springframework.data.annotation.Id; -import org.springframework.data.redis.core.RedisHash; - -@Getter -@NoArgsConstructor(access = AccessLevel.PROTECTED) -@RedisHash -public class FeedViewCount { - - @Id - private Integer feedId; - - private Integer viewCount; - - @Builder - public FeedViewCount(Integer feedId) { - this.feedId = feedId; - this.viewCount = 0; - } -} diff --git a/src/main/java/com/example/moizaspringserver/domain/viewcount/repository/FeedViewCountRepository.java b/src/main/java/com/example/moizaspringserver/domain/viewcount/repository/FeedViewCountRepository.java deleted file mode 100644 index 3b188274..00000000 --- a/src/main/java/com/example/moizaspringserver/domain/viewcount/repository/FeedViewCountRepository.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.example.moizaspringserver.domain.viewcount.repository; - -import com.example.moizaspringserver.domain.viewcount.entity.FeedViewCount; -import org.springframework.data.repository.CrudRepository; - -public interface FeedViewCountRepository extends CrudRepository { - -} From e7c5cf97f455e8bf0b0ea74b6da384b0e0e74864 Mon Sep 17 00:00:00 2001 From: VINTO1819 Date: Fri, 29 Jul 2022 12:51:48 +0900 Subject: [PATCH 2/8] =?UTF-8?q?=F0=9F=93=91=20::=20ViewCount=20=ED=95=AD?= =?UTF-8?q?=EB=AA=A9=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../moizaspringserver/domain/feed/entity/PublicFeed.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/com/example/moizaspringserver/domain/feed/entity/PublicFeed.java b/src/main/java/com/example/moizaspringserver/domain/feed/entity/PublicFeed.java index ab2f1535..2409d519 100644 --- a/src/main/java/com/example/moizaspringserver/domain/feed/entity/PublicFeed.java +++ b/src/main/java/com/example/moizaspringserver/domain/feed/entity/PublicFeed.java @@ -42,6 +42,13 @@ public class PublicFeed extends BaseTimeEntity { @ColumnDefault("0") private Integer likeCount; + @NotNull + @ColumnDefault("0") + private Integer viewCount; + public void addViewCounts(Integer views) { + viewCount += views; + } + @Builder public PublicFeed(String title, String content, Integer likeCount, Feed feed) { this.title = title; From 179ae54c79e3002e93fd5ab6903de769683c9572 Mon Sep 17 00:00:00 2001 From: VINTO1819 Date: Fri, 29 Jul 2022 12:52:16 +0900 Subject: [PATCH 3/8] =?UTF-8?q?=F0=9F=93=91=20::=20ViewCountFacade=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/feed/facade/ViewCountFacade.java | 46 +++++++++++++++++++ .../feed/properties/ViewCountProperties.java | 14 ++++++ 2 files changed, 60 insertions(+) create mode 100644 src/main/java/com/example/moizaspringserver/domain/feed/facade/ViewCountFacade.java create mode 100644 src/main/java/com/example/moizaspringserver/domain/feed/properties/ViewCountProperties.java diff --git a/src/main/java/com/example/moizaspringserver/domain/feed/facade/ViewCountFacade.java b/src/main/java/com/example/moizaspringserver/domain/feed/facade/ViewCountFacade.java new file mode 100644 index 00000000..a3fa98c8 --- /dev/null +++ b/src/main/java/com/example/moizaspringserver/domain/feed/facade/ViewCountFacade.java @@ -0,0 +1,46 @@ +package com.example.moizaspringserver.domain.feed.facade; + +import com.example.moizaspringserver.domain.feed.entity.PublicFeed; +import com.example.moizaspringserver.domain.feed.exception.FeedNotFoundException; +import com.example.moizaspringserver.domain.feed.properties.ViewCountProperties; +import com.example.moizaspringserver.domain.feed.respository.PublicFeedRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +@RequiredArgsConstructor +@Component +public class ViewCountFacade { + + private final ViewCountProperties viewCountProperties; + private final PublicFeedRepository publicFeedRepository; + private final Map viewCounts = new ConcurrentHashMap(); + + @Transactional(readOnly = true) + public Integer getViewCountOf(Integer feedId) { + return publicFeedRepository.findById(feedId) + .orElseThrow(() -> FeedNotFoundException.EXCEPTION) + .getViewCount(); + } + + @Transactional + public void flushViewCount(Integer feedId) { + PublicFeed feed = publicFeedRepository.findById(feedId) + .orElseThrow(() -> FeedNotFoundException.EXCEPTION); + + feed.addViewCounts(viewCounts.get(feedId)); + viewCounts.remove(feedId); + } + + public void addViewCountOf(Integer feedId) { + if(viewCounts.containsKey(feedId)) viewCounts.put(feedId, 0); + + viewCounts.put(feedId, viewCounts.get(feedId)); + + if(viewCounts.get(feedId) >= viewCountProperties.getCacheMaximum()) + flushViewCount(feedId); + } +} diff --git a/src/main/java/com/example/moizaspringserver/domain/feed/properties/ViewCountProperties.java b/src/main/java/com/example/moizaspringserver/domain/feed/properties/ViewCountProperties.java new file mode 100644 index 00000000..f90a72cb --- /dev/null +++ b/src/main/java/com/example/moizaspringserver/domain/feed/properties/ViewCountProperties.java @@ -0,0 +1,14 @@ +package com.example.moizaspringserver.domain.feed.properties; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.context.properties.ConstructorBinding; + +@Getter +@ConstructorBinding +@AllArgsConstructor +@ConfigurationProperties(prefix = "feed.viewcount") +public class ViewCountProperties { + private final Integer cacheMaximum; +} From 35dbd75b2792e3ee968ea7d56beb4752fd51d8d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=8A=B9=EB=AF=BC=20=28Eric=20Lee=29?= Date: Fri, 29 Jul 2022 12:55:24 +0900 Subject: [PATCH 4/8] =?UTF-8?q?=E2=9A=A1=EF=B8=8F=20::=20application.yml?= =?UTF-8?q?=EC=97=90=20=EC=A1=B0=ED=9A=8C=EC=88=98=20=EC=BA=90=EC=8B=B1=20?= =?UTF-8?q?=ED=95=9C=EB=8F=84=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/application.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index e7d39fc3..b0a0849a 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -36,4 +36,8 @@ aws: access-key : ${SES_ACCESS} secret-key : ${SES_SECRET} ses-source : ${SES_SOURCE} - aws-regions : ${AWS_REGIONS:ap-northeast-2} \ No newline at end of file + aws-regions : ${AWS_REGIONS:ap-northeast-2} + +feed: + viewcount: + cache-maximum: 10 From 37ddfdf7f9b40d09620772bd35980fe8aab41b1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=8A=B9=EB=AF=BC=20=28Eric=20Lee=29?= Date: Fri, 29 Jul 2022 12:56:18 +0900 Subject: [PATCH 5/8] =?UTF-8?q?=E2=9A=A1=EF=B8=8F=20::=20=EC=BA=90?= =?UTF-8?q?=EC=8B=B1=20=EC=B5=9C=EB=8C=80=EA=B0=92=20=EC=A7=80=EC=97=AD?= =?UTF-8?q?=EB=B3=80=EC=88=98=EB=A1=9C=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/application.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index b0a0849a..ba099d15 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -40,4 +40,4 @@ aws: feed: viewcount: - cache-maximum: 10 + cache-maximum: ${VIEWCOUNT_CACHE_MAXIMUM} From ec4af586bb42a4bb76601c79cdee6de98eedffb2 Mon Sep 17 00:00:00 2001 From: VINTO1819 Date: Fri, 29 Jul 2022 13:09:59 +0900 Subject: [PATCH 6/8] =?UTF-8?q?=E2=99=BB=EF=B8=8F::=20=EC=BD=94=EB=93=9C?= =?UTF-8?q?=EB=A6=AC=EB=B7=B0=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/feed/facade/ViewCountFacade.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/example/moizaspringserver/domain/feed/facade/ViewCountFacade.java b/src/main/java/com/example/moizaspringserver/domain/feed/facade/ViewCountFacade.java index a3fa98c8..371f8aa5 100644 --- a/src/main/java/com/example/moizaspringserver/domain/feed/facade/ViewCountFacade.java +++ b/src/main/java/com/example/moizaspringserver/domain/feed/facade/ViewCountFacade.java @@ -17,7 +17,7 @@ public class ViewCountFacade { private final ViewCountProperties viewCountProperties; private final PublicFeedRepository publicFeedRepository; - private final Map viewCounts = new ConcurrentHashMap(); + private final Map viewCounts = new ConcurrentHashMap<>(); @Transactional(readOnly = true) public Integer getViewCountOf(Integer feedId) { @@ -35,8 +35,9 @@ public void flushViewCount(Integer feedId) { viewCounts.remove(feedId); } + @Transactional public void addViewCountOf(Integer feedId) { - if(viewCounts.containsKey(feedId)) viewCounts.put(feedId, 0); + viewCounts.computeIfAbsent(feedId, (key) -> viewCounts.put(key, 0)); viewCounts.put(feedId, viewCounts.get(feedId)); From d8d29b4315f784d66a0d8434169b83f6446f9049 Mon Sep 17 00:00:00 2001 From: VINTO1819 Date: Fri, 29 Jul 2022 13:26:01 +0900 Subject: [PATCH 7/8] =?UTF-8?q?=E2=99=BB=EF=B8=8F::=20=EC=BD=94=EB=93=9C?= =?UTF-8?q?=EB=A6=AC=EB=B7=B0=20=EC=9E=AC=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../moizaspringserver/domain/feed/facade/ViewCountFacade.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/example/moizaspringserver/domain/feed/facade/ViewCountFacade.java b/src/main/java/com/example/moizaspringserver/domain/feed/facade/ViewCountFacade.java index 371f8aa5..abbe95c2 100644 --- a/src/main/java/com/example/moizaspringserver/domain/feed/facade/ViewCountFacade.java +++ b/src/main/java/com/example/moizaspringserver/domain/feed/facade/ViewCountFacade.java @@ -37,7 +37,7 @@ public void flushViewCount(Integer feedId) { @Transactional public void addViewCountOf(Integer feedId) { - viewCounts.computeIfAbsent(feedId, (key) -> viewCounts.put(key, 0)); + viewCounts.computeIfAbsent(feedId, key -> viewCounts.put(key, 0)); viewCounts.put(feedId, viewCounts.get(feedId)); From 853bc10c8d4476c1e42383611f0a4d97c8175a0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=8A=B9=EB=AF=BC=20=28Eric=20Lee=29?= Date: Fri, 29 Jul 2022 13:40:01 +0900 Subject: [PATCH 8/8] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20::=20Commit=20?= =?UTF-8?q?=EB=AC=B8=EC=A0=9C=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit