타로리딩 웹앱 만들기 - (2) / AI가 봐주는 타로리딩 ^^

코드 자체에 api키가 노출되고 있기에, 해당 api키를 삭제했습니다. 그리하여 타로리딩 테스트가 안될거에요... api키 부분 수정하여 작동하도록 next step가보겠습니다. 감사합니다 ^^

소개

시도하고자 했던 것과 그 이유를 알려주세요.

이전에 올린 내용에서 AI 타로 리딩을 구현하고 싶었습니다.

78장의 카드를 기반으로 업그레이드 하고 싶었습니다.

(이전 글 참고 ↓)

https://www.gpters.org/wealth/post/creating-tarot-reading-web-G4sgQ2PRFpQkfLm

진행 방법

어떤 도구를 사용했고, 어떻게 활용하셨나요?

Tip: 사용한 프롬프트 전문을 꼭 포함하고, 내용을 짧게 소개해 주세요.

Tip: 활용 이미지나 캡처 화면을 꼭 남겨주세요.

Tip: 코드 전문은 코드블록에 감싸서 작성해주세요. ( / 을 눌러 '코드 블록'을 선택)

  1. openai api 연동에서 계속 에러가 나는 문제를 해결하고자, 지피티에게 해당 부분만 확인하는 코드를 부탁했습니다.

## Prompt:
코드샌드박스 react로 openai api 연결하고 싶어. 테스트 코드 작성해줘. 나는 왕초보니까, 10살 수준으로 하나하나 알려줘

## Response:
왕초보를 위한 React와 OpenAI API 연결 테스트 코드를 하나하나 쉽게 설명해 줄게. 먼저 React 프로젝트를 만들고 OpenAI API를 연결하는 기본 코드를 작성할 거야.

---

### 1단계: React 프로젝트 생성하기

