2022-03-10 TIL

Fact

  • 퀴즈에 좋아요 기능을 구현하려고 하는데, 기존에 하려고 했던 방식은 유저 정보를 가져와서 내가 좋아요를 누른 퀴즈 index에서 유저정보가 같은 데이터들을 찾아서 like를 true로 변경해서 리턴해주는 방식을 사용했었는데, 이렇게 구현하면 아무래도 퀴즈 리스트를 가져오는데 무조건 로그인 정보가 필요하다는 점에서 문제가 생겼다. 그래서 다시 quiz 데이터 안에 like_user라는 객체를 만들어서 좋아요를 누른 해당 유저 objectId를 넣어주도록 했다. 내가 처음 방식을 사용한 이유는 mongoDB document size가 그렇게 크지 않을 것 같아서 좋아요가 대량으로 쌓이게 되면 문제가 발생할 것 같아서 저런 방법을 사용했었다. 하지만 mongoDB objectId는 아래와 같이 12 bytes이고,
12 bytes ObjectId values are 12 bytes in length, consisting of: a 4-byte timestamp value, representing the ObjectId's creation, measured in seconds since the Unix epoch. a 5-byte random value generated once per process. This random value is unique to the machine and process.

mongodb document size는 16 megabytes까지 지원한다고 설명이 나와있었다.

16 megabytes Document Size Limit The maximum BSON document size is 16 megabytes. The maximum document size helps ensure that a single document cannot use excessive amount of RAM or, during transmission, excessive amount of bandwidth. To store documents larger than the maximum size, MongoDB provides the GridFS API.

그럼 대략 130만 개 정도의 좋아요까지만 달릴 수 있을 것이라 생각하였고 내가 혼자 하고 있는 프로젝트에서 많은 퀴즈들 중 하나에 좋아요가 130만 개가 달리는 경우는 현실적으로 불가능하기 때문에 아래와 같은 방법으로 변경했다.

Feelings

  • 늦었다 고 생각 할 때가 가장 빠른 때다는 말이 있는데, 잘못된 코드를 작성하고 있다고 생각했을 때 문제를 바로 해결하는 게 중요하다는 걸 느꼈다.

Findings

  • 오늘은 삽질을 좀 많이해서 적을만한 내용은 없다.

Future Action

  • 알고리즘!!!!