TIL

노출되면 안되는 데이터는 어떤 방식으로 처리할 수 있을까요?

친환경사과 2023. 4. 16. 13:45

 

🍎 주소 값을 기반으로 외부 API와 통신해 좌표를 얻어 올 수 있었습니다. 여기서 고민할 부분이 생겼습니다. 외부 API 요청에 대한 응답 시 계정에 부여된 ClientId, ClientKey를 어떤 방식으로 관리하는지입니다.

 

🍎 노출을 관리해야 하는 이유는 외부에 ClientId, ClientKey가 노출되면 불특정 사용자가 API를 사용하게 될 것이고 이는 많은 문제를 유발할 수 있기 때문입니다.

 

❓ 외부에 노출되면 안 되는 데이터는 어떤 방식으로 관리해야 안전할까요?

🍏 찾아본 결과 크게 세 가지 방법이 존재합니다.

1. Hard Coding : 필드에 노출되는 값을 정의하고 사용합니다.

2. 환경 변수에 등록해 사용 : Spring 환경에서 @Value를 통해 값을 주입해 사용합니다.

3. 외부 Tool의 도움을 받아 사용합니다. 

 

🍎 각 방법의 장/단점은 무엇이 있나요?

🍏 Hard Codeing 시 장/단점

- 세 가지 방법 중 가장 구현하기 쉬우며. gitignore 시 해당 Key를 명시한 클래시 파일을 제거해줘야 한다.

 

🍏 환경 변수에 등록해 사용 시 장/단점

- Hard Coding 방법보단 좋지만 외부의 노출을 막기 위해. gitignore를 설정해야 하고 배포 시 application.yml에 직접 넣어주어야 한다.

-  배포 시 존재하지 않는 application.*. 즉, 필요한 설정 파일을 직접 넣어야 한다.

 

🍏 외부에서 제공하는 Tool에 도움을 받아 사용하는 경우

- 위 두 개의 과정보다는 복잡하지만 좋은 보안을 유지할 수 있다.

- 외부 서비스 연동을 제공하는 Spring Cloud Config or Aws System Manager, AppConfig 등을 사용해 처리할 수 있지만 별도의 관리가 필요하며 서비스 사용 비용이 발생할 수 있다.

- 환경 변수를 외부에서 주입하는 방법도 존재한다. Github Secrete를 사용하면 외부에서 주입해 사용할 수 있다.

 

❓ 어떤 방법을 사용해 문제를 해결했나요?

- 개발할 때는 민감한 정보를 갖고 있는 파일을 생성해 사용 시 호출하는 방식으로 처리했습니다. 해당 데이터는 웹에 올라가면 안 되는 정보기에 Public으로 설정되어 있는 Github Repo에 업로드되지 않게 gitIgnore에 파일을 등록해 사용해 처리했습니다.

- CI/CD 시 Ignore 된 파일을 VM에서 알지 못하니 GItHub에서 제공하는 Secret Key에 환경 변수 값을 등록해 처리했습니다.


📚 참고 자료

Github을 통해 외부에서 값을 주입받을 수 있습니다.

 

GitHub Actions 설명서 - GitHub Docs

GitHub Actions를 사용하여 리포지토리에서 바로 소프트웨어 개발 워크플로를 자동화, 사용자 지정 및 실행합니다. CI/CD를 포함하여 원하는 작업을 수행하기 위한 작업을 검색, 생성 및 공유하고 완

docs.github.com