Spring boot에서 API KEY 숨기기

이재민·2024년 1월 11일

springboot

목록 보기
1/1

Kakao Maps API를 사용하는 프로젝트에서 API 키를 안전하게 보호하는 것은 중요합니다. 이 포스트에서는 Spring Framework를 사용하여 Kakao Maps API 키를 안전하게 관리하는 방법을 공유하겠습니다.

📖문제 상황

처음에는 HTML 스크립트 태그 내에 직접 API 키를 삽입했습니다.

<script th:src="'https://dapi.kakao.com/v2/maps/sdk.js?appkey=MYAPIKEY=clusterer,services'"></script>

하지만, 이 방법은 깃허브에 코드를 커밋할 때 API 키가 노출되는 문제가 있었습니다.

📖해결 방안

Spring Framework의 @Value 어노테이션을 사용하여 API 키를 소스 코드에서 분리했습니다. 이렇게 하면 깃허브에 코드를 푸시할 때 API 키가 노출되는 것을 방지할 수 있습니다.

1. application.properties 파일:

  • kakao-api-key 속성에 API 키를 저장합니다.
kakao.api.key=MYAPIKEY

2.Controller:

  • @Value 어노테이션을 사용하여 kakao-api-key 값을 kakaoApiKey 변수에 할당합니다.

    사용자가 로그인한 경우에만 kakaoApiKey를 모델에 추가합니다.
    (이 코드는 사용자가 로그인한 상태에서만 Kakao Maps API 키를 뷰에 전달 하는 컨트롤러)

package pack.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.beans.factory.annotation.Value;
import jakarta.servlet.http.HttpSession;
import pack.model.user.UserDto;
import org.springframework.ui.Model;

@Controller
public class ConajaxController {
    @Value("${kakao.api.key}")
    private String kakaoApiKey;

    @GetMapping("/conajax")
    public String index(Model model, HttpSession session) {
        UserDto userSession = (UserDto) session.getAttribute("userSession");
        if (userSession != null) {
            model.addAttribute("kakaoApiKey", kakaoApiKey);
            return "conajax";
        } else {
            return "../templates/user/userlogin";
        }
    }
}

3.HTML파일

Thymeleaf 템플릿 엔진을 사용하여 서버 측에서 kakaoApiKey를 주입합니다

<script th:src="'https://dapi.kakao.com/v2/maps/sdk.js?appkey=' + ${kakaoApiKey} + '&libraries=clusterer,services'"></script>

이 방법을 통해 API 키를 안전하게 숨길 수 있으며, 깃허브에 코드를 푸시할 때 민감한 정보가 노출되는 것을 방지할 수 있었습니다. Spring Framework와 Thymeleaf 템플릿 엔진을 활용하여 보안을 강화할 수 있었습니다.

profile
안녕하세요

1개의 댓글

comment-user-thumbnail
2024년 1월 23일

좋은 정보 감사합니당~!

답글 달기