todo app 제작 마지막 과정으로 할일 목록에 작성자를 추가하는 작업을 진행했다.
그러기 위해서는 task컬렉션 user컬렉션 정보를 참조로 가져와야했다.
가장 정확한 유저의 정보를 가져오기 위해서는 _id 값인 고유의 키를 가져와야하는데
이 때의 user컬렉션의 _id값이 바로 primary key. 우리말로 주키이며
이걸 task컬렉션에 참조해서 가져오는 순간 foreign key. 우리말로 외래키가 된다.
먼저 task 스키마에 author를 추가해서 작성자 컬럼을 추가해준다. 이때 타입이 중요한데 user컬렉션으로부터 고유 키를 받아올 것이여서 이때는 Schema.Types.ObjectId 라는 타입으로 받는다. 그리고 ref:User를 추가해서 어디서부터 레퍼런스로 가져오는지 명시해준다.
문제는 user의 고유키를 어떻게 가져오는냐인데 가장 매끄러운 방법은 기존 auth컨트롤러를 미들웨어로 활용해서 가져오는 방법이다. 왜냐면 auth에는 이미 토큰정보로부터 userId라는 값을 확보해놨을 뿐만 아니라 이를 미들웨어로 활용할 수 있도록 잘 세팅해놓았기 때문이다.
next를 잘 활용하면 미들웨어로 손쉽게 활용할 수 있다.
그리고 그 모듈 메소드를 이렇게 중간에 거치게 해서 task컨트롤러로 자연스럽게 보내준다.
task컨트롤러에서는 req에 넣어놓은 userId를 받아와서 author에 넣어준다.
이렇게 하면 POST 했을 때 다른 컬렉션의 고유 키를 외래키로 가져올 수 있다.
문제는 실제 작성자라는 항목에는 고유키 값이 들어가는게 아니라 그 유저 명이 들어가야한다. 그러기 위해서는 외래키를 근거로 유저의 정보를 가져올 수 있어야하는데 이를 쉽게 해결해주는 몽고디비 기능이 populate이다.
task 정보를 GET으로 가져올 때 populate를 사용해주면 해당 외래키가 속한 컬렉션의 모든 정보들을 가져올 수 있다.
'나의 개발 일지' 카테고리의 다른 글
javaScript로 모달 창 구현하기 (2) | 2024.10.21 |
---|---|
프론트~백엔드 한번에 프로젝트 관리하는 방법 (3) | 2024.10.19 |
[node.js 스터디] 회원가입, 로그인 기능 구현하기 (0) | 2024.10.14 |
[Netlify] 프론트엔드 무료 배포 + 도메인 얻는 방법 (0) | 2024.10.12 |
[Cloudtype] 무료로 백엔드 초간단 배포하기 (4) | 2024.10.11 |