[23.12.15] TIL

yy·2023년 12월 15일

개발일지

목록 보기
60/122

💥👊 트러블 슈팅 1. Record to update not found 에러

좋아요 기능을 추가한 서버에서 작동이 되지 않았다.

분명 로컬에서는 잘됐는데 서버에 올리니까 안됐다. 로컬에서는 잘되는데 서버에서는 안된다? 인가문제도 아니라면 코드문제일 수 밖에 없다...다시 찬찬히 살펴보니 정말 어이없게도 쿼리 where절을 잘 못 사용하고 있었다.

// 좋아요
router.post("/posts/:postId/like", authMiddleware, async (req, res, next) => {
  try {
    const { postId } = req.params;
    const { userId } = req.user;

    const post = await prisma.posts.findFirst({
      where: { postId: +postId }
    })

    if (!post) {
      return res.status(400).json({ message: "해당 게시글이 존재하지 않습니다. " })
    }

    const like = await prisma.likes.findFirst({
      where: { PostId: +postId, UserId: +userId }
    })

    if (!like) {
      await prisma.posts.update({
        where: { postId: +postId, UserId: +userId }, // userId 기준을 넣으면 안된다.
        data: { likeCount: { increment: 1 } }
      })

      await prisma.likes.create({
        data: { PostId: +postId, UserId: +userId }
      })
    } else {
      return res.status(400).json({ message: "이미 좋아요한 게시글입니다." })
    }

    return res.status(200).json({ message: "좋아요" })
  } catch (error) {
    next(error)
  }
});

post에 userId 조건에 넣는 바람에 생긴 해프닝~
이게 무슨 말이냐면 posts에 있는 userId는 게시글을 작성한 유저의 userId이고,
좋아요 누르는 유저와는 상관이 없다.
그런데 좋아요 누른 사람과 게시글의 작성자와 비교를 했다니 정말 황당한 실수였다. 아래와 같이 코드를 수정했다. 오류 해결

    if (!like) {
      await prisma.posts.update({
        where: { postId: +postId }, //userId 기준 삭제
        data: { likeCount: { increment: 1 } }
      })


💥👊 트러블 슈팅 2. 413 Request Entity Too Large

s3에 이미지를 업로드하도록 코드를 구현했다. 이제 서버에 게시글을 작성하려다 보니 아래와 같은 에러가 떴다

이미지가 너무 크다라는 에러..! 기존에 sharp라는 라이브러리를 사용했는데 자꾸 라이브러리 에러가 생겨서 이미지 조절없이 그냥 냅다 원본을 S3로 보내는걸로 구현했었다.
여기서 이런 문제가 생기다니.

해결방안 1. 리사이징 라이브러리 사용 (sharp말고 jimp)

앞서 말했다시피 sharp는 에러가 자꾸 발생해서 사용을 못하고 다른 라이브러리를 찾아보기 시작했다.
multer와 같이 사용할만한 라이브러리가 뭐가 있을까하다 찾게된 jimp
불과 3주전에도 업데이트가 되고 있어보였다.
https://yoogomja.github.io/2020/11/12/nodejs-gcp-storage-upload/
https://github.com/jimp-dev/jimp
https://github.com/jimp-dev/jimp/tree/main/packages/plugin-resize

물론 다른 툴(imagemagick)도 있었는데 9년 전에 업데이트한 내역이 마지막이었다.

https://github.com/rsms/node-imagemagick
https://www.npmjs.com/package/imagemagick

nginx의 파일 업로드 기본 용량이 1MB라고 한다. 1MB를 넘으면 저런 에러메시지가 뜬다고 하니 사이즈를 조절해서 고화질사진이라도 5장이 1MB(=1000KB)를 넘지않도록 해야겠다. 아이폰으로 찍었을때 jpg파일(4000px*3000px) 하나가 4000KB의 값을 가졌다.

해결방안 2. 서버의 허용량 늘리기

서버의 허용량보다 더 큰 파일을 올렸을 때 발생하는데 서버의 허용량을 늘려주면 된다.
근데 서버도 한계가 있지...유지비용도 많이 나올테고 리사이징하는 방안으로 가는 것이 합당하다고 본다.

https://velog.io/@wijihoon123/Nginx-413-request-entity-too-large
https://www.zerocho.com/category/HTTP/post/6507ad4a457fe081afb2a769

profile
시간이 걸릴 뿐 내가 못할 건 없다.

0개의 댓글