항해 8주차 회고

Yeon Jeffrey Seo·2021년 11월 7일
0

항해🚢

목록 보기
10/16

이번 주 진행 사항

DB에 emoji 저장하기

개발자 친구에게 ckEditor에 대해 질문 하던 중, 보통 db에 plain text를 그대로 저장하지 않고, 인코딩을 한 뒤 저장한다는 이야기를 들었다. 그동안은 DB에 plain text를 넣어도 에러가 발생하지 않았기에, 인코딩 없이 CRUD를 진행했다.
프론트엔드 개발자 분이 테스트 중 emoji를 넣었는데 DB 오류가 발생하는 것을 알게 되어 인코딩의 필요성을 느끼게 되었다. 방법은 매우 간단하다.

const encodedHtml = encodeURIComponent(req.body.html);
const decodedHtml = decodeURIComponent(encodedHtml);

이런 식으로 인코딩, 디코딩을 한 뒤에 필요에 맞게 사용하면 된다.

게시물 수정 - in progress

CRUD에서 가장 어려운 건 U(Update)인 것 같다. DB transaction의 특성 중 원자성(atomicity)을 지키려고 시도 중이다.
파일 처리, DB 수정 등 모든 과정 중 한가지라도 문제가 생긴다면, 응답으로 에러를 보내주고, 모든 데이터를 원상 복구시키려고 하니, 고려해야 할 요소가 많아졌다. 아직 내가 작성한 코드가 atomic하게 DB transaction을 수행하는지 확신이 서지 않는다. 다음에는 DB ACID에 대해 공부좀 더 하고 따로 포스팅을 올려야겠다.

DB ACID

상세 게시물 조회 시 현재 로그인한 유저와, 게시물 간 관계

이번 프로젝트는 좋아요, 북마크, 유저 팔로잉 기능이 있기 때문에, 각 게시물마다 로그인한 사용자가 좋아요, 북마크, 팔로잉을 하는지 상태를 표시해줄 필요가 있었다. 각 DB 테이블을 던져주고 프론트엔드에서 비교하는 것 보다는 백엔드에서 처리를 하는게 적절하다고 생각했다.
따로 join을 사용하지는 않고, 각 테이블을 따로 조회한 뒤 결과를 응답에 저장했다.

조회 기능 강화 - in progress

Posts 자원에 대한 조회는 메인 페이지와 필터페이지에서 일어나는데, 사용하는 API는 하나로 통일하고, query string에 따라 분기 처리했다. 분기 처리는 콜백에서 진행하지 않고, 콜백 앞에 미들웨어를 두개 배치하여 미들웨어에서 분기 처리 후 DB 조회하는 방법으로 코드를 작성했다.

  • 메인 페이지
    • 좋아요 순 최대 10개 보여주기✅
    • 랜덤 게시물 10개 보여주기✅
    • 로그인 한 경우, 자신이 팔로잉 중인 유저의 게시물 10개 최신순 보여주기 ❌
  • 필터 페이지
    • 각 카테고리 분류별로 게시물 보여주기 ✅
    • 정렬 순서에 따라 재정렬하기 ❌

회고

이번 주는 유독 프론트엔드에 대응을 많이 했다. 나는 게시물 관련 부분을 맡고 있는데, 게시물이 이 프로젝트의 메인 컨텐츠다 보니, 특히 프론트엔드와 협의할 부분이 많은 것 같다. 다행히 서로 이야기가 잘 통해 협업에 있어 큰 문제는 없었다.
프론트엔드에서 발생하는 문제도 많이 해결해주었다. 프론트엔드 코드를 얼마나 많이 봤으면, axios instance 사용방법도 완전 익히게 되었다....;
다른 백엔드 개발자 두 분은 많은 기능을 쳐냈는데, 나는 게시물쪽만 계속 개발을 하고 있다. 적은 수의 어려운 기능을 구현해나가면서, 다른 동료들에게 미안하면서 동시에 뿌듯함을 느끼고 있다.
다음 주는 코드 리펙토링에 주안점을 두고 개발을 진행하기로 했다. 주말에 '클린 아키텍처'라는 책도 구입했다. 코드가 많은 책일 줄 알았는데, 개념적 요소가 많아 꽤나 어려울 것으로 보인다.

profile
The best time to plant a tree was twenty years ago. The second best time is now.

1개의 댓글