[항해99] 60일차
The silence is deafening.
그냥 멋진말 쓰고싶었는데 생각안나서 대충 멋잇어보이는말 영어로 쓰기.
Server CPU 과부화 :
ec2 CPU 과부화가자꾸걸린다. 갑자기 거의 100프로까지 올라갔다가 서버가 터져버린다.
원인도 모른데 자꾸터지는데 프론트분들 죄송합니다
+
일단 검색해보니깐 원인은 , 무한루프혹은 알수없는 문제로인해 db 쪽에 문제가있는것같은데, 일단 하영님이
찾으신 해결방법은 new Prisma Clinet를 model마다하지않고 general variable로 빼서 한번만 하는것이
올바른 방법이라고 밑에 나와있음!!
https://www.prisma.io/docs/reference/api-reference/prisma-schema-reference#model-field-scalar-types
혹은
mySQL. 에서 로그를 확인해볼수도있을것같다.
오늘은 글 조회수 를 만들어보았다.
일단 구글링부터해서 다른사람들은 어떻게 만들엇는지 구경을했다
여러가지방법이있는것같은데,
제일쉬운방법은 : 그냥 api call 할때마다 count를 넣어주는방식 :
-> 그냥 새로고침해도 뷰카운트가올라감
어려운방법은 : 미들웨어나 따로 로직으로 구현해서 현재 사용자를 저장해놓고 일정시간(10분) 동안은 뷰카운트가 안올라가게
만들수도있는것같다.
원래는처음에 여기서 그냥 다 복붙해볼려고햇는데
당연히안된다.
일단 interface만드는것부터 막혀서 30분정도 씨름하다가 포기했다.
게다가 이방법이라면, 만약에 로그인하지않은 유저가본경우는 어떻게해야하는지 나중에 처리를해줘아햘것같아서 깔끔하게 포기.
if (post) {
// //조회수 증가 viewObj 오브젝트 만들어서 postId : [username] 형식으로 저장
// if (!viewObj[req.body.postId]) {
// viewObj[req.params.post_id] = []
// }
// if (viewObj[req.params.post_id].indexOf(req.user.username) == -1) {
// //username이 없다면 배열에 추가하고 조회수 증가
// viewObj[req.params.post_id].push(req.user.username)
// post.view++
// setTimeout(() => {
// //10분이 지나면 배열에서 삭제해서 다시 조회수가 증가할 수 있게 만듦
// viewObj[req.params.post_id].splice(
// viewObj[req.params.post_id].indexOf(req.user.username),
// 1
// )
// }, 600000)
// for (let i in viewObj) {
// //username이 하나도 없으면 해당 오브젝트 삭제
// if (i.length == 0) {
// delete viewObj.i
// }
// }
// }
그래서 다시 이것저것 찾다가 쉽게 설명해주는곳을찾앗는데, 이것도 맘엔들지않았다.
https://ipirozhenko.com/blog/counting-requests-in-nodejs-express-application/
그래서그냥 내가 쉬운방법으로구현을먼저해놨다.
일단 구현만해놓고 나중에 추가사항이있으면 그때 생각하는게 내정신건강에좋을것같다.
일단. prisma schema 에서 post model 에 viewCount를 추가해줬다.
그리고 post model (MVC에서model;)에서
불러오기를할때마다 increment로 쉽게 줄수있는것 프리즈마에서 제공을 해주는걸 이제찾았다.
const Post = prisma.post
export( postId: number) =>{
const targetPost = Post.update({
where:{postId: postId},
data:{
viewCount:{
increment:1,
},
}
})
return targetPost
이래서 공식문서를 잘읽어봐야하는걸까...
제대로 읽었으면 삽질안했을텐데 ^0^
Atomic number operation
다들 프리즈마 쓰세요 두번쓰세요 세번쓰세요 네번...