이미 올라간 커밋 기록을 지워보자!!! ( .xcconfig로 api key를 숨겨보자! 2편 )

cheshire0105·2025년 4월 21일
0

iOS

목록 보기
38/42
post-thumbnail

아카데미에서 한 러너(Runner)가 API 키를 하드코딩하여 푸쉬해버린 초유의 상황이 발생했다. 이미 블로그에 작성했던 방법으로는 올라간 푸쉬 내역을 완전히 삭제할 수 없었다. 이 문제를 해결하기 위해 멘토에게 조언을 구했고, 이전 브랜치로 돌아가서 하드 리셋 후 푸쉬하면 원격 기록을 덮어쓰는 방식으로 유출된 기록을 사실상 지울 수 있다는 답변을 들었다. 이에 소스트리(SourceTree)를 이용한 구체적 방법을 정리한다.


1. 사태 개요

러너가 코드에 API 키를 직렬로 하드코딩해서 커밋하고 푸쉬했다
이로 인해 깃허브에 민감 정보가 노출된 상태가 되었다
기존 블로그 글에서는 이미 푸쉬된 기록 없이 삭제하는 방법은 다루지 않았다
멘토의 조언으로 브랜치 되돌리기 후 덮어쓰기(push force) 방법이 안전하다는 판단이 섰다

2. 준비 사항

  • SourceTree 최신 버전 설치 및 환경 설정 완료한다
  • 덮어쓸 대상 브랜치를 명확히 파악한다(보통 main 혹은 master 브랜치)
  • 동료와 협업 중이라면 작업 전에 미리 공지한다

3. SourceTree에서 하드 리셋(Reset) 방법

  1. 브랜치 체크아웃

    • SourceTree 좌측에서 되돌리고자 하는 브랜치(main 등)를 더블클릭해 체크아웃한다
    • 상단 바에 현재 브랜치명이 올바르게 표시되는지 확인한다
  2. 로그 뷰에서 대상 커밋 선택

    • 하단 "로그/히스토리" 탭을 클릭한다

    • 유출 전 안전했던 커밋 해시(예: a1b2c3d)를 찾아 클릭하여 선택한다

  1. 하드 리셋 실행

    • 선택한 커밋에서 우클릭 메뉴 → "Reset current branch to this commit…" 클릭
    • 다이얼로그에서 Reset typeHard로 설정
    • OK 버튼을 눌러 로컬 브랜치를 해당 시점으로 완전히 되돌린다

4. 원격 기록 덮어쓰기(Force Push)

  1. 상단의 Push 버튼을 클릭한다
  2. 브랜치 오른쪽의 Allow overwriting branch history(혹은 Force push) 옵션에 체크한다
  3. Push 버튼을 눌러 강제 푸쉬를 실행한다
  4. 원격 저장소의 커밋 히스토리가 로컬 상태와 동일하게 변경된다


그냥 하면 안된다... 강제 푸쉬를...

그럼 이렇게 삭제가 완료 된다!

5. 새 API 키 적용 및 커밋

  • 하드 코딩했던 유출된 API 키를 삭제 및 환경변수(또는 .gitignore 처리)로 대체한다
  • 안전한 API 키 관리 방법(환경 변수, Secret Manager 등)을 적용한다
  • 변경된 코드를 커밋하고 일반 푸쉬한다

6. 주의 사항

  • Force push는 협업 중인 브랜치의 히스토리를 완전히 바꾸는 작업이므로 반드시 사전 공지한다
  • 이미 포크된 저장소나 다른 브랜치에서 유출된 커밋은 여전히 남아있을 수 있으므로 추가 관리가 필요하다
  • GitHub에서 완전 삭제를 원한다면, GitHub support에게 요청하거나 레포지토리를 리셋해야 한다
  • 이 절차를 수행 하기 전에 다른 파일들을 백업 해놓는 것이 중요하다!

마치며

블로그 글을 작성 하게 해준... 하드 코더 러너 ( 유x ) 에게 이 글을 바치며.... 글을 마친다.

유x 블로그

1개의 댓글

comment-user-thumbnail
2025년 4월 21일

감사합니다 한 줄기 빛과 같은 글이었습니다.

답글 달기