기술 스택
Node.js Express로 만든 블로그입니다. 서버 렌더링부터 배포까지 직접 해보려고 만들었고, 글·댓글·쪽지·실시간 채팅을 붙인 뒤 Docker와 GitHub Actions로 EC2에 자동 배포되게 구성했습니다. 이후 이 블로그를 Next.js로 다시 만들었고, 그 결과물이 chorock.page입니다.
기획부터 인프라까지 1인 개발입니다. EJS 템플릿으로 서버에서 화면을 그리고, MongoDB로 데이터를 다루고, Docker 이미지를 만들어 EC2에 올리는 배포 파이프라인까지 직접 구성했습니다.
글이 쌓일수록 목록 페이지가 눈에 띄게 느려졌습니다.
원인은 목록을 그리는 방식이었습니다. 글 문서에는 작성자의 식별자만 들어 있어서, 목록에 스무 개를 뿌리려면 글을 한 번 조회한 뒤 작성자를 알아내기 위해 사용자 정보를 다시 조회해야 했습니다. 목록의 길이에 비례해 조회가 늘어나는 구조였습니다.
인덱스를 걸어 조회 자체를 빠르게 만드는 것과, 데이터 모양을 바꾸는 것 두 가지를 놓고 봤습니다. 인덱스는 넣었지만 조회 횟수 자체는 줄지 않았습니다. 그래서 정규화를 깨기로 했습니다. 글을 저장할 때 작성자의 이름과 식별자를 글 문서에 함께 복사해 두어, 목록을 그릴 때 사용자 정보를 다시 찾지 않아도 되게 했습니다.
대가가 있는 선택입니다. 사용자가 이름을 바꾸면 이미 써둔 글에 남은 이름과 어긋납니다. 읽기가 쓰기보다 압도적으로 많은 블로그라 그 정도는 치를 만한 비용이라고 봤습니다.



