일단 카카오 디벨로퍼스 홈페이지에 나온 대로 따라 하기만 하면 쉬울 것 같다고 생각했으나, 역시 생각과 실행은 천차만별이었다. 서버리스로 구현한 이 프로젝트에서 api 키를 어떻게 숨겨야 하지? 이전에 api 키를 그대로 깃헙에 올렸다가 경고 메일을 받았던 기억이 생생해서 아찔해졌다.
홈페이지에 나온 절차대로 적어보면 다음과 같다. 링크를 따라가면 상세히 설명되어 있다.
- 카카오 디벨로퍼스 로그인 후 애플리케이션 등록
https://developers.kakao.com/docs/latest/ko/getting-started/app- 카카오 링크 API / 카카오톡 메세지 API 중에 선택
나는 비교적 간편한 카카오 링크 API를 사용했다.- 메세지 종류 / 구성 방법 / 보낼 대상 선택
(카카오 디벨로퍼스> 도구> 메시지 템플릿) 경로를 따라 들어가면 샘플 메세지를 미리 보내볼 수 있다.
api 사용은 워낙 친절하게 나와있어서 문제될 게 없어 보였는데, 문제는 키를 어떻게 숨기느냐. ".env 파일에 넣어서 .gitignore 에 넣어주면 되겠네!" 생각난 대로 npm i dotenv, import dotenv from "dotenv", dotenv.config(). 문제가 해결될 거라 생각했다.
Uncaught SyntaxError: Cannot use import statement outside a module
이 에러를 없애기 위해서는 package.json 에 "type":"module"을 넣으면 된다는 방법을 찾아서, 그렇게 했지만 허사였다.
찾아봤더니 리액트 앱에서 .env 를 쓰는 방법은 정말 간단했다. 이참에 리액트도 공부하자는 생각으로, 한 달 조금 넘게 리액트, 리액트 Hook을 익혔다. vanillaJS 로 만든 프로젝트를 리액트로 다시 만들면서 카카오톡 공유 기능을 넣자!는 게 계획이었고, 시간이 걸렸지만 만들어냈다.
dotenv 를 설치할 필요도 없다! src 폴더 밖(최상위)에서 .env 파일 만들면 됨. gitignore 에 .env 넣어줌으로써 숨기면 끝난다.
주의할 점은, 리액트 앱에서 API 키를 쓸 땐, 이름 앞에 'REACT_APP'을 꼭 붙여줘야 한다는 것이다.
//.env
REACT_APP_KAKAO_API_KEY=따옴표 없이 key 를 넣으면 됨!
다른 파일에서 키를 사용할 때는 아래와 같은 형식으로 불러오면 됨.
process.env.REACT_APP_KAKAO_API_KEY
카카오 디벨로퍼스 사이트에서 내 애플리케이션 등록 후, 카카오 링크 API를 사용, 종류로는 feed 형식의 메세지를 선택했다.
<script src="https://developers.kakao.com/sdk/js/kakao.js"></script>
window.Kakao.init(발급받은 API 키);
공유 템플릿을 전송하는 로직이 들어간 파일을 생성한다.(여기서는 kakao.js)
공유 버튼에서 함수를 호출한다.
// result.jsx
import { shareKakao } from '../../kakao';
const Result = () => {
return(
// 중간 코드 생략
<a onClick={shareKakao}>
<Button text="카카오톡으로 공유하기"/>
</a>
);
}
export default Result;
공유버튼 눌렀을 때 | 공유됐을 때 |
---|---|
받아온 링크는 다음과 같다.