1. **코드샌드박스 접속**  
[https://codesandbox.io/](https://codesandbox.io/)에 접속해서 새 프로젝트를 생성해.

2. **React 템플릿 선택**  
"Create Sandbox" 버튼을 누르고, "React" 템플릿을 선택해.

---

### 2단계: OpenAI API 키 준비하기

1. **OpenAI API 가입**  
[https://platform.openai.com/](https://platform.openai.com/)에 가입하고 로그인해.
2. **API 키 생성**  
   상단 메뉴에서 "API Keys"로 들어가서 새 API 키를 생성하고 복사해 둬.

---

### 3단계: 코드 작성하기

아래 코드를 `App.js`에 복사하고 붙여 넣어. 하나씩 설명할게.

```javascript
javascript코드 복사import React, { useState } from "react";

const App = () => {
  const [input, setInput] = useState(""); // 사용자가 입력한 텍스트
  const [response, setResponse] = useState(""); // OpenAI의 응답 저장

  const handleInputChange = (e) => {
    setInput(e.target.value); // 입력 값 업데이트
  };

  const handleSubmit = async () => {
    try {
      const apiKey = "여기에_너의_API_키를_넣으세요"; // OpenAI API 키
      const response = await fetch("https://api.openai.com/v1/completions", {
        method: "POST",
        headers: {
          "Content-Type": "application/json",
          Authorization: `Bearer ${apiKey}`,
        },
        body: JSON.stringify({
          model: "text-davinci-003", // 사용할 모델
          prompt: input, // 사용자 입력
          max_tokens: 50, // 응답 글자 수 제한
        }),
      });

      const data = await response.json();
      setResponse(data.choices[0].text.trim()); // 응답 텍스트 저장
    } catch (error) {
      console.error("Error:", error);
      setResponse("오류가 발생했습니다. 다시 시도해주세요.");
    }
  };

  return (
    <div style={{ padding: "20px", fontFamily: "Arial" }}>
      <h1>OpenAI API 테스트</h1>
      <textarea
        rows="4"
        cols="50"
        placeholder="질문을 입력하세요..."
        value={input}
        onChange={handleInputChange}
      ></textarea>
      <br />
      <button onClick={handleSubmit} style={{ marginTop: "10px" }}>
        보내기
      </button>
      <h2>응답:</h2>
      <p>{response}</p>
    </div>
  );
};

export default App;
```

---

### 4단계: 코드 설명

1. **사용자 입력**  
`textarea`에서 사용자가 입력한 내용을 `input` 상태에 저장해.
2. **OpenAI API 호출**  
   버튼을 누르면 `fetch`를 사용해 OpenAI API에 데이터를 보내고 응답을 받아와.
3. **응답 출력**  
   받은 데이터를 화면에 표시해.

---

### 5단계: 실행하기

1. API 키를 복사한 곳에 붙여 넣고 저장해.
2. 코드샌드박스에서 "Run" 버튼을 눌러 실행해.
3. 텍스트를 입력하고 버튼을 눌러 OpenAI API가 응답하는지 확인해!

혹시 막히는 부분이 있으면 언제든 물어봐! 😊

이전 버전에서는 .env파일에 api키를 넣어서 부르는거였는데 계속 오류가 났어요. 하지만, 이 방식으로 하니 연결 성공!!

https://t54tpl.csb.app/ <- 연결 성공한 링크

  1. 이걸 기반으로 타로 리더 만들기를 처음부터 시작했어요.

한국어 문자 메시지 스크린샷

지피티가 이 전에 올려준 코드를 기억하고 있어서, 바로 적용해봤어요.

그러나 바로 원하는 결과가 나오지 않아, 몇번 수동으로 코드를 넣어주고 수정작업 시켰습니다.

그리고 드디어 성공!!

https://hhyfrq.csb.app/ <- 타로 웹앱 버전3 (지피티만 연결한 버전으로 디자인이나 기능은 거의 없음)

  1. 이제 이 기본 코드를 가지고 클로드에서 다시 시작합니다.

한국어 웹사이트 스크린샷
한국어로 된 애플리케이션 페이지 스크린샷

중간 중간 메뉴 및 기능 수정 요청

버전1,2 에서 보여준 디자인이 마음에 들어서 최대한 비슷하게 결과물을 받고 싶어서, 디자인 부분에 대해 많은 수정을 요청했어요.

한국어 애플리케이션 화면의 스크린샷
한국어 웹사이트 스크린샷
한국 신용카드 애플리케이션 스크린샷

계속해서 디자인 업그레이드를 위해 클로드와 대화를 이어갔어요.

로딩 화면도 마음에 안들어서 계속 수정 시키고,

홈화면도 바꿔달라고 계속 요청했어요.

한국어 시험 - 스크린샷

홈 화면 디자인 제안에 클로드가 혼자 만들더니, 요청하지도 않은 애니메이션을 넣어준다고 합니다. 처음엔 반영되지 않아, 여러번 코드 수정을 요청했더니 되더라구요! 신기!!

한국어가 포함된 한국 웹사이트의 스크린샷

결과와 배운 점

배운 점과 나만의 꿀팁을 알려주세요.

실패담도 괜찮아요. 시행착오나 도움이 필요한 부분이 있나요?

앞으로의 계획이 있다면 들려주세요.

그렇게 해서 나온 최종 본입니다!!!

https://zsnvsl.csb.app/

테스트 해보세요!!

한국어 문자가 포함된 앱의 스크린샷
한국어 텍스트가 적힌 보라색 화면
한국어 텍스트가 적힌 보라색 화면
한국어 텍스트가 적힌 보라색 화면

배운점: 클로드와 지피티를 혹사 시키면 뭐가 나와도 나오는구나.

특히, 클로드 대화창이 계속 길어짐에 경고창이 떠서 조마조마했는데, 그냥 계속 밀어부쳤습니다!

그랬더니 해내네요.

웹앱이라는걸 처음 해보는터라, 어디서부터 어떻게 해야하는지 막막했어요.

일단 지피티한테 물어보자했고, 그 중에 codesandbox를 선택하게 된거죠.

ai api 연동이 계속 오류가 나서, 뭐가 문제인지 몰라 괜히 커서ai도 가봤는데.. 거긴 더 어떻게 해야할지 모르겠더라구요. 그래서 계속 코드샌드박스에서 이어갔어요.

클로드가 짜주는게 react이고, 이게 디자인도 괜찮게 뽑는거 같아서요.

78장의 타로 이미지가 아직 없기에, 직접 만들어달라고 했는데 기호들 조합으로 심볼을 만들어내는게 인상적이었고, 홈 화면에 타로카드 플로팅 애니메이션 들어간 부분도 인상적이었어요.

가능성이 무궁무진함을 느꼈어요.

한계 및 개선할 점:

사실 이 코드는 openai api를 코드에 직접 넣고 호출하고 있어서 안전하지 않아요. 제 api가 노출이 되니까요. 그래서... 아마도 발표 후에는 api를 삭제해야할거 같아요..ㅡㅜ...

이 부분이 계속 실패했던 부분인데.. 다른 방법이 있는지 봐야겠어요. 지피티는 뭐 백앤드 어쩌고 하는데... 제가 모르는 말이라서 이해가 안되더라구요.. 이 부분도 10살 수준에 맞게 알려달라고 해봐야겠어요.

그리고 78장의 타로 이미지도 새로운 스타일로 만들어서 업로드 하고 싶고요,

그에 맞는 타로 해석도 따로 만들고 업데이트해서 만들어보고 싶어요.

지금은 지피티가 알아서 해석해주고 있거든요 ^^.

  • 추가로 여기에 유료 결제는 어떻게 붙일 수 있는지.. 궁금하고..

  • 실제 사이트에는 어떻게 적용시켜서 배포시킬 수 있는지 궁금합니다.

도움 받은 글 (옵션)

참고한 지피터스 글이나 외부 사례를 알려주세요.

(내용 입력)

2
4개의 답글

👉 이 게시글도 읽어보세요