🍎 주소 값을 기반으로 외부 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을 통해 외부에서 값을 주입받을 수 있습니다.
'TIL' 카테고리의 다른 글
Redis Container vs Embedded Redis 어떤 것을 선택해야 할까요? (0) | 2023.06.07 |
---|---|
[Python] Multi Processing과 [Java] Multi Processing 차이 (0) | 2023.04.24 |
[Python] Thread 설계 의도를 파악한 성능 개선. 7초에서 3초로 (0) | 2023.04.11 |
파이썬 성능을 높이고 싶을 때 알아야 할 것 (0) | 2023.04.06 |
Hard, Soft Delete and etc.. (0) | 2023.04.03 |