ERD를 통해 먼저 DB에 어떻게 넣을지를 기획하고 나니 구현속도가 훨씬 빨랐다.
처음에는 간단하게 시작하고 있지만, 내 무한한 성장동력을 바탕으로 자동으로 영상을 생성하는 미래를 기대하며 초반부터 타이트하고 밀도있게 잡아가기 위해 타입스크립트로 시작하게 되었다.
mvc 패턴에 맞게 설계하고, view는 나에게 중요한건 아니니.. 나중에 하고..ㅎㅎ
model은 순수하게 sql 쿼리만 작성하는 로직으로 구성된 model과 db관련된 로직인 service로 구분했고, controller에는 클라이언트 관련된 로직으로 구분하였다.
엘리스에서 2차프로젝트로 타입스크립트를 사용할 때 고통받으며 꾸역꾸역 해냈던게 도움이 되는 것 같다.
초기세팅하면서 에러처리, 타입 등 커스텀하게 설정해줄 수 있는 부분들을 db설계하듯 처음부터 확실히 설계를 하니 타입스크립트가 불편하게 느껴지지 않았다. 처음 접할 때는 any쓰기 싫은데 방법이 없나 싶고, 정말 스트레스 많이 받았던 것 같은데, 지금 초반에 구현하는 과정에서는 any를 쓸 일이 없어서 새삼 초반 단계가 중요함을 느낀다.
api 구성
*채팅 내용을 json으로 저장하는 api
먼저 openAI에서 3개월간 사용할 수 있는 무료 ai를 사용하여 api 연동했고,
ai가 뱉는 대답이 늘 한결같지는 않아서 어떻게 데이터를 정규화할 수 있을지 고민했다.
먼저는 ai 에게 질문할 때 형식과 keyword, count를 입력해서 목적을 명확히 하였다.
const message = `{
"quotes": [
{
"quote": "The meeting of two personalities is like the contact of two chemical substances: if there is any reaction, both are transformed.",
"author": "Carl Jung"
}
]
}
객체 안에 "quotes"라는 배열로 : 을 써서 이러한 형식의 json을 사용하여 ${keyword}에 관한 유명한 사람들의 명언을 ${count}개 구성해줘.`;
그렇게 해서 json형식으로 ai가 대답하게 되면, json.parse를 이용하여 정확한 json형식으로 파싱해서 먼저 json파일로 저장했다.
바로 채팅내용을 파싱해서 db에 저장할 수도 있겠지만, ai 사용이 중요 포인트는 아니기 때문에 json 형식으로 직접 커스텀해서 db에 넣는 방향도 같이 고려하여 ai의 답변은 json으로 저장했다.
*json을 파싱하여 db에 저장하는 api
url 파라미터로 keyword를 입력하여 author, quote를 구분하여 저장했는데, 생각해보니 keyword 에 따라 같은 author라도 다른 quote가 나오기도 하고, 구분해야 할듯 하였다. 그래서 채팅내용을 json으로 저장할 때 ${keyword}_quote라는 테이블을 자동생성하도록 하였다.
그리고 db에 저장할 때 파라미터로 입력한 keyword로 ${keyword}_quote에 데이터를 넣었다. 아래와 같이 데이터를 저장하였다.
계획과 달라진 점
앞서 말했듯 keyword에 따라 같은 author라도 quote가 달라지기도 한다. 그래서 테이블 구성을 조금 변경하여 author 테이블 대신 result 테이블을 구성하여 author, count_quotes를 두었다. 그리고 quote 테이블은 keyword별로 다른 quote 테이블로 구성했다.
result 테이블은 만들어진 quote를 정리하는 api를 구현하여 업데이트하는 용으로 사용하려 한다.
여기서 고민했던 부분이 있다. quote의 컬럼에 author이 아니라 authorId를 쓰는 것이 유기적으로 데이터를 사용할 수 있는 방법이 될텐데, json파일을 db로 옮길 때 내용 전부 quote 테이블에 넣으면 되는데 author를 분산해서 result에 넣고 quote에서는 result의 authorId를 참조해서 넣기가 애매한 것 같다. 이런게 비정형 데이터인가 싶어서 mongoDB를 쓰는게 유용할지 나중에 마이그레이션하는 작업도 해봐야겠다.
추후 가능하다면 해당 quote로 영상을 만들게 되면 만들어진 갯수를 파악할 수 있도록 하려고 빈칸 하나 남겨뒀다...ㅋㅋ
'개발 > 프로젝트' 카테고리의 다른 글
[세션 / 토큰 로그인 프로젝트] 고도화(2) 멱등성에 대한 생각, 미들웨어 구현 결과 (0) | 2023.07.29 |
---|---|
[유튜브 쇼츠 간편 생성 프로젝트] 구현 과정(2) 환경변수 세팅 및 로직 분리, 유튜브 api 연동, 먼저 선행하면 시간을 아낄 수 있는 팁..! (0) | 2023.07.28 |
[유튜브 쇼츠 간편 생성 프로젝트] 초기 기획 feat.ERD (5) | 2023.07.26 |
[세션 / 토큰 로그인 프로젝트] 고도화(3) 쿠키를 통한 팝업 관리 (0) | 2023.07.25 |
[세션 / 토큰 로그인 프로젝트] 고도화(2) 멱등성 검사 미들웨어(2) 구현 과정 (0) | 2023.07.24 |