안녕하세요! 백앤드 개발을 할때 API설계는 가장 먼저 나와야 하는 필수 요소라고 할 수 있습니다. 오늘은 처음 API를 설계 하면서 발생 했던 문제점과 해결, 그리고 아쉬운점에 대해 정리해보는 시간을 가져보도록
하겠습니다.
1. API란
API란 (Application Programming Interface)약자로 응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 말합니다.
2. REST API vs SOAP API
(1) REST API(Representational State Transfer)
REST(Representational State Transfer)는 네트워크를 통해서 컴퓨터들끼리 통신할 수 있게 해주는 아키텍처 스타일입니다.
REST API는 인터넷 식별자(URI)와 HTTP 프로토콜을 기반으로 합니다. REST는 HTTP 프로토콜 덕분에 ‘단순함’이 핵심이라고 할 수 있습니다. 데이터 포맷으로는 브라우저 간 호환성이 좋은 제이슨(JSON)을 사용합니다. REST API는 구축과 확장이 간단하지만, 크고 복잡하게 만들 수도 있습니다. 이는 API를 어떻게 만들고, 무엇을 추가하고, 어떤 목적으로 설계되었는지에 따라 달려있습니다.
REST API는 클라이언트와 서버 사이에서 통신할 수 있게 하고, 아키텍처를 만들 수 있게 해줍니다. REST 방식의 API라면, 클라이언트-서버 모델로 구축되었다는 것을 의미하며, 정보의 페이로드(실제 전달하려는 내용)가 두 지점 사이를 왕복하게 됩니다.
REST API는 단일한 인터페이스를 사용합니다. 이러한 점 때문에 해당 API를 사용하는 애플리케이션들이 동일한 경로를 통해서 접속해야 하고, 그 방식이 단순하게 됩니다. 여기에는 장점도 있고, 단점도 있기 때문에 향후 개발 과정에서 어떤 영향이 있는지에 대해서 알고 싶다면 전문가와 상의해보는 것이 좋습니다.
REST는 웹에 최적화되어 있고, 데이터 포맷이 JSON이기 때문에 브라우저들 간에 호환성이 좋습니다. 또한, 그 성능과 확장성이 뛰어난 것으로도 알려져 있죠. 하지만 다른 기술들과 마찬가지로 그 자체의 기능이 정지되거나 여러분의 앱을 먹통으로 만들 수도 있습니다. 그래서 REST로는 풀지 못하는 문제들을 해결하기 위해서 그래프 QL과 같은 언어가 생겨난 것입니다.
(2) SOAP API(Simple Object Access Protocol)
SOAP(Simple Object Access Protocol)는 그 자체로 프로토콜이며, 보안이나 메시지 전송 등에 있어서 REST보다 더 많은 표준들이 정해져있기 때문에 조금 더 복잡합니다. 이러한 표준들로 인해서 오버헤드가 많기는 하지만, 보안, 트랜잭션, ACID(원자성, 일관성, 고립성, 지속성)을 준수해야 하는 보다 종합적인 기능이 필요한 조직에게는 적합한 방식이 될 수 있습니다. 굳이 비교를 하자면, SOAP는 웹 서비스 시나리오에 적용하기에는 그다지 좋지 않기 때문에, 기업용 애플리케이션 등을 작업하는데 더 이상적이라고 말할 수 있습니다.
SOAP는 보안 수준이 엄격합니다. SOAP에서는 SSL도 지원하고 WS-Security라는 자체 표준의 보안 기능도 가지고 있지요. 따라서 은행용 모바일 앱처럼 보안 수준이 높아야 하거나, 신뢰할 수 있는 메시징 앱, 또는 ACID를 준수해야 하는 경우라면 SOAP 방식이 더욱 선호됩니다.
REST에서는 표준화된 메시징 시스템이 갖춰져 있지 않으며, 통신 장애가 있을 경우 재시도를 통해서만 조치할 수 있습니다. 반면 SOAP 표준에는 성공/반복 실행 로직이 규정되어 있기 때문에, SOAP API를 통해서 통신을 할 때 처음부터 끝까지 신뢰성을 제공합니다.
SOAP 표준에는 ACID 준수에 관한 사항이 있습니다. ACID를 준수하기 때문에 데이터의 변형을 줄여주고, 데이터베이스와의 상호작용에 대해서 사전에 정확하게 정하기 때문에 데이터의 무결성을 지켜주지요. ACID는 데이터 일관성을 위한 다른 방식들보다도 더 보수적이기 때문에, 금융 정보 등의 민감한 데이터를 주고받을 때 일반적으로 많이 사용됩니다.
'Dev' 카테고리의 다른 글
그리드 분할을 이용한 Weighted A* 성능 최적화 (0) | 2023.04.01 |
---|---|
A Star Algorithm(A*, Weighted A*) (0) | 2023.04.01 |
IntelliJ 한글 깨짐 원인 & 해결 (0) | 2023.03.11 |
OOME(Out Of Memory Error) 발생 및 해결 (0) | 2022.11.30 |
XML vs JSON vs YAML (0) | 2022.02.07 |