본문 바로가기

만들고 싶은거 만들기

광고 수익을 창출할 웹사이트 만들어보기 2-8(카카오톡 공유기능 추가)

번역까진 완벽하게 진행했다.

거의 완성품이라고 봐도 무방할 정도다 (미완성품)

나 이제 좀 쓸모있는놈 아닐까?


........이제 실제 공유기능을 추가해보도록 하겠다.


일단 기능추가는 React 서버에 구현할 예정이다. 

앞단에 있는거니까 당연히 프론트앤드에서 개발한다.(너빼고 다암)

 

왜 ReactJS 서버에 구현해야 하나요?

  1. 카카오톡 API는 클라이언트 사이드에서 동작:
    • 카카오톡 JavaScript SDK는 브라우저 환경에서 실행됩니다.
    • 사용자의 브라우저에서 직접 카카오톡 앱으로 공유 요청을 보낼 수 있어 React에서 구현하는 것이 간편합니다.
  2. 백엔드(Flask)에서는 제한 사항 존재:
    • 카카오톡 API는 사용자 인증 정보를 필요로 하기 때문에 클라이언트 사이드에서 처리하는 것이 적합합니다.
    • Flask 서버에서는 카카오톡 공유 기능을 구현하기 위해 추가적인 OAuth 인증 과정을 거쳐야 합니다.

플랜

  1. ReactJS 서버에서 카카오톡 공유 구현:
    • React 컴포넌트에 카카오톡 JavaScript SDK를 추가하고 초기화.
    • 사용자가 버튼을 누르면 카카오톡 공유 기능 실행.
  2. (필요하면) Flask 서버 확장:
    • Flask에서 카카오톡 OAuth를 활용한 추가 기능(예: 메시지 보내기)을 구현할 수도 있지만, 일반적인 공유 기능은 React에서 충분히 처리 가능합니다.

일단 카카오의 API를 사용하기 위해 당연히 API 키부터 발급받아야한다.

(무료다.)

 

카카오 디벨로퍼스 API  키 발급

  1. 카카오 디벨로퍼스에 접속하여 로그인한다.
  2. 로그인 후, 상단 메뉴에서 **"내 애플리케이션"**을 클릭한다.
  3. 새 애플리케이션 추가 버튼 클릭.
  4. 앱 이름을 입력 (예: Emoji Generator) → 앱 생성.
  5. 생성된 앱의 "앱 키" 탭으로 이동하여 JavaScript 키를 확인한다.
    • 이 키를 노트패드에 잘 적어둔다. (React에서 사용 예정)

카카오 디벨로퍼스에서 앱을 추가할 때, 회사 정보가 없어도 걱정하지 말라

개인 개발자나 학습용으로 사용할 경우 아래와 같이 간단히 작성하면 된다

앱이 생성되었다면 내 애플리케이션에 접근해서 앱 키 항목으로 이동 후 javascript 의 키를 기억해두자.(어디 적어놓으라는말)

 

 

좋다 키발급까지 되었으면 이제 로직을 구현해보자.


프로젝트에 카카오 SDK 추가

카카오 SDK를 사용하려면 React 프로젝트에 SDK를 추가해야 한다.

SDK 스크립트 추가

public/index.html 파일에 <body> 태그 끝 부분에 아래 코드를 추가하여 카카오 SDK를 로드한다.

<script src="https://developers.kakao.com/sdk/js/kakao.js"></script>
 

React에서 카카오톡 SDK 초기화 및 공유기능 함수 추가

SDK가 제대로 동작하려면 초기화가 필요하다. 아래는 처럼 초기화 코드를 작성한다.

 

로직

 

  • 카카오톡 SDK를 초기화하여 사용할 수 있도록 설정
  • window.Kakao.isInitialized()로 초기화 여부를 확인

 

초기화 코드 작성

useEffect(() => {
    if (window.Kakao && !window.Kakao.isInitialized()) {
        window.Kakao.init('YOUR_KAKAO_JAVASCRIPT_KEY'); // 아까 카카오에서 발급받은 JavaScript 키 입력
        console.log('Kakao initialized');
    }
}, []);

 

카카오톡 공유 기능 함수 추가

const shareToKakao = () => {
    if (window.Kakao) {
        window.Kakao.Share.sendDefault({
            objectType: 'feed',
            content: {
                title: 'Generated Emoji',
                description: 'Check out this AI-generated emoji!',
                imageUrl: imageUrl, // 공유할 이미지 URL
                link: {
                    mobileWebUrl: 'http://localhost:3000', // 모바일 환경 링크
                    webUrl: 'http://localhost:3000' // PC 환경 링크
                }
            }
        });
    } else {
        alert('Kakao SDK is not initialized');
    }
};

 

 

  • **imageUrl**이 생성된 이미지 URL로 공유된다.
  • 카카오톡에서 보이는 제목과 설명을 설정한다.

 

카카오톡 공유 버튼 추가

<button onClick={shareToKakao} style={{ marginTop: '10px', padding: '10px 20px' }}>
    Share to Kakao
