본문 바로가기

[프로젝트] 냥냥곰펭

[BE] 1-2. chatGPT API 제작 과정

1) Forgien Key의 굴레,,

테이블을 대충 구상하고 나서 이제 실제로 구현할 차례인데, 다른 건 구현을 했는데 Forgien Key가 고비였다.

제대로 연결이 되었는지도 확인이 안되고, 내가 본 자료에서는 Forgien Key를 따로 해당 Schema에 추가하지 않았는데 어떻게 값을 추가할 수 있는지가 의문이었다. 이걸로 며칠을 고민했는지,,,,

 

아무튼 해결한 것은 다음과 같다! 이게 올바른 사용법인지는 모르겠으나, 잘 뜨니 일단은 사용해본다. 이후 다시 공부해볼 예정!

 

1. 시퀄라이즈로 FK 설정하는 법은 다양한 사이트를 참고하여 진행하였다. 아래의 출처를 많이 참고하여 사용하였으며, index.js 파일에 모두 작성하는 것으로 진행하였다.

(출처1) https://devlog-wjdrbs96.tistory.com/221

(출처2) https://darrengwon.tistory.com/146 

 

2. Schema에 FK의 이름을 넣는다.

     - 예시에 나오는 관계 → (부모:User-자식:ChatGPTList) 관계

[예시] ChatGPTList의 FK는 User의 id이다. FK의 이름은 user_id로 설정하였다.

 

3. 이후 associate에서, 아래의 사진과 같이 foreignKey에 아까 설정했던 FK 이름을 적어준다.

4. 그리고 create할 때는 아래와 같이 적어준다.

5. 그리고나서 findAll할 때 아래와 같이 사용해주면 user 정보까지 가져오는 것을 확인할 수 있다.

 

- 시퀄라이즈 함수에 관해서는 아래의 출처를 참고

(출처) https://spicycookie.me/Nodejs/sequelizecrud/

 

여기까지 하는데 거의 이틀 걸린 듯,,, 솔직히 그렇게 어려운 건 아닌 것 같은데 아예 시작 방향을 잘못 잡았다.

너무 오랜만에 해서 그런가,,? 이전에 디바이스 개발을 해서 그런가,, 아무튼 시작 방향부터 잘못 잡았더니 허비한 시간이 길었다. ㅜ 하지만 이번 경험을 토대로 앞으로는 이런 시간이 줄어들겠지!

 

 

2) 구현한 것

ERD

     ① GET 대화목록 : 해당 user의 대화목록을 전부 가져오는 API
     ② POST 대화목록 : 새로운 대화를 시작했을 때 사용하는 API
     ③ GET 대화 : 해당 대화목록의 대화를 전부 가져오는 API
     ④ POST 대화 : gpt에게 질문할 때 사용하는 API
         → 이후 이전 대화에 이어서 사용할 수 있도록 수정할 예정
     ⑤ DELETE 대화목록 : 대화목록을 삭제할 때 사용하는 API
     ⑥ GET 북마크 : 하나의 대화 목록의 북마크한 대화를 보여주는 API
         → 이후 해당 사용자가 가진 목록 전체의 북마크를 가져오는 것으로 수정할 예정 
     ⑦ POST 북마크 : 북마크 생성/삭제할 때 사용하는 API

 

오늘 하루에 만든 API들이다. 많아보이지만,, 사실 비슷한 API가 많기 때문에 빠르게 할 수 있었다. 허비한 시간을 조금이나마 절약한 기분,,^^

그렇지만 완벽하게 만든 것이 아니기 때문에 아직 수정해야할 부분도 많다.

 

3) 수정 및 앞으로 구현해야할 부분

     ① getBookmark에서
          - 지금은 하나의 대화 목록이지만, 해당 유저가 가진 목록 전체의 북마크를 가져오기로 구현하기
     ② postContent에서
          - 지금은 대화 목록에 이전 메시지가 없는 경우만 했지만 이전 메시지가 있는 경우도 구현하기
     ③ setBookmark / getBookmark / deleteList 테스트 해보기
     ④ deleteList 
         - cascade로 구현했는데 List 삭제는 잘 되는데 content 삭제가 안됨(deleteAt이 안 찍힘)

 

 

프론트엔드 공부에 흥미가 없다보니 소홀히 했었는데, 오늘 구현하면서 느낀 점은 프론트엔드 공부도 해야겠다는 것이다,,, API를 사용하는 곳이 프론트이다 보니까, 프론트에서 작업할 때 어떤 식으로 API를 만들어놓아야 편하게 사용할 수 있겠구나에 대해 고민하며 작업을 했다.

그런데 프론트에 대해 아는 게 별로 없다보니까 어떤 식으로 구성했을 때 프론트에서 사용하기 쉬운지에 대해 감이 없어서 힘들었다. 물론 내일 직접 물어보면서 다시 구상할 것이지만, 내가 조금이라도 프론트 지식이 있었다면 질문의 개수가 줄었을 것이라 생각된다.

 

4) 프론트에게 질문

     ① query에 user_id / list_id / content_id를 넣을 수 있을까?
          - user_id는 getUser와 같이 API로 받아오면 될 듯
          - list_id는 getList를 통해 받은 list_id들을 프론트 쪽에서 저장해놓을 수 있는지?
          - content_id 역시 getContent를 만들어서 content_id를 프론트에 저장해놔야할지?
             아니면 request body에 content를 넣어서 보내서 백에서 검색해서 사용하는 방식으로 해야할지?
     ② bookmark
          - 프론트에서 toggle을 구현하고 백으로 값을 보낼 수 있는지? 보낸다면 어떻게 값이 보내지는지?
          - 숫자로 값을 보내는 게 좋은지? Boolean으로 하는 게 좋은지?
     ③ 구현한 목록에서 더 필요한 기능이 있을지?

 

 

역시 기능 구현을 해낼 때가 제일 짜릿한 것 같다!! 프로젝트 세팅과 CI/CD를 벗어나니 코딩하는게 재밌고 즐겁다,,!!