IT일반

개발일지... 결합도를 낮추고, 응집도를 높여야 하는데

톰이야요 2024. 7. 29. 08:00

OpenAI의 API를 호출하여, 데이터를 이용해 기사를 만들어내는 부분을 만들었다.

AI API로 뉴스기사를 잘 만들어내는데, 호출할때마다 크지는 않지만 비용이 발생하게 되어, 혹시 모르는 폭탄을 받지 않기 위해, DB에 저장하는 구조를 생각해서 구현해보았다.

 

AI로 뉴스를 만들면, DB에 저장을 한다. 이후, 정해진 시간(5분~1시간) 이내에 동일한 데이터로 뉴스를 만들려고 하면, DB에 동일한 데이터로 저장한 이력을 검색하고, AI호출 없이 DB내용을 뿌려주는 방식으로 구현해보았다.

 

//AI뉴스 호출 및 기록
        String strDBTime, strNow = "";
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        LocalDateTime now = LocalDateTime.now();
        strNow = now.format(formatter);

        int index = APIDatabase.getInstance().findAPIRecordbySelectOption(strSelectValue, strOption);  //DB에 기록정보가 있는지 조회
        if(index >= 0) //DB에 이미 AI데이터가 있다면 시간을 체크해서 AI호출 또는 그대로 유지
        {
            strDBTime = APIDatabase.getInstance().getAPIRecordTime(index);
            // 시간 차이 계산
            LocalDateTime dateTime_DB = LocalDateTime.parse(strDBTime, formatter);
            Duration duration = Duration.between(dateTime_DB, now);
            if(duration.toMinutes() >= nAICheckMinute) //API호출한지 지정시간 초과했으면 AI API를 호출
            {
                Log.d("[AI]", "Call! - CheckMinute Over!");
                aiText = ai_Call(title, desc, data);
                APIDatabase.getInstance().setAPIRecord(index, aiText, strSelectValue, strOption, strNow);
            }
            else    //초과하지 않았으면 DB에 있는 뉴스정보 불러오기
            {
                Log.d("[AI]", "Using in DB");
                aiText = APIDatabase.getInstance().getAPIRecordText(index);
            }
        }
        else //DB에 AI데이터가 없으면 AI호출 및 DB에 추가
        {
            Log.d("[AI]", "Call! - No Data in DB");
            aiText = aiText = ai_Call(title, desc, data);
            APIDatabase.getInstance().addAPIRecord(aiText, strSelectValue, strOption, strNow);
        }
        APIDatabase.getInstance().writeDatabase();

AI API호출도 비용이 발생하고,

DB의 데이터를 들고올때에도 비용이 발생하는데..

 

돈쓰기 싫은 1인개발자는 돈 아끼려고 항상 고민뭐가 더 싸게 먹히는지 고민의 연속이네요.