</button>

 

  • 이미지 생성 후 "Share to Kakao" 버튼이 나타나도록 추가.

 

전체코드를 보면 요래 된다.

import React, { useState, useEffect } from 'react';
import axios from 'axios';

function App() {
    const [prompt, setPrompt] = useState('');
    const [imageUrl, setImageUrl] = useState(null); // 이미지 URL 상태 추가
    const [loading, setLoading] = useState(false);  // 로딩 상태 추가

    // 카카오톡 SDK 초기화
    useEffect(() => {
        if (window.Kakao && !window.Kakao.isInitialized()) {
            window.Kakao.init('YOUR_KAKAO_JAVASCRIPT_KEY'); // 발급받은 JavaScript 키 입력
            console.log('Kakao initialized');
        }
    }, []);

    const handleGenerate = async () => {
        if (!prompt.trim()) {
            alert("Please enter a prompt.");
            return;
        }

        setLoading(true);
        setImageUrl(null);

        try {
            const response = await axios.post('http://127.0.0.1:5000/generate', { prompt });
            setImageUrl(response.data.image_url);
        } catch (error) {
            console.error("Error generating image:", error);
            alert("Failed to generate image. Please try again.");
        } finally {
            setLoading(false);
        }
    };

    const shareToKakao = () => {
        if (window.Kakao) {
            window.Kakao.Share.sendDefault({
                objectType: 'feed',
                content: {
                    title: 'Generated Emoji',
                    description: 'Check out this AI-generated emoji!',
                    imageUrl: imageUrl, // 공유할 이미지 URL
                    link: {
                        mobileWebUrl: 'http://localhost:3000', // 모바일 환경 링크
                        webUrl: 'http://localhost:3000' // PC 환경 링크
                    }
                }
            });
        } else {
            alert('Kakao SDK is not initialized');
        }
    };

    return (
        <div style={{ textAlign: 'center', padding: '20px' }}>
            <h1>Emoji Generator</h1>
            <input
                type="text"
                placeholder="Enter your prompt"
                value={prompt}
                onChange={(e) => setPrompt(e.target.value)}
                style={{ padding: '10px', width: '300px', marginRight: '10px' }}
            />
            <button onClick={handleGenerate} style={{ padding: '10px 20px' }}>
                {loading ? "Generating..." : "Generate"}
            </button>

            {imageUrl && (
                <div style={{ marginTop: '20px' }}>
                    <h3>Generated Image:</h3>
                    <img src={imageUrl} alt="Generated" style={{ width: '300px', height: '300px' }} />
                    <button onClick={shareToKakao} style={{ marginTop: '10px', padding: '10px 20px' }}>
                        Share to Kakao
                    </button>
                </div>
            )}
        </div>
    );
}

export default App;

 

테스트를 진행해보자!

  1. React 서버를 실행해보자.
  2. 브라우저 콘솔(F12 → Console 탭)을 열어 Kakao initialized 로그가 표시되는지 확인하면 된다고 한다.

 

좋아. 아주 간단하게 잘 떴다.

이미지를 생성하고 나니 이미지 옆에 공유버튼이 생겼따...!

바로눌러.

최초 1회는 인증을 진행해야 되나보다.

 

인증후에 과연? 

 

어림도없지 바로 에러발생...!

 

에러코드를 보니 4019가 발생했다. 

에러 코드 4019웹 플랫폼에 도메인이 등록되지 않았음을 나타낸다.

카카오 애플리케이션에서 JavaScript SDK를 사용하는 경우, 반드시 도메인을 등록해야 한다고 함


해결 방법: 도메인 등록

  1. 카카오 디벨로퍼스에 접속:
  2. 애플리케이션 설정:
    • 내 애플리케이션 → 앱 선택 → 앱 설정 → 플랫폼 → Web으로 이동.
  3. 도메인 추가:
    • "플랫폼 추가" 버튼 클릭 → "Web" 선택.
    • http://localhost:3000 도메인을 등록:  (개발환경 한정이다.)
  4. 도메인 등록 후 저장:
    • 도메인 추가 후 저장 버튼을 눌러 적용.

 

빠르게 등록 완료.

 

다만 주의사항이 있다.

추가적인 주의 사항

  1. React 개발 환경:
  2. 배포 환경:
    • 배포 시에는 프로덕션 URL을 등록해야 한다고 한다.
    • 추 후 배포 될 내 도메인을 등록하란 뜻이다.
    • 아마 emoge.fun 같은걸로 만들 듯.
  3. HTTP/HTTPS 확인:
    • React 개발 서버는 기본적으로 HTTP를 사용하므로 **http://**로 등록해야 한다.
    • 추 후 SSL 인증도 기회가 되면 해보도록 함

아무튼 웹도 등록했으니 바로 테스트해본다.

 

 

성공~!!

공유 완료 되었다는 창도 아주 잘 나온다.

 

와우 미션 석세스...............


 

이제 공유기능까진 끝났다. 다음엔 뭘해볼까.........

 

 

다음편에서 께속.......