Document 광신도(RTFM)

2023년 11월 8일 TIL

Today I Learned

날짜

2023년 11월 8일 수요일

내용

과제 중 백엔드 부분을 완성했다. 기능 설명에 관련된 부분들은 모두 완성하였다.

데이터베이스 테이블 문제

아마 프론트 부분을 구현하면서 약간의 수정만 필요하지 않을까 싶다. 어제 DB에 Table이 생성되지 않아 문제를 겪었는데 생각보다 수월하게 해결되었다. 기존에 model에 작성한 대로 table을 생성하는 코드가 database.py에 위치해 있었는데, 이것을 main.py로 옮기니 바로 해결됐다. 그 위치에서는 그 코드가 작동되지 않았던걸까? 문제는 해결됐지만 어제의 추론들은 주말에 공부해서 스스로 답변을 작성해봐야겠다.

SQLite

이전에는 모두 MongoDB만 사용했어서 SQL 쿼리에 대해 많이 낯설었다. 할일에 관한 CRUD를 만드는 중에 Update 부분에서 많이 고생했다. WHERESELECT 등에 대해 정확한 이해가 없어서 생긴 듯 하다. MySQL 책을 2달동안 읽었는데도 이 모양이다. 역시 개발공부는 책을 보면서만 하는게 아니구나 다시 한번 느꼈다.

각 할일들이 가지는 고유 id로 찾은 data를 수정한 뒤, commitrefresh 하는 부분이 잘 이해되지 않았다. 정확히는 저게 무슨 역할인지 몰랐다. commit은 Document를 찾아 설명을 읽으니 조금 감이 왔는데, 선택한 데이터에 가한 수정을 서버에 적용해준다. refresh

Expire and refresh attributes on the given instance.

라고 한다. 내가 select해서 들고 있는 db 인스턴스를 새로고침 해주는 것으로 이해했다. 그래야 수정된 DB에 추가적인 쿼리를 이어갈 수 있으니까.

로그인하고 있는 유저의 할일들을 가져와야 하는데, status에 따라 분류해야 한다. 아직 안한 것과 완료된 것. 내가 생각한 로직은

로그인한 유저의 할일을 모두 가져온 후 이를 `status`에 따라 둘로 분류한다

였는데, SQL 쿼리가 익숙치 않아 결국 status에 따라 로직을 따로 구성하여 두번 검색을 하였다.

  1. 로그인한 유저의 할일인데 status가 “DONE” 인 것.
  2. 로그인한 유저의 할일인데 status가 “NOT_YET”인 것.

각 데이터를 개별적으로 가져왔다. 지금은 가벼워서 문제 없지만, 데이터가 많을 떈 굉장히 비효율적인 로직이라고 생각한다. 결국 데이터가 N개라면 후자의 방법은 2N개를 탐색해야 하니까.. 전체를 탐색하는 첫번 째에서 해당 유저의 할일인지 확인하고(N개 탐색), 결과물에서 status에 따라 n개를 분리(n개 탐색)하면 더 효율적일텐데.. 검색해도 잘 나오지 않는데 조금 더 신경을 써서 알아봐야겠다.

Angular

프론트엔드를 구현할 차례다. 프로젝트 경험에서 React로 게임을 만들었던 경험이 있는데, 거기서도 서비스, 컴포넌트 등에 관해 공부했었다. 구조를 훑어봤을땐 꽤 비슷해 보이는데, Document 읽으면서 차근차근 진행해봐야겠다.

과제

  • FastAPI의 Dependency, SQLite DB의 작동 방식 공부
  • SQL 여러 조건의 순차적 탐색 공부