221001 TIL [외부로 노출되면 안되는 API Key 숨기기]

Doogie·2022년 10월 1일
1

개인 혹은 기업에서 사용되는 api key는 외부로 노출이 되면 안된다.
악용될 수 있을 뿐더러 회사의 api key를 깃허브에 push를 하여 외부에 노출되어 손해가 발생해 소송이 걸린 사건도 있다고 한다

이처럼 중요한 api key를 숨기는 방법은 여러가지 있지만 오늘은 plist를 활용해 api key를 숨기는 방법에 대해 작성해보려고 한다

0. plist 만들기



이름은 AppPrivaceInfo라고 지어줬다

1. API_KEY에 기본 값 할당해주기


나 같은 경우에는 API_KEY 라고 프로퍼티를 만들고 그 내용에는 api key를 넣어달라는 문구를 만들어 놓았다

2. plist에 저장된 API_KEY를 반환하는 프로퍼티 만들기

import Foundation

extension Bundle {
    var apiKey: String {
        guard let filePath = self.path(forResource: "AppPrivacyInfo", ofType: "plist") else {
            return ""
        }
        
        guard let resouce = NSDictionary(contentsOfFile: filePath) else {
            return ""
        }
        
        guard let apiKey = resouce["API_KEY"] as? String else{
            fatalError("API KEY를 확인해 주세요")
        }
        
        return apiKey
    }
}

Bundle extension을 통해 apiKey라는 API_KEY의 value를 반환하는 메서드를 만들었고 여기까지 한 뒤 프로젝트를 커밋(혹은 푸쉬) 해준다

주의! 절대로 푸쉬나 커밋할 때 api key를 기입하면 안된다!!

3. git skip worktree 설정하기(optional)

2번까지 한 뒤 푸쉬를 하였으면 이제부터는 plist에 실 api key를 넣고 사용해도 되는데 여전히 커밋이나 푸쉬를 하면 안된다
그럴 때 skip worktree를 사용 할 수 있다

스킵하기

  • git update-index --skip-worktree 프로젝트명/스킵할 파일명

스킵하지 않기

  • git update-index --no-skip-worktree 프로젝트명/스킵할 파일명

스킵된 목록 보기

  • git ls-files -v . | grep ^S

위 터미널에서 프로젝트 파일로 들어가 실행해주면 된다

요런 식으로!

물론 커밋할 때 마다 해당 plist파일만 빼고 커밋을 하면 되지만 여간 귀찮은 일이 아니기 때문에 이렇게 한 번 설정해주면 신경쓰지 않을 수 있다
(단 다른 브랜치와 머지할 때 다시 스킵을 해제하고 변경사항을 없애준 뒤 머지 해야하는 불편함은 있다)

4. 사용하기


API_KEY 프로퍼티에 실 api키를 입력하고

위와 같이 간단하게 사용할 수 있다

참고자료
https://nareunhagae.tistory.com/44

profile
끊임없이 문을 여는 개발자

0개의 댓글