오픈 API 개발
날방 서비스의 OpenAPI 개발 이야기 입니다. 개발하면서 즐거움을 느끼고 배움을 얻었던 이야기 3개를 적어보았습니다.
🔒 Key 이야기
키 구성
키 구성은 차장님의 요청으로 사용자에게 노출해도 괜찮은 키 (PublicKey), 사용자에게 노출되면 안되는 키 (PrivateKey) 로 구성이 되었습니다. 각각의 Key는 API의 요청 권한을 가지고 있습니다. PublicKey는 상점에 관한 민감한 정보나, 변경이 일어나는 API에서 사용할 수 없습니다. 반면, PrivateKey는 모든 API에 접근이 가능합니다.
개발
API 개발은 custom annotation을 정의해 interceptor로 키 유효성 검사를 한 후 API를 실행하도록 개발하였습니다. custom annotation 안에 KeyType을 추가해 PublicKey로 사용할 수 있는 API와 PrivateKey로 사용할 수 있는 API를 구분해주었습니다.
그런데 여기서 문제점이 생겼습니다. API를 요청하는 클라이언트가 어떤 키를 사용할지 모르는 상태에서 키로만 상점을 조회하는 것에 대한 로직이 복잡해지는 문제가 발생합니다. 키로만 상점을 조회하는 로직은 간결하지 않기 때문에 다른 방법을 고안했습니다.
기존의 상점 키는 SHA 알고리즘(단방향 해시)으로 암호화한 키었습니다. 여기서 클라이언트가 어떤 키를 보내는지 모르기 때문에 기존에 있는 키에다가 prefix를 붙어 AES 알고리즘(양방향)으로 암호화해주고 저장을 해주도록 변경하였습니다.
이렇게 개발을 하면 클라이언트가 어떤 키를 보내도 키를 복호화 시킨후에 prefix를 확인하여 키 타입 체크를 해줄 수 있게 됩니다.
느낀점
결과적으로 로직이 가독성도 좋아지고 효율적인 로직이 되어서 기분이 좋았습니다. 그리고 제가 암호화나 웹 보안 문제에 대한 지식이 취약하다는 것을 느끼게 되었습니다. 추후, 개인적으로 암호화 알고리즘 정리와 웹 보안성에 관련된 책도 더 찾아보고 개발에 활용할 수 있도록 노력할 것 입니다.
👉🏻 관련 블로그
📚 문서 이야기
API 문서를 작성하기 전에 고려해야될 것들을 생각해보았습니다.
- 어떻게 하면 같은 개발자에게 보기 쉬운 문서를 만들 수 있는가?
- 어떻게 하면 개발자들이 사용하기 편리한 API를 만들 수 있는가?
위 기준에 부합한 많은 문서작성 방법을 알아보다가, 저는 API 정의서가 가장 깔끔하고 좋은 것 같아 API 정의서타입으로 만들었습니다.
문서 작성은 notion으로 구성하였습니다. notion을 채택한 이유는 다음과 같습니다.
- API 문서 사용자는 주로 개발자들이지만, 다른 직군인 사람이 전문적인 지식을 갖고있지 않더라도 보기 쉽게 작성할 수 있고 접근성이 향상됩니다.
- 노션은 검색 기능을 제공하기 때문에 문서를 쉽게 찾을 수 있습니다. 이 내용은 문서 내용이 많아지고 커지더라도 키워드 검색을 통해 빠르게 필요한 정보를 찾을 수 있음을 암시합니다.
- 노션은 팀 내에서 협업을 용이하게 할 수 있는 다양한 기능을 제공합니다. 즉, 팀원 간의 의사소통과 협업을 원활하게 도와줄 수 있습니다.
🔑 인증 이야기
오픈 API 에서 쓸 수 있는 좋은 인증 방법은 무엇인지 고민하였습니다.
- API Key 방식
- API Token 방식
- IP Write LIst
등등… 많은 방법을 알게 되었습니다.
👉🏻 정리된 내용은 아래 블로그를 첨부하였습니다.
많은 인증 방식 중, 날방 서비스의 OpenAPI 인증 방식은 API Key 방식으로 선택하였습니